Arquitetura e Princípios Nacos - Modelo de Dados do Serviço de Registro (Versão 2.x)


insira a descrição da imagem aqui


Serviço (Service) e instância de serviço (Instance)

  • Na descoberta de serviço, um serviço é uma abstração da funcionalidade do software (como login ou pagamento) fornecida por um aplicativo. O serviço é diferente do aplicativo e o escopo do aplicativo é mais amplo. O serviço pertence ao relacionamento de inclusão do aplicativo e o aplicativo pode fornecer vários serviços.
  • Para diferenciar e controlar os serviços em um nível refinado, a Nacos escolhe o serviço como o conceito mais básico do registro.
  • Uma instância de serviço é um nó provedor específico de um serviço. Uma instância pertence a apenas um serviço e um serviço pode conter uma ou mais instâncias.
  • Em muitos cenários, as instâncias também são chamadas de provedores de serviços e as instâncias que usam serviços são consumidores de serviços.
  • A Nacos considera o serviço como a unidade básica do centro de registro, e a instância é o nó provedor específico do serviço. Uma instância pertence a apenas um serviço e um serviço pode conter várias instâncias.
  • As instâncias também são chamadas de provedores de serviços e aqueles que usam instâncias são consumidores de serviços.

definir serviço

insira a descrição da imagem aqui

  • Namespace (Namespace): O conceito mais alto e abrangente no modelo de dados Nacos, que é usado para definir em cenários que exigem isolamento obrigatório, como ambientes ou locatários. Os serviços Nacos também precisam usar namespaces para isolamento.
  • Agrupamento (Group): Um conceito de isolamento no modelo de dados Nacos que é inferior aos namespaces. Diferente do atributo de isolamento obrigatório dos namespaces, o agrupamento é um conceito de isolamento fraco e é usado principalmente para distinguir logicamente alguns cenários de uso de serviço ou aplicativos diferentes. Para serviços com o mesmo nome, os casos mais usados ​​são o grupo de teste e o grupo de produção do mesmo serviço, ou usar o nome do aplicativo como um grupo para evitar que serviços fornecidos por aplicativos diferentes tenham o mesmo nome.
  • Nome do serviço (Nome): O nome real do serviço, geralmente usado para descrever que o serviço fornece uma determinada função ou capacidade.

Geralmente é recomendado usar uma combinação do ambiente operacional como o namespace, o nome do aplicativo como o grupo e a função do serviço como o nome do serviço para garantir a singularidade natural do serviço. Claro, os usuários podem ignorar o namespace e o agrupamento , e use apenas o nome do serviço como exclusividade do serviço. Isso requer que os usuários adicionem suas próprias regras ao definir o nome do serviço para garantir que o serviço possa ser localizado exclusivamente em uso sem encontrar o serviço errado.


metadados de serviço

A definição de serviço apenas define algumas informações básicas para o serviço para descrever o serviço e encontrar o serviço de forma conveniente e rápida, enquanto os metadados do serviço definem ainda mais os atributos detalhados e as informações de descrição do serviço em Nacos. Incluem principalmente:

  • Limite de proteção de integridade (ProtectThreshold): para evitar muitas falhas de instância, fazendo com que todo o tráfego flua para as instâncias restantes e, em seguida, fazendo com que a pressão do tráfego sobrecarregue as instâncias restantes para formar um efeito de avalanche. O limite de proteção de saúde deve ser definido como um número de ponto flutuante entre 0 e 1. Quando a proporção de instâncias íntegras de nome de domínio para o total de instâncias de serviço for menor que esse valor, essa instância será retornada ao cliente independentemente de a instância estar íntegra ou não. Embora algum tráfego seja perdido dessa maneira, isso garante que as instâncias íntegras restantes no cluster possam funcionar normalmente.
  • Seletor de Instância (Seletor): Utilizado para filtrar e filtrar as instâncias ao obter a lista de instâncias sob o serviço. O seletor também é chamado de roteador.Atualmente, o Nacos suporta a capacidade de armazenar algumas informações de instância no CMDB de gerenciamento de metadados externos e usar as tags de metadados armazenadas no CMDB para filtrar ao descobrir serviços.
  • Dados estendidos (extendData): São utilizados para que o usuário personalize o conteúdo dos metadados estendidos ao cadastrar uma instância, na forma de KV. Você pode expandir as informações de metadados do serviço no serviço, o que é conveniente para os usuários implementarem sua própria lógica personalizada.

insira a descrição da imagem aqui


definir instância

