Message Queue VS Message Bus

Bài viết được sự cho phép của tác giả Lê Chí Dũng

MESSAGE QUEUE

Message Queue work flow

Message Queue nôm na là Queue (hàng đợi), chứa Message (Tin nhắn) như hộp thư.  Và nó cho phép các thành phần/service trong một hệ thống (hoặc nhiều hệ thống), trao đổi thông tin cho nhau.

  Discord đã lưu trữ hàng tỉ messages mỗi ngày như thế nào
  Kafka là gì? Ứng dụng Kafka cho hệ thống message

Message queue nhận message từ một application và cung cấp chúng cho một hoặc nhiều application khác theo cơ chế vào trước thì ra trước ( First In First Out ).

Một số Message queue được dùng hiện nay:

  • Kafka
  • Pulsar
  • RabitMQ
  • ActiveMQ
  • SQS
  • ZeroMQ
  • MSMQ
  • IronMQ
  • Kinesis
  • RocketMQ

Architectural scenarios

Nếu API A cần gửi thông tin cập nhật trạng thái tới các API B và C, thì message queue được thiết lập riêng cho B và C.

A sẽ gửi các message riêng biệt cho mỗi queue và mỗi API nhận sẽ đợi và nhận messgae từ queue được thiết lập riêng, sau khi gửi message thành công thì message sẽ bị khử khỏi queue.

Lúc A gửi message thì cả B và C đều không cần có sẵn để nhận message. Message queue luôn hoạt động, vì vậy nếu một API nhận bị khởi động lại, thì nó sẽ bắt đầu kéo message từ queue riêng của nó khi nó trở lại trực tuyến.

Điều này giúp phá vỡ sự phụ thuộc giữa các hệ thống và cung cấp khả năng mở rộng và khả năng chịu lỗi lớn hơn cho các API.


MESSAGE BUS

Message Bus work flow

Message bus còn được gọi Service Bus.

Message Bus cung cấp phương thức để một hoặc nhiều application giao tiếp message đến một hoặc nhiều application khác.

Message Bus không đảm bảo cho việc vào trước xuất trước. Người nhận (Subscribers) đã đăng ký Message Bus có thể nhận message được publish mà không biết về người gửi (Publisher or Sender).

Một số Message Bus được dùng hiện nay:

  • Commercial
    • IBM Integration Bus
    • IBM WebSphere ESB
    • InterSystems Ensemble
    • Information_Builders iWay Service Manager
    • Microsoft Azure Service Bus
    • Microsoft BizTalk Server
    • Mule ESB
    • Oracle Enterprise Service Bus
    • Progress Software Sonic ESB (acquired by Trilogy)
    • SAP Process Integration
    • TIBCO Software ActiveMatrix BusinessWorks
    • webMethods enterprise service bus (acquired by Software AG)
    • Sonic ESB from Aurea
  • Open source
    • Apache Camel
    • Apache ServiceMix
    • Apache Synapse
    • Fuse ESB from Red Hat
    • JBoss ESB
    • NetKernel
    • Open ESB
    • Petals ESB
    • Spring Integration
    • UltraESB
    • WSO2 ESB

Architectural scenarios

Nếu API A truyền thông tin cập nhật trạng thái cho API B thông qua một Bus.

Sau đó, API C cũng có thể hưởng lợi từ những cập nhật này. Ứng dụng C có thể được cấu hình để listen Bus và thực hiện hành động dựa trên các cập nhật này mà không cần bất kỳ yêu cầu cập nhật nào từ API A.

Không giống như Message queue, API gửi message vào queue cho tất cả các API nhận, Message bus sử dụng mô hình Publisher / Subscribers.

Message được API gửi publish lên Bus thì bất kỳ API nhận nào đã subscribe loại tin nhắn nào thì sẽ nhận được message tương ứng.

Cách tiếp cận này cho phép các API tuân theo nguyên tắc Open/Closed, vì chúng trở nên mở đối với các thay đổi trong tương lai trong khi vẫn đóng để sửa đổi bổ sung.

Bài viết gốc được đăng tải tại lcdung.top

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev