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

37 阅读1分钟

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

因需求而出现

自动化+定时执行+海量数据+高效稳定=分布式定时任务

单机定时任务

可跨平台/只能控制一台机器

  • Java-Timer
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);
}
  • Go-Ticker
func main() {
    ticker := time.newTicker(5 * time.Minute)
    for {
        select {
        case <- ticker.C:
            SyncLocalCache()
        }
    }
}

线程复用/线程池/资源利用率高

  • Java-ScheduledExecutorService
public static void main(String[] args) throws Exception {
    scheduler = Executors.newScheduledThreadPool(5);
    
    scheduler.scheduleAtFixedRate(((
                    new Runnable() {
                        @override
                        public void run() {
                            Dosomething();
                        }
                    })),
            0, 300,
            TimeUnit.SECONDS);                 
}

分布式定时任务

image.png

定时任务概念

指系统为了自动完成特定任务,实时延时周期性完成任务调度的过程

分布式定时任务-执行方式

  • 单机任务:随机触发一台机器执行,适用于计算量小、并发度低的任务
  • 广播任务:广播到所有机器上执行同一个任务,比如所有机器一起清理日志
  • Map任务:一个任务可以分出多个子任务,每个子任务负责一部分计算。适用于计算量大,单机无法满足的任务
  • MapReduce任务:在Map任务的基础上,还可以对所有子任务的结果做汇总计算,适用于计算量大,并且需要对子任务结果汇总的任务

业内定时任务

  • Xxl-job:开源免费,在中小型公司使用非常广泛
  • SchedulerX:阿里云付费,在阿里内部广泛使用,久经考验
  • TCT:腾讯内部使用,未开源,未商用

实现原理

定期扫描+延时消息(腾讯、字节方案)

以上则是今天的课程内容,本文只记录了基础知识部分,作为未来学习的参考,目前并未打算深入了解,不过依然能够感受到分布式的魅力