Skip to content

Instantly share code, notes, and snippets.

@NiccoMlt
Created November 1, 2021 15:05
Show Gist options
  • Save NiccoMlt/eb9afc94dbd7e1f55783960f5ead5269 to your computer and use it in GitHub Desktop.
Save NiccoMlt/eb9afc94dbd7e1f55783960f5ead5269 to your computer and use it in GitHub Desktop.
My personal (still WIP) notes on ZooKeeper architecture (in Italian)

Apache ZooKeeper

Apache ZooKeeper è un servizio di configurazione distribuito pensato per la coordinazione di applicazioni cloud in ambienti distribuiti ad alta affidabilità.

Offre uno spazio di archiviazione chiave-valore gerarchico e distribuito, utilizzato principalmente per:

  • servizi di configurazione distribuiti
  • servizi di sincronizzazione
  • servizi di naming
  • leader election
  • lock distribuito

Inizialmente nato dentro Yahoo! Research come sotto-progetto di Apache Hadoop, è stato poi promosso a progetto Apache top-level.

Overview sull'architettura

ZooKeeper service

ZooKeeper è in grado di offrire alta disponibilità attraverso servizi ridondanti: i client possono richiedere al cluster l'elezione di un nuovo leader (detto anche master) ZooKeeper se il primo nodo leader conosciuto non risponde.

I nodi di ZooKeeper memorizzano i dati in uno spazio di nomi gerarchico, simile a un file system o a una struttura dati ad albero. I client possono leggere e scrivere dialogando coi nodi, condividendo di fatto un servizio di configurazione.

ZooKeeper può essere visto come un sistema broadcast atomico, nel quale ogni attore del sistema riceve il medesimo set di messaggi nel medesimo ordine (garantisce un ordinamento totale). Il protocollo core del sistema è denominato ZooKeeper Atomic Broadcast (ZAB). Il modello di ZooKeeper è ispirato al modello di Google Chubby, un servizio di lock per la coordinazione distribuita. Come algoritmo di consenso per mantenere le repliche consistenti, utilizza una variante del Paxos Algorithm.

Feature principali

  • Affidabilità
  • Architettura semplice e gerarchica
  • Processing veloce, specialmente in carichi di lavoro reali con molte letture
  • Scalabilità

Terminologie

  • Node: i sistemi installati sul cluster
  • ZNode: i nodi del cluster sui qualit lo stato è aggiornato da altri nodi
  • Applicazioni client: gli strumenti che interagiscono con le applicazioni distribuite
  • Applicazioni server: permettono ai client di interagire attraverso interfacce comuni
  • Ensamble ("insieme"): l'insieme dei server sui quali sono memorizzati e replicati i servizi
    • mantengono un database in-memory contenente l'intero albero degli stati
    • memorizzano in modo persistente degli snapshot e il log delle transazioni

I client mantengono una connessione TCP coi server, sulla quale sono mandate le richieste e gli heartbeat e sono ricevuti le risposte e gli eventi di monitoraggio.

ZooKeeper può essere visto più come uno state-based system che uno event system: poiché l'evento di watch e l'accesso al dato avvengono in due momenti distinti, non c'è garanzia di essere in grado di intercettare tutti gli stati intermedi in caso di variazione frequente del dato (senza memorizzare lo storico delle variazioni nel dato stesso).

Fast facts

  • Il partizionamento dei dati su più macchine avviene tramite replicazione completa in-memory
  • L'update su più macchine viene considerato completo quando un quorum di follower confermano l'update al master
  • Le letture possono avvenire da qualsiasi membro del cluster, dunque la lettura di copie stale, per quanto non frequente, è possibile
  • Il leader ha la responsabilità di:
    • assegnare un serial ID ad ogni update
    • confermare il raggiungimento di un quorum a seguito di un update
  • La replicazione completa limita la dimensione totale dei dati che possono essere gestiti da ZooKeeper
  • La sequenzializzazione degli aggiornamenti attraverso un leader può essere un collo di bottiglia, anche se un rate di 50k/s aggiornamenti può essere sostenuto senza problemi
  • Il modello di storage dei dati è completamente non-relazionale

L'algoritmo

Algoritmi total order in matematica

In matematica, una relazione di ordine totale o lineare è una relazione binaria su un insieme che è riflessiva, antisimmetrica, transitiva (quindi una relazione d'ordine) e totale. La proprietà di totalità di una relazione si può descrivere dicendo che due suoi elementi qualsiasi costituiscono sempre una coppia confrontabile per la relazione stessa.

Il termine catena, poi, identifica un sotto-insieme totalmente ordinato di un insieme parzialmente ordinato.

Apache Curator

Apache Curator è un client in Java per ZooKeeper, che fornisce le seguenti funzionalità:

  • Connection Management: gestisce automaticamente le connessioni e le policy di riconnessione;
  • Async: supporta diverse funzionalità di asincronismo sulle connessioni;
  • Configuration Management: implementa automaticamente un centralizzatore di configurazioni;
  • Strongly-Typed Models: supporta un typing stringente per i modelli gestiti come bytearray da ZooKeeper vanilla;
  • Recipes: fornisce "ricette" per l'implementazione semplificata di pattern quali:
    • leader election
    • distributed lock
    • distributed counter

Google Chubby

Paxos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment