- vừa được xem lúc

Giải thích về Event Sourcing.

0 0 3

Người đăng: Nguyễn Thành

Theo Viblo Asia

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 😉

Bình luận

Bài viết tương tự

- vừa được xem lúc

Một Vài điều suy nghĩ về API GateWay

Trong bất kì một hệ thống sử dụng mô hình microservice nào đều có 1 cánh cổng thần kì =)). Đó là API GATEWAY.

0 0 42

- vừa được xem lúc

Microservice 001: Monolithic và sự hình thành của Microservice

Bài viết nằm trong series Microservice: What, when and how. Thời còn sinh viên, chúng ta đã quen thuộc với việc phát triển sản phẩm với mô hình Monolithic, nói nôm na là toàn bộ code được đóng gói và

0 0 80

- vừa được xem lúc

Keycloak Secure any application

In life, there are many problems posed to the software industry . But most of the software that we create has a security and decentralization mechanism and user management.

0 0 39

- vừa được xem lúc

Tìm hiểu về Service Mesh (phần tiếp theo)

Sau bài viết trước Tìm hiểu về Service Mesh là những khái niệm tổng quan về Service Mesh, Istio. Trong bài viết này, chúng ta sẽ tiếp tục tìm hiểu về Istio và thử triển khai Istio lên nhé .

0 0 207

- vừa được xem lúc

Viết ứng dụng Microservice với Golang

Cách xây dựng ứng dụng Microservice với Golang

0 0 96

- vừa được xem lúc

[MSDP] - CQRS Pattern

Trong bài viết này chúng ta sẽ cùng thảo luận về design pattern CQRS, đây là một Microservice Design Pattern để chia việc đọc và ghi dữ liệu trong ứng dụng một cách độc lập và lược đồ hóa dữ liệu một

0 0 38