分布式定时任务 | 青训营笔记
这是我参与「第五届青训营 」笔记创作活动的第12天
今天主要对分布式定时任务进行学习。
一、本堂课重点内容:
本次课程讲了以下几个方面:
1.前言
2.发展历程
3.实现原理
4.业务应用
二、详细知识点介绍:
1.前言
每年春节抖音都会有很多有意思的玩法,例如集卡分20亿的活动。作为我们后端开发人员,应该如何来设计这个业务逻辑呢?
在此业务场景下,我们所面临的用户规模和资金规模是上亿级的,并且有着百万计的读写QPS。这个时候就需要使用到分布式的定时任务来处理。
2.发展历程
分布式定时任务不是突然产生的,而是在很多传统业务需求中发展而来的。其发展历程如下:
- Windows批处理
- Windows任务计划程序
- Linux命令-CronJob
- 单机定时任务Timer、Ticker Go语言中使用Timer
package main
import (
"fmt"
"time"
)
func main() {
myTimer := time.NewTimer(time.Second * 2) // 启动定时器
var i int = 0
for {
select {
case <-myTimer.C:
i++
fmt.Println("count: ", i)
myTimer.Reset(time.Second * 2) // 每次使用完后需要人为重置下
}
}
// 不再使用了,结束它
myTimer.Stop()
}
-
任务调度
-
分布式定时任务 定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
分布式定时任务
按触发时机可以将分布式定时任务分为以下几类:
- 定时任务:特定时间触发,类似于闹钟。
- 延时任务:延时触发,例如10s后开机。
- 周期任务:固定周期触发,如每隔20s触发。
分布式定时任务还有以下特点:自动化、平台化、分布式、伸缩性、高可用。执行方式有:单机任务、广播任务、Map任务、MapReduce任务。业内的定时任务框架如下:
3.实现原理
分布式定时任务核心主要解决触发、调度、执行这三个关键问题。
- 触发器(Trigger):解析任务,生成触发事件。
- 调度器(Scheduler):分配任务,管理任务生命周期。
- 执行器(Executor):获取执行任务单元,执行任务逻辑。 最后,还需要一个控制台(Admin),提供任务管理和干预的功能,它们之间的关系如下图:
分布式定时任务的功能架构如图:
4.业务应用
在我们需要定时、延时、周期性执行的业务场景的时候,我们都可以考虑使用分布式定时任务。例如:
电商
- 订单30分钟未下单自动关闭订单
- 定时给商家、用户、推送相关信息
互动
- 支付宝集五福
- 抖音春节集卡
游戏
- 活动结束后批量补发用户未领取的奖励
- 定期更新游戏内榜单
其他解决方案: 发货后超过10天未收货时系统自动确认收货,可以使用分布式定时任务的延时任务,还可以使用消息队列的延时消息或者定时消息。
三、课后个人总结:
通过对分布式定时任务的学习,让我的后端知识面得到了提升,为很多业务逻辑的扩展了解决方案。并且我们在使用分布式定时任务时,可以很方便解决大规模数据量和用户的定时、延时调用问题。