Problem Statement: Build a service/system that can support defining and running jobs on a schedule.
Requirements:
- Should be able to create jobs
- Should be able to schedule and run jobs
- Should be able to report failures and successes
- Should be reliable and have strong guarantees about its job runs
- Should be able to view logs and status of running jobs, as well as previously finished jobs
- Should be able to handle when a job takes longer to run than expected (SLA)
总结(考点与落地方案)
目标: 设计一个可横向扩展、强可靠的 任务编排 / 定时调度服务。
核心模块
- API + 鉴权:创建 / 更新 / 禁用任务,立即触发,查询运行与日志。
- 元数据存储(SQL):保存 Job 配置、cron/ 间隔、并发策略、重试、SLA、负责人等。
- 调度器 :时间轮或优先队列按
next_run_at扫描到期 Job;以 去重 token入队(幂等)。 - 消息队列:持久化传递任务,支持 DLQ。
- Worker 执行器 :拉取任务、执行目标(HTTP/ 脚本 / 容器),发心跳,按 并发 / 限流 执行。
- 运行结果存储:
JobRun状态机 + 计时与指标。 - 日志系统:stdout/stderr 流存储至对象存储并索引到日志检索。
- SLA/ 超时:看门狗监控运行时长;超时则标记
TIMED_OUT并报警 / 可中断。 - 重试 / 回退 :可配置重试次数,指数回退 + 抖动;要求任务实现 幂等。
- “准一次”执行业务语义 :Lease+Heartbeat 防止多实例并发;若被抢占可重放,但通过任务侧幂等实现 效果上的 Exactly-once。
- 高可用:调度器主备 + 选主(etcd/ZK),Worker 无状态、跨 AZ/Region。
- 可观测性:全链路指标 / 日志 / 追踪与看板预警(SLA 违约、积压、成功率)。
- 回填与停发:支持历史回放与维护窗口。
- 安全:租户隔离、密钥保管(Vault)、RBAC。
关键点
- 以
next_run_at建索引滚动调度,入队即计算下一次触发; - Per-job 串行保证 + 全局水平扩展;
- SLA 以心跳与定时器双保险;
- 先天幂等设计(去重键 =
job_id + scheduled_at + attempt)。
适配面试延伸
- 多租户 / 配额、工作流(DAG 依赖)、任务编排(条件 / 重试分支)、区域级容灾(RPO≈0,RTO 分钟级)。
VOprep 团队长期陪同学员实战各类大厂 OA 与 VO,包括 Robinhood、Google、Amazon、Citadel、SIG 等,提供实时答案助攻、远程陪练与面试节奏提醒,帮助大家在关键时刻不卡壳。
如果你也在准备 Tiktok 或类似工程向公司,可以了解一下我们的定制助攻方案——从编程面到系统设计,全程护航上岸。
正文完