Tabla de contenido
1. Las características clave de Nacos incluyen:
2. Introducción a la arquitectura lógica y sus componentes.
3. Descargue el código fuente o el paquete de instalación.
4. Cómo presentar Nacos Discovery Starter
5. Inicie una solicitud de proveedor
1 configuración pom.xml. Una configuración completa de pom.xml se ve así:
2 configuración de aplicaciones.propiedades.
3 Inicie el ejemplo de Proveedor. Como sigue:
5 Inicie una aplicación de consumidor
6. Más información sobre elementos de configuración sobre Nacos Starter
1. Las características clave de Nacos incluyen:
-
Descubrimiento de servicios y monitoreo del estado del servicio.
Nacos admite el descubrimiento de servicios basado en DNS y RPC. El proveedor de servicios utilizaSDK nativo, OpenAPI o un >Servicios de búsqueda y descubrimiento. HTTP&API o DNS TODODespués de registrar el Servicio, el consumidor del servicio puede usar Agente independiente TODO
Nacos proporciona controles de estado de los servicios en tiempo real y evita solicitudes de hosts o instancias de servicios en mal estado. Nacos admite controles de estado en la capa de transporte (PING o TCP) y en la capa de aplicación (como HTTP, MySQL, definido por el usuario). Para la verificación del estado de los servicios en entornos de nube complejos y entornos de topología de red (como VPC, redes perimetrales, etc.), Nacos proporciona dos modos de verificación del estado: modo de informe del agente y detección activa del lado del servidor. Nacos también proporciona un panel de control de estado unificado para ayudarlo a administrar la disponibilidad del servicio y el tráfico según el estado de salud.
-
Servicio de configuración dinámica
El servicio de configuración dinámica le permite gestionar la configuración de aplicaciones y la configuración de servicios de todos los entornos de forma centralizada, externa y dinámica.
La configuración dinámica elimina la necesidad de volver a implementar aplicaciones y servicios cuando cambia la configuración, lo que hace que la gestión de la configuración sea más eficiente y ágil.
La gestión centralizada de la configuración facilita la implementación de servicios sin estado y la expansión elástica de los servicios bajo demanda.
Nacos proporciona una interfaz de usuario simple y fácil de usar (Demostración de muestra de consola) para ayudarlo a administrar la configuración de todos los servicios y aplicaciones. . Nacos también proporciona una serie de funciones de administración de configuración listas para usar que incluyen seguimiento de la versión de la configuración, liberación canary, reversión de la configuración con un solo clic y seguimiento del estado de actualización de la configuración del cliente para ayudarlo a administrar las configuraciones en un entorno de producción de manera más segura. y reducir el riesgo asociado con los cambios de configuración.
-
Servicio DNS dinámico
El servicio DNS dinámico admite enrutamiento ponderado, lo que facilita la implementación de equilibrio de carga de nivel medio, políticas de enrutamiento más flexibles, control de tráfico y servicios simples de resolución de DNS para la intranet del centro de datos. Los servicios DNS dinámicos también facilitan la implementación del descubrimiento de servicios basado en el protocolo DNS, lo que le ayuda a eliminar el riesgo de acoplamiento a API de descubrimiento de servicios propiedad del proveedor.
Nacos proporciona algunasAPI de DNS TODO sencillas para ayudarle a administrar los nombres de dominio asociados y las listas de servicios IP:PORT disponibles.
-
Servicios y su gestión de metadatos.
Nacos le permite administrar todos los servicios y metadatos en el centro de datos desde la perspectiva de la construcción de la plataforma de microservicios, incluidas descripciones de servicios de administración, ciclos de vida, análisis de dependencia estática de los servicios, estado de salud del servicio, administración del tráfico del servicio, políticas de enrutamiento y seguridad, SLA del servicio. y las métricas estadísticas más importantes.
2. Introducción a la arquitectura lógica y sus componentes.
-
Gestión de servicios: implemente el servicio CRUD, el nombre de dominio CRUD, la verificación del estado del servicio, la gestión del peso del servicio y otras funciones.
-
Gestión de configuración: realice gestión de configuración CRUD, gestión de versiones, gestión de escala de grises, gestión de monitoreo, seguimiento de inserción, datos agregados y otras funciones
-
Gestión de metadatos: proporciona metadatos CURD y capacidades de marcado
-
Mecanismo de complemento: realice la capacidad de separar y combinar tres módulos, y realice el mecanismo SPI del punto de extensión
-
Mecanismo de eventos: implementar notificación de eventos asincrónica, notificación asincrónica de cambio de datos del SDK y otra lógica
-
Módulo de registro: administre la clasificación de registros, nivel de registro, portabilidad de registros (especialmente para evitar conflictos), formato de registro, código de excepción + documentación de ayuda
-
Mecanismo de devolución de llamada: el SDK notifica los datos y vuelve a llamar al procesamiento del usuario a través de un modo unificado. Las interfaces y las estructuras de datos deben ser extensibles
-
Modo de direccionamiento: resuelva múltiples modos de direccionamiento, como IP, nombre de dominio, servidor de nombres, transmisión, etc., que deben ser escalables.
-
Canal de inserción: resuelva problemas de rendimiento de inserción entre el servidor y el almacenamiento, entre servidores y entre el servidor y el SDK
-
Gestión de capacidad: administre la capacidad de cada inquilino y grupo para evitar que el almacenamiento se sobrescriba y afecte la disponibilidad del servicio.
-
Gestión del tráfico: controle la frecuencia de las solicitudes, la cantidad de enlaces largos, el tamaño de los paquetes y el control del flujo de solicitudes según múltiples dimensiones, como inquilinos y grupos.
-
Mecanismo de almacenamiento en caché: directorio de recuperación ante desastres, caché local, mecanismo de caché del servidor. Se requieren herramientas para utilizar el directorio de recuperación ante desastres
-
Modo de inicio: inicie diferentes programas + UI según el modo independiente, el modo de configuración, el modo de servicio, el modo DNS o todos los modos.
-
Protocolo de coherencia: resuelve diferentes datos, diferentes requisitos de coherencia y diferentes mecanismos de coherencia
-
Módulo de almacenamiento: resuelva la persistencia de datos, el almacenamiento no persistente y resuelva problemas de fragmentación de datos
-
Servidor de nombres: resuelva el problema de enrutamiento desde el espacio de nombres al clusterid y resuelva el problema de mapeo entre el entorno del usuario y el entorno físico de nacos
-
CMDB: resuelva el problema del almacenamiento de metadatos, acople con sistemas cmdb de terceros y resuelva la relación entre aplicaciones, personas y recursos.
-
Métricas: exponga datos de métricas estándar para facilitar la conexión con sistemas de monitoreo de terceros.
-
Seguimiento: expone el seguimiento estándar para facilitar la conexión con el sistema SLA, el blanqueamiento de registros, el seguimiento de inserción y otras capacidades, y se puede conectar con el sistema de medición y facturación.
-
Gestión de acceso: equivalente al proceso de activación de los servicios de Alibaba Cloud y asignación de identidades, capacidades y permisos.
-
Gestión de usuarios: resuelva problemas de gestión de usuarios, inicio de sesión, sso y otros
-
Gestión de permisos: Resuelva problemas como reconocimiento de identidad, control de acceso, gestión de roles, etc.
-
Sistema de auditoría: Interfaz ampliada para facilitar la conexión con sistemas de auditoría de diferentes empresas
-
Sistema de notificación: los cambios u operaciones de datos principales se pueden comunicar fácilmente a través del sistema SMS para notificar a la persona correspondiente sobre los cambios de datos.
-
OpenAPI: expone una interfaz HTTP de estilo Rest estándar, simple y fácil de usar, conveniente para la integración en varios idiomas
-
Consola: Consola fácil de usar para gestión de servicios, gestión de configuración y otras operaciones.
-
SDK: SDK multilingüe
-
Agente: modo similar a dns-f, o integrado con mesh y otras soluciones
-
CLI: la línea de comando realiza una gestión ligera de productos, tan fácil de usar como git
3. Instalación de Nacos
El descubrimiento de servicios es uno de los componentes más críticos del sistema de arquitectura de microservicios. Es muy difícil configurar manualmente la lista de servicios de todos los proveedores de servicios para cada cliente y no favorece la expansión y contracción dinámica de los servicios. Nacos Discovery Starter puede ayudarle a registrar automáticamente servicios en el servidor de Nacos y puede detectar y actualizar dinámicamente la lista de servicios de una instancia de servicio. Además, Nacos Discovery Starter también registra cierta información de metadatos de la propia instancia de servicio (como host, puerto, URL de verificación de estado, página de inicio, etc.) en Nacos.
1. Selección de versión
Se recomienda utilizar la versión 2.X. La versión estable recomendada actualmente es 2.1.1.
2. Preparar el ambiente
Nacos depende del entorno Java para ejecutarse. Si compila y ejecuta Nacos desde código, también necesita configurar el entorno Maven para esto. Asegúrese de instalarlo y usarlo en la siguiente versión. entorno:Maven a>
- Sistema operativo de 64 bits, compatible con Linux/Unix/Mac/Windows, se recomienda Linux/Unix/Mac.
- JDK 1.8+ de 64 bits;下载 & Ubicación.
- Maven 3.2.x+;Descarga y Ubicación .
3. Descargue el código fuente o el paquete de instalación.
Puede obtener Nacos a través del código fuente y el paquete de distribución.
Descargar el código fuente de Github
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
Descargue el método del paquete comprimido compilado
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin
4. Inicie el servidor
- Nota: Nacos debe ejecutarse con una configuración de máquina de al menos 2C4g60g*3.
Linux/Unix/Mac
Comando de inicio (independiente representa operación en modo independiente, no en modo de clúster):
sh startup.sh -m standalone
Si está utilizando un sistema Ubuntu, o si ejecuta el script y recibe un mensaje de error [[ no se puede encontrar el símbolo, puede intentar ejecutarlo de la siguiente manera:
bash startup.sh -m standalone
ventanas
Comando de inicio (independiente representa operación en modo independiente, no en modo de clúster):
startup.cmd -m standalone
5. Apague el servidor
Linux/Unix/Mac
sh shutdown.sh
ventanas
shutdown.cmd
4. Cómo presentar Nacos Discovery Starter
Si desea utilizar Nacos para el descubrimiento de servicios en su proyecto, utilice el iniciador con el ID de grupo com.alibaba.cloud y el ID de artefacto spring-cloud-starter-alibaba-nacos-discovery.
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
5. Inicie una solicitud de proveedor
Los siguientes pasos le muestran cómo registrar un servicio con Nacos.
1 configuración pom.xml. Una configuración completa de pom.xml se ve así:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>open.source.test</groupId>
<artifactId>nacos-discovery-test</artifactId>
<version>1.0-SNAPSHOT</version>
<name>nacos-discovery-test</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2 configuración de aplicaciones.propiedades.
Algunas configuraciones básicas sobre Nacos también deben configurarse en application.properties (o application.yaml), como se muestra a continuación: application.properties
server.port=8081
spring.application.name=nacos-producer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*
Si no desea utilizar Nacos para el registro y descubrimiento de su servicio, puede configurar spring.cloud.nacos.discovery.enabled en false.
3 Inicie el ejemplo de Proveedor. Como sigue:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProducerDemoApplication.class, args);
}
@RestController
public class EchoController {
@GetMapping(value = "/echo/{string}")
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
En este momento, puede ver la información del servicio registrado en la consola de Nacos.
Inicie el servicio Nacos antes de iniciar la aplicación del Proveedor. Para métodos de inicio específicos, consulte Sitio web oficial de Nacos .
4 Punto final del servicio
spring-cloud-starter-alibaba-nacos-discovery proporciona un EndPoint durante la implementación y la dirección de acceso del EndPoint es http://ip:port/actuator/nacos-discovery. La información de EndPoint proporciona principalmente dos categorías:
1. suscribirse: muestra qué suscriptores de servicios están disponibles actualmente
2. NacosDiscoveryProperties: muestra la configuración básica de Nacos para la instancia de servicio actual.
La información para que una instancia de servicio acceda a EndPoint es la siguiente:
{
"subscribe": [
{
"jsonFromServer": "",
"name": "nacos-provider",
"clusters": "",
"cacheMillis": 10000,
"hosts": [
{
"instanceId": "30.5.124.156#8081#DEFAULT#nacos-provider",
"ip": "30.5.124.156",
"port": 8081,
"weight": 1.0,
"healthy": true,
"enabled": true,
"cluster": {
"serviceName": null,
"name": null,
"healthChecker": {
"type": "TCP"
},
"defaultPort": 80,
"defaultCheckPort": 80,
"useIPPort4Check": true,
"metadata": {
}
},
"service": null,
"metadata": {
}
}
],
"lastRefTime": 1541755293119,
"checksum": "e5a699c9201f5328241c178e804657e11541755293119",
"allIPs": false,
"key": "nacos-producer",
"valid": true
}
],
"NacosDiscoveryProperties": {
"serverAddr": "127.0.0.1:8848",
"endpoint": "",
"namespace": "",
"logName": "",
"service": "nacos-provider",
"weight": 1.0,
"clusterName": "DEFAULT",
"metadata": {
},
"registerEnabled": true,
"ip": "30.5.124.201",
"networkInterface": "",
"port": 8082,
"secure": false,
"accessKey": "",
"secretKey": ""
}
}
5 Inicie una aplicación de consumidor
Es posible que una solicitud de Consumidor no sea tan simple como iniciar una solicitud de Proveedor. Porque el lado del Consumidor necesita llamar al servicio REST proporcionado por el lado del Proveedor. En el ejemplo, utilizamos el método más primitivo, que consiste en utilizar explícitamente LoadBalanceClient y RestTemolate para acceder a él. Para la configuración de pom.xml y application.properties, consulte 1.2 Resumen. El código de muestra para iniciar una aplicación de consumidor es el siguiente:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApp {
@RestController
public class NacosController{
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate;
@Value("${spring.application.name}")
private String appName;
@GetMapping("/echo/app-name")
public String echoAppName(){
//使用 LoadBalanceClient 和 RestTemolate 结合的方式来访问
ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
String url = String.format("http://%s:%s/echo/%s",serviceInstance.getHost(),serviceInstance.getPort(),appName);
System.out.println("request url:"+url);
return restTemplate.getForObject(url,String.class);
}
}
//实例化 RestTemplate 实例
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApp.class,args);
}
}
En este ejemplo, inyectamos una instancia de LoadBalancerClient, creamos manualmente una instancia de RestTemplate e inyectamos el valor de configuración de spring.application.name en la aplicación. El propósito es que al llamar al servicio proporcionado por el Proveedor, esperamos que el configurado actualmente aplicación Se muestra el nombre.
Inicie el servicio Nacos antes de iniciar la aplicación del Consumidor. Para métodos de inicio específicos, consulte Sitio web oficial de Nacos .
Después del inicio, acceda a la interfaz http://ip:port/echo/app-name proporcionada por Consumer. El puerto que comencé a probar aquí es 8082. Los resultados del acceso son los siguientes:
Dirección de acceso: http://127.0.0.1:8082/echo/app-name
Resultados de acceso: Hola Nacos Discovery nacos-consumer
6. Más información sobre elementos de configuración sobre Nacos Starter
Más elementos de configuración inicial sobre spring-cloud-starter-alibaba-nacos-discovery son los siguientes:
Elementos de configuración |
Llave |
valor por defecto |
ilustrar |
Dirección del servidor |
spring.cloud.nacos.discovery.dirección-servidor |
ninguno |
El servidor Nacos comienza a escuchar la dirección IP y el puerto |
Nombre del Servicio |
servicio.de.discovery.de.spring.cloud.nacos |
${spring.nombre.aplicación} |
Nombra el servicio actual |
Agrupación de servicios |
spring.cloud.nacos.discovery.grupo |
DEFAULT_GROUP |
Establecer el grupo en el que se encuentra el servicio. |
Pesos |
spring.cloud.nacos.discovery.peso |
1 |
El rango de valores es de 1 a 100. Cuanto mayor sea el valor, mayor será el peso. |
nombre de la tarjeta de red |
spring.cloud.nacos.discovery.interfaz de red |
ninguno |
Cuando la IP no está configurada, la IP registrada es la dirección IP correspondiente a la tarjeta de red, si este elemento no está configurado, se toma por defecto la dirección de la primera tarjeta de red. |
Dirección IP registrada |
primavera.nube.nacos.discovery.ip |
ninguno |
más alta prioridad |
Puerto registrado |
spring.cloud.nacos.discovery.port |
-1 |
De forma predeterminada, no se requiere configuración y se detectará automáticamente. |
Espacios de nombres |
spring.cloud.nacos.discovery.espacio de nombres |
ninguno |
Uno de los escenarios comunes es la diferenciación y aislamiento de registros en diferentes entornos, como el aislamiento de recursos (como configuraciones y servicios) entre entornos de desarrollo y prueba y entornos de producción. |
Llave de acceso |
spring.cloud.nacos.discovery.clave de acceso |
ninguno |
Al ir a Alibaba Cloud, un nombre de cuenta en la nube en Alibaba Cloud |
Llave secreta |
spring.cloud.nacos.discovery.clave-secreta |
ninguno |
Al ir a Alibaba Cloud, una contraseña de cuenta en la nube en Alibaba Cloud |
Metadatos |
spring.cloud.nacos.discovery.metadatos |
ninguno |
Al utilizar la configuración del formato de mapa, los usuarios pueden personalizar cierta información de metadatos relacionados con el servicio según sus propias necesidades. |
Nombre del archivo de registro |
spring.cloud.nacos.discovery.nombre-registro |
ninguno |
|
grupo |
spring.cloud.nacos.discovery.nombre-clúster |
POR DEFECTO |
Configúrelo como nombre del clúster Nacos |
Punto de acceso |
spring.cloud.nacos.discovery.enpoint |
UTF-8 |
El nombre de dominio de entrada de un determinado servicio en la región. La dirección del servidor se puede obtener dinámicamente a través de este nombre de dominio. |
Ya sea para integrar Ribbon |
cinta.nacos.enabled |
verdadero |
Generalmente, se puede establecer en verdadero. |
Ya sea para activar Nacos Watch |
spring.cloud.nacos.discovery.watch.enabled |
verdadero |
Se puede configurar en falso para apagar el reloj. |
Tipo de dirección IP registrada |
spring.cloud.nacos.discovery.ip-tipo |
IPv4 |
Se pueden configurar tanto los tipos IPv4 como IPv6 |
Resultados:Descubrimiento de Nacos · alibaba/spring-cloud-alibaba Wiki · GitHub