这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
分布式之前有了解,但是分布式的定时任务到底是如何发展的。在实际生活中我们经常遇到过:例如定点抢红包,支付宝集卡,抖音集卡等。那么作为开发者我们应该明白这些原理是怎么样的。所以今天先学习一下分布式定时任务的发展历程,后续再来了解原理。
前言
- 对分布式定时任务建立起宏观的认知,并深入了解其实现原理
- 了解关联的单机定时任务、大数据处理殷勤,通过了解不同实现方案的优劣来拓展知识面
- 项目实践能力可以加强
- 了解在哪些实际业务场景中使用分布式定时任务
- 对于实际业务场景的中间件选型、技术方案设计做到成竹在胸
1. 春节集卡瓜分20亿
作为后端开发者,如何设计最终开奖环节技术方案?
需要注意该项目具有
- 亿级的用户规模
- 亿级的资金规模
- 百万级的读写QPS
所以我们这个项目需要:
2.发展历程
2.1 Womdows批处理
10分钟后Windows电脑自动关机
- 桌面空白处右键单击-新建-文本文档
- 更改文件名和后缀为”自动关机.bat“
- 修改文件内容为"shutdown -s -t 600",代表10分钟后关机
- 双金运行该文件,你的电脑将会在10分钟后自动关机
2.1 Womdows任务计划程序
每天 12点自动疫情打卡
2.3 Linux命令-CronJob
每天 2.30 定时清理机器日志
30 2 * * * clean_log.sh
* * * * * command to be executed
* : min(0 - 59)
* : hour(0 - 23)
* : day of month(1 - 31)
* : month(1 - 12)
* : day of week(0 - 6)(Sunday=0)
- Linux 系统命令,使用简单,稳定可靠
- 只能控制单台机器,且无法适用于其他操作系统
2.4 单机定时任务-Timer、Ticker
每5分钟定时刷新本地缓存数据
public static void main(String[] args) throws ParseException {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
SyncLocalCache();
}
}, 5000, 5 * 60 * 1000);
}
func main() {
ticker := time.NewTickers(5 * time.Minute)
for {
select {
case <-ticker.C:
SyncLocalCache()
}
}
}
这个缓存可以跨平台,但是只能单机使用
2.4 单机定时任务-ScheduledExecutorService
每隔5分钟定时执行多个任务
private static ScheduledExecutorService scheduler;
public static main(String[] args) throws Exception {
scheduler = Executors.newScheduledThreadPool(5);
scheduler.schedulerAtFixedRate(((
new Runnable() {
@Override
public void run() {
DoSomething();
}
})),
0, 300,
TimeUnit.SECONDS);
}
这个可以拥有线程池功能,但是仅限单机可用
2.5 任务调度 - Quartz
此时它可以:单任务极致控制,也没有负载均衡机制
2.6 分布式定时任务
接下来看分布式定时任务
它的优点 就很多:
- 平台化管理
- 分布式部署
- 支持海量数据
2.6 什么是分布式定时任务
定时任务是指系统为了自动完成特定任务,实时
、延时
、周期性
完成任务调度的过程。
分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。
按触发时机分类:
- 定时任务:特定时间触发,例如今天的10点执行
- 延时任务:延时触发,比如10s后执行
- 周期任务:固定周期时间,或固定频率周期调度触发,比如每天的12点或每隔10s进行。
定时任务:解决了自动化和准时这两个问题 分布式定时任务:解决了高性能、可靠性、分布式部署等问题