Bỏ qua

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)