Lignum: antrian pesan terdistribusi

Nov 24 2022
Di antara semua fuzz WFH dan situasi terisolasi, saya menetapkan diri untuk melihat kunci terdistribusi menggunakan Konsul, program pengujian sederhana segera menjadi jalur untuk membangun antrian pesan terdistribusi yang disebut Lignum. Ini adalah artikel pengantar antrian pesan Lignum.

Di antara semua fuzz WFH dan situasi terisolasi, saya menetapkan diri untuk melihat kunci terdistribusi menggunakan Konsul, program pengujian sederhana segera menjadi jalur untuk membangun antrian pesan terdistribusi yang disebut Lignum .

Ikhtisar lignum

Ini adalah artikel pengantar antrian pesan Lignum.

Apa itu sistem terdistribusi?

Ada banyak definisi di luar sana, pencarian google sederhana akan menghasilkan banyak jawaban. Saya dapat mendefinisikan sistem terdistribusi sebagai kumpulan program atau sistem otonom atau individual yang bekerja menuju tujuan bersama.

Artinya, beberapa sistem terhubung bersama melalui berbagai sarana komunikasi untuk melayani tujuan bersama. Bisa jadi sistem di mana seseorang meminta halaman web dan satu melayani halaman web. Untuk pengguna akhir, sistem ini mungkin tampak sebagai satu, tetapi mungkin ada ratusan sistem seperti itu, yang berkomunikasi satu sama lain untuk melakukan tugas tersebut.

Apa itu antrian pesan?

Sistem yang menyediakan struktur data antrian untuk layanan lain untuk membaca dan menulis pesan dalam urutan FIFO.
Antrean memungkinkan layanan produser untuk menulis pesan dan konsumen untuk mengkonsumsi secara asinkron. Produsen dan konsumen tidak perlu saling mengetahui.

antrian pesan

Dua karakteristik dasar dari antrian pesan adalah

  1. Pesan Topik
    dikirim ke buffer bernama, ini disebut topik. Kami memproduksi dan mengkonsumsi pesan dari topik.
  2. Pesan
    Ini adalah pesan sebenarnya yang kami tulis ke topik untuk dikonsumsi orang lain.

Apa itu antrian pesan terdistribusi?

Saat kami membuat antrean pesan yang dihosting di banyak node, secara kolektif bekerja bersama untuk melayani sebagai satu kesatuan untuk layanan lain.

Akan ada beberapa antrean pesan pengguna hosting untuk disediakan

  1. Keandalan dan ketersediaan tinggi
  2. Toleransi kesalahan
  3. Pertunjukan
  4. Berbagi beban baca dengan beberapa node

Lignum dimulai sebagai program pengujian untuk mempelajari penguncian terdistribusi menggunakan kunci sesi Konsul , yang mulai berputar menuju antrean pesan saat saya mengerjakan Kafka saat itu.
Ini ditulis dalam Go. Saya memang memulainya dengan memikirkan pengembangan berbasis tes, tetapi segera berakhir menjadi berantakan.

Arsitektur Lignum

Lignum bukanlah antrian pesan lengkap, ini sedang dalam proses. Kamu bisa

  • Kirim pesan ke topik
  • Konsumsi pesan dari topik
  • Pesan direplikasi ke semua node, artinya setiap node dapat digunakan untuk membaca pesan dari topik
  • Pertahankan pesan pada disk
  • Lignum dapat beroperasi dalam mode cluster tanpa memerlukan pengaturan khusus
  • Manajemen klaster difasilitasi oleh Konsul dengan kunci sesinya
  • Setiap node akan terhubung ke Konsul untuk mendapatkan pemimpin. Jika tidak ada pemimpin yang ditemukan, salah satu simpul akan dipilih sebagai pemimpin
  • Semua node lain akan mendaftarkan diri sebagai pengikut pemimpin
  • Pesan yang dikirim ke leader akan direplikasi ke node follower
  • Ini memiliki dua mode replikasi
    a. replikasi WAL
    b. Replikasi langsung
  • Jika pemimpin turun, salah satu pengikut akan terpilih sebagai pemimpin

Saat ini lignum mengimplementasikan dua mode strategi replikasi.

  1. replikasi WAL
  2. Replikasi langsung.

replikasi WAL

File log dibuat untuk setiap topik ketika pesan melebihi ukuran buffer yang ditentukan dalam config( message.initial-szie-per-topic). Lignum membuat file WAL( .qwal) untuk setiap topik. Saat jumlah pesan mencapai ukuran buffer, file ini akan dipindahkan ke disk sebagai logfile. Lignum sering mengawasi pembuatan file log ini dan mengirimkannya ke pengikut. Semua pengikut disinkronkan secara berkala dengan pemimpin, memberikan konsistensi akhir/tertunda.

Replikasi langsung

Ini adalah replikasi streaming, ketika pengikut sudah terdaftar di pemimpin, kita tidak perlu khawatir menyinkronkan pesan jika topik dibuat setelahnya. Kami hanya dapat meneruskan pesan yang diterima di pemimpin seperti halnya ke pengikut. Dalam strategi ini, pesan segera dikirim ke pengikut terdaftar. Dengan cara ini Lignum dapat memberikan konsistensi yang kuat.

Bagaimana menjalankan Lignum

  • Prasyarat
    — Konsul
    Anda dapat menggunakan Dockerfile sebagaimana ditentukan dalam README
  • Kloning repositori
  • https://github.com/NishanthSpShetty/lignum.git
    

  • update config.yml, Anda dapat merujuk dokumentasi ini untuk detail lebih lanjut tentang konfigurasi.
  • Larimake run
  • Mengirim pesan
  • 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
       }'
    

Jaminan pengiriman apa yang ditawarkannya?
Karena pesan tetap ada dan konsumen dapat membaca offset kapan saja, jaminan pengiriman ada pada konsumen. Lignum menjamin pemesanan pesan.

Mari tambahkan node ke cluster yang ada

  • Ubah konfigurasi sesuai host Anda.
  • Jika berjalan di host yang sama seperti sebelumnya, ubah port, direktori data, dan nilai port replikasi dalam file konfigurasi.
  • Larimake run

Ini adalah pengantar singkat untuk Lignum. Saya akan membuat dokumen terpisah tentang detail internal dan pengembangannya di masa mendatang.

Kode ada di Github : Lignum .

Checkout dan berikan umpan balik, kontribusi dipersilakan.

Lihat profil Github saya untuk proyek keren lainnya yang sedang saya kerjakan

Terhubung dengan saya di LinkedIn

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