O Nacos é uma plataforma de gerenciamento dinâmico para aplicações nativas da nuvem, desenvolvida pela Alibaba. Seu propósito central é simplificar a dsecoberta de serviços, a gestão centralizada de configurações e o controle operacional de microsserviços em ambientes distribuídos.
Principais Capacidades
- Registro e Descoberta de Serviços: Suporta múltiplos protocolos — incluindo HTTP, gRPC e resolução DNS — permitindo que provedores registrem instâncias e consumidores localizem endpoints com base em critérios como nome do serviço, grupo ou namespace.
- Monitoramento de Saúde Automatizado: Oferece verificação ativa (por TCP/HTTP) e passiva (via relatórios de agentes), adaptável a topologias complexas como VPCs e redes periféricas. A interface de dashboard fornece visibilidade em tempo real sobre a disponibilidade das instâncias.
- Gestão Dinâmica de Configurações: Permite atualizações em tempo real de propriedades de aplicações sem necessidade de reinicialização. Suporta formatação em
propertieseyml, além de hierarquia por ambiente (dev, test, prod) e escopo (serviço, compartilhado, global). - Serviço DNS Dinâmico: Integra-se com resolvedores DNS personalizados para mapear nomes lógicos (ex:
payment-service) diretamente para IPs e portas atualizados automaticamente, habilitando balanceamento baseado em peso, roteamento por versão e estratégias avançadas de tráfego.
Implantação e Configuração
O Nacos pode ser executado em três modos:
- Modo Standalone: Ideal para testes locais ou amibentes de desenvolvimento. Iniciado via script:
# Linux/macOS
sh bin/startup.sh -m standalone
# Windows
cmd bin/startup.cmd
A interface administrativa fica acessível em http://localhost:8848/nacos, com credenciais padrão nacos/nacos.
- Modo Cluster: Recomendado para produção. Requer pelo menos três nós. A lista de membros é definida no arquivo
conf/cluster.conf:
192.168.10.10:8848
192.168.10.11:8848
192.168.10.12:8848
- Persistência Externa: Substitui o banco embutido Derby por MySQL. Após aplicar o script
conf/nacos-mysql.sql, ajusteconf/application.properties:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://mysql-host:3306/nacos?useUnicode=true&characterEncoding=utf8&autoReconnect=true&serverTimezone=UTC
db.user=root
db.password=secure_password
Integração com Aplicações Spring Cloud
Para habilitar descoberta de serviços, adicione a dependência:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2022.0.0.0-RC1</version>
</dependency>
E configure application.yml:
spring:
application:
name: inventory-service
cloud:
nacos:
discovery:
server-addr: 10.0.5.20:8848
weight: 80
metadata:
version: v2.1
region: east
Para uso com o centro de configuração, inclua:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2022.0.0.0-RC1</version>
</dependency>
E defina bootstrap.yml:
spring:
application:
name: inventory-service
profiles:
active: prod
cloud:
nacos:
config:
server-addr: 10.0.5.20:8848
file-extension: yml
group: SERVICE_GROUP
namespace: 7b9c3f2a-1d4e-4a5b-9e0f-1a2b3c4d5e6f
O identificador único da configuração será: inventory-service-prod.yml. Para recarregar valores em tempo real, anote classes com @RefreshScope ou use @ConfigurationProperties.
Estratégias de Organização de Configurações
O Nacos organiza dados usando três dimensões:
- Namespace: Isola ambientes (ex:
dev,prod) ou tenants; - Group: Agrupa logicamente por domínio ou produto (ex:
ORDER_GROUP); - Data ID: Identifica unicamente um conjunto de propriedades (ex:
payment-service.yml).
Configurações compartilhadas entre múltiplos serviços são definidas com shared-dataids:
spring:
cloud:
nacos:
config:
shared-dataids: common-database.yml,common-logging.yml
refreshable-dataids: common-logging.yml
A ordem de prioridade segue: configuração específica (service-dev.yml) > configuração genérica (service.yml) > configuração compartilhada (common-database.yml).
Administração via Console Web
O painel web oferece ferramentas para:
- Gerenciar instâncias com controles de on line/offline e ajuste de peso;
- Visualizar e editar metadados em nível de instância (útil para versionamento canário ou roteamento por região);
- Navegar histórico de alterações de configurações e reverter para versões anteriores;
- Monitorar assinantes ativos de determinadas configurações.
Os metadados permitem associar atributos contextuais às instâncias — como build-time, git-commit-id ou canary:true — facilitando decisões inteligentes de roteamento durante chamadas entre serviços.