ADR-009: Redis cho Cache và Job Queue Đơn Giản¶
Trạng thái¶
Accepted
Ngày¶
2026-04-08
Người quyết định¶
Tech Lead
Architecture Drivers¶
D4 (Đơn giản vận hành), D8 (Tiết kiệm chi phí)
Bối cảnh¶
Hệ thống cần caching (lookup data, session tokens) và xử lý background job (matching batch). Câu hỏi là dùng thành phần riêng biệt (Redis + RabbitMQ) hay gộp lại.
Các Phương Án Xem Xét¶
Phương án A: Redis cho cả cache và job queue¶
- Ưu điểm: Một thành phần phục vụ hai mục đích; Redis Queue/Stream đủ cho job pattern đơn giản; ít hạ tầng cần quản lý
- Nhược điểm: Không có tính năng queue nâng cao (routing, DLQ, priority queues); job persistence kém robust hơn MQ chuyên dụng
Phương án B: Redis (cache) + RabbitMQ (queue)¶
- Ưu điểm: RabbitMQ có tính năng queue mạnh mẽ, DLQ, routing; đã chứng minh cho async processing
- Nhược điểm: Thêm thành phần cần vận hành; overkill cho matching jobs đơn giản; phức tạp hơn cho đội 2 người
Quyết Định¶
Sử dụng Phương án A: Redis cho cả cache và job queue. Matching jobs đơn giản (xử lý session, scoring fields). Redis Queue hoặc Redis Streams đủ tin cậy cho use case này.
Ngưỡng chuyển đổi: Nếu queue pattern trở nên phức tạp (priority queues, topic routing, DLQ cần thiết) → thêm RabbitMQ.
Hệ Quả¶
Tích cực¶
- Ít hơn một thành phần cần vận hành
- Redis đã cần cho caching
Tiêu cực¶
- Job processing kém robust hơn MQ chuyên dụng
- Phải implement retry/DLQ logic trong application code
Liên Quan¶
- ADR-002 (Modular Monolith — tối thiểu hạ tầng)
- ADR-007 (Docker Compose — ít container hơn là tốt hơn)