这是我参与「第五届青训营 」伴学笔记创作活动的第9天。今天主要学习了分布式定时任务。课程的内容主要可分为五个方面:分布式定时任务整体架构、控制台Admin详细设计、触发器Trigger详细设计、调度器Scheduler详细设计、执行器Executor详细设计。
我们都知道,抖音有一个很有意思的活动:20亿红包瓜分。有关这部分的内容,其实是可以通过业务的设计给设计出来的,主要可分为:定时扫描抖音用户集卡状态、汇总计算用户的瓜分金额、定时开奖。由此方案,我们可以引出:
- 自动化 + 定时执行 + 海量数据 + 高效稳定 = 分布式定时任务。
从定义来看,定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。而分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。其执行方式主要可分为单机任务、广播任务、Map任务、MapReduce任务。
那为什么我们需要分布式定时任务呢?除了抖音的20亿瓜分业务以外,分布式定时任务存在下述优点:
- 通过集群的方式进行管理调度,大大降低了开发和维护成本;
- 分布式部署,保证了系统的高可用性,伸缩性,负载均衡,提高了容错;
- 可以通过控制台部署和管理定时任务,方便灵活高效;
- 任务都可以持久化到数据库,避免了宕机和数据丢失带来的隐患,同时有完善的任务失败重做机制和详细的任务跟踪及告警策略。
分布式定时任务的图示大致如下:
任务调度的图示如下: