背景
在日常开发中会经常遇到一些需要异步定时执行的业务诉求,典型的使用场景如:超时未支付订单关单、每隔 2h 更新好友排行榜、3.22 日 17 点《xx》剧上线等。目前业务侧多基于以下思路来快速搭建一个调度系统,mysql 或者 redis 队列存储待执行任务,通过 crontab 定时触发应用完成“捞取、计算、执行等操作”。不难看出存在几类亟待解决问题:
1)缺少统一的调度平台导致各业务重复开发;
2)简易版调度实现在任务吞吐、调度时效上缺少保障;
3)业务和调度数据强耦合存储给线上稳定性引入大 key、慢 sql 风险。
目前存在多类开源解决方案如 XXL-Job 、 Elastic-Job、quartz 调度等,但这些都属于进程级调度平台,很难满足更细粒度的业务调用。基于上述的业务诉求和司内现状,我们准备搭建一套通用的分布式任务调度平台(以下统称为 tjobs 平台)以满足业务高可靠、低延迟的海量任务调度诉求。
整体设计
设计目标
旨在提供一个易用、可靠、高性能、低时延的海量任务管理、调度平台,帮助开发工程师专注于面向业务编码设计,而不再担心定时任务的吞吐量、可靠性等非功能需求。由此衍生的功能和非功能诉求分别为:
功能性诉求:
任务管理:包括任务注册、任务启停、任务更新等,
任务查询:主要用于任务追踪、问题排查、调度统计等,
任务回调:由业务提供 spi 回调实现,tjobs 平台定时调用触发
非功能性诉求
tjobs 定位为高可靠、高性能、低延迟、简单易用的任务调度平台,在满足核心功能的基础上提供以下非功能性保障:
平台化:支持多业务接入、百亿级任务注册
易用性:自助化接入、运维,使用成本远低自建
高可靠:全年 3 个 9 可用性、p99(时延)99.95%
任务触达率>99.99%
p99(触达延时)99.95%、任务触达率>99.99%、p99(延迟)99.99%,并且任务 RPO=0 满足不丢任务 SLA,主备切换分钟级 RTO 基本满足全年 P99(延迟) |