Tárold a feladatokat egy idő-vödrös / prioritási queue-ban esedékességi idő szerint kulcsolva, csak a most esedékes feladatokat pollozd, és add át őket idempotens workereknek at-least-once kézbesítéssel. Soha ne szkennelj 10M sort minden tickben — indexelj indítási idő szerint, hogy minden poll csak azt érintse, ami esedékes.
Architektúra
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
