Console - Architettura

Il diagramma dell'architettura per il console che lavora in un data center può essere descritto al meglio come mostrato di seguito:

Come possiamo osservare, ci sono tre diversi server, che sono gestiti da Console. L'architettura di lavoro funziona utilizzando l'algoritmo raft, che ci aiuta a eleggere un leader tra i tre diversi server. Questi server vengono quindi etichettati in base ai tag comeFollower e Leader. Come suggerisce il nome, il seguace è responsabile di seguire le decisioni del leader. Tutti e tre questi server sono ulteriormente collegati tra loro per qualsiasi comunicazione.

Ogni server interagisce con il proprio client utilizzando il concetto di RPC. La comunicazione tra i clienti è possibile grazie aGossip Protocolcome menzionato sotto. La funzione Comunicazione con Internet può essere resa disponibile utilizzando il metodo di comunicazione TCP o gossip. Questa comunicazione è in contatto diretto con uno dei tre server.

Algoritmo Raft

Raft è un algoritmo di consenso per la gestione di un registro replicato. Si basa sul principio diCAP Theorem, in cui si afferma che in presenza di una partizione di rete, si deve scegliere tra coerenza e disponibilità. Non tutti e tre i fondamenti del teorema della PAC possono essere raggiunti in un dato momento. Uno deve compromettere al meglio per due di loro.

UN Raft Clustercontiene diversi server, di solito nel numero dispari. Ad esempio, se abbiamo cinque server, consentirà al sistema di tollerare due errori. In qualsiasi momento, ogni server si trova in uno dei tre stati:Leader, Follower, o Candidate. In un'operazione normale, c'è esattamente un leader e tutti gli altri server sono seguaci. Questi follower sono in uno stato passivo, ovvero non emettono richieste da soli, ma rispondono semplicemente alle richieste dei leader e del candidato.

La figura seguente descrive il modello di flusso di lavoro utilizzando il quale funziona l'algoritmo raft:

Dati valore chiave

Dalla versione 0.7.1 del Console, è stata introdotta una serie di dati sui valori chiave separati. Il comando KV viene utilizzato per interagire con l'archivio valori-chiave del Console tramite la riga di comando. Espone i comandi di primo livello perInserting, Updating, Reading e Deletingdal negozio. Per ottenere l'archivio oggetti chiave / valore, chiamiamo il metodo KV disponibile per il client console -

kv := consul.KV()

Il KVPair Structureviene utilizzato per rappresentare una singola voce chiave / valore. Possiamo visualizzare la struttura di Consul KV Pair nel seguente programma.

type KVPair struct {
   Key string
   CreateIndex uint64
   ModifyIndex uint64
   LockIndex uint64
   Flags uint64
   Value []byte
   Session string
}

Qui, le varie strutture menzionate nel codice sopra possono essere definite come segue:

  • Key- È un nome URL con barra. Ad esempio: siti / 1 / dominio.

  • CreateIndex - Numero di indice assegnato quando la chiave è stata creata per la prima volta.

  • ModifyIndex - Numero di indice assegnato quando la chiave è stata aggiornata l'ultima volta.

  • LockIndex - Numero di indice creato quando viene acquisito un nuovo blocco sulla voce chiave / valore

  • Flags - Può essere utilizzato dall'app per impostare il valore personalizzato.

  • Value - È un array di byte di massimo 512 kb.

  • Session - Può essere impostato dopo aver creato un oggetto sessione.

Tipi di protocollo

Esistono due tipi di protocollo in Console, chiamati come:

  • Protocollo di consenso e
  • Protocollo di pettegolezzo

Vediamoli ora di capirli in dettaglio.

Protocollo di consenso

Il protocollo di consenso viene utilizzato da Console per fornire la coerenza come descritto dal teorema CAP. Questo protocollo è basato sull'algoritmo Raft. Quando si implementa il protocollo di consenso, l'algoritmo Raft viene utilizzato dove i nodi raft si trovano sempre in uno dei tre stati: Follower, Candidate o Leader.

Protocollo di pettegolezzo

Il protocollo gossip può essere utilizzato per gestire l'appartenenza, inviare e ricevere messaggi attraverso il cluster. In console, l'utilizzo del protocollo gossip avviene in due modi,WAN (Wireless Area Network) e LAN(Rete locale). Esistono tre librerie conosciute, che possono implementare un algoritmo di gossip per scoprire i nodi in una rete peer-to-peer -

  • teknek-gossip - Funziona con UDP ed è scritto in Java.

  • gossip-python - Utilizza lo stack TCP ed è possibile condividere i dati anche tramite la rete costruita.

  • Smudge - È scritto in Go e utilizza UDP per scambiare informazioni sullo stato.

I protocolli di gossip sono stati utilizzati anche per ottenere e mantenere una coerenza del database distribuito o con altri tipi di dati in stati coerenti, contando il numero di nodi in una rete di dimensioni sconosciute, diffondendo notizie in modo robusto, organizzando nodi, ecc.

Chiamate di procedura remota

L'RPC può essere indicato come l'abbreviazione per le chiamate di procedura remota. È un protocollo che un programma utilizza per richiedere un servizio da un altro programma. Questo protocollo può essere posizionato in un altro computer su una rete senza dover riconoscere i dettagli di rete.

La vera bellezza dell'utilizzo di RPC in Consul è che ci aiuta a evitare i problemi di latenza che la maggior parte degli strumenti del servizio di rilevamento aveva qualche tempo fa. Prima di RPC, Console aveva soloTCP e UDPconnessioni basate, che erano buone con la maggior parte dei sistemi, ma non nel caso dei sistemi distribuiti. RPC risolve tali problemi riducendo il periodo di tempo di trasferimento delle informazioni sui pacchetti da un luogo a un altro. In quest'area, GRPC di Google è un ottimo strumento per guardare avanti nel caso in cui si desideri osservare i benchmark e confrontare le prestazioni.