Skip to content
Go back

[Series tự học] EVENT-DRIVEN Architecture

Published:  at  09:22 PM

Table of contents

Open Table of contents

Giới thiệu

Event-driven architecture (EDA) là mẫu kiến trúc phần mềm (architecture software pattern) về cơ bản hệ thống được xây dựng xung quanh các thao tác như tạo, khám phá, tiêu thụ và đáp trả lại các sự kiện (event).

Hiểu đơn giản hơn, EDA là một dạng kiến trúc phần mềm được xây dựng trên luồng các event, sử dụng event như là phương tiện giao tiếp giữa các thành phần hệ thống.

Một ví dụ đơn giản của EDA

What / When / Why

Cũng giống như class, component cũng được thiết kế với tính low couplinghigh cohesion.

Khi các component cần phải cộng tác, giả sử một Component A cần kích hoạt một số logic trong Component B; cách tự nhiên để làm điều đó chỉ đơn giản là A sẽ gọi một method trong một object của B.

Tuy nhiên, nếu A biết về sự tồn tại của B, chúng đang tigh coupling với nhau, A phụ thuộc vào B, làm cho hệ thống khó khăn hơn để thay đổi và duy trì.

Do đó, Event Driven có thể được sử dụng ngăn chặn tình trạng “dính chặt” vào nhau giữa các components.

Có 3 trường hợp nên dùng Event Driven

Để tách các thành phần

Điều này có nghĩa là cả AB sẽ tùy thuộc vào eventevent dispatcher, chúng không hề biết và phụ thuộc lẫn nhau nhau (decoupled).

Ví dụ, việc order hàng trên webshop phải được thực hiện đồng bộ, còn việc gửi email đến user sẽ được thực hiện bất đồng bộ. Trong những trường hợp này, cần phải kích hoạt một event, đưa nó vào hàng đợi và sẽ ngồi trong hàng đợi cho đến khi một worker có thể thực hiện nó (khi có tài nguyên).

Để lưu vết các thay đổi

PATTERNS

Martin Fowler định nghĩa ra 3 loại event patterns:

Tất cả pattern này đề có chung key concept:

Event Notification

Ưu điểm

Event-Carried State Transfer

Ưu điểm

Nhược điểm

Event Sourcing

Theo cách lưu trữ trạng thái truyền thống, các entity chỉ được lưu trong DB dưới dạng các row trong 1 table, và nó chỉ phản ảnh trạng thái sau cùng của entity đó.

Transaction Log

Deletions

Snapshots

Projections

Ưu điểm

Message Broker là gì?

Là ứng dụng của Event Driven pattern.

Một module trung gian trung chuyển message từ người gửi đến người nhận; làm trung gian giữa các ứng dụng với nhau, tối giản hóa giao tiếp giữa các ứng dụng đó và để tăng hiệu quả tối đa cho việc tách ra các khối nhỏ hơn.

Phân loại giữa các hệ thống Message Queue

Message BaseData Pipeline
RabitMQKafka
ActiveMQKinesis
SQSRocketMQ
ZeroMQ
MSMQ
IronMQ
Redis Pub/sub

So sánh cách hoạt động của 2 loại

Message BaseData Pipeline
Lưu trạng thái của các consumer nhằm đảm bảo tất cả các consumer đều nhận được message từ topic mà đã subscribeKhông lưu trạng thái của consumer.
Sau khi tất cả các consumer nhận được message thì message đó sẽ bị xoáMessage được xoá sau một khoảng thời gian nhất định
Khi có một message mới, consumer chỉ có thể lấy được duy nhất một message đóKhi có message mới, consumer có thể tuỳ ý lựa chọn lấy về một danh sách các message

Reference

https://edwardthienhoang.wordpress.com/2018/08/20/event-driven-architecture


Suggest Changes

Previous Post
[Series tự học] CIRCUIT BREAKER là gì?
Next Post
[Series tự học] Định nghĩa về Cloud Native App