Ukládejte úlohy do time-bucketed / prioritní fronty klíčované časem splatnosti, pollujte jen úlohy splatné teď a předávejte je idempotentním workerům s doručením at-least-once. Nikdy neskenujte 10 milionů řádků při každém ticku — indexujte podle času vypálení, aby každý poll sáhl jen na to, co je splatné.
Architektura
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
