RabbitMQ là gì?

Trong kiến trúc cloud (hay microservices), các ứng dụng được chia thành những khối độc lập nhỏ hơn để có thể dễ dàng develop, deploy và maintain. Hãy thử tưởng tượng bạn có một kiến trúc cloud có nhiều service và nhiều request mỗi giây, bạn phải đảm bảo rằng không có bất cứ một request nào bị mất và web service của bạn luôn luôn sẵn sàng tiếp nhận request mới thay vì locked bởi đang xử lí request trước đó cũng như phải đảm bảo rằng các service giao tiếp với nhau một cách trơn tru và hiệu quả.

Vậy bạn làm thế nào? Câu trả lời đó chính là Message Broker!

Message Broker là gì?

Là module trung gian trung chuyển message từ người gửi đến người nhận. Nó là một mô hình kiến trúc (architentural pattern) để kiểm tra, trung chuyển và điều hướng message; làm trung gian giữa các ứng dụng với nhau, tối giản hóa giao tiếp giữa các ứng dụng đó và để tăng hiệu quả tối đa cho việc tách ra các khối nhỏ hơn.

Nhiệm vụ chính của một Message broker là tiếp nhận những message từ các ứng dụng và thực hiện một thao tác nào đó.

Có 2 hình thức giao tiếp cơ bản với một Message Broker:

  • Publish và Subscribe (Topics)
  • Point-to-Point (Queues)

Hiện tại có rất nhiều các message broker software có thể kể đến như: Amazon Web Services (AWS) Simple Queue Service (SQS)Apache KafkaApache ActiveMQ. Nhưng phổ biến nhất trong số những cái tên kể trên đó là RabbitMQ. Trong đo Rabbit Queue hoạt động theo hình thức Pub/Sub (Topics).

RabbitMQ là gì?

RabbitMQ là một Message broker open-source, ban đầu được dùng cho Advanced Message Queuing Protocol (AMQP), sau đó đã được phát triển để hỗ trợ Streaming Text Oriented Messaging Protocol (STOMP)Message Queuing Telemetry Transport (MQTT), và những giao thức khác. Tuy nhiên, trong bài viết này thì mình sẽ không đi sâu vào các protocol nói trên. RabbitMQ được viết bằng Erlang, một ngôn ngữ không phổ biến nhưng khá phù hợp với các công việc của Message Broker.

Khi nào và tại sao dùng RabbitMQ

RabbitMQ được ứng dụng do cách sử dụng khá đơn giản.

RabbitMQ giúp các web server gửi các reponse cho các request rất nhanh thay vì bị ép buộc chạy một procedure ngốn tài nguyên trên một hệ thống. Việc đưa message vào hàng đợi là một giải pháp hay khi ta muốn phân tán message cho nhiều người nhận giúp giảm tải cho các worker xử lý.

VD như user được phép tạo file PDF cho mẫu cv it từ phần mềm tạo CV Online của TopDev, bài toán là khi hàng nghìn user cùng nhấp vào nút tạo PDF, lúc này server nhận rất nhiều request sẽ gây ra vài vấn đề như chậm, quá tải, thậm chí không tạo được file PDF do nghẽn…lúc này chúng ta cần dùng RabbitMQ để đẩy các request này vào hàng chờ. Cơ chế như sau:

Một consumer lấy message từ hàng đợi và bắt đầu xử lý PDF trong lúc với một producer đang bỏ thêm những message mới vào trong hàng đợi. Một request có thể được tạo bằng ngôn ngữ này và xử lý bằng một ngôn ngữ khác. Hai ứng dụng trao đổi với nhau qua các message. Do đó, hai ứng dụng gửi và nhận sẽ có độ ràng buộc thấp.

Kết nối RabbitMQ

  1. User gửi yêu cầu tạo PDF lên ứng dụng web
  2. Ứng dụng web (producer) gửi message đến RabbitMQ, có chứa thông tin dữ liệu mà user yêu cầu, như tên, email, số điện thoại…
  3. Một exchange được đồng ý từ ứng dụng producer và dẫn chúng đến đúng hàng đợi tạo PDF
  4. Một worker xử lý PDF (consumer) nhận một task và bắt đầu xử lý tạo PDF.

Tham khảo

https://viblo.asia/p/message-broker-la-gi-so-luoc-ve-rabbitmq-va-ung-dung-demo-djeZ1PVJKWz

Leave a Reply

Your email address will not be published. Required fields are marked *