Arquitetura e Uso Prático do Nacos em Sistemas de Microsserviços

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 properties e yml, 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, ajuste conf/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.

Tags: Nacos spring-cloud service-discovery configuration-management dns-routing

Publicado em 9-3 23:18