这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
分布式定时任务的发展流程
Windows批处理
Linux CronJob
Timer和Ticker
在Go语言中,Timer是一次性定时器。Ticker是周期性定时器。
// 延迟5s中,打印一个hello world
func DelayFunction() {
timer := time.NewTimer(5 * time.Second)
select {
case <- timer.C:
log.Println("hello World")
}
}
// 周期性的每隔5s打印一个hello world
func TickerFunction() {
ticker := time.NewTicker(5 * time.Second)
defer ticker.Stop()
for range ticker.C {
log.Println("hello World")
}
}
for range ticker.C会持续的从管道中获取事件,收到事件后打印一行日志。
任务调度 Quartz
分布式定时任务
特点:
执行方式:
实现原理
整体架构
触发:什么时间点触发
调度:怎么协调机器进行调度
执行:单台机器怎么执行好任务
数据流
功能架构
控制台
一个任务可能被执行多次,每次执行会生成一个不同的任务实例。
触发器
方案1:
方案2:
轮的刻度不够,可以加一个count,表示转几圈之后,执行任务
触发器的高可用问题
数据库行锁模式
分布式锁模式
调度器
资源来源
资源调度
节点选择
任务分片
任务编排
故障转移