zl程序教程

您现在的位置是:首页 >  Python

当前栏目

xxl-job重复执行问题

2023-04-18 16:15:06 时间

一,xxl-job服务

集群部署(两台)

二,问题描述

有一个job1min执行一次,查询一个中间表数据,循环发生esb,得到结果,更新表。当数据量比较大时,会出现数据重复发送了esb,推测job重复执行了,业务耗时比较长,超过了1min,下一个job时间到了,再次查询,取到了同样的数据,导致重复执行

从结果看,说明重复执行了

1.esb报错日志,重复发送了

2.xxl-job日志,1min一次,17点下发量比较大

三,解决方案-聊天记录

I:

1.关于交接单xxl-job重复执行的问题,刚才跟宇松老师我们会议说了,向您汇报一下。xxl-job集群部署,无法做到串行执行。解决方案可以是修改策略,如下

2. 把轮询改成一致性hash

3.

 领导:一致性哈希是什么效果

I:

轮询:连续两次调度会路由到两台xxl-job上,分别开启一个线程执行

一致性hash:某个任务会一直分配到一个xxl-job服务上,可以保证单机串行执行

比如:100个任务,50,50固定分配到某个机器上,可以保证单机串行,任务在队列排队执行 

官网描述截图 

四,思考

单机部署

xxl说了,默认单机串行,比如job执行时间是每1min执行一次,实际业务执行时间是3min分钟,那么下一个时间点到了,会进入队列排队执行,如上关于单机串行的描述

集群部署

还是上面的场景,上一个任务未执行万,下一个时间点到了,会路由到另外一台机器上继续执行,为什么,因为xxl采用并行调度机制,这一点可参考官网描述

并行调度
XXL-JOB调度模块默认采用并行机制,在多线程调度的情况下,调度模块被阻塞的几率很低,大大提高了调度系统的承载量。
XXL-JOB的不同任务之间并行调度、并行执行。
XXL-JOB的单个任务,针对多个执行器是并行运行的,针对单个执行器是串行执行的。同时支持任务终止

xxl-job官网

分布式任务调度平台XXL-JOB

五.方案对比

1.延迟执行间隔,改成5min,周期大于业务时间执行时间,可行。路由策略还是轮询

2.路由策略改成 一致性hash