nmyphp/tbschedule

同项目衍进交流

Closed this issue · 10 comments

hi,我们这也是内部使用tbschedule多年(5年以上)了,这两年也做了相应的内部功能开源+演进,项目在

https://github.com/jasonjoo2010/tbschedule

主要做了多存储后端、springboot支持、xml支持、填坑等相关功能

后续可以多交流,另外可以做readme项目链接交换嘛

hiahia

Hi:

很高兴遇到同道中人,Tbschedule这个框架虽然老,但非常经典。
原生Tbschedule 经过了淘宝、当当等电商业务的检验,是一个非常成功的高可用调度框架。

但现在新的调度框架层出不穷,比如优秀的有当当的Elastic-job、XXL-JOB等,新的框架也逐渐向云原生靠拢,这是趋势。

本项目旨在向阿里Tbschedule的作者们致敬,主要供学习,以及为目前仍在线上使用的Tbschedule的同学们提供一个共同交流的平台。感谢 @jasonjoo2010,欢迎一起学习交流!

hi,@nmyphp

感谢回复

同意你的观点,我们目前整体环境也全部运行在自行构建的容器云中,schedule的衍进方向也保持在这个方向,tbschedule的坑基本踩过一遍,以后可以多交流。

@jasonjoo2010,您好!
我们最近在使用TBSchedule,但是在生产环境中发现,经常会出现定时任务停止执行的情况,请问你们之前有遇到过吗?原因及解决措施是什么?多谢。

@jasonjoo2010,您好!
我们最近在使用TBSchedule,但是在生产环境中发现,经常会出现定时任务停止执行的情况,请问你们之前有遇到过吗?原因及解决措施是什么?多谢。

补充一句,查看日志,会有网络连接中断的现象。

@jasonjoo2010,您好!
我们最近在使用TBSchedule,但是在生产环境中发现,经常会出现定时任务停止执行的情况,请问你们之前有遇到过吗?原因及解决措施是什么?多谢。

这个一般是由于长时间连接空闲或zk服务端有一些耗时任务(例如清日志、dump文件)导致io有波动引起leader漂移等引起的,老的tbschedule因为是直接使用的zookeeper库,所以会报比如ConnectionLoss、SessionTimeout或一些连接对象置空,再也连不上的问题(也就是导致xuannan代码中注释的所谓大循环停止),这种严重时就只能重启实例了

这个要么针对性地处理下连接相关的逻辑处理(但因为是纯异步框架,状态维护比较麻烦),在异常时不会中断外循环,要么直接换成curator这种更简单易用的客户端封装,直接内置了较完善的状态维护和处理。

另外老版本还有一些逻辑会导致线程组在重新分配调度时丢失控制权,继而会报“超过20个周期未获得任务项”的错误,可以参考这个提交:

僵死的线程组fix(定时调用时):
jasonjoo2010/tbschedule@3540e3f

大循环fix
jasonjoo2010/tbschedule@941ba88

但最后我们还是更换为了curator而不是继续在zookeeper上折腾了,因为还有更复杂的多后端存储要支持

@jasonjoo2010,您好!
我们最近在使用TBSchedule,但是在生产环境中发现,经常会出现定时任务停止执行的情况,请问你们之前有遇到过吗?原因及解决措施是什么?多谢。

这个一般是由于长时间连接空闲或zk服务端有一些耗时任务(例如清日志、dump文件)导致io有波动引起leader漂移等引起的,老的tbschedule因为是直接使用的zookeeper库,所以会报比如ConnectionLoss、SessionTimeout或一些连接对象置空,再也连不上的问题(也就是导致xuannan代码中注释的所谓大循环停止),这种严重时就只能重启实例了

这个要么针对性地处理下连接相关的逻辑处理(但因为是纯异步框架,状态维护比较麻烦),在异常时不会中断外循环,要么直接换成curator这种更简单易用的客户端封装,直接内置了较完善的状态维护和处理。

另外老版本还有一些逻辑会导致线程组在重新分配调度时丢失控制权,继而会报“超过20个周期未获得任务项”的错误,可以参考这个提交:

僵死的线程组fix(定时调用时):
jasonjoo2010/tbschedule@3540e3f

大循环fix
jasonjoo2010/tbschedule@941ba88

但最后我们还是更换为了curator而不是继续在zookeeper上折腾了,因为还有更复杂的多后端存储要支持

多谢!按您的指点我再研究一下。
另请问您提交的Tbschedule版本(https://github.com/jasonjoo2010/tbschedule)在生产环境中使用没有问题吧?

@jasonjoo2010
不过我们的定时任务是2分钟执行一次,应该还是比较频繁的。空闲时间很短。

@jasonjoo2010
不过我们的定时任务是2分钟执行一次,应该还是比较频繁的。空闲时间很短。

2min不频繁,我们几百个任务几十个节点的很多,新版本的话建议你可以逐个项目测试环境先测试下,测试完再生产,我们是在生产的

@jasonjoo2010
不过我们的定时任务是2分钟执行一次,应该还是比较频繁的。空闲时间很短。

2min不频繁,我们几百个任务几十个节点的很多,新版本的话建议你可以逐个项目测试环境先测试下,测试完再生产,我们是在生产的

好的,多谢了!
不过您的代码我下载下来编译还有点问题。连接maven库下载相关的pom文件时总是出错。

编译过了。多谢。