Lignum: rozproszona kolejka komunikatów

Nov 24 2022
Pomiędzy całym zamieszaniem WFH i izolowaną sytuacją, postanowiłem przyjrzeć się rozproszonym blokadom za pomocą Consul, prosty program testowy wkrótce stał się ścieżką do zbudowania rozproszonej kolejki komunikatów o nazwie Lignum. To jest artykuł wprowadzający do kolejki komunikatów Lignum.

Pomiędzy całym zamieszaniem WFH i odizolowaną sytuacją, postanowiłem przyjrzeć się rozproszonym blokadom za pomocą Consul, prosty program testowy wkrótce stał się ścieżką do zbudowania rozproszonej kolejki komunikatów o nazwie Lignum .

Przegląd Lignuma

To jest artykuł wprowadzający do kolejki komunikatów Lignum.

Co to jest system rozproszony?

Istnieje wiele definicji, proste wyszukiwanie w Google spowoduje wiele odpowiedzi. System rozproszony mogę zdefiniować jako zbiór autonomicznych lub indywidualnych programów lub systemów, które działają na rzecz wspólnego celu.

Oznacza to, że wiele systemów połączonych w sieć za pomocą różnych środków komunikacji służy wspólnemu celowi. Mogą to być systemy, w których jeden pyta o stronę internetową, a drugi obsługuje strony internetowe. Dla użytkownika końcowego te systemy mogą wyglądać jak jeden, ale mogą istnieć setki takich systemów, które komunikują się ze sobą, aby wykonać zadanie.

Co to jest kolejka komunikatów?

System udostępniający kolejkę struktury danych dla innych usług do odczytu i zapisu komunikatów w kolejności FIFO.
Kolejka umożliwia usłudze producenta pisanie wiadomości, a konsumentowi konsumowanie asynchroniczne. Producent i konsument nie muszą być świadomi siebie nawzajem.

kolejka wiadomości

Dwie podstawowe cechy kolejki komunikatów to

  1. Temat
    Wiadomości są wysyłane do nazwanego bufora, który nazywa się tematem. Tworzymy i konsumujemy wiadomości z tematu.
  2. Wiadomość
    To jest rzeczywista wiadomość, którą piszemy w temacie, aby inni mogli ją wykorzystać.

Co to jest rozproszona kolejka komunikatów?

Kiedy budujemy kolejkę komunikatów, która jest hostowana w wielu węzłach, wspólnie współpracując, aby służyć jako pojedyncza jednostka dla innych usług.

Do udostępnienia będzie wiele komunikatów użytkownika obsługujących kolejkę

  1. Niezawodność i wysoka dostępność
  2. Tolerancja błędów
  3. Występ
  4. Współdzielenie obciążenia odczytu z wieloma węzłami

Lignum został uruchomiony jako program testowy do nauki blokowania rozproszonego przy użyciu Consul session lock , który zaczął obracać się w kierunku kolejki wiadomości, gdy pracowałem w tym czasie nad Kafką.
Jest to napisane w Go. Zacząłem go z myślą o rozwoju opartym na testach, ale wkrótce skończyło się to bałaganem.

Architektura Lignuma

Lignum nie jest pełnoprawną kolejką komunikatów, jest w toku. Możesz

  • Wysyłaj wiadomości do tematu
  • Konsumuj wiadomości z tematu
  • Wiadomość jest replikowana do wszystkich węzłów, co oznacza, że ​​każdy węzeł może być użyty do odczytania wiadomości z tematu
  • Utrzymuj wiadomości na dysku
  • Lignum może działać w trybie klastrowym bez potrzeby specjalnej konfiguracji
  • Zarządzanie klastrami ułatwia Consul z blokadami sesji
  • Każdy węzeł połączy się z Konsulem, aby uzyskać przywódcę. Jeśli żaden lider nie zostanie znaleziony, jeden z węzłów zostanie wybrany jako lider
  • Wszystkie pozostałe węzły zarejestrują się jako podążające za liderem
  • Wiadomość wysłana do lidera zostanie zreplikowana do węzła obserwującego
  • Posiada dwa tryby replikacji
    a. replikacja WAL
    b. Replikacja na żywo
  • Jeśli przywódca upadnie, na przywódcę zostaje wybrany dowolny z jego zwolenników

Obecnie lignum realizuje dwa tryby strategii replikacji.

  1. replikacja WAL
  2. Replikacja na żywo.

replikacja WAL

Plik dziennika jest tworzony dla każdego tematu, gdy wiadomość przekroczy rozmiar bufora zdefiniowany w config( message.initial-szie-per-topic). Lignum tworzy plik WAL ( .qwal) dla każdego tematu. Gdy liczba komunikatów osiągnie rozmiar bufora, ten plik zostanie usunięty na dysk jako logplik. Lignum często obserwuje tworzenie tych plików dziennika i wysyła je do obserwujących. Wszyscy obserwujący są okresowo synchronizowani z liderem, zapewniając ostateczną/opóźnioną spójność.

Replikacja na żywo

Jest to replikacja strumieniowa, gdy obserwujący jest już zarejestrowany u lidera, nie musimy się martwić o synchronizację wiadomości, jeśli temat został utworzony później. Możemy po prostu przekazać otrzymane wiadomości w liderze, tak jak ma to miejsce w przypadku naśladowcy. W tej strategii wiadomości są natychmiast wysyłane do zarejestrowanych obserwujących. W ten sposób Lignum może zapewnić silną spójność.

Jak uruchomić Lignuma

  • Wymagania wstępne
    — Consul
    Możesz używać pliku Dockerfile zgodnie z opisem w pliku README
  • Sklonuj repozytorium
  • https://github.com/NishanthSpShetty/lignum.git
    

  • update config.yml, możesz zapoznać się z tą dokumentacją , aby uzyskać więcej informacji na temat konfiguracji.
  • biegaćmake run
  • Wyślij wiadomość
  • 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
       }'
    

Jaką gwarancję dostawy oferuje?
Ponieważ komunikaty są trwałe, a konsument może w każdej chwili odczytać dowolne przesunięcie, gwarancja dostarczenia spoczywa na kliencie. Lignum gwarantuje uporządkowanie wiadomości.

Dodajmy węzeł do istniejącego klastra

  • Zmień konfigurację zgodnie z hostem.
  • Jeśli działasz na tym samym hoście co poprzednio, zmień port, katalog danych i wartości portu replikacji w pliku konfiguracyjnym.
  • Biegaćmake run

To jest krótkie wprowadzenie do Lignum. W przyszłości opracuję osobny dokument na temat jego elementów wewnętrznych i szczegółów rozwoju.

Kod jest w Github: Lignum .

Sprawdź i prześlij opinię, wkład jest mile widziany.

Sprawdź mój profil Github, aby zobaczyć inne niesamowite projekty, nad którymi pracuję

Połącz się ze mną na LinkedIn

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