后端与 Go| 青训营笔记

92 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天。

分布式定时任务

1、分布式定时任务和单机定时任务:

关系:否可以实现自动化的定时、延时、周期性任务调度;
差异:分布式定时任务可支撑更大的业务体量,分布式定时任务的性能、伸缩性、稳定性更高。

2、分布式定时任务和大数据处理引擎:

关系:都可以对海量数据做处理,性能、伸缩性、稳定性都很高;
差异:定时并不是大数据处理引擎要解决的核心问题,大数据处理引擎往往致力于将源数据处理成结果数据,分布式定时任务除了能做这个之外,还可以调用HTTP和RPC服务。

3、分布式定时任务的核心架构:

分布式定时任务核心要解决触发、调度、执行三个关键问题。
触发器:Trigger,解析任务,生成触发事件;
调度器:Scheduler,分配任务,管理任务生命周期;
执行器:Executor,获取执行任务单元,执行任务逻辑。
除了以上三个,还需要一个控制台,提供任务管理和干预的功能。

3-1、控制台:
基本概念

任务:job,任务元数据,任务元数据是对用户任务属性定义,包括任务类型调度实际、执行行为等。

任务实例:JobInstance,周期任务会生成多个任务实例,任务实例时一个确定的Job的一次运行实例。

任务结果:JobResult,任务实例运行的结果。

任务历史:Jobhistory,用户可以修改任务信息,任务实例对应的任务元数据可以不同,因而使用任务历史存储。

3-2触发器:

核心职责:给定一系列任务,解析他们的触发规则,在规定的时间点触发任务的调度。 设计约束:需支持大量任务,需支持秒级的调度,周期任务需要多次执行,需保证秒级扫描的高性能,并避免资源浪费。

触发器方案:1、定期扫描+延时消息 2、时间轮

触发器—高可用的核心问题:不同业务之间,任务的调度相互影响怎么办?负责扫面和触发的机器挂了怎么办?解法思路:存储上,不同国别,业务做资源隔离;运行上,不同国别,业务分开执行;部署时,采用多机房集群化部署,避免单点故障,通过数据库锁或分布式锁保证任务只被触发一次。

3-3调度器:

资源来源:业务系统提供机器资源:优点:任务执行逻辑与业务系统共用同一份资源,利用率更高,缺点:更容易发生定时任务脚本影响在线任务的事故,不能由定时任务平台控制扩缩容;定时任务平台提供机器资源:优点:任务执行逻辑与业务系统提供的在线服务隔离,避免相互影响,可以支持优雅的扩缩容,缺点:消耗更多机器资源,需要额外为定时任务平台申请接口调用权限,而不能直接继承业务系统的权限。

节点选择:随机节点执行,广播执行,分片执行。

任务分片:通过使用任务分片来提高任务执行的效率和资源的利用率。

调度器可以集群部署,做到完全的无状态,靠消息队列的重试机制保障任务一定会被调度。 资源调度:节点选择,任务分片,任务编排。故障转移

3-4执行器:

注册,调度,回调,心跳检测。

引用参考

分布式定时任务实现原理 - 掘金 (juejin.cn)

总结

本文接上文,是青训营学习中关于分布式定时任务的学习笔记。