分布式定时应用 | 青训营笔记

69 阅读2分钟

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

  有些时候我们希望程序在固定的时间开始或停止运行,也就是“定时任务”。定时任务是系统为了自动完成特定任务,实时、延时或周期性完成任务的过程。

定时任务的历史

  操作系统提供了一些定时任务的功能,如 Windows 的任务计划、Linux 的 Cronjob 等

  编程语言也提供了一些定时任务的功能,如 Java 的 Timer 、Go 的time.ticker等,一些框架(如Quartz)提供了更完整定时任务功能。

  上述方案在单机系统中效果不错,但难以应对分布式系统,这就需要分布式定时任务系统了。

分布式定时任务

  分布式定时任务是把分散的、可靠性差的定时任务纳入统一的管理系统,实现集群管理调度和分布式部署的管理方式。

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

  分布式定时任务的执行方式有单机任务(随机触发一台设备执行任务)、广播任务(所有设备同时执行相同任务)、Map 任务(将任务拆解,分配给不同的设备)和 MapReduce 任务(在 Map 任务基础上进行结果汇总)四种。

  如今常见的分布式定时任务框架有Xxl-jobSchedulerXTCTElastic-jobSeturn等.

原理

  分布式定时任务要解决的核心为题是触发、调度和执行。因此,分布式定时任务系统分为触发器(Trigger)、调度器(Scheduler)、执行器(Executor)和控制台(Admin)四部分。

  控制台根据用户需求创建任务元数据(Job),根据实际需要实例化任务(JobInstance),并记录执行结果(JonResult),保存任务历史(JobHistory)。

  触发器用于解析任务触发规则并在确定时间触发任务。有“定时扫描+延迟消息”方案和“时间轮”方案两种实现形式。

  调度器负责调度各种资源,维持系统稳定,保证高可用。

本文若有不足之处,欢迎纠正(≧^.^≦)喵~
我的其他笔记,可在掘金或 Github( github.com/DoudiNCer/I… )阅读