Messaging and Event Streaming Patterns
Ý chính
Messaging không phải một pattern duy nhất. Queue, pub-sub và event stream có mô hình delivery, replay, ordering và scaling khác nhau. Chọn sai pattern dễ dẫn tới backlog, mất message, duplicate side effect hoặc không thể rebuild state.
So sánh nhanh
| Pattern | Mental model | Điểm mạnh | Cẩn thận |
|---|---|---|---|
| Message Queue | Một việc cho một worker | Background job, smoothing spike | Poison message, retry, queue depth |
| Publish-Subscribe | Một event cho nhiều subscriber | Fan-out, notification, realtime update | Subscriber lag, delivery guarantee |
| Event Stream | Lịch sử event append-only | Replay, CDC, analytics, read model | Partitioning, retention, consumer lag |
Tool map
- RabbitMQ: queue-first, routing/ack/delay mạnh, hợp worker queue và transactional tasks.
- Apache Kafka: log-first, partitioned event stream, hợp high-throughput analytics, telemetry, CDC và replay-heavy systems.
- Apache Pulsar: hybrid queue/stream, tiered storage, geo-replication, multi-tenancy.
Câu hỏi chọn hệ
- Message có cần replay/backfill không?
- Ordering cần theo key, theo queue hay toàn cục?
- Consumer lag thì muốn buffer, drop hay backpressure?
- Side effect có idempotent không?
- Retention dài hay chỉ cần deliver xong là xóa?
- Workload là task queue, pub-sub notification hay event-streaming backbone?