Microservices đang là xu thế hướng đến của các system design trong thời gian gần đây, với nhiều ưu điểm trong quá trình triển khai và khả năng giảm downtime cho các hệ thống lớn. Bạn có biết không, Netflix thực hiện trung bình 7 lần triển khai sản phẩm mỗi ngày mà không để lại ảnh hưởng đến người dùng. Một thành phần quan trọng trong mô hình này là các message broker, đóng vai trò người chuyển giao các bức thư trong thời gian thực giữa các module. Trong bài viết này, Stringee sẽ cùng các bạn tìm hiểu về RabbitMQ và cùng so sánh nó với một pub/sub system rất nổi tiếng khác là Kafka nhé.

1. RabbitMQ là gì?

RabbitMQ là một AMQP message broker hay còn gọi là phần mềm quản lý hàng đợi message. Nói đơn giản, đây là phần mềm định nghĩa hàng đợi một ứng dụng khác có thể kết nối đến để bỏ message vào và gửi message dựa trên nó.

 

2. Các khái niệm cơ bản

  • Producer: theo RabbitMQ, producer không làm gì ngoài việc gửi message, vậy nên tác nhân publish các tin nhắn sẽ được gọi là producer
  • Consumer: là một phần mềm đợi để nhận các tin message
  • Queue: có nhiệm vụ như một hòm thư. Qua RabbitMQ, các tin nhắn của bạn được chuyển đi hầu hết các ngóc ngách trong các chương trình của mình. Tuy nhiên, các message trước khi được gửi đi khắp mọi nơi thì nó chỉ có thể được lưu ở trong các queue (hàng đợi)
  • Exchange: mặc dù queue là nơi duy nhất được phép lưu trữ các tin nhắn, cơ chế producer trong RabbitMQ không được phép gửi tin nhắn trực tiếp đến queue. Thay vào đó, nó sẽ gửi tin nhắn đến một exchange. Exchange có thể được hiểu rất đơn giản rằng nó sẽ gồm 2 đầu: 1 đầu sẽ nhận message từ producer, đầu con lại sẽ đẩy message với (các) queue tùy thuộc vào kiểu exchange chúng ta cấu hình. Có 2 kiểu exchange là fanout, direct và topic 
  • Routing key: với exchange có dạng là topic, chúng ta có thể implement cơ chế topic bằng cách cấu hình exchange có type là direct và sử dụng một routing key để điều hướng các message được gửi tới exchange

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

RabbitMQ giúp các web server gửi các response 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ý.

Ví dụ 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 một trang tuyển dụng công nghệ, 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.

>>> Xem thêm bài viết:

4. Tính ứng dụng của RabbitMQ

  • Chuyển đổi mô hình ứng dụng từ monolith sang microservices: một trong những cách phát triển nhanh nhất trong ngành kỹ thuật số hiện nay là việc bóc tách một hệ thống monolith ra thành nhiều microservices. Giống như Netflix, chúng ta có thể bắt đầu xây dựng một hệ thống với mô hình tập trung để xây dựng một business model cụ thể và sau đó sẽ thực hiện chuyển giao dịch vụ về đúng với ý tưởng thiết kế một microservices bằng các sử dụng RabbitMQ.
  • Xử lý quét file: Softonic đang sử dụng RabbitMQ để thực hiện các nghiệp vụ của mình. Với hàng trăm triệu người dùng hàng tháng và thực hiện hơn 2 triệu lần download file mỗi ngày. Công ty này đã tin dùng RabbitMQ như một công cụ để vận chuyển các tin nhắn, xử lý các yêu cầu để tránh việc bị quá tải, mang đến cho họ danh tiếng làm một dịch vụ đình đám
  • Real-time data streaming (Truyền dữ liệu thời gian thực): Mạng quảng cáo trên thiết bị di động AdMob của Google sử dụng RabbitMQ trong dự án Rocksteady để phân tích số liệu theo thời gian thực, từ đó, phát hiện nguyên nhân gốc rễ của vấn đề rồi biến chúng thành các event gửi qua RabbitMQ tới hệ thống xử lý sự kiện Esper Complex Event Processing (CEP).
  • IoT Data Processing (Xử lý dữ liệu IoT): Internet of Things (IoT) là một hệ thống các thiết bị và đối tượng vật lý liên quan đến nhau được nhúng với các cảm biến, phần mềm và các công nghệ khác cho phép chúng trao đổi dữ liệu và tương tác với nhau qua Internet hoặc các mạng truyền thông khác.
  • Log Aggregation and Monitoring (Tổng hợp và giám sát log): Một ứng dụng chạy trên nhiều máy chủ sẽ tạo ra log. Log là bản ghi hoặc sự bắt đầu của sự kiện, hành động, giao dịch hoặc dữ liệu được tạo ra và lưu trữ có hệ thống để tham khảo, phân tích hoặc kiểm tra trong tương lai.
  • RabbitMQ có thể được sử dụng để thu thập và định tuyến log đến các công cụ tổng hợp log tập trung để phân tích. Điều này cho phép xác định nhanh chóng các vấn đề, từ đó, cải tiến hiệu suất.

5. So sánh RabbitMQ với Kafka

Tiêu chí so sánhApache KafkaRabbitMQ
Mô hình thiết kếPull-based approach: Kafka sử dụng một mô hình pull. Điều đó có nghĩa là các consumer sẽ yêu cầu một bó các message từ một offset để thực hiện consumePush-based approach: RabbitMQ sử dụng một mô hình push và dừng việc làm quá tải các consumer qua một giới hạn các message được phép consume. Việc này được sử dụng cho cơ chế gửi tin nhắn có độ trễ thấp
Sắp xếp thứ tự các messageCho phép sắp xếp các message dựa trên các partition của nó. Các message được gửi tới các topic bằng message key.Không hỗ trợ.
Thời gian tồn lại messageKafka là một nơi sử dụng cơ chế lưu log, điều này nghĩa là: mặc định nó sẽ lưu lại các tin nhắn. Bạn có thể quản điều chỉnh việc này bằng cách cấu hình các retention policyRabbitMQ là một hàng đợi, vì vậy các message sau khi được consume thành công sẽ được loại bỏ 
Đảm bảo việc gửi đi thành công messageThứ tự các message trong một partition của Kafka luôn được đảm bảo, vì vậy Kafka có thể đảm bảo rằng một bó các message được xử lý thành công hay thất bạiKhông hỗ trợ, ngay cả khi có sử dụng transaction trong một queue riêng biệt
Thứ tự ưu tiên các messageKhông hỗ trợCó thể consume các tin nhắn có độ ưu tiên cao trước

 

Kết bài

Trong tuần này, Stringee đã tóm tắt lại các thông tin cũng như cách thức hoạt động cơ bản về RabbitMQ. Tuy nhiên vẫn sẽ còn những điều khó hiểu ở đây, chúng ta sẽ đi sâu hơn để các bạn có thể thấy rõ ứng dụng của RabbitMQ trong blog sau nhé. Hy vọng bài viết sẽ giúp ích các bạn.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: