EDA dựa trên nguyên lý phát hiện và phản hồi các event. Một event có thể là bất cứ điều gì xảy ra trong hệ thống, chẳng hạn như người dùng nhấp chuột, một gói tin đến từ mạng, hoặc một thay đổi trạng thái trong cơ sở dữ liệu. Các thành phần chính của EDA bao gồm:
- Event Producers: Các thành phần phát sinh event.
Đây là các đối tượng hoặc thành phần trong hệ thống phát sinh ra các event. Ví dụ, một nút bấm trong giao diện người dùng có thể phát sinh event khi người dùng nhấn vào nó.
- Event Consumers: Các thành phần lắng nghe và xử lý event.
Đây là các đối tượng hoặc thành phần lắng nghe các event và thực hiện hành động tương ứng khi event xảy ra. Ví dụ, khi một nút bấm được nhấn, listener có thể thực hiện một hàm xử lý để cập nhật giao diện người dùng.
- Event Channels: Các kênh truyền event giữa producers và consumers.
Event Channels là trung gian truyền tải event từ producers đến consumers. Nó có thể là một cơ chế đơn giản như một hàm callback hoặc phức tạp hơn như một hệ thống hàng đợi thông điệp.
Các Mô Hình Event-Driven
EDA có thể sử dụng hai mô hình chính: mô hình publish/subscribe và mô hình event stream.
Pub/sub
Một event được đăng ký bởi nhiều Event Consumers. Khi một event được publish, nó gửi event đến từng Event Consumers. Sau khi một event được nhận, nó không thể được publish lại và những Event Consumers mới sẽ không thấy event đó.
Examples: Google Cloud Pub/Sub, AWS SNS.
Event Stream
Các event được ghi vào log. Các event được sắp xếp theo thứ tự nhất định. Clients không đăng ký vào Event Channels, thay vào đó, một client có thể đọc từ bất kỳ phần nào của channels. Client có trách nhiệm thay đổi vị trí đọc event trong channels. Điều đó có nghĩa là một client có thể tham gia bất cứ lúc nào và có thể phát lại các event.
Examples: Apache Kafka, Amazon Kinesis.
Ưu điểm
- Tính Linh Hoạt: Hệ thống EDA cung cấp một kết nối lỏng lẻo giữa các thành phần hệ thống. Các thành phần có thể được thay đổi hoặc mở rộng mà không ảnh hưởng đến toàn bộ hệ thống.
- Khả Năng Mở Rộng: Hệ thống EDA dễ dàng mở rộng bằng cách thêm mới các Event Producers hoặc Event Consumers mà không cần thay đổi kiến trúc hiện tại.
Nhược điểm
- Xử Lý Đồng Bộ: Việc đồng bộ hóa các event và xử lý chúng theo thứ tự đúng có thể là một thách thức lớn, đặc biệt trong các hệ thống phân tán.
- Debug phức tạp: Hệ thống EDA có thể phức tạp do tính không đồng bộ và các liên kết lỏng giữa các thành phần
- Quản Lý Trạng Thái: Trong EDA đòi hỏi các kỹ thuật đặc biệt để đảm bảo rằng hệ thống luôn trong trạng thái nhất quán. Ví dụ như Event Sourcing, CQRS…