20220512_分布式任务调度组件XXLJob学习笔记总结
1概述
XXL-JOB 是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。对作者的开源精神表示感谢。
闲来无事,通过对其源码的学习理解,概况有几大特点,值得我们好好学习:
- 基于Netty实现调度中心与业务模块的高效通信
- 调度中心HA集群
- 多种路由策略的灵活选择
- 巧妙的实现父子线程变量的传递
- 线程池的灵活运用
- 调度中心任务的及时派发
- 自定义任务延时
- 任务的远程停止与终止
1.1高效通信
调度中心作为客户端,业务模块内嵌NettyHttp服务器。客户端向服务端发起请求。
1.2调度中心HA
使用的排它锁,保证集群分布式调度的一致性(目前没有HA识别功能)。
1.3多种路由策略的灵活选择
随机、轮询、第一个、最后一个、故障转移、忙碌转移、分片广播、一致性hash、最近最久未使用:频率/次数、最不经常使用:基于时间
通过上述的自定义路由策略,达到最大程度的业务需求。
1.4巧妙的实现父子线程变量的传递
通过InheritableThreadLocal实现父子线程变量的传递
1.5线程池的灵活运用
该组件大量利用ThreadPoolExecutor线程池,借助LinkedBlockingQueue阻塞队列实现任务的处理。
1.6调度中心任务的及时派发
自定义算法,通过两个线程(scheduleThread、ringThread),确保调度中心任务的及时派发
1.7自定义任务延时
基于quartz中CronExpression实现自定义任务延时
1.8任务的远程停止与终止
2代码示例
3总结
XXL-JOB的卓越表现,主要是基于Netty的多路复用、异步事件驱动NIO通信框架以及作者优秀的编成功底和技术栈。
3.1个人思考
- 调度中心使用锁,主要是为了保证集群分布式调度的一致性,在没有启用HA,是否可关闭该悲观锁功能。
- scheduleThread的最大执行周期为:5秒,导致任务停止有可能不那么及时,最坏情况下要等5秒。任务停止以后,无法一次性任务全部终止,只能在调度日志中手动一个一个处理,是否在单条日志操作中增加该功能。
网友评论