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

49 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第不知道多少天的n天

550739.jpg

前言:

这次青训营从抖音春节活动的例子开始,介绍了定时任务的发展,从而带领我们了解了分布式定时任务的实现原理。

相关原理

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

抖音春节活动瓜分20亿活动

关于后端实现活动的基本构成如下

image.png

这里的用户规模、资金规模都是亿万级别的,读写QPS也有百万计。我们需要做的就是自动化地定时计算、分发出开奖信息。这期间需要我们高效稳定得处理如此海量的数据。

介绍批处理

  1. windows 自动关机

image.png

1675860338766.png

  1. 健康打卡(现在学校没有了,不过之前可以用py简易实现

image.png

  1. 基于Linux的CronJob

Crontab语法一个crontab文件用五个段来定义:天,日期和时间,和一个要定期执行的命令代码。

*     *   *   *    *  command to be executed
-     -    -    -    -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0) //星期
|     |     |     +------- month (1 - 12) //月
|     |     +--------- day of month (1 - 31) //日
|     +----------- hour (0 - 23) //时
+------------- min (0 - 59) //分

所有的值都必须在相应的范围之内,否则视为无效。 在填值区域内可以是* 也可以是以 (,) 分隔的一组值。 值可以是一个数据也可以是用连接符连起来的两个数(表示范围)。

  1. 单机定时任务-Timer、Ticker

每隔5分钟定时刷新本地缓存数据Java实现 : image.png

  1. 每隔5分钟定时执行多个任务
private static ScheduledExecutorService scheduler;

public static void main(String[] args) throws Exception {
    scheduler = Executors.newScheduledThreadPool(5);
    
    scheduler.scheduleAtFixedRate(((
        new Runnable() [
            @Override
                public void run() {
                    DoSomething();
                }
            })),
        0300,
        TimeUnit.SECONDS);

上边思维导图中涉及的任务调度

基于Quartz的调度系统

image.png

未完待续~