0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Hiểu rõ về Event Sourcing: Cách tiếp cận mới trong lưu trữ sự kiện

Đăng vào 3 tuần trước

• 3 phút đọc

Hiểu rõ về Event Sourcing

Bài viết này dựa trên nguồn tài liệu từ Event Store và sẽ giúp bạn nắm bắt khái niệm Event Sourcing một cách đơn giản và dễ hiểu nhất.

Event Sourcing là gì?

Event Sourcing là một mẫu thiết kế (design pattern) cho phép theo dõi và lưu trữ mọi thay đổi trong một miền (domain) dưới dạng sự kiện (event) trong một log chỉ thêm (append-only log). Thay vì chỉ quan tâm đến trạng thái hiện tại, Event Sourcing cho phép bạn theo dõi toàn bộ quá trình để đạt được trạng thái đó.

Ví dụ: Khi một người dùng cập nhật thông tin sản phẩm, họ có thể thay đổi số lượng sản phẩm từ 10 xuống 5 và sau đó thêm 2 sản phẩm mới. Kết quả cuối cùng là số lượng sản phẩm là 7. Tuy nhiên, với Event Sourcing, bạn không chỉ thấy số lượng cuối cùng, mà còn được theo dõi các bước đã thực hiện để đạt được con số đó.

Sự kiện (Event) là gì?

Sự kiện (Event) là bất kỳ thay đổi nào xảy ra đối với một thực thể. Ví dụ: Sự kiện khi cập nhật đơn hàng (Update Order), xóa đơn hàng (Delete Order)...

Luồng sự kiện (Event Stream) là gì?

Luồng sự kiện (Event Stream) là tập hợp các sự kiện theo một trình tự nhất định. Mỗi sự kiện trong luồng đó được sắp xếp theo thứ tự thời gian mà chúng xảy ra. Điều này giúp dễ dàng theo dõi và quản lý các thay đổi trong hệ thống.

Projection, Mô hình Đọc/Ghi là gì?

Trong Event Sourcing, Projection (còn gọi là View Models hoặc Query Models) cung cấp cái nhìn về mô hình dữ liệu dựa trên sự kiện. Chúng chuyển đổi từ mô hình ghi nguồn (write model) sang mô hình đọc (read model). Projection có thể được sử dụng cả trong mô hình đọc và mô hình ghi.

Projections trong Mô hình Đọc

Trong Event Sourcing, Projection trong READ là quá trình chuyển đổi dữ liệu từ một luồng sự kiện sang một luồng sự kiện khác. Khi sự kiện diễn ra trong Stream A (như đặt hàng, thêm sản phẩm, xóa sản phẩm và tính tổng giá cả), một Projection sẽ được tạo ra để thu thập thông tin tổng kết giá cả. Dữ liệu này sau đó được chuyển đến Stream B, nơi nó có thể được sử dụng để phát hành hóa đơn và theo dõi thanh toán. Điều này tạo ra sự tách biệt giữa logic ghi và logic đọc, đồng thời giúp dễ dàng truy cập vào các mô hình đọc.

Projections trong Mô hình Ghi

Projection trong WRITE giúp tái tạo trạng thái hiện tại của hệ thống từ các sự kiện đã xảy ra. Khi có các sự kiện như đặt hàng, thêm sản phẩm hoặc xóa sản phẩm, trạng thái của đơn hàng được cập nhật.

Ví dụ: Khi một đơn hàng được đặt, thông tin về đơn hàng, nhà cung cấp và các sản phẩm trong đơn hàng sẽ được ghi nhận. Khi sản phẩm được thêm vào hoặc xóa đi, danh sách sản phẩm cũng sẽ được cập nhật. Quá trình này giúp duy trì trạng thái chính xác và hiện tại của hệ thống, cũng như đảm bảo rằng mọi lệnh thực hiện (như thanh toán) đều dựa trên trạng thái chính xác.

Subscriptions (Listener)

Vậy làm thế nào để xây dựng Projection Models? Chúng ta cần một Subscription, đóng vai trò như một listener để lắng nghe các luồng sự kiện. Projectors sẽ lấy các sự kiện từ luồng sự kiện đó, xử lý logic và cập nhật mô hình đọc.

Làm thế nào để lắng nghe những sự kiện đó khi chúng xảy ra? Chúng ta tạo Publisher và gửi chúng đến Event Store, có thể sử dụng RabbitMQ, Apache Kafka,... Các dịch vụ khác sẽ nhận các sự kiện qua các trigger từ event.

Cảm ơn bạn đã dành thời gian đọc bài viết này! Hy vọng bạn đã hiểu rõ hơn về Event Sourcing và những lợi ích mà nó mang lại.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào