Lignum: coda di messaggi distribuita

Nov 24 2022
Tra tutto il fuzz WFH e la situazione isolata, mi sono proposto di esaminare i blocchi distribuiti utilizzando Consul, il semplice programma di test è diventato presto un percorso per la creazione di una coda di messaggi distribuita chiamata Lignum. Questo è un articolo introduttivo alla coda dei messaggi di Lignum.

Tra tutto il fuzz WFH e la situazione isolata, mi sono proposto di esaminare i blocchi distribuiti utilizzando Consul, il semplice programma di test è diventato presto un percorso per la creazione di una coda di messaggi distribuita chiamata Lignum .

Panoramica di Lignum

Questo è un articolo introduttivo alla coda dei messaggi di Lignum.

Cos'è un sistema distribuito?

Ci sono molte definizioni là fuori, una semplice ricerca su Google si tradurrà in più risposte. Posso definire un sistema distribuito come una raccolta di programmi o sistemi autonomi o individuali che lavorano per un obiettivo comune.

Significato, più sistemi collegati in rete insieme con vari mezzi di comunicazione per servire uno scopo comune. Potrebbero essere sistemi in cui si chiede una pagina web e si servono pagine web. Per un utente finale questi sistemi possono apparire come uno, ma potrebbero esserci centinaia di tali sistemi, che comunicano tra loro per svolgere l'attività.

Che cos'è la coda dei messaggi?

Sistema che fornisce la struttura dei dati della coda per altri servizi per leggere e scrivere messaggi in ordine FIFO.
La coda consente al servizio produttore di scrivere messaggi e al consumatore di consumare in modo asincrono. Produttore e consumatore non devono essere consapevoli l'uno dell'altro.

coda di messaggi

Due caratteristiche di base della coda dei messaggi sono

  1. Argomento
    I messaggi vengono inviati al buffer denominato, questi sono chiamati argomento. Produciamo e consumiamo messaggi dall'argomento.
  2. Messaggio
    Questo è il vero messaggio che scriviamo sull'argomento affinché gli altri possano consumarlo.

Cos'è la coda di messaggi distribuita?

Quando creiamo una coda di messaggi che è ospitata in più nodi, collaborando collettivamente per fungere da singola entità per altri servizi.

Ci saranno più messaggi utente di hosting di code da fornire

  1. Affidabilità e alta disponibilità
  2. Tolleranza ai guasti
  3. Prestazione
  4. Condivisione del carico di lettura con più nodi

Lignum è stato avviato come programma di test per apprendere il blocco distribuito utilizzando il blocco della sessione Consul , che ha iniziato a ruotare verso la coda dei messaggi mentre stavo lavorando su Kafka in quel momento.
Questo è scritto in Go. L'ho iniziato pensando allo sviluppo basato sui test, ma presto è finito per essere un disastro.

Lignum Architettura

Lignum non è una coda di messaggi a tutti gli effetti, è un work in progress. Puoi

  • Invia messaggi all'argomento
  • Consumare messaggi dall'argomento
  • Il messaggio viene replicato su tutti i nodi, il che significa che qualsiasi nodo può essere utilizzato per leggere il messaggio dall'argomento
  • Mantieni i messaggi su disco
  • Lignum può operare in modalità cluster senza bisogno di alcuna configurazione speciale
  • La gestione dei cluster è facilitata da Consul con i suoi blocchi di sessione
  • Ogni nodo si collegherà a Consul per ottenere il leader. Se non viene trovato alcun leader, uno dei nodi verrà eletto come leader
  • Tutti gli altri nodi si registreranno come follower del leader
  • Il messaggio inviato al leader verrà replicato al nodo follower
  • Ha due modalità di replica
    a. replica WAL
    b. Replica dal vivo
  • Se il leader cade, uno qualsiasi dei seguaci viene eletto leader

Attualmente lignum implementa due modalità di strategia di replica.

  1. Replica WAL
  2. Replica dal vivo.

Replica WAL

Il file di registro viene creato per ogni argomento quando il messaggio supera la dimensione del buffer definita in config( message.initial-szie-per-topic). Lignum crea file WAL( .qwal) per ogni argomento. Quando il conteggio dei messaggi raggiunge la dimensione del buffer, questo file viene scaricato su disco come logfile. Lignum controlla spesso la creazione di questi file di registro e li invia ai follower. Tutti i follower vengono sincronizzati periodicamente con il leader, fornendo coerenza finale/ritardata.

Replica dal vivo

Questa è una replica in streaming, quando il follower è già registrato con il leader, non dobbiamo preoccuparci di sincronizzare i messaggi se l'argomento è stato creato dopo. Possiamo semplicemente inoltrare i messaggi ricevuti nel leader così come nel follower. In questa strategia, i messaggi vengono inviati immediatamente al follower registrato. In questo modo Lignum può fornire una forte consistenza.

Come eseguire Lignum

  • Prerequisito
    — Console
    È possibile utilizzare Dockerfile come specificato in README
  • Clonare il repository
  • https://github.com/NishanthSpShetty/lignum.git
    

  • update config.yml, puoi fare riferimento a questa documentazione per maggiori dettagli sulle configurazioni.
  • correremake run
  • Invia messaggio
  • curl --request POST \
      --url http://localhost:8080/api/message \
      --header 'Content-Type: application/json' \
      --data '{
       "topic": "test",
       "message":"this is a test message"
       }'
    

    curl --request GET \
      --url http://localhost:8080/api/message \
      --header 'Content-Type: application/json' \
      --data '{
       "topic": "test",
       "from": 0,
       "to": 3
       }'
    

Che garanzia di consegna offre?
Poiché i messaggi sono persistenti e il consumatore può leggere qualsiasi offset in qualsiasi momento, la garanzia di consegna spetta al consumatore. Il Lignum garantisce l'ordinamento dei messaggi.

Consente di aggiungere il nodo al cluster esistente

  • Cambia la configurazione secondo il tuo host.
  • Se in esecuzione sullo stesso host dell'esecuzione precedente, modificare i valori della porta, della directory dei dati e della porta di replica nel file di configurazione.
  • Correremake run

Questa è una breve introduzione a Lignum. In futuro pubblicherò un documento separato sui suoi interni e sui dettagli di sviluppo.

Il codice è in Github: Lignum .

Checkout e fornire feedback, i contributi sono i benvenuti.

Dai un'occhiata al mio profilo Github per altri fantastici progetti su cui sto lavorando

Connettiti con me su LinkedIn

https://www.linkedin.com/in/nishanthspshetty/