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:
- Página principal: https://github.com/alibaba/nacos
- Versión estable recomendada:
nacos-server-1.4.1.zippara sistemas Windows.
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:
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:
- Servicio: Nombre lógico (ej.
user-service). - Clúster: Agrupación física por región (ej. Shanghái, Hangzhou).
- 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 | Sí | Sí |
| 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.