go语言基础学习 | 青训营笔记

24 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第9天。今天主要学习了分布式定时任务。课程的内容主要可分为五个方面:分布式定时任务整体架构、控制台Admin详细设计、触发器Trigger详细设计、调度器Scheduler详细设计、执行器Executor详细设计。

我们都知道,抖音有一个很有意思的活动:20亿红包瓜分。有关这部分的内容,其实是可以通过业务的设计给设计出来的,主要可分为:定时扫描抖音用户集卡状态、汇总计算用户的瓜分金额、定时开奖。由此方案,我们可以引出:

  • 自动化 + 定时执行 + 海量数据 + 高效稳定 = 分布式定时任务。

从定义来看,定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。而分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。其执行方式主要可分为单机任务、广播任务、Map任务、MapReduce任务。

那为什么我们需要分布式定时任务呢?除了抖音的20亿瓜分业务以外,分布式定时任务存在下述优点:

  • 通过集群的方式进行管理调度,大大降低了开发和维护成本;
  • 分布式部署,保证了系统的高可用性,伸缩性,负载均衡,提高了容错;
  • 可以通过控制台部署和管理定时任务,方便灵活高效;
  • 任务都可以持久化到数据库,避免了宕机和数据丢失带来的隐患,同时有完善的任务失败重做机制和详细的任务跟踪及告警策略。

分布式定时任务的图示大致如下:

image.png

任务调度的图示如下:

image.png