分布式定时任务的发展历程 | 青训营笔记

31 阅读3分钟

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

分布式之前有了解,但是分布式的定时任务到底是如何发展的。在实际生活中我们经常遇到过:例如定点抢红包,支付宝集卡,抖音集卡等。那么作为开发者我们应该明白这些原理是怎么样的。所以今天先学习一下分布式定时任务的发展历程,后续再来了解原理。

前言

  • 对分布式定时任务建立起宏观的认知,并深入了解其实现原理
  • 了解关联的单机定时任务、大数据处理殷勤,通过了解不同实现方案的优劣来拓展知识面
  • 项目实践能力可以加强
    • 了解在哪些实际业务场景中使用分布式定时任务
    • 对于实际业务场景的中间件选型、技术方案设计做到成竹在胸

1. 春节集卡瓜分20亿

在这里插入图片描述 作为后端开发者,如何设计最终开奖环节技术方案? 在这里插入图片描述 需要注意该项目具有

  • 亿级的用户规模
  • 亿级的资金规模
  • 百万级的读写QPS

所以我们这个项目需要: 在这里插入图片描述

2.发展历程

2.1 Womdows批处理

10分钟后Windows电脑自动关机

  1. 桌面空白处右键单击-新建-文本文档
  2. 更改文件名和后缀为”自动关机.bat“
  3. 修改文件内容为"shutdown -s -t 600",代表10分钟后关机
  4. 双金运行该文件,你的电脑将会在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进行。

定时任务:解决了自动化和准时这两个问题 分布式定时任务:解决了高性能、可靠性、分布式部署等问题