这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记
场景
设置早上7点的闹钟,设置贪睡时间5分钟,设置重复次数或周期,可以分别对应定时任务定时、延时、周期性完成任务调度的过程。而分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式
方案对比
Linux命令CroJob:系统命令,使用简单,稳定可靠,单机使用,不能跨平台
Java的Timer、Go的Ticker:仅单机可用,但能跨平台
ScheduleExecutorService:仅单机可用,但拥有线程池功能,可以执行多个任务
Quartz:单任务可以做到极致空置,但没有负载均衡机制。
分布式定时任务:支持平台化管理、分布式部署、支持海量数据
要注意的是,虽然分布式定时任务功能最齐全,但并不意味着可以替代其他方案。
其他解决方案对比:
介绍
分布式定时任务具有自动化、平台化、分布式、伸缩性、高可用的特点。执行方式分为
- 单机任务:随机触发一台机器执行任务,适用计算量小、并发度低
- 广播任务:用于所有机器执行同一任务
- Map任务:将任务分为多个子任务计算
- MapReduce任务:分治,在Map任务基础上对所有子任务的结果汇总
业内定时任务框架如图:
分布式定时任务和大数据处理引擎的异同:都可以处理海量数据,性能、伸缩性、稳定性都很高。但定时不是大数据处理引擎要解决的核心问题。大数据处理引擎往往致力于将源数据处理成结果数据,分布式定时任务还可以调用HTTP和RPC服务
实现原理
可以分为4层,控制台、触发器、调度器和执行器,如图:
数据流如图:
控制台需要知道任务、任务实例、任务结果和任务历史
触发器根据规则在规定的时间点触发任务的调度,需要高并发、实时性、高性能。可选用方案有定期扫描+延时消息,时间轮。
调度器解决资源来源、资源调度、任务执行的问题,资源来源分业务系统提供机器资源和定时任务平台提供机器资源,从任务隔离、扩缩容、资源消耗等看各有优缺点。资源调度分随机节点执行、广播执行和分片执行。还支持高级特性如任务编排、故障转移等。
执行器,基于注册中心,可以做到执行器的弹性扩缩容