Condivisione della tecnologia

Il principio alla base di Zookeeper

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

ZooKeeper è un servizio di coordinamento distribuito ad alta disponibilità ampiamente utilizzato nei sistemi distribuiti per risolvere il problema di coerenza dei sistemi distribuiti. Di seguito verranno presentati in dettaglio i principi alla base di ZooKeeper, inclusa la sua architettura, il modello di dati, il meccanismo principale e il protocollo di coerenza.

1. Architettura

ZooKeeper adotta un'architettura master-slave, che solitamente è composta da un Leader e diversi Follower. Sono presenti anche nodi Observer come nodi non votanti per condividere la pressione delle richieste di lettura.

  • Capo: Responsabile della gestione di tutte le richieste di scrittura (richieste di transazione) e del coordinamento del protocollo di coerenza.
  • Seguace: partecipa alla votazione, sincronizza lo stato di Leader ed elabora le richieste di lettura.
  • Osservatore: non partecipa alla votazione, elabora solo le richieste di lettura e inoltra le richieste di scrittura dai client.

2. Modello dei dati

ZooKeeper memorizza i dati in una struttura ad albero simile a un file system e ciascun nodo è chiamato znode.

  • nodo: Nodo dati con percorso, dati e informazioni sullo stato.
  • Znodo persistente: un nodo sopravvive alla disconnessione del client a meno che non venga esplicitamente eliminato.
  • Znodo effimero: Il nodo viene automaticamente eliminato quando il client si disconnette.
  • Znodo sequenziale: Al nodo viene automaticamente aggiunto un numero di sequenza incrementale quando viene creato.

3. Meccanismo centrale

3.1. Gestione della sessione

Viene stabilita una sessione tra ciascun client e il cluster ZooKeeper per mantenere lo stato della connessione e gestire i nodi temporanei. ZooKeeper rileva lo stato di connessione del client attraverso il meccanismo dell'heartbeat Se non viene ricevuto alcun heartbeat entro un certo periodo di tempo, la sessione viene considerata disconnessa.

3.2. Sincronizzazione dei dati

Per garantire la coerenza dei dati di ciascun nodo, ZooKeeper adotta un meccanismo di sincronizzazione dei dati. Quando il nodo Leader elabora una richiesta di scrittura, invierà l'operazione di modifica a tutti i nodi Follower. Il nodo Follower confermerà dopo aver accettato l'operazione di modifica e il nodo Leader deciderà infine se l'operazione di modifica ha avuto successo.

3.3. Meccanismo di notifica

ZooKeeper supporta il meccanismo Watch Il client può registrare Watch sullo znode specificato Quando i dati o i nodi figlio dello znode cambiano, ZooKeeper avviserà il client.

4. Protocollo di coerenza

ZooKeeper utilizza un protocollo di coerenza chiamato ZAB (Zookeeper Atomic Broadcast) per garantire la coerenza dei dati. ZAB si compone di due fasi: la fase elettorale e la fase di trasmissione.

4.1. Fase elettorale

Quando il cluster ZooKeeper si avvia o il nodo Leader fallisce, è necessaria un'elezione per determinare un nuovo Leader. La fase elettorale si articola principalmente nei seguenti passaggi:

  1. votazione: Tutti i nodi votano per se stessi e inviano voti ad altri nodi.
  2. ricevere voti: Ogni nodo riceve voti da altri nodi e conta i risultati della votazione.
  3. Aggiorna sondaggio: Se c'è un candidato con voti più alti di te tra i voti ricevuti, aggiorna il tuo voto per quel candidato.
  4. Determinare il leader: Quando un candidato riceve più della metà dei voti, diventa il nuovo Leader.
4.2. Fase di trasmissione

Dopo che il Leader è stato determinato, si entra nella fase di broadcast. Il Leader è responsabile dell'elaborazione della richiesta di scrittura del client e della trasmissione dell'operazione di modifica a tutti i nodi Follower. I passaggi specifici sono i seguenti:

  1. proposta: Dopo aver ricevuto la richiesta di scrittura, il Leader genera una proposta e invia la proposta a tutti i nodi Follower.
  2. Confermare: Dopo aver ricevuto la proposta, il nodo Follower esegue la registrazione e invia un messaggio di conferma al Leader.
  3. invia: Dopo che il nodo Leader riceve più della metà dei messaggi di conferma, invia la proposta e notifica a tutti i nodi Follower il risultato dell'invio.
  4. Applica i cambiamenti: dopo che il nodo Follower riceve la notifica di commit, applica l'operazione di modifica.

5. Codice di esempio

Quello che segue è un semplice esempio che utilizza ZooKeeper, che mostra come creare nodi, leggere i dati dei nodi e registrare Watch.

5.1. Introduzione alle dipendenze

esistere pom.xml Introduci la dipendenza del client ZooKeeper.

 

xmlCopia codice