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

58 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记

场景

设置早上7点的闹钟,设置贪睡时间5分钟,设置重复次数或周期,可以分别对应定时任务定时、延时、周期性完成任务调度的过程。而分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式

方案对比

Linux命令CroJob:系统命令,使用简单,稳定可靠,单机使用,不能跨平台

Java的Timer、Go的Ticker:仅单机可用,但能跨平台

ScheduleExecutorService:仅单机可用,但拥有线程池功能,可以执行多个任务

Quartz:单任务可以做到极致空置,但没有负载均衡机制。

分布式定时任务:支持平台化管理、分布式部署、支持海量数据

要注意的是,虽然分布式定时任务功能最齐全,但并不意味着可以替代其他方案。

其他解决方案对比:

5-0.png

介绍

分布式定时任务具有自动化、平台化、分布式、伸缩性、高可用的特点。执行方式分为

  • 单机任务:随机触发一台机器执行任务,适用计算量小、并发度低
  • 广播任务:用于所有机器执行同一任务
  • Map任务:将任务分为多个子任务计算
  • MapReduce任务:分治,在Map任务基础上对所有子任务的结果汇总

业内定时任务框架如图:

5-1.png

分布式定时任务和大数据处理引擎的异同:都可以处理海量数据,性能、伸缩性、稳定性都很高。但定时不是大数据处理引擎要解决的核心问题。大数据处理引擎往往致力于将源数据处理成结果数据,分布式定时任务还可以调用HTTP和RPC服务

实现原理

可以分为4层,控制台、触发器、调度器和执行器,如图:

5-2.png

数据流如图:

5-3.png

控制台需要知道任务、任务实例、任务结果和任务历史

触发器根据规则在规定的时间点触发任务的调度,需要高并发、实时性、高性能。可选用方案有定期扫描+延时消息,时间轮。

5-4.png

调度器解决资源来源、资源调度、任务执行的问题,资源来源分业务系统提供机器资源和定时任务平台提供机器资源,从任务隔离、扩缩容、资源消耗等看各有优缺点。资源调度分随机节点执行、广播执行和分片执行。还支持高级特性如任务编排、故障转移等。

执行器,基于注册中心,可以做到执行器的弹性扩缩容

总结

5-5.png