这是我参与 8 月更文挑战的第 10天,活动详情查看: 8月更文挑战
最近参加公司培训,主要是各系统间的调用问题,对于跨项目的问题比如说我子系统需要调用核心系统,以什么样的方式最好呢,多个子系统调用呢,各种的任务调度,那不得不请出今天的主角XXL-JOB(轻量级分布式任务调度平台);
今天我们就来好好说道说道这个优秀产品;我百度一搜索,第一个就是xxl-job,没有任何的乱入,点进去我们寻找一下它的架构图,看看这款优秀产品是如何设计的
“调度中心”基于Quartz实现并支持集群部署,
xxl-job 设计分两个模块 调度中心 **, 执行器;**XXL-JOB中“调度模块”和“任务模块”完全解耦,调度模块进行任务调度时,将会解析不同的任务参数发起远程调用,调用各自的远程执行器服务。这种调用模型类似RPC调用,调度中心提供调用代理的功能,而执行器提供远程服务的功能。具体流程是子系统发布任务-->执行器注册-->任务下发到任务执行服务(这里会有线程池)-->执行结果再异步上报-->监控啊,日志啊,再进行一些后置处理,不过主流程任务是结束了;
它支持的是mysql数据库来进行存储子系统的任务,集群情况下各节点务必连接同一个mysql实例,如果是主从节点的话调度中心集群节点务必强制走主库,推荐集群部署的时候使用nginx为调度中心来实现负载均衡,这里的mysql还有一个作用就是保证一致性:“调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行(这是非常重要的);
对于任务触发、任务调度、任务失败、任务阻塞、任务超时、任务路由这些都存在着策略性,我们可以按需配置,选一个符合项目要求的,且支持web端对任务进行操作,这里要注意的是任务是全异步的:任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,有效对密集调度进行流量削峰,理论上支持任意时长任务的运行;
更方便的是部署,如果你熟悉docker,可以更方便的进行部署,如果想要搭建这个项目可以自行去GitHub上查看;我们系统的流程就是xxl-job被子系统接收任务,然后将子系统的任务通过rpc也好,restful也好,发送到核心或者其他业务系统进行分析,然后内部Zookeeper也好,redis也好,来进行处理这些任务,达到一个集群化处理任务的方式;