Rowlog – Hệ Thống Message Queue Trên HBase

Chào mọi người, Bee đây! Hôm nay, mình sẽ giới thiệu đến các bạn một hệ thống message queue (MQ) độc đáo – Rowlog, được xây dựng trên HBase. Nếu bạn đã từng làm việc với RabbitMQ, Kafka hoặc ActiveMQ, bạn sẽ biết rằng các hệ thống MQ giúp đảm bảo luồng dữ liệu xử lý phi đồng bộ một cách hiệu quả.

Vậy tại sao lại cần một MQ ngay trên HBase? Và tại sao nhóm phát triển lại không sử dụng các giải pháp MQ truyền thống? Hãy cùng mình tìm hiểu nhé!


1. Tại sao cần một hệ thống MQ trên HBase?

Trong dự án Lily Content Repository, mỗi khi một record được tạo, cập nhật hoặc xóa, chúng ta cần cập nhật một chỉ mục SOLR để phản ánh thay đổi. Điều này đòi hỏi một message queue để truyền dữ liệu từ HBase đến SOLR Indexer.

MQ trong hệ thống này cần đáp ứng một số yêu cầu quan trọng:

  • Thông điệp cần được xử lý theo đúng thứ tự – Mỗi bản ghi trong hệ thống Lily có thể có nhiều thay đổi, nhưng SOLR cần nhận đúng thứ tự cập nhật.
  • Không có hai thông điệp cùng một record được xử lý đồng thời – Tránh tình trạng ghi đè thông tin trong quá trình cập nhật.
  • Không mất mát thông điệp – Mỗi thay đổi trên record phải được đảm bảo đến đích.
  • Hỗ trợ xử lý phi đồng bộ – Tăng hiệu suất tổng thể của hệ thống.

Thay vì sử dụng một giải pháp MQ bên ngoài, nhóm phát triển quyết định tích hợp MQ trực tiếp vào HBase, từ đó ra đời Rowlog.


2. Tại sao không dùng RabbitMQ hoặc ActiveMQ?

Có rất nhiều hệ thống MQ mạnh mẽ như RabbitMQ, ActiveMQ, Kafka, nhưng vì sao nhóm phát triển lại chọn xây dựng một MQ riêng trên HBase?

Lý do chính là để giảm thiểu sự phức tạp của hệ thống. Việc sử dụng thêm một công nghệ mới đồng nghĩa với việc phải quản lý thêm:

  • Cấu hình, triển khai, bảo trì hệ thống MQ.
  • Đồng bộ hóa dữ liệu giữa HBase và MQ.
  • Đảm bảo khả năng mở rộng giữa hai hệ thống khác nhau.

Bằng cách xây dựng Rowlog trực tiếp trên HBase, nhóm phát triển có thể đảm bảo sự đồng nhất trong kiến trúc hệ thống, tận dụng các tính năng sẵn có như phân mảnh dữ liệu (partitioning), phục hồi lỗi (failover) và sao chép dữ liệu (replication).


3. Rowlog – Giải pháp MQ trên HBase

3.1. Cách hoạt động của Rowlog

Rowlog hoạt động như một hệ thống MQ, nơi mỗi sự kiện trên HBase row tạo ra một thông điệp (message) được gửi đến các thành phần quan tâm (subscribers).

Cấu trúc hoạt động như sau:

  1. Mỗi client cần đăng ký subscription để nhận thông điệp.
  2. Mỗi thông điệp chứa 3 thành phần chính:
    • Subscription ID – Xác định subscriber nào sẽ xử lý message.
    • Timestamp – Thời điểm sự kiện xảy ra, đảm bảo thứ tự xử lý chính xác.
    • Rowkey – Chỉ định dòng dữ liệu HBase liên quan.
  3. Processor sẽ quét và xử lý các thông điệp theo thứ tự timestamp.

Điều này đảm bảo rằng các thay đổi của cùng một record luôn được xử lý tuần tự, đồng thời hỗ trợ quá trình xử lý phi đồng bộ.


4. Row-local Queue – Giải pháp tối ưu lưu trữ thông điệp

Bên cạnh việc lưu trữ message trong message queue table, Rowlog còn có một cơ chế tối ưu hơn: Row-local Queue.

4.1. Row-local Queue là gì?

  • Đây là một hàng đợi (queue) được lưu trữ ngay trên dòng dữ liệu tương ứng trong HBase.
  • Thông điệp được lưu trữ cùng với dữ liệu, nhưng trong một column family riêng biệt.

4.2. Lợi ích của Row-local Queue

Ghi dữ liệu và tạo message trong cùng một giao dịch atomic – Loại bỏ nhu cầu sử dụng transactions phức tạp.

Truy xuất tất cả thông điệp của một row nhanh chóng – Không bị lẫn với thông điệp của các row khác.

Khả năng phục hồi khi mất dữ liệu – Nếu message queue table bị lỗi, có thể khôi phục dữ liệu từ row-local queue.

Row-local Queue giúp Rowlog trở nên gọn nhẹ hơn so với các hệ thống MQ truyền thống, đồng thời tận dụng tốt sức mạnh của HBase.


5. Viết trước (Write-Ahead Log – WAL) và Rowlog

Ngoài việc hoạt động như một MQ, Rowlog còn đảm nhận vai trò của một Write-Ahead Log (WAL).

5.1. Vì sao cần WAL?

WAL giúp đảm bảo rằng các hành động thứ cấp (secondary actions) được thực thi sau khi cập nhật dữ liệu.

5.2. Yêu cầu của WAL trong hệ thống

  • Không mất dữ liệu – Đảm bảo hành động thứ cấp luôn được thực thi.
  • Hỗ trợ tiếp tục xử lý sau khi hệ thống gặp lỗi.
  • Thực thi các hành động theo đúng thứ tự.

Rowlog kết hợp hai nhiệm vụ này lại, giúp hệ thống trở nên tinh gọn và hiệu quả hơn.


6. Rowlog – Kết hợp giữa MQ và WAL

Ban đầu, Rowlog chỉ được thiết kế như một MQ, nhưng khi tích hợp WAL, nó trở thành một giải pháp mạnh mẽ để xử lý cả message queue lẫn write-ahead log.

Lợi ích chính:

  • Giảm tải việc xử lý message queue và WAL thành một mô-đun duy nhất.
  • Tận dụng tối đa khả năng mở rộng của HBase.
  • Đảm bảo tính tin cậy cao trong việc xử lý dữ liệu và sự kiện.

Rowlog là một giải pháp MQ linh hoạt trên HBase, giúp xử lý sự kiện một cách đồng nhất, tin cậy và hiệu quả mà không cần phụ thuộc vào các hệ thống MQ bên ngoài.

Nếu bạn đang thiết kế một hệ thống phân tán lớn, hãy cân nhắc:

Tận dụng các công nghệ sẵn có trong hệ thống để giảm độ phức tạp.

Lựa chọn thiết kế giúp giảm thiểu downtime và tăng khả năng mở rộng.

Luôn đảm bảo dữ liệu không bị mất mát và được xử lý theo đúng thứ tự.

Cảm ơn bạn đã đọc blog của Bee! Nếu bạn có câu hỏi gì, hãy để lại bình luận nhé! 🚀