Dijkstra June 2018 | Page 12

3 . THIẾT KẾ VỀ HỆ THỐNG
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 .
3.1 . 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 đối tượng ( 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 vốn chỉ lưu trữ trạng thái cuối cùng của đối tượng .
( stream ). Các thành phần cần xử lý dữ liệu ( consumer ) chỉ cần đăng ký nhận sự kiện từ ống dữ liệu ( subscribe event bus ) là có thể nhận được các sự kiện để xử lý .
Các sự kiện được lưu trữ trong cơ sở dữ liệu mysql . Tất cả các thay đổi trong cơ sở dữ liệu đều được MySql lưu vào một log file , gọi là binlog . Bằng việc sử dụng 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 bộ phận điều phối thông điệp ( message broker ) theo mô hình lưu trữ kiểu log ( log-based ) cho phép lưu trữ và gửi đi các sự kiện với hiệu suất cao nhưng vẫn đảm bảo đú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 .
3.3 . Kiến trúc tổng thể
Khi đối tượng bị thay đổi , hệ thống sẽ tạo ra các phiên bản sự kiện ( versioned event ) để lưu trữ dữ liệu thay đổi của đối tượng . Các sự kiện ( event ) sẽ được lưu trữ bằng cách chèn thêm mới ( appending only ) vào một cấu trúc bảng gọi là kho lưu trữ sự kiện ( event store ). Việc lưu trữ thông tin dưới dạng các phiên bản sự kiện này 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 sự kiện được gửi tới các hệ thống khác , các hệ thống đó có thể tự tái hiện lại trạng thái cuối cùng chính xác của đối 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 sự kiện đã được tạo ra , có thể xây dựng phần lưu trữ riêng cho khâu đọc ( read side ), để tối ưu hóa tốc độ truy xuất dữ liệu .
3.2 . Event Bus - Kafka - MySql Binlog
Các phiên bản sự kiện ( 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 phiên bản sự kiện dưới dạng luồng
Đến đây bức tranh của hệ thống đã trở nên rõ ràng . Từng mảnh ghép từ mô hình , 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 mô hình sản phẩm ; cấu trúc theo mô hình CQRS - ES ; sử dụng MySql Binlog ; Kafka để publish các sự kiện 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 .
4 . 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ảo 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 Design , 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 được thiết kế tối ưu cho thao tác đọc như Elastic , Mongo ... là các nhân tố chính đảm bảo chất lượng của hệ thống .
12 DIJSKTRA