Lignum: hàng đợi tin nhắn phân tán

Nov 24 2022
Giữa tất cả các tình huống bị cô lập và WFH, tôi bắt đầu tự mình xem xét các khóa phân tán bằng cách sử dụng Consul, chương trình thử nghiệm đơn giản nhanh chóng trở thành con đường để xây dựng hàng đợi tin nhắn phân tán có tên là Lignum. Đây là bài viết giới thiệu về hàng đợi tin nhắn Lignum.

Giữa tất cả các tình huống bị cô lập và WFH, tôi bắt đầu tự mình xem xét các khóa phân tán bằng cách sử dụng Consul, chương trình thử nghiệm đơn giản nhanh chóng trở thành một con đường để xây dựng hàng đợi tin nhắn phân tán có tên là Lignum .

tổng quan về lignum

Đây là bài viết giới thiệu về hàng đợi tin nhắn Lignum.

Hệ thống phân tán là gì?

Có rất nhiều định nghĩa ngoài kia, một tìm kiếm đơn giản trên google sẽ dẫn đến nhiều câu trả lời. Tôi có thể định nghĩa hệ thống phân tán là một tập hợp các chương trình hoặc hệ thống độc lập hoặc riêng lẻ đang hoạt động hướng tới một mục tiêu chung.

Có nghĩa là, nhiều hệ thống được kết nối với nhau bằng nhiều phương tiện liên lạc khác nhau để phục vụ một mục đích chung. Nó có thể là hệ thống mà một người yêu cầu trang web và một người phục vụ các trang web. Đối với người dùng cuối, các hệ thống này có thể xuất hiện dưới dạng một, nhưng có thể có hàng trăm hệ thống như vậy giao tiếp với nhau để thực hiện nhiệm vụ.

Hàng đợi tin nhắn là gì?

Hệ thống cung cấp cấu trúc dữ liệu hàng đợi cho dịch vụ khác để đọc và ghi tin nhắn theo thứ tự FIFO.
Hàng đợi cho phép dịch vụ của nhà sản xuất viết tin nhắn và người tiêu dùng sử dụng không đồng bộ. Nhà sản xuất và người tiêu dùng không cần phải biết về nhau.

Hàng đợi tin nhắn

Hai đặc điểm cơ bản của hàng đợi tin nhắn là

  1. Chủ đề
    Tin nhắn được gửi đến bộ đệm được đặt tên, chúng được gọi là chủ đề. Chúng tôi sản xuất và tiêu thụ thông điệp từ chủ đề này.
  2. Tin nhắn
    Đây là tin nhắn thực tế chúng tôi viết cho chủ đề để người khác sử dụng.

Hàng đợi tin nhắn phân tán là gì?

Khi chúng tôi xây dựng một hàng đợi tin nhắn được lưu trữ trong nhiều nút, làm việc cùng nhau để phục vụ như một thực thể duy nhất cho các dịch vụ khác.

Sẽ có nhiều hàng đợi lưu trữ tin nhắn người dùng để cung cấp

  1. Độ tin cậy và tính sẵn sàng cao
  2. khả năng chịu lỗi
  3. Hiệu suất
  4. Chia sẻ tải đọc với nhiều nút

Lignum đã được bắt đầu như một chương trình thử nghiệm để tìm hiểu khóa phân tán bằng cách sử dụng khóa phiên Consul , chương trình này bắt đầu xoay quanh hàng đợi tin nhắn khi tôi đang làm việc trên Kafka vào thời điểm đó.
Điều này được viết bằng Go. Tôi đã bắt đầu với suy nghĩ phát triển dựa trên thử nghiệm nhưng ngay sau đó nó trở thành một mớ hỗn độn.

Kiến trúc lignum

