调度程序和背景任务
(部分: 业务和管理)
1)任命
调度器和背景任务为平台提供了非用户操作:定期计算,工件发布,清算和队列回放。目标是确定性,抗故障性和可审计性。
2)任务分类
基于时间:按计划(cron/Calendar):清算,关闭RTP窗口,上载,存档。
事件驱动:总线触发器(PaymentsSettled, PriceListUpdated)。
One off/Ad-hoc:TTL的一次性乔巴。
Long-running: backof/sags,流媒体编译。
维护:按键旋转、备份、索引、缓存加热。
3)体系结构(参考)
组件:1.Scheduler(控制平面):存储时间表,CAL/cron,服务窗口,时区,限制器。
2.Dispatcher: Plan →队列(per-priority/tenant/region),设置截止日期,等效键。
3.工作人员:任务池下的静态/自动轨道;heartbeats, leases.
4.Queue/Bus:FIFO/修饰,DLQ,延迟消息。
5.Locker/Coordination:分布式锁定(leases), lead-election (Raft/ZK/Consul)。
6.Vault/KMS:JIT秘密,TTL短。
7.Observability: traces/metrics/logs, dashbords, alerts.
8.审计/WORM:不变的执行收据,Merkle切片。
模式:outbox/CDC,idempotency,补偿(sags),backpressure,电路断路器。
4)时间表: cron和日历
Cron v3:秒/分钟/小时/天/月/天/周;支持"/5",范围,列表。
日历/例外:商业日历,"沉默窗口",假期/DST。
时间段:在任务上保留"tz";在tenant的本地时间运行。
多区域:带有漂移/重新选举的per-Region或"领先区域+追随者"时间表的副本。
5)队列,优先级,SLA
优先级类别:P0(关键),P1,P2,P3;个别的worker池。
SLA/截止日期:"must_start_by","must_finish_by";通行证-升级/转发。
配额和公平性:任务/分钟/特南特的帽子,"bursta"的令牌,noisy-neighbors的隔离。
延迟任务:"不早于"(延迟/可视性时间)。
6)竞争性和锁定
Leases:租用自动扩展(heartbeat);超时-重新发布。
Mutex/信号器:per资源(例如,"价格表x仅写一个骗子")。
摇摇欲坠:通过"tenant/region/hash(key)";用于缓存和数据局部性的粘性路由。
领导引理:一位领导者发布"系统性"乔巴(例如"关闭所有RTP窗口"),追随者发布热站。
7)可靠性: retrais、idementity、dedup
等效键:"(task_type,business_id,窗口)";重播→相同的收据。
Retrai:指数背靠背+挤压,尝试限制,错误策略(retry/cancel/compensate)。
Poison-pill:N失败后快速转移到DLQ,对所有者表示赞赏。
Dedup:窗口的TTL上的seen-cache(内存+KV)。
Exactly once效果:通过交易日志/收据确认副作用。
8)管理冗长而艰巨的任务
Chunking:按蹦床、支票/续集细分。
时间盒装:CPU/IO/网络 egress限制;中断并保持进展。
传奇/补偿:服务间步骤的"undo"语义。
Concurrency-caps: 对类型/tenant/地区的同时任务限制。
9)可观察性和指标
Traces:"trace_id",传奇步骤,外部调用。
Metrics (SLI):
Success Rate, error-rate, retry-rate.
Lag直到开始,队列(长度,p95年龄)。
Latency p50/p95, time-to-complete.
按任务计算1k,egress/ingress。
DLQ rate, poison-pill rate.
SLO(示例):- P0开始≤ 60秒,P1 ≤ 5分钟;Success ≥ 99.5%;DLQ ≤ 0.1%;Freshness(opershina)≤ 30与p95。
10)审计和可证明性
收据:"receipt_hash"开始/成功/错误,关键类型(付款,价格表,RTP)的DSSE签名。
WORM:存储执行日志和任务清单。
Custody-of-Chain:谁交付/批准/更改时间表;SoD检查。
11)安全性和可用性
RBAC/ABAC/ReBAC:谁创建/批准/运行;SoD:"创建付款"≠"批准"。
JIT秘诀:窃听者通过跳过任务请求具有短TTL的令牌。
隔离:per-tenant/region/网格锻炼池;sandbox表演。
PII卫生:蒙面/令牌,禁止初学者。
12) FinOps和成本
compute/storage/egress上的预算/上限。
按队列和SLO排列的Autoscale Workers。
存储类:热(7-30天)→ OLAP (6-24个月)→存档。
成本奖励计划:"廉价时钟"的启动窗口,egress限制。
13)数据模型(简化)
14) API合同(管理/集成)
"POST/schedules"-创建时间表(cron/cal, tz,窗口)。
"POST/jobs"-临时交付;返回"job_id","receipt_hash"。
"GET/jobs/{id}-状态/日志/收据。
"POST/jobs/{id}/cancel"-带补偿的取消。
"GET/queues/stats"-长度,泻湖,p95。
Вебхуки: `JobStarted`, `JobSucceeded`, `JobFailed`, `JobDroppedToDLQ`, `SLOViolated`.
15)花花公子(典型场景)
Retry-storm:包括全球支持,提升成瘾时间,包括电路断路器,击球。
DLQ雪崩:停止接收,优先考虑DLQ分析,缓冲新任务。
领导者倒台:重新当选,对"双重出版物"的平均水平进行验证,进行审计。
提供商Zavis (PSP/KYC):通往储备的路线,降低投票率/webhook,将交易转移到检疫。
泄露的窃贼秘密:召回钥匙,轮换,在30天内搜索"异常"发射,咆哮正确。
16) iGaming/fintech特点
付款/付款:带收据的异步乔布斯,隔离"灰色"交易,带有重复数据消除的队列。
RTP窗口/限制:日历关闭,观察到vs理论RTP,漂移时自动暂停促销。
价格表/FX/Tax:时间表发布、工件版本、高速缓存强制失效。
附属机构:转换对账,webhook的去世,行为/签名,争议托管。
17)质量度量(示例集)
Schedule Adherence:在窗口中启动的任务比例≥ 99%。
Queue Lag p95:P0 ≤ 60 c,P1 ≤ 5分钟。
Success/Retry/DLQ Rate: ≥ 99.5% / ≤ 0.4% / ≤ 0.1%.
Idempotency Errors: ≤ 0.01%.
Cost/1k jobs和Egress/job-在预算范围内。
审计完成:100%的关键任务与收据。
18) RACI
19)实施支票
- 确定任务类别,优先级和SLA;定义日历和时间表。
- 部署Scheduler/Dispatcher/Queue/Workers,并带有Lead-Election和Sharding。
- 引入幂等性,retrai,DLQ,补偿(传奇)。
- 为用户配置RBAC/ABAC/ReBAC, SoD和JIT秘密。
- 启用traces/metrics/logs、dashbords和alerts;SLO и error-budget.
- 关键类型的签名收据(DSSE)和WORM日志。
- 按成本计算的Autoscale和Cap Alerta (计算/存储/egress)。
- 花花公子:retry-storm, DLQ雪崩,领导者失败,提供商退化。
- 测试:每个花花公子的GameDay,注入延迟/错误。
- 定期浏览时间表、排队和ROI自动化。
20) FAQ
为什么cron还不够?
如果没有队列,等效性,锁定和审计,cron就会中断故障和时区。
可以将基于时间和活动的驱动程序结合起来吗?
是的:cron-接管保险;事件-用于反应性。
如何实现"整整一天"?
按键,交易效果日志,收据和偶数副作用。
如何处理"长期"乔布斯?
Chank, Checkpoints, Time-boxing,可以中断和继续.
怎么不要"吃掉"预算?
自动排队和SLO,重型乔布便宜的手表,僵硬的egress/compute帽。
摘要:规划师和背景任务是平台的生产管道。通过内置时间表和队列、等效性、锁定和可观察性、添加收据/审计、隔离特南特和FinOps控制,您可以在任何区域和负载中获得可预测的运行时间表、快速恢复和合法的操作。