这是我参与「第五届青训营」伴学笔记创作活动的第12天
一、课程内容
- 前言:从抖音春节活动说起;
- 发展历程:从linux命令到单机再到分布式,定时任务一直没有停下发展的脚步;
- 实现原理:深入了解分布式定时任务的实现原理;
- 业务应用:在哪些实际业务中使用分布式定时任务;
本节课可以在知识面对分布式定时任务建立宏观的认知,并深入了解其实现原理;了解关联的单机定时任务、大数据处理引擎,通过了解不同实现方案的优劣来拓展知识面。同时在实践方面了解对实际业务场景的中间件选型、技术方案设计做到全面认识。
二、详细知识罗列
- 每年春节的时候,各种平台都有一些活动比如支付宝集五福、抖音瓜分20亿红包等。那么对这一类活动,怎么设计最终开奖环节的技术方案?所涉及的任务关系到分布式、定时,基本逻辑需要到规定的时间点去扫描每一个用户的集卡信息,汇总计算后根据总金额定时发放。但不管是用户规模还是资金规模、QPS这一类活动都是亿级的量级,这是一项重大的挑战,需要做到自动化+定时执行+处理海量数据+高效稳定。
- 课程里老师举了几个例子:windows电脑自动关机脚本、疫情自动打卡程序、linux定时清理机器日志、每隔五分钟定时刷新本地缓存数据的Go函数、每隔五分钟定时执行多个任务的例子,这些都是在单独的机器上定时执行某项功能的例子。
- 任务调度Quartz:定时任务的一个事实标准,基本上把定时任务要解决的东西解决完毕,但其实还不算分布式定时机制,因为没有负载均衡的机制,分布式的机制支持的并不好。
- 为什么需要分布式定时任务:因为需要在上面提到的场景里实现任务,单机情况是绝对没有办法做到的,需要数量很多的机器去完成。那如何去协调这些机器实现功能是需要解决的首要问题;特点:平台化管理、分布式部署、支持海量数据;
- 比较学术的定义:定时任务指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程;分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
- 通过执行方式的不同,分布式定时任务可以分为以下几种:
- 分布式定时任务核心要解决的是触发、调度、执行三个关键问题。触发器trigger,解析任务生成触发事件;调度器scheduler,分配任务管理任务生命周期;执行器executor,获取执行任务单元执行任务逻辑;除此之外还需要一个控制台admin,提供任务管理和干预的功能;
- 具体功能架构如下:
- 控制台:任务指任务元数据;任务实例指运行的任务实例;任务结果字面意思;任务历史用户可以修改任务信息,任务实例对应的任务元数据可以不同,因而使用任务历史存储。任务元数据指用户对任务属性定义,包括任务类型调度时机、任务行为等。任务实例包括Job_id、触发时间、状态结果等;
- 触发器:核心职责是给定一系列任务,解析他们的触发规则,在规定的时间点触发该任务的调度。需支持大量任务,需支持秒级调度,周期任务需要多次执行。字节和腾讯的方案是定期扫描+延时消息。方案二时间轮方案(奇怪的数据结构),使用链表存储任务,每个元素代表一个任务,查询on,修改o1。使用多级时间轮(类似多级页表的概念)使得查询修改都是o1,而且便于扩展。实现高可用的方式;
- 调度器:资源来源、资源调度、资源执行。业务系统提供机器资源或者定时任务平台提供机器资源。随机节点执行、广播执行、分片执行。高级特性:任务编排、故障转移。
- 执行器
三、课程小结
这节课老师比较详细地,由浅入深地讲述了分布式定时任务的背景、概念、组成、原理以及实现方法,还是学到很多知识的,但内容也比较难,需要后面慢慢消化实践。另外大作业加油啊,今天看了几个其他队伍的源码,收获很大。
四、参考引用
第五届字节青训营分布式定时任务实现原理,讲师王伟强