Yêu cầu: lên lịch job (cron / one-off), thực thi phân tán, không mất job, không chạy trùng, tự thử lại khi lỗi.
Thành phần chính:
- Scheduler: quét lịch, đẩy task đến hạn vào queue (Kafka / RabbitMQ / SQS).
- Worker pool: nhiều worker cùng consume, scale ngang; ack sau khi hoàn tất.
- Delivery semantics: at-least-once (mặc định của queue) → task phải idempotent để chạy lại an toàn; visibility timeout + retry có backoff, dead-letter queue cho job hỏng.
- Chống trùng scheduler: chỉ một scheduler active tại một thời điểm qua leader election (Raft / ZooKeeper / lock có TTL); các node khác standby.
- State store: DB lưu định nghĩa job, lịch, lịch sử chạy; DAG cho task phụ thuộc nhau (kiểu Airflow).
Đánh đổi / bottleneck: exactly-once rất khó → chọn at-least-once + idempotency thay vì cố ép exactly-once; single leader dễ thành nghẽn khi số job cực lớn → shard không gian job theo key.