Gem tasks i en tids-bucketet / priority queue nøglet på forfaldstidspunkt, poll kun de tasks der forfalder nu, og aflever dem til idempotente workers med at-least-once delivery. Scan aldrig 10M rows hvert tick — indeksér på fire time, så hver poll kun rører det, der forfalder.
Arkitektur
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
