唯品会开源定时器框架Saturn
官网文档
架构
架构逻辑图
zk作为注册中心,通过临时节点来监听执行器的增加减少。
xxl-job也有一个执行器的管理页面,其中有自动扫描也有手动扫描。
子系统划分
调度器逻辑
通过zk事件监听,来控制事件分发,实现任务的执行等等。
需求设计
本篇主要讲线程执行,还有超时的实现,其他调度算法不在本篇讲解,自行学习。
源码解读
1.执行器执行任务
执行器的写法。
SaturnJavaJob doExecution 209
主要是通过反射来执行方法,并拿到结果。
2.执行job
3.超时处理
com.vip.saturn.job.java.SaturnJavaJob#handleJob
如果设置超时的时间,会在启动的时候开启一个定时的线程池ScheduledThreadPoolExecutor,当到这个超时的时间,还没执行完,就会设置这个超时状态,然后强杀线程。
4.面试题:如何关闭线程池
xxl-job对比
功能 | xxl-job | Saturn |
---|---|---|
执行器的管理 | 可以看下官网 | zk节点,事件 |
分片 | ✔ | ✔ |
超时设置 | ✔ | ✔ |
调度模式 | 分片,故障转移,负载均衡,动态扩容 | 分片,故障转移,动态扩容,HA,负载均衡 |
日志 | 异步打印不出来 | 不详 |