- 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.
- 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.
- 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:
- Descargar e instalar Nacos en varias rutas, por ejemplo, renombrando directorios a nacos8849, nacos8850, nacos8851.
- 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 - Definir el archivo de clúster con las direcciones IP y puertos de cada nodo.
- 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/;
}
}
- 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.