Consul - Arquitetura
O diagrama de arquitetura para cônsul trabalhando em um datacenter pode ser melhor descrito conforme mostrado abaixo -
Como podemos observar, existem três servidores diferentes, que são geridos pela Consul. A arquitetura de trabalho funciona através do algoritmo de jangada, que nos ajuda a eleger um líder entre os três servidores diferentes. Esses servidores são então rotulados de acordo com as tags, comoFollower e Leader. Como o nome sugere, o seguidor é responsável por seguir as decisões do líder. Todos esses três servidores são conectados entre si para qualquer comunicação.
Cada servidor interage com seu próprio cliente usando o conceito de RPC. A comunicação entre os clientes é possível devido aGossip Protocolcomo mencionado abaixo. A facilidade de comunicação com a internet pode ser disponibilizada usando TCP ou método de comunicação gossip. Esta comunicação está em contato direto com qualquer um dos três servidores.
Algoritmo de jangada
Raft é um algoritmo de consenso para gerenciar um log replicado. Baseia-se no princípio deCAP Theorem, que afirma que, na presença de uma partição de rede, é preciso escolher entre consistência e disponibilidade. Nem todos os três fundamentos do Teorema CAP podem ser alcançados em um determinado momento. É preciso trocar por dois deles, na melhor das hipóteses.
UMA Raft Clustercontém vários servidores, geralmente na contagem de número ímpar. Por exemplo, se tivermos cinco servidores, isso permitirá que o sistema tolere duas falhas. A qualquer momento, cada servidor está em um dos três estados:Leader, Follower, ou Candidate. Em uma operação normal, há exatamente um líder e todos os outros servidores são seguidores. Esses seguidores estão em um estado passivo, ou seja, eles não emitem solicitações por conta própria, mas simplesmente respondem às solicitações dos líderes e do candidato.
A ilustração a seguir descreve o modelo de fluxo de trabalho usando o algoritmo de jangada -
Dados de valor chave
Desde a versão 0.7.1 do Consul, houve uma introdução de dados de valor-chave separados. O comando KV é usado para interagir com o armazenamento de valores-chave do Consul por meio da linha de comando. Ele expõe comandos de nível superior paraInserting, Updating, Reading e Deletingda loja. Para obter o armazenamento de objeto de chave / valor, chamamos o método KV disponível para o cliente consul -
kv := consul.KV()
o KVPair Structureé usado para representar uma única entrada de chave / valor. Podemos ver a estrutura do Consul KV Pair no programa a seguir.
type KVPair struct {
Key string
CreateIndex uint64
ModifyIndex uint64
LockIndex uint64
Flags uint64
Value []byte
Session string
}
Aqui, as várias estruturas mencionadas no código acima podem ser definidas da seguinte forma -
Key- É um nome de URL de barra. Por exemplo - sites / 1 / domínio.
CreateIndex - Número do índice atribuído quando a chave foi criada pela primeira vez.
ModifyIndex - Número do índice atribuído quando a chave foi atualizada pela última vez.
LockIndex - Número de índice criado quando um novo bloqueio adquirido na entrada de chave / valor
Flags - Pode ser usado pelo aplicativo para definir o valor personalizado.
Value - É uma matriz de bytes de no máximo 512kb.
Session - Pode ser definido após a criação de um objeto de sessão.
Tipos de protocolo
Existem dois tipos de protocolo no Consul, que são chamados de -
- Protocolo de consenso e
- Protocolo de Fofoca
Vamos agora entendê-los em detalhes.
Protocolo de Consenso
O protocolo de consenso é usado pelo Consul para fornecer consistência conforme descrito pelo teorema CAP. Este protocolo é baseado no Algoritmo de Jangada. Ao implementar o protocolo de consenso, o Algoritmo de jangada é usado onde os nós de jangada estão sempre em qualquer um dos três estados: Seguidor, Candidato ou Líder.
Protocolo de Fofoca
O protocolo de gossip pode ser usado para gerenciar a associação, enviar e receber mensagens em todo o cluster. No cônsul, o uso do protocolo de fofoca ocorre de duas maneiras,WAN (Rede de área sem fio) e LAN(Rede local). Existem três bibliotecas conhecidas, que podem implementar um algoritmo Gossip para descobrir nós em uma rede ponto a ponto -
teknek-gossip - Funciona com UDP e é escrito em Java.
gossip-python - Utiliza pilha TCP e também é possível compartilhar dados através da rede construída.
Smudge - Está escrito em Go e usa UDP para trocar informações de status.
Os protocolos de gossip também têm sido usados para alcançar e manter uma consistência de banco de dados distribuída ou com outros tipos de dados em estados consistentes, contando o número de nós em uma rede de tamanho desconhecido, espalhando notícias de maneira robusta, organizando nós, etc.
Chamadas de procedimento remoto
O RPC pode ser denotado como a forma abreviada de Chamadas de procedimento remoto. É um protocolo que um programa usa para solicitar um serviço de outro programa. Este protocolo pode ser localizado em outro computador em uma rede sem ter que reconhecer os detalhes da rede.
A verdadeira beleza de usar RPC no Consul é que nos ajuda a evitar os problemas de latência que a maioria das ferramentas de serviço de descoberta tinha há algum tempo. Antes de RPC, Consul costumava ter apenasTCP e UDPconexões baseadas, que eram boas com a maioria dos sistemas, mas não no caso de sistemas distribuídos. O RPC resolve esses problemas reduzindo o período de tempo de transferência das informações do pacote de um lugar para outro. Nesta área, GRPC by Google é uma ótima ferramenta para olhar para a frente, caso se queira observar benchmarks e comparar desempenho.