相比于单机定时任务,分布式定时任务不仅可以实现自动化的定时、延时、周期任务调度,还可以支撑体量更大的业务,并且有更高的性能、伸缩性和稳定性。
相比于大数据处理引擎,分布式定时任务还可以调用HTTP和RPC服务,目标不同
核心架构
分布式定时任务核心要解决出发、调度、执行三个关键问题
-
出发提:Trigger,解析任务,生成出发事件
-
调度器:Scheduler,分配任务,管理任务生命周期
-
执行器:Executor,获取执行任务单元,执行任务逻辑
-
控制台:Admin,提供任务管理和干预功能
任务元数据
任务元数据(Job)是用户对任务属性的定义,包括任务类型、调度时机、执行行为和方式等。
任务实例
标记了Job_id,触发事件,状态&结果,过程信息
触发器
给定一系列任务,解析触发规则,在规定的时间点触发任务调度
- 需要支持大量任务
- 秒级调度
- 多次执行过
- 高性能,避免资源浪费
现有方案
- 定期扫描+延时消息
- 时间轮
- 分布式锁
调度器
资源来源可能是业务系统也可能是定时任务平台。二者一个利用率高,一个扩缩容方便。
资源调度方面,由于是分布式,需要选择节点:
- 随机节点执行:适用于定时对账
- 广播执行:适用于批量运维
- 分片执行:适用于海量日志统计。基于一致性hash策略分发任务,当有Executor异常时,故障转移。
执行器
注册机制,保证扩容、缩容的灵活性
业务应用
所有需要定时、延时、周期性执行业务的场景,都可以考虑分布式定时任务。比如电商,订单未支付自动关闭,定时优惠券;互动,集五福分红包;游戏,定期更新榜单,领取补偿等。
相比于其他方案: