这是我参与「第五届青训营 」伴学笔记创作活动的第 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);
}
分布式定时任务
定时任务概念
指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程
分布式定时任务-执行方式
- 单机任务:随机触发一台机器执行,适用于计算量小、并发度低的任务
- 广播任务:广播到所有机器上执行同一个任务,比如所有机器一起清理日志
- Map任务:一个任务可以分出多个子任务,每个子任务负责一部分计算。适用于计算量大,单机无法满足的任务
- MapReduce任务:在Map任务的基础上,还可以对所有子任务的结果做汇总计算,适用于计算量大,并且需要对子任务结果汇总的任务
业内定时任务
- Xxl-job:开源免费,在中小型公司使用非常广泛
- SchedulerX:阿里云付费,在阿里内部广泛使用,久经考验
- TCT:腾讯内部使用,未开源,未商用
实现原理
定期扫描+延时消息(腾讯、字节方案)
以上则是今天的课程内容,本文只记录了基础知识部分,作为未来学习的参考,目前并未打算深入了解,不过依然能够感受到分布式的魅力