Nacos: Registro de Servicios para Arquitecturas de Microservicios

  1. Introducción a Nacos

Nacos es una plataforma que facilita la construcción de aplicaciones cloud-native, proporcionando descubrimiento dinámico de servicios, gestión de configuraciones y administración centralizada. Combina las capacidades de un registro de servicios, un centro de configuraciones y un panel de control para microservicios.

Características principales incluyen:

  • Descubrimiento de servicios y monitorización de salud.
  • Servicio de configuración dinámica.
  • Servicio DNS dinámico.
  • Gestión de metadatos de servicios.
  1. Funcionalidades del Registro de Servicios

El módulo de registro de Nacos gestiona las instancias de microservicios, simplificando las complejidades en las llamadas entre servicios y mejorando su mantenibilidad.

2.1 Mecanismos Clave

Registro de Servicios: Los clientes Nacos envían solicitudes REST al servidor Nacos para registrarse, proporcionando metadatos como dirección IP y puerto. El servidor almacena estos datos en una estructura de memoria.

Latidos del Servicio: Tras el registro, los clientes envían latidos periódicos (por defecto cada 5 segundos) para indicar disponibilidad y evitar la eliminación del registro.

Sincronización de Servicios: Los nodos del clúster de Nacos intercambian información para mantener la consistencia, utilizando algoritmos como Raft para la coordinación.

Descubrimiento de Servicios: Los consumidores de servicios obtienen listas de instancias del servidor Nacos, las cachean localmente y actualizan periódicamente mediante tareas programadas.

Verificación de Salud: El servidor Nacos ejecuta comprobaciones regulares; las instancias sin latidos durante más de 15 segundos se marcan como no saludables, y se eliminan tras 30 segundos de inactividad.

Protección contra Avalanchas: Se pueden definir umbrales de protección (por ejemplo, 0.6) para equilibrar la carga, considerando instancias permanentes o temporales según la configuración.

2.2 Comparativa con Otros Registros

Se evalúa en términos de consistencia, disponibilidad y tolerancia a particiones (CAP), con Nacos ofreciendo un equilibrio adaptado a entornos cloud.

  1. Despliegue del Servidor Nacos

3.1 Modo Standalone

Para entornos de desarrollo o pruebas, se puede iniciar en modo standalone. Tras descargar el paquete, se ejecuta el script con el parámetro específico:

bin/inicio.sh -m individual

El panel de administración se accede vía HTTP en el puerto predeterminado, con credenciales por defecto.

3.2 Modo Clúster

Para producción, se configura un clúster con múltiples nodos. Requisitos previos incluyen JDK 1.8+, Maven 3.3+, un balanceador de carga como Nginx y MySQL.

Pasos de Despliegue:

  1. Descargar e instalar Nacos en varias rutas, por ejemplo, renombrando directorios a nacos8849, nacos8850, nacos8851.
  2. Configurar cada instancia para usar una base de datos externa MySQL 5.7+. Ejemplo de configuración en application.properties: ```

    Fuente de datos externa MySQL

    fuenteDatos.plataforma=mysql baseDatos.numero=1 baseDatos.url.0=jdbc:mysql://host-local:3306/nacos?codificacion=utf8&timeout=1000 baseDatos.usuario.0=administrador baseDatos.contrasena.0=clave_segura
  3. Definir el archivo de clúster con las direcciones IP y puertos de cada nodo.
  4. Iniciar cada instancia y configurar Nginx para balancear la carga: ``` arriba nacos_grupo { servidor 127.0.0.1:8849; servidor 127.0.0.1:8850; servidor 127.0.0.1:8851; } servidor { escuchar 8847; nombre_servidor localhost; ubicacion /nacos/ { proxy_pasado http://nacos_grupo/nacos/; } }
    
    
  5. Integración con Spring Cloud

4.1 Versiones Compatibles

Se recomienda seleccionar versiones alineadas entre Spring Cloud y Spring Cloud Alibaba para asegurar compatibilidad.

4.2 Configuración de un Cliente

Dependencias Maven: En el POM padre, se gestionan versiones para Spring Cloud y Alibaba. Ejemplo modificado:

<gestionDependencias>
 <dependencias>
 <dependencia>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-dependencies</artifactId>
 <version>Hoxton.SR5</version>
 <tipo>pom</tipo>
 <alcance>import</alcance>
 </dependencia>
 <dependencia>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
 <version>2.2.3.RELEASE</version>
 <tipo>pom</tipo>
 <alcance>import</alcance>
 </dependencia>
 </dependencias>
</gestionDependencias>

En el POM del proyecto, se añade el starter para descubrimiento:

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

Archivo de Propiedades: Configuración en application.properties:

servidor.puerto=8003
aplicacion.nombre=mi-servicio-usuario
nacos.servidor-direccion=localhost:8848

Uso en Código: Para llamar a otros servicios, se utiliza el nombre de la aplicación con RestTemplate. Ejemplo con nombres de variables alterados:

String endpointServicio = "http://mi-servicio-pedidos/pedidos/buscarPorUsuario/" + idUsuario;
List<Pedido> listaPedidos = restTemplate.getForObject(endpointServicio, List.class);

@Bean
@BalanceadoCarga
public RestTemplate plantillaRest() {
 return new RestTemplate();
}

Al iniciar la aplicación, el servicio se registra en Nacos y puede verificarse en la consola de administración.

Etiquetas: nacos Spring Cloud Alibaba descubrimiento de servicios Registro de Servicios Microservicios

Publicado el 6-19 00:03