9.分布式定时任务 | 青训营笔记

65 阅读3分钟

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

春节集卡瓜分20亿

自动化+定时执行+海量数据+高效稳定 =》分布式定时任务。

单个机器的定时任务

分布式定时任务,是指系统为了自动完成特定任务,实时,延时,周期性完成任务调度的过程。分布式定时任务是把分散的,可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。并不是一个活动做一套系统,而是一个东西,春节,618都能用。

春节,选用map或者map reduce任务。下图是分布式定时任务的执行方式。

分布式定时任务和大数据处理引擎的区别,都可以对海量数据处理,比如把数据库数据读到es中,差别是定时不仅可以做到上面哪些,还可以调用http和rpc服务。大数据处理引擎只能计算出哪些任务需要发红包,但是不能发,而分布式定时任务可以。

实现原理

数据流

把三部分放在控制台中,控制台判断任务在什么时间点执行,用触发器做触发,调度器做整体的协调,最后把任务丢给执行器执行。

admin 存任务的元数据,任务怎么分片执行,任务之间的依赖,任务干预(暂停),日志管理

trigger 在时间点触发任务,scanner扫描,消息队列,

调度器 怎么做调度 负载均衡 幂等控制,容错

执行器 注册,任务获取,任务执行,状态上报

任务实例,如果用消息队列实现,要记录一下id,因为有时候要撤回任务。

触发器,核心职责,解析触发规则,在规定时间点触发任务调度。需要支持大量任务(甚至是百万),需要支持秒级调度,周期任务需要多次执行,需要保证秒级扫描的高性能。

第一个方案是:

定期扫描+延时消息。搜索最近10分钟即将执行的任务,从数据库中拿出来,为了避免任务多次执行,需要把任务在db中状态做修改。

第二个方案:

时间轮,环形数组,目标:遍历任务列表,从中找出当前时间点需要触发的任务列表。添加的时候插入到链表的结尾。只需要知道最近执行的任务,可以用最小堆来实现。最小堆使性能大大提高。数组无限扩展使不能接受的。

把最小堆的数组首尾相连,可以当一个时钟,

多级时间轮

调度器

解决资源来源,有资源后怎么进行调度,怎么执行提交的任务。

资源来源:业务系统提供资源,定时平台提供资源。

资源调度,随机节点执行,广播执行。

任务编排,有向无环图进行可视化任务编排。

执行器

机器注册,执行任务流程,回传一些日志一些回调请求,心跳检测,