+4

Giải thích về Event Sourcing.

Event Sourcing là gì?

Bài viết này có tham khảo nguồn : Event Store Hôm nay mình sẽ giải thích đơn giản nhất có thể về event sourcing theo hiểu biết của mình 🫠

Event Sourcing hiểu đơn giản nó là 1 design pattern, khi 1 thay đổi nào đó xảy ra ở trên domain sẽ dc lưu lại dưới dạng event ở trong append-only log. Nó giúp chúng ta thấy dc nhiều hơn là trạng thái hiện tại của 1 thứ gì đó.

Ví dụ: Khi ở trong 1 senario là User update 1 Product, Lần đầu sẽ chỉnh product quantity là 10, sau đó Delete đi 5 product, sau đó add thêm 2. Thì cuối cùng Product sẽ là 7. Event Sourcing sẽ giúp chúng ta thấy dc không phải là trạng thái product cuối cùng là 7 mà thấy dc quá trình nó diễn ra để nó có thể được 7.

Event là gì?

Event là khi 1 thứ gì đó thay đổi nó sẽ được gọi là 1 event. Ví Dụ: Event khi Update Order, Delete Order,...

Event Stream là gì?

Event Stream là 1 group các event, theo 1 trình tự cụ thể của các event. image.png Như mấy bạn có thể thấy đây là 1 event stream, các event được sắp sếp theo vị trí nhất định.

Projection Read/Write Models là gì?

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

Projections trong the Read Model

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

Projections in the Write Model

Trong Event Sourcing, Projections 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 sự kiện như đặt hàng, thêm sản phẩm, và gỡ sản phẩm diễn ra, trạng thái của đơn hàng được cập nhật lần lượt.

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

Subscriptions(Listener)

Vậy làm sao để build Projection Models như ở trên? Mình sẽ cần tới Subscription, Subscription sẽ như là 1 listener lắng nghe các event stream image.png Projectors sẽ lấy các event stream đó, xử lí LOGIC và update read models

Tiếp đến làm sao có thể lắng nghe dc event đó khi nó xảy ra? Tạo Publisher xong send nó cho event store thôi bro, có thể là RabbitMQ, Apache Kafka,... Và các service khác sẽ nhận event đó thông qua event trigger. image.png

Cám ơn đã đọc hết bài viết của mình 😉


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.