基于Zookeeper的TbSchedule任务调度服务部署以及应用

一、前言

前面已经说过zookeeper集群的部署,接下来我们在zookeeper集群的基础上部署tbSchedule任务调度,开始部署之前我们先来简要看看tbSchedule是什么?

  • TBSchedule:分布式任务调度框架,主要是为了协调多节点处理相同任务的避免数据被重复处理的框架,处理方式主要分为“抢占式”和“协同分配式”,通过集群的节点分担大批量任务的处理,提高批量任务的处理效率。

  • 不同处理方式的任务的侧重点不同:

    “抢占式”:没法把单个任务的数据,让其它节点协同处理,所以一般来说抢占式任务处理方式一般用于处理数据量比较小,任务比较多的场景;

    “协同分配式”:处理可以把单个任务处理的数据均分到多个jvm中进行处理的,提高数据的并行处理能力。

二、控制台部署

  1. 使用svn直接下载资源:http://code.taobao.org/svn/tbschedule/trunk基于Zookeeper的TbSchedule任务调度服务部署以及应用_第1张图片
  2.  将源码目录下的console\ScheduleConsole.war包部署到Web应用服务器,本文以apache-tomcat-7.0.92为例,放在webapps文件夹下,启动tomcat,地址栏输入地址:http://部署主机ip:8080(tomcat默认8080)/ScheduleConsole/schedule/index.jsp?manager=true,如果看到如下界面说明成功基于Zookeeper的TbSchedule任务调度服务部署以及应用_第2张图片
  3. 修改上图中红框中的内容,第一个是zookeeper部署地址,多地址逗号隔开,第二个是指定任务调度相关资源的存放位置
  4. 点击保存后,会提示 “错误信息:Zookeeper connecting ……192.168.244.128:2181”,如果ZKServer配置正确可以不用理会,直接点击“管理主页”,若不能正常跳转到Index.jsp页面请重新检查Zookeeper的配置,建议关闭防火墙。基于Zookeeper的TbSchedule任务调度服务部署以及应用_第3张图片
  5.  

    TbSchedule Console Web站点对应的两个地址

    [监控页面] http://192.168.244.128:8080/ScheduleConsole/schedule/index.jsp

    [管理页面] http://192.168.244.128:8080/ScheduleConsole/schedule/index.jsp?manager=true

    如果以上地址能正常访问则TbSchedule Console的部署配置完成。

三 、TBSchedule Worker Task 实现

  1. 测试代码:http://code.taobao.org/svn/tbschedule-test/
  2.  

    基于Zookeeper的TbSchedule任务调度服务部署以及应用_第4张图片任务名称:用于标识“任务”和策略的关联关系;

    基于Zookeeper的TbSchedule任务调度服务部署以及应用_第5张图片


    任务名称:对应调度策略中的任务名称,标识任务和策略的关联关系;

    任务处理的SpringBean:对应代码中调度任务的bean

    每次获取数据量:调度任务中selectTasks方法中 eachFetchDataNum参数接收

    自定义参数:调度任务中selectTasks方法中 taskParameter 参数接收

    任务分隔:就是“TaskItem任务项”的说明,参考:http://code.taobao.org/p/tbschedule/wiki/index/  中的“TaskItem任务项”

    处理模式:Sleep模式和NotSleep模式的区别
    1、ScheduleServer启动的工作线程组线程是共享一个任务池的。
    2、在Sleep的工作模式:当某一个线程任务处理完毕,从任务池中取不到任务的时候,检查其它线程是否处于活动状态。如果是,则自己休眠;如果其它线程都已经因为没有任务进入休眠,当前线程是最后一个活动线程的时候,就调用业务接口,获取需要处理的任务,放入任务池中,同时唤醒其它休眠线程开始工作。
    3、在NotSleep的工作模式:当一个线程任务处理完毕,从任务池中取不到任务的时候,立即调用业务接口获取需要处理的任务,放入任务池中。
    4、Sleep模式在实现逻辑上相对简单清晰,但存在一个大任务处理时间长,导致其它线程不工作的情况。
    5、在NotSleep模式下,减少了线程休眠的时间,避免大任务阻塞的情况,但为了避免数据被重复处理,增加了CPU在数据比较上的开销。同时要求业务接口实现对象的比较接口。
    6、如果对任务处理不允许停顿的情况下建议用NotSleep模式,其它情况建议用sleep模式。  

参考:https://blog.csdn.net/convict_eva/article/details/52582847

https://blog.csdn.net/liuziyingbeidou/article/details/52629500

TBSchedule 简单Demo(Maven):

https://github.com/liuziyingbeidou/springboot/tree/master/zookeeper-tbschedule

创建新任务时
执行开始时间:
每五分钟执行 /5 * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
每分钟的0秒开始 0 * * * * ?
表达式同Quartz设置的Crontab格式,有工具可以生成
详细解释参考:http://blog.csdn.net/liuziyingbeidou/article/details/52629596

你可能感兴趣的:(OTHER)