Como uma instância de serviço é um nó que fornece serviços especificamente, o Nacos precisa principalmente armazenar algumas informações básicas relacionadas à rede da instância ao projetar a definição da instância, que inclui principalmente o seguinte conteúdo:

  • Network IP address: O endereço IP da instância, que pode ser definido como um nome de domínio após a versão Nacos2.0.
  • Porta de rede: informação da porta da instância.
  • Saudável: É usado para indicar se a instância está em estado saudável, e será mantida em Nacos por meio de verificações de integridade. O conteúdo específico será detalhado no capítulo Mecanismo de verificação de integridade de Nacos. Os leitores precisam apenas do significado do conteúdo em presente.
  • Cluster (Cluster): usado para marcar a qual cluster lógico a instância pertence
  • Dados estendidos (extendData): conteúdo de metadados para extensões definidas pelo usuário, na forma de KV. As informações de metadados da instância podem ser expandidas na instância, o que é conveniente para os usuários implementarem sua própria lógica personalizada e marcar a instância.

metadados da instância

Diferente dos metadados de serviço, os metadados de instância são usados ​​principalmente para informações de dados relacionadas à operação e manutenção da instância. Incluem principalmente:

  • Peso: configuração em nível de instância. O peso é um número de ponto flutuante com um intervalo de 0 a 10.000. Quanto maior o peso, maior o tráfego alocado para a instância.
  • Status online (habilitado): Marque se a instância aceita tráfego, a prioridade é maior que o peso e o status de integridade. Ele é usado pelo pessoal de operação e manutenção para remover uma instância do serviço de forma rápida e manual sem alterar a própria instância.
  • Dados estendidos (extendData): Diferente dos dados estendidos na definição da instância, esses dados estendidos são para o pessoal de operação e manutenção modificar e adicionar rapidamente os dados estendidos da instância sem alterar a própria instância, de modo a atingir o papel de a instância de operação e manutenção.

Na versão Nacos2.0, os dados de instância são divididos em definição de instância e metadados de instância, principalmente porque esses dois tipos de dados são, na verdade, dois cenários diferentes da mesma instância: cenário de desenvolvimento e operação e cenário de operação e manutenção .

Para atributos como online, offline e peso, geralmente considera-se que, quando a instância já está em execução, os dados precisam ser modificados manualmente e mantidos pelo pessoal de operação e manutenção.

No entanto, informações como IP, porta e cluster não serão alteradas depois que a instância for iniciada e registrada em circunstâncias normais.

Depois de mesclar essas duas partes de dados, você pode obter as informações completas da instância, que também é a estrutura de dados da instância na versão Nacos1.0.

insira a descrição da imagem aqui


propriedades persistentes

A Nacos fornece dois tipos de serviços: serviços persistentes e serviços não persistentes, que são usados ​​respectivamente em cenários de componentes de serviços básicos do tipo DNS e cenários de serviços de negócios reais da camada superior.

Para indicar que tipo de serviço é o serviço, é necessário selecionar o atributo persistente do serviço ao criar o serviço. Considerando que a maioria dos cenários atuais de descoberta de serviço dinâmico são tipos de serviço não persistentes (como Spring Cloud, Dubbo, Service Mesh, etc.), Nacos define o valor padrão para serviços não persistentes .

Depois do Nacos2.0, a definição de atributos persistentes é abstraída no serviço. Um serviço só pode ser definido como um serviço persistente ou não persistente. Uma vez concluída a definição, ela não pode ser alterada até o fim da vida útil propriedades persistentes do ciclo.

O atributo persistence afetará se os dados do serviço e da instância serão armazenados persistentemente pelo Nacos. Após defini-lo como persistente, a instância não será mais removida automaticamente e o usuário precisará remover manualmente a instância.


Conjunto

Um cluster é uma abstração lógica de um grupo de instâncias de serviço em Nacos, está entre serviços e instâncias, é o afundamento de alguns atributos de serviço e a abstração de atributos de instância.

definir clusters

No Nacos, algumas informações e dados sobre verificações de saúde são armazenados principalmente no cluster:

  • Tipo de verificação de integridade (HealthCheckType): qual tipo de verificação de integridade usar, atualmente compatível: TCP, HTTP, MySQL; defina como NONE para desativar a verificação de integridade.

  • Health Check Port (HealthCheckPort): Defina a porta usada para verificação de integridade.

  • Se a porta da instância deve ser usada para verificação de integridade (UseInstancePort): Se a porta da instância for usada para verificação de integridade, a porta de rede na definição da instância será usada para verificação de integridade em vez da porta de verificação de integridade definida acima.

  • Dados estendidos (extendData): conteúdo de metadados para extensões definidas pelo usuário, na forma de KV. Você pode personalizar e expandir as informações de metadados do cluster, o que é conveniente para os usuários implementarem sua própria lógica personalizada e marcar o cluster.