Lignum không phải là một hàng đợi tin nhắn chính thức, nó đang trong quá trình hoàn thiện. Bạn có thể

  • Gửi tin nhắn đến chủ đề
  • Tiêu thụ tin nhắn từ chủ đề
  • Tin nhắn được sao chép tới tất cả các nút, nghĩa là bất kỳ nút nào cũng có thể được sử dụng để đọc tin nhắn từ chủ đề
  • Tin nhắn liên tục trên đĩa
  • Lignum có thể hoạt động ở chế độ cụm mà không cần bất kỳ thiết lập đặc biệt nào
  • Quản lý cụm được hỗ trợ bởi Lãnh sự với các khóa phiên của nó
  • Mỗi nút sẽ kết nối với Lãnh sự để lấy thủ lĩnh. Nếu không tìm thấy thủ lĩnh, một trong các nút sẽ được bầu làm thủ lĩnh
  • Tất cả các nút khác sẽ tự đăng ký làm người theo dõi người lãnh đạo
  • Tin nhắn được gửi đến người lãnh đạo sẽ được sao chép sang nút theo dõi
  • Nó có hai chế độ sao chép
    a. Sao chép WAL
    b. Sao chép trực tiếp
  • Nếu người lãnh đạo đi xuống, bất kỳ người nào trong số những người theo dõi sẽ được bầu làm người lãnh đạo

Hiện lignum thực hiện hai chế độ chiến lược sao chép.

  1. sao chép WAL
  2. Sao chép trực tiếp.

sao chép WAL

Tệp nhật ký được tạo cho từng chủ đề khi thông báo vượt quá kích thước bộ đệm được xác định trong config( message.initial-szie-per-topic). Lignum tạo tệp WAL( .qwal) cho từng chủ đề. Khi số lượng tin nhắn đạt đến kích thước bộ đệm, tệp này sẽ được chuyển vào đĩa dưới dạng logtệp. Lignum thường xuyên theo dõi quá trình tạo tệp nhật ký này và gửi cho những người theo dõi. Tất cả những người theo dõi được đồng bộ hóa định kỳ với người lãnh đạo, mang lại sự nhất quán cuối cùng/bị trì hoãn.

Sao chép trực tiếp

Đây là bản sao phát trực tuyến, khi người theo dõi đã được đăng ký với người lãnh đạo, chúng tôi không cần phải lo lắng về việc đồng bộ hóa các tin nhắn nếu chủ đề được tạo sau. Chúng tôi chỉ có thể chuyển tiếp các tin nhắn nhận được trong người lãnh đạo cũng như người theo dõi. Trong chiến lược này, tin nhắn được gửi đến người theo dõi đã đăng ký ngay lập tức. Bằng cách này, Lignum có thể mang lại sự nhất quán mạnh mẽ.

Làm thế nào để chạy Lignum

  • Điều kiện tiên quyết
    — Lãnh sự
    Bạn có thể sử dụng Dockerfile như được chỉ định trong README
  • Sao chép kho lưu trữ
  • https://github.com/NishanthSpShetty/lignum.git
    

  • update config.yml, bạn có thể tham khảo tài liệu này để biết thêm chi tiết về cấu hình.
  • chạymake run
  • Gửi tin nhắn
  • 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
       }'
    

Những gì đảm bảo giao hàng nó cung cấp?
Vì các tin nhắn được duy trì và người tiêu dùng có thể đọc bất kỳ phần bù nào vào bất kỳ lúc nào, nên việc đảm bảo giao hàng thuộc về người tiêu dùng. Lignum đảm bảo thứ tự tin nhắn.

Cho phép thêm nút vào cụm hiện có

  • Thay đổi cấu hình theo máy chủ của bạn.
  • Nếu chạy trên cùng một máy chủ như lần chạy trước, thì hãy thay đổi giá trị cổng, thư mục dữ liệu và cổng sao chép trong tệp cấu hình.
  • Chạymake run

Đây là phần giới thiệu ngắn về Lignum. Tôi sẽ đưa ra một tài liệu riêng về nội bộ và chi tiết phát triển của nó trong tương lai.

Mã có trong Github : Lignum .

Thanh toán và cung cấp thông tin phản hồi, đóng góp được chào đón.

Kiểm tra hồ sơ Github của tôi để biết các dự án tuyệt vời khác mà tôi đang thực hiện

Kết nối với tôi trên LinkedIn

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