Mô hình CQRS-ES

Một trong các đòi hỏi lớn của việc quản lý danh mục sản phẩm là phải thiết kế để đáp ứng các nhu cầu về hiệu năng và tích hợp với các hệ thống khác. Để đáp ứng các yêu cầu tốt, thì phải được thiết kế từ tổng thể ngay từ đầu. Có vậy mới tạo ra sự phát triển liền mạch, nhất quán giúp đảm bảo tính ổn định, cũng như tiến độ làm việc.

Mô hình CQRS — ES.

Mô hình Event Sourcing — ES, là mô hình thiết kế mà trạng thái của object sẽ được lưu trữ dưới dạng chuỗi các sự kiện thay đổi. Nó khác với mô hình thiết kế thông thường, khi mà chỉ lưu trữ trạng thái cuối cùng của object.

Khi object bị thay đổi, sẽ tương ứng với một versioned event lưu trữ dữ liệu thay đổi của object. Các event sẽ được lưu trữ dạng appending only vào một cấu trúc table gọi là event store. Việc lưu trữ các event thay đổi này giúp mang lại các lợi ích:

– Lưu trữ được lịch sử thay đổi của các đối tượng.
– Nếu các event được gửi tới các hệ thống khác, các hệ thống đó có thể sinh ra trạng thái cuối cùng chính xác của đốc tượng gốc. Do đó dễ dàng tích hợp với các hệ thống khác.

Dựa trên các event được published đi có thể xây dựng phần lưu trữ riêng cho read side, để tối ưu cho tốc độ truy xuất dữ liệu.

Event Bus — Kafka — MySql Binlog.

Các versioned event của đối tượng nếu được gửi đi sẽ giúp hệ thống dễ dàng tích hợp với nhiều hệ thống khác. Event Bus là tên gọi logic của một đường truyền chứa tất cả các versioned event dưới dạng stream. Các consumer chỉ việc subscribe event bus là có thể nhận được các event để xử lý.
Các event được lưu trữ trong mysql database. Tất cả các thay đổi trong database đều được MySql lưu vào một log file, gọi là binlog. Bằng việc extra binlog của mysql, thì hệ thống có thể bắt được mọi event phát sinh để gửi đi.
Kafka là một message broker theo mô hình log based, cho phép lưu trữ và gửi đi các event đúng với thứ tự gửi vào. Vì vậy nó là lựa chọn tốt nhất để làm tầng lưu trữ cho event bus.

Kiến trúc tổng thể.

Đên đây bức tranh của hệ thống đã trở nên rõ ràng. Từng mảnh ghép từ model, nghiệp vụ tới tích hợp đã đầy đủ. Có thể tóm tắt lại:
– Hệ thống sẽ xây dựng nghiệp vụ quanh model product;
– Cấu trúc theo mô hình CQRS — ES;
– Sử dụng MySql Binlog, Kafka để publish các event thay đổi một cách ổn định;
– Dựa trên event bus sẽ xây dựng các cấu trúc lữu trữ có tốc độ truy xuất cao như Elastic, MongoDb, cũng như tích hợp với các hệ thống khác.

Kết luận

Thiết kế hệ thống quản lý danh mục sản phẩm trong ecommerce đòi hỏi phải đạt được cùng lúc nhiều mục tiêu, với một tầm nhìn xuyên suốt và nhất quán. Từ mức ứng dụng cho tới mức hệ thống đều phải có sự gắn kết liền mạch. Tất cả hướng tới hai mục tiêu quan trọng phải đạt được:

– Xử lý được các nghiệp vụ phức tạp
– Đảm bộ hiệu năng và độ ổn định của hệ thống.

Phương pháp phân tích thiết kế Domain Driven Desing, mô hình CQRS — ES, cơ chế replicate ổn định của MySql, sự đảm bảo thứ tự message của Kafka, cũng như các database tối ưu cho read như Elastic, Mongo… là các nhân tố chính đảm bảo chất lượng của hệ thống.

 

Bài viết được tham khảo từ engineering.tiki.vn