შეინახეთ task-ები time-bucketed / priority queue-ში, დაინდექსებული due დროით, გამოკითხეთ მხოლოდ ის task-ები, რომლებიც ახლა არის due, და მიაწოდეთ ისინი idempotent worker-ებს at-least-once მიწოდებით. არასდროს დაასკანიროთ 10M მწკრივი ყოველ tick-ზე — დაინდექსეთ fire დროით, რომ ყოველი გამოკითხვა მხოლოდ due-ს ეხებოდეს.
არქიტექტურა
API ─▶ Task store (DB/Redis ZSET, score = due_ts) ── 10M tasks, sharded
│
Poller (leader per partition) ── ZPOPMIN due<=now ──▶ Ready queue (Kafka)
│ leader election (etcd/ZK) │
▼ ▼
other pollers idle/standby Worker pool (idempotent)
└─ ack ✔ / retry ✖ ─▶ DLQ
