这是我参与「第五届青训营 」伴学笔记创作活动的第十五天。今天学习了有关定时任务的课程,老师结合抖音实际的新年活动带我们了解到了定时任务,用传统定时任务的缺陷引出了今天的主角分布式定时任务。
老师一开始就带我们通了一遍抖音春节瓜分红包的活动,这个活动需要在目标日期的规定时间点统计上亿名用户的任务完成度,并计算出每个用户可以获得的红包数额进行发放,这需要定时任务在处理海量数据的同时做到自动化处理并高效稳定。单机的定时任务可以完成吗?java中有Timer类,go中有ticker可以申请一个线程来完成定时任务,他们可以在不同平台使用,但是申请线程意味着要额外使用资源,而且仅单机可用,
Java中ScheduledExecutorService可以使用线程池来建立连接了解决资源的问题,但仍仅单机使用,Quartz框架解决了仅单机使用的这个问题,但它并不具有负载均衡的能力,对分布式系统的支持也不是很好,所以我们使用最多的并不是它而是分布式定时任务。
什么是分布式定时任务呢?在回答这个问题之前需要知道定时任务是什么,定时任务是指系统为了自动完成特定任务,实时,延时,周期性完成任务调度的过程。分布式任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理模式。分布式定时任务具有以下特点:
- 自动化:全自动完成定时任务的调度和执行。
- 平台化:基于平台化的思维管控一系列的分布式定时任务。
- 分布式:在分布式系统环境下运行任务调度,突破单机的限制。
- 伸缩性:采用集群方式部署,可以随时按需扩缩容。
- 高可用:单点故障不影响最终任务结果,可以做到故障转移。