insira a descrição da imagem aqui
[Serviço e Cluster e Instância]


vida útil

No registro, os dados da instância são vinculados ao estado da instância do serviço, portanto, o estado da instância do serviço determina diretamente o ciclo de vida dos dados da instância no registro. Como um serviço é uma abstração agregada de uma instância, o ciclo de vida também é determinado pelo estado da instância do serviço

ciclo de vida do serviço

O ciclo de vida de um serviço é relativamente simples, começando com o usuário iniciando uma solicitação de registro de serviço para o centro de registro.

No Nacos, existem duas maneiras de iniciar o registro do serviço, uma é criar um serviço diretamente e a outra é criar um serviço automaticamente ao registrar uma instância; a primeira permite que o iniciador especifique uma parte das informações de metadados do serviço durante a criação, enquanto o último apenas O serviço será criado com metadados padrão.

Durante o ciclo de vida, os usuários podem adicionar e excluir instâncias de serviço ao serviço e também modificar os metadados do serviço.

Quando o usuário inicia uma solicitação para excluir o serviço ou não há instâncias sob o serviço em um determinado período de tempo (sem problemas ou não), o serviço encerra seu ciclo de vida e aguarda a próxima criação


Ciclo de vida da instância

O ciclo de vida de uma instância começa com uma solicitação para registrar a instância. No entanto, de acordo com diferentes atributos persistentes, o ciclo de vida subsequente da instância é diferente

  • Uma instância persistente manterá um estado íntegro durante o estado da verificação de integridade, mas não encerrará automaticamente o ciclo de vida da instância; antes do final do ciclo de vida, a instância persistente pode ter dados modificados ou até mesmo modificar ativamente sua integridade estado. A única maneira de encerrar o ciclo de vida de uma instância persistente é uma solicitação para sair da instância

  • As instâncias que não são persistentes manterão um estado íntegro de maneiras diferentes, dependendo da versão

    A versão do Nacos1.0 irá renovar o contrato através de uma requisição regular de heartbeat.Quando não houver heartbeat para renovar o contrato dentro de um determinado período de tempo, a instância não persistente encerrará o ciclo de vida;

    A versão do Nacos2.0 manterá o estado através da conexão longa do gRPC. Quando a conexão for interrompida, a instância não persistente encerrará o ciclo de vida

Obviamente, uma instância não persistente também pode encerrar ativamente seu ciclo de vida por meio de uma solicitação para sair da instância, mas devido à existência de conexões longas e renovações de pulsação, pode fazer com que o ciclo de vida dos dados da instância anterior seja encerrado e removido, e imediatamente devido a solicitações de compensação para heartbeat e conexões persistentes iniciam o ciclo de vida da instância novamente, dando a ilusão de uma falha de logout.


Ciclo de vida do cluster

O ciclo de vida do cluster é relativamente complicado, já que o cluster é uma camada intermediária de serviços e instâncias, o ciclo de vida do cluster está relacionado ao ciclo de vida tanto da instância quanto do serviço.

O ciclo de vida de um cluster começa ao mesmo tempo que o ciclo de vida da primeira instância do cluster, porque uma instância deve pertencer a um cluster, mesmo o cluster padrão, então quando o ciclo de vida da primeira instância começa, o cluster o início do ciclo de vida;

Quando não há instâncias em um cluster, o ciclo de vida do cluster não terminará imediatamente, mas aguardará até que o ciclo de vida do serviço termine antes de encerrar o ciclo de vida juntos.


Ciclo de vida dos metadados

Como os metadados e seu modelo de dados correspondente estão intimamente relacionados, o ciclo de vida dos metadados é basicamente consistente com o modelo de dados correspondente.

No entanto, os metadados são geralmente os dados ativamente operados pelo pessoal de operação e manutenção, que serão memorizados pela Nacos por um período de tempo, de modo que o término do ciclo de vida dos metadados é posterior ao dos dados correspondentes;

Se os dados correspondentes reiniciarem seu ciclo de vida durante esse período de atraso, o ciclo de vida dos metadados será redefinido imediatamente e não será encerrado.

insira a descrição da imagem aqui

[Diagrama do ciclo de vida de cada dado]

insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/yangshangwei/article/details/131167827
Recomendado
Clasificación