Central de Cadastro Nacos
1. Introdução ao Nacos
As empresas nacionais geralmente respeitam a tecnologia do Alibaba, como o centro de registro, e o Spring Cloud Alibaba também lançou um centro de registro chamado Nacos.
2. Instalação do Mac
-
Entre no site oficial da Nacos para baixar o pacote de instalação
http://nacos.io/zh-cn/
Endereço do Github warehouse
-
Depois de baixar e descompactar, entre no diretório nacos/bin
-
Execute
sh startup.sh -m standalone
o comando para iniciar o nacos
4. Entre na página de visualização http://127.0.0.1:8848/nacos/ , a senha da conta é nacos, basta logar, a porta do nacos é 8848
(Se você quiser fechar o nacos, digite sh shutdown.sh, mas descubra que após o fechamento, você ainda pode se conectar ao nacos na página de visualização, então você precisa matar o processo na porta 8848, você pode digitar lsof-i:8848 kill -9 número do processo)
3. Registre o serviço para nacos
O Nacos é um componente do SpringCloudAlibaba, e o SpringCloudAlibaba também segue as especificações de registro e descoberta de serviço definidas no SpringCloud. Portanto, não há muita diferença entre usar Nacos e usar Eureka para microsserviços.
As principais diferenças são:
- depende de diferentes
- o endereço do serviço é diferente
1) Introduzir dependências
<dependencyManagement>
Introduza a dependência de SpringCloudAlibaba no arquivo pom do projeto pai cloud-demo :
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Em seguida, introduza as dependências do nacos-discovery nos arquivos pom em user-service e order-service:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
Nota : Não se esqueça de comentar a dependência eureka.
2) Configure o endereço nacos
Adicione o endereço nacos em application.yml de user-service e order-service:
spring:
cloud:
nacos:
server-addr: localhost:8848
Nota : Não se esqueça de comentar o endereço de eureka
3) reiniciar
Depois de reiniciar o microsserviço, faça login na página de gerenciamento do nacos e você poderá ver as informações do microsserviço:
4. Modelo de armazenamento hierárquico de serviço
O Nacos divide as instâncias na mesma sala de computadores em um cluster .
Em outras palavras, user-service é um serviço. Um serviço pode conter vários clusters, como Hangzhou e Shanghai. Cada cluster pode ter várias instâncias, formando um modelo hierárquico, como mostra a figura: Quando os microsserviços acessam uns aos outros, eles devem tentar acessar a mesma instância de cluster o máximo possível, porque a velocidade de acesso local é mais rápida
. Acesse outros clusters somente quando o cluster estiver indisponível. Por exemplo:
o serviço de pedidos na sala de computadores em Hangzhou deve dar prioridade ao acesso ao serviço de usuários na mesma sala de computadores.
4.1 Configurar cluster para atendimento ao usuário
Modifique o arquivo application.yml do user-service e adicione a configuração do cluster:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
Depois de reiniciar as duas instâncias de serviço do usuário, podemos ver os seguintes resultados no console nacos:
Modelo de armazenamento hierárquico do serviço Nacos
- O primeiro nível é um serviço, como userservice
- O segundo nível é o cluster, como Hangzhou ou Xangai
- O terceiro nível é uma instância, como um servidor em uma sala de computadores em Hangzhou que implementa o serviço de usuário
Como definir propriedades de cluster para uma instância
- Modifique o arquivo application.yml e inclua a propriedade spring.cloud.nacos.discovery.cluster-name
4.2 Balanceamento de carga com prioridade no mesmo cluster
Por padrão, ZoneAvoidanceRule
não é possível obter balanceamento de carga com base na prioridade do mesmo cluster.
Portanto, o Nacos fornece uma NacosRule
implementação que pode selecionar preferencialmente instâncias do mesmo cluster.
1) Configurar informações de cluster para serviço de pedido
Modifique o arquivo application.yml de order-service e adicione a configuração do cluster:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
2) Modifique as regras de balanceamento de carga
Modifique o arquivo application.yml de order-service e modifique as regras de balanceamento de carga:
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
Estratégia de balanceamento de carga NacosRule
- Priorize a lista de instâncias de serviço no mesmo cluster
- O cluster local não consegue encontrar o provedor, então ele vai para outros clusters para procurá-lo e um aviso será relatado
- Depois de determinar a lista de instâncias disponíveis, o balanceamento de carga aleatório é usado para selecionar as instâncias
5. Configuração de peso
Na implantação real, esse cenário aparecerá:
- Existem diferenças no desempenho dos equipamentos servidores. O desempenho de algumas máquinas onde as instâncias estão localizadas é melhor, enquanto outras são piores. Esperamos que as máquinas com melhor desempenho possam suportar mais solicitações dos usuários.
Nacos fornece configuração de peso para controlar a frequência de acesso, quanto maior o peso, maior a frequência de acesso
No console do nacos, localize a lista de instâncias do serviço de usuário e clique em Editar para modificar o peso:
Na janela de edição que aparece, modifique o peso:
Nota : Se o peso for modificado para 0, a instância nunca será visitada
6. Isolamento ambiental
A Nacos fornece namespace para implementar o isolamento do ambiente.
- Pode haver vários namespaces em nacos
- Pode haver grupo, serviço, etc. sob o namespace
- Namespaces diferentes são isolados uns dos outros, por exemplo, serviços em namespaces diferentes são invisíveis entre si
A camada mais externa de armazenamento de serviço e armazenamento de dados no Nacos é uma coisa chamada namespace, que é usada para isolamento externo
6.1 Criar um espaço de nomes
Por padrão, todos os serviços, dados e grupos estão no mesmo namespace denominado public:
Podemos clicar no botão Adicionar na página para adicionar um namespace:
6.2 Configurar namespace para microsserviços
A configuração de namespaces para microsserviços só pode ser feita modificando a configuração.
Por exemplo, modifique o arquivo application.yml de order-service:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: fe205277-84c6-402c-be48-ba772cbe7a2f # 命名空间,填ID
Depois de reiniciar o serviço de pedidos, acesse o console e você verá os seguintes resultados:
Neste momento, ao acessar o order-service, como o namespace é diferente, o userservice não será encontrado e o console informará um erro:
7. A diferença entre Nacos e Eureka
As instâncias do serviço Nacos são divididas em dois tipos:
-
Instância temporária: Caso a instância fique fora do ar por mais de um determinado período de tempo, ela será removida da lista de serviços, o tipo padrão.
-
Instância não temporária: Se a instância cair, ela não será removida da lista de serviços e também pode ser chamada de instância permanente.
Configure uma instância de serviço como uma instância permanente:
spring:
cloud:
nacos:
discovery:
ephemeral: false # 设置为非临时实例
A estrutura geral de Nacos e Eureka é semelhante, registro de serviço, pull de serviço, espera de pulsação, mas existem algumas diferenças:
-
O que Nacos e eureka têm em comum
- Ambos oferecem suporte ao registro de serviço e ao pull de serviço
- Ambos oferecem suporte ao método de pulsação do provedor de serviços para detecção de integridade
-
A diferença entre Nacos e Eureka
- Nacos suporta o servidor para detectar ativamente o status do provedor: a instância temporária adota o modo de pulsação e a instância não temporária adota o modo de detecção ativa
- Instâncias temporárias com pulsação anormal serão removidas, enquanto instâncias não temporárias não serão removidas
- O Nacos suporta o modo push de mensagens das alterações da lista de serviços e as atualizações da lista de serviços são mais oportunas
- O cluster Nacos adota o modo AP por padrão. Quando há instâncias não temporárias no cluster, o modo CP é adotado; Eureka adota o modo AP