分布式定时任务 | 青训营笔记

111 阅读3分钟

分布式定时任务 | 青训营笔记

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

今天主要对分布式定时任务进行学习。

一、本堂课重点内容:

本次课程讲了以下几个方面:

1.前言

2.发展历程

3.实现原理

4.业务应用

二、详细知识点介绍:

1.前言

每年春节抖音都会有很多有意思的玩法,例如集卡分20亿的活动。作为我们后端开发人员,应该如何来设计这个业务逻辑呢? 业务逻辑.png 在此业务场景下,我们所面临的用户规模和资金规模是上亿级的,并且有着百万计的读写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()
        
}

  • 任务调度 任务调度.png

  • 分布式定时任务 定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。

分布式定时任务

按触发时机可以将分布式定时任务分为以下几类:

  • 定时任务:特定时间触发,类似于闹钟。
  • 延时任务:延时触发,例如10s后开机。
  • 周期任务:固定周期触发,如每隔20s触发。 分布式定时任务还有以下特点:自动化、平台化、分布式、伸缩性、高可用。执行方式有:单机任务、广播任务、Map任务、MapReduce任务。业内的定时任务框架如下: image.png

3.实现原理

分布式定时任务核心主要解决触发调度执行这三个关键问题。

  • 触发器(Trigger):解析任务,生成触发事件。
  • 调度器(Scheduler):分配任务,管理任务生命周期。
  • 执行器(Executor):获取执行任务单元,执行任务逻辑。 最后,还需要一个控制台(Admin),提供任务管理和干预的功能,它们之间的关系如下图:

image.png

分布式定时任务的功能架构如图:

image.png

4.业务应用

在我们需要定时、延时、周期性执行的业务场景的时候,我们都可以考虑使用分布式定时任务。例如:

电商

  • 订单30分钟未下单自动关闭订单
  • 定时给商家、用户、推送相关信息

互动

  • 支付宝集五福
  • 抖音春节集卡

游戏

  • 活动结束后批量补发用户未领取的奖励
  • 定期更新游戏内榜单

其他解决方案: 发货后超过10天未收货时系统自动确认收货,可以使用分布式定时任务的延时任务,还可以使用消息队列的延时消息或者定时消息。

三、课后个人总结:

通过对分布式定时任务的学习,让我的后端知识面得到了提升,为很多业务逻辑的扩展了解决方案。并且我们在使用分布式定时任务时,可以很方便解决大规模数据量和用户的定时、延时调用问题。