Configuración y uso de Nacos como centro de registro de servicios

Nacos: Centro de descubrimiento de serviciso en microservicios

Nacos es una solución de descubrimiento y configuración de servicios desarrollada por Alibaba, compatible con arquitecturas basadas en Spring Cloud. A diferencia de Eureka, no requiere un proceso complejo de instalación ni registro manual, ya que basta con desplegarlo localmente para comenzar a usarlo.

Instalación en Windows

En entornos de desarrollo, se recomienda utilizar el modo monousuario (standalone).

1. Descarga del paquete

Los binarios precompilados de Nacos están disponibles en su repositorio oficial:

2. Extracción del archivo

Descomrpima el archivo en una ruta sin espacios ni caracteres especiales. La estructura del directorio incluye:

  • bin/: scripts para iniciar y detener el servicio.
  • conf/: archivos de configuración del servidor.

3. Cambio de puerto (opcional)

El puerto predeterminado es 8848. Si este está ocupado, edite el archivo application.properties dentro de conf/:

server.port=8849

4. Inicio del servidor

Ejecute desde la terminal dentro del directorio bin/:

startup.cmd -m standalone

Este comando inicia Nacos en modo independiente, ideal para pruebas locales.

5. Acceso al panel web

Abra el navegador y acceda a:

http://localhost:8848/nacos

Credenciales por defecto: usuario: nacos, contraseña: nacos.

Instalación en Linux o macOS

El procedimiento es similar al de Windows, con comandos adaptados al entorno Unix.

1. Instalación de JDK 8+

Nacos depende de Java. Instale JDK si aún no está presente:

tar -xvf jdk-8u144-linux-x64.tar.gz -C /usr/local/java

Luego configure las variables de entorno en /etc/profile:

export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile

2. Despliegue de Nacos

Suba y extraiga el paquete:

tar -xvf nacos-server-1.4.1.tar.gz -C /usr/local/src/
rm -f nacos-server-1.4.1.tar.gz

3. Iniciar en modo standalone

Desde el directorio bin/, ejecute:

sh startup.sh -m standalone

Registro de servicios en Nacos

Para integrar microservicios con Nacos, siga estos pasos:

1. Agregar dependencias Maven

En el archivo pom.xml del proyecto padre, declare la gestión de versiones:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>2.2.6.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Luego, en cada servicio (productor y consumidor), agregue:

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2. Configurar dirección del servidor

En application.yml de cada microservicio:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848

3. Habilitar balanceo de carga con RestTemplate

En la clase principal del consumidor (OrderApplication), marque el bean RestTemplate con @LoadBalanced:

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

Luego, actualice la URL en el servicio consumidor para usar el nombre del servicio en lugar de IP y puerto:

String url = "http://user-service/user/" + orderId.getUserId();

Modelo de almacenamiento jerárquico

Nacos organiza los servicios en tres niveles:

  1. Servicio: Nombre lógico (ej. user-service).
  2. Clúster: Agrupación física por región (ej. Shanghái, Hangzhou).
  3. Instancia: Cada despliegue individual del servicio.

Se recomienda que los servicios prioricen instancias dentro del mismo clúster para reducir latencia.

Asignación de clúster

Configure el clúster en application.yml del productor:

spring:
  cloud:
    nacos:
      discovery:
        cluster-name: SH # Ejemplo: Shanghái

Al iniciar múltiples instancias con diferentes puertos y clústeres, estas aparecerán agrupadas en el panel de Nacos.

Regla de balanceo: preferencia por clúster local

Utilice NacosRule para priorizar instancias locales:

user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

Esta regla intenta primero instancias del mismo clúster; si no hay disponibles, consulta otros clústeres (con advertencia).

Gestión de peso (weight) de instancias

Permite asignar mayor tráfico a instancias con mejor capacidad de hardware.

  • Rango: 0.0 a 1.0.
  • Peso 0: instancia en mantenimiento (no recibe tráfico).

Desde el panel de Nacos, edite el peso de una instancia para influir en la distribución de solicitudes.

Aislamiento por Namespace

Los namespaces permiten separar entornos como desarrollo, pruebas y producción.

Crear un namespace

En el panel de Nacos, vaya a "Namespaces" → "+ Create" y proporcione:

  • Nombre legible (ej. "Producción").
  • ID único (generado automáticamente como UUID).

Asociar servicio a un namespace

En application.yml, especifique el ID del namespace:

spring:
  cloud:
    nacos:
      discovery:
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9

Los servicios en diferentes namespaces no pueden descubrirse entre sí, garantizando aislamiento total.

Instancias temporales vs. permanentes

Define cómo Nacos maneja fallos de instancias:

  • Temporal (por defecto): Se elimina tras ausencia de latidos.
  • Permanente: Permanece registrada incluso si no responde.

Para cambiar a permanente:

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false

Diferencias clave: Nacos vs. Eureka

Característica Eureka Nacos
Descubrimiento de servicios
Detección de salud Basado en latidos Latidos (temporal) o sondeo activo (permanente)
Actualización de lista Cada 30s (pull) Inmediata (push)
Consistencia AP (alta disponibilidad) AP por defecto, cambia a CP si hay instancias permanentes

La notificación en tiempo real en Nacos reduce la latencia en la propagación de cambios frente a Eureka.

Etiquetas: nacos SpringCloudAlibaba descubrimiento-de-servicios balanceo-de-carga configuración-de-microservicios

Publicado el 9-8 07:56