Lts分布式任务调度

来源:互联网 发布:飞飞cms安装教程 编辑:程序博客网 时间:2024/05/21 11:33

1LTS简介

LTS(light-task-scheduler)主要用于解决分布式任务调度问题,支持实时任务,定时任务和Cron任务。有较好的伸缩性,扩展性,健壮稳定性而被多家公司使用,同时也希望开源爱好者一起贡献。

LTS节点

JobClient:主要负责提交任务,并接收任务执行反馈结果。

JobTracker:负责接收并分配任务,任务调度。

TaskTracker:负责执行任务,执行完反馈给JobTracker

LTS-Admin:主要负责节点管理,任务队列管理,监控管理等。

其中JobClinetJobTrackerTaskTracker节点都是无状态的。 可以部署多个并动态的进行删减,来实现负载均衡,实现更大的负载量, 并且框架采用FailStore策略使LTS具有很好的容错能力。

LTS任务类型

实时任务:提交了之后立即就要执行的任务。

定时任务:在指定时间点执行的任务。

Cron任务:周期性任务,CronExpression,和quartz类似。

LTS架构图

 

 

LTS特性

1Spring支持

LTS可以完全不用Spring框架,但是考虑到很用用户项目中都是用了Spring框架,所以LTS也提供了对Spring的支持,包括Xml和注解,引入lts-spring.jar即可。

2、业务日志记录器

TaskTracker端提供了业务日志记录器,供应用程序使用,通过这个业务日志器,可以将业务日志提交到JobTracker,这些业务日志可以通过任务ID串联起来,可以在LTS-Admin中实时查看任务的执行进度。

3SPI扩展支持

SPI扩展可以达到零侵入,只需要实现相应的接口,并实现即可被LTS使用,目前开放出来的扩展接口有对任务队列的扩展,用户可以不选择使用mysql或者mongo作为队列存储,也可以自己实现。对业务日志记录器的扩展,目前主要支持consolemysqlmongo,用户也可以通过扩展选择往其他地方输送日志。

4、故障转移

当正在执行任务的TaskTracker宕机之后,JobTracker会立马将分配在宕机的TaskTracker的所有任务再分配给其他正常的TaskTracker节点执行。

5、节点监控

可以对JobTrackerTaskTracker节点进行资源监控,任务监控等,可以实时的在LTS-Admin管理后台查看,进而进行合理的资源调配。

6、多样化任务执行结果支持

LTS框架提供四种执行结果支持,EXECUTE_SUCCESSEXECUTE_FAILEDEXECUTE_LATEREXECUTE_EXCEPTION,并对每种结果采取相应的处理机制,譬如重试。

EXECUTE_SUCCESS: 执行成功,这种情况,直接反馈客户端(如果任务被设置了要反馈给客户端)。

EXECUTE_FAILED:执行失败,这种情况,直接反馈给客户端,不进行重试。

EXECUTE_LATER:稍后执行(需要重试),这种情况,不反馈客户端,重试策略采用1min2min3min的策略,默认最大重试次数为10次,用户可以通过参数设置修改这个重试次数。

EXECUTE_EXCEPTION:执行异常,这中情况也会重试(重试策略,同上)

7FailStore容错

采用FailStore机制来进行节点容错,Fail And Store,不会因为远程通信的不稳定性而影响当前应用的运行。具体FailStore说明,请参考概念说明中的FailStore说明。

2、工作流程

1. JobClient 提交一个 任务 给 JobTracker,这里我提供了两种客户端API,一种是如果JobTracker不存在或者提交失败,直接返回提交失败。另一种客户端是重试客户端,如果提交失败,先存储到本地FailStore(可以使用NFS来达到同个节点组共享leveldb文件的目的,多线程访问,已经做了文件锁处理),返回 给客户端提交成功的信息,待JobTracker可用的时候,再将任务提交。

2. JobTracker收到JobClient提交来的任务,将任务存入任务队列。JobTracker等待TaskTrackerPull请求,然后将任务PushTaskTracker去执行。

3. TaskTracker收到JobTracker分发来的任务之后,然后从线程池中拿到一个线程去执行。执行完毕之后,再反馈任务执行结果给JobTracker(成功or失败[失败有失败错误信息]),如果发现JobTacker不可用,那么存储本地FailStore,等待TaskTracker可用的时候再反馈。反馈 结果的同时,询问JobTacker有没有新的任务要执行。

4. JobTacker收到TaskTracker节点的任务结果信息。根据任务信息决定要不要反馈给客户端。不需要反馈的直接删除,需要反馈的,直接反馈,反馈失败进入FeedbackQueue,等待重新反馈。

5. JobClient收到任务执行结果,进行自己想要的逻辑处理。

3、项目搭建

准备工作

1.1下载例子,并导入进IDEAEclipse

例子地址 https://github.com/ltsopensource/lts-examples

1.2 下载Admin

地址:http://git.oschina.net/hugui/light-task-scheduler/blob/master/dist/lts-1.6.8-bin.zip

1.3 启动zookeeper

我的电脑是 192.168.202.128 端口 2181

 

1.4 启动mysql

这里假设是 127.0.0.1:3306 用户名密码:root, root

创建数据库:假设数据库名称是 lts

数据库

 

启动项目

2.1 启动JobTracker

启动 lts-examples/lts-example-jobtracker/lts-example-jobtracker-java

com.github.ltsopensource.example.java.Main ,出现

com.github.ltsopensource.core.cluster.JobNode - [LTS] ========== Start success日志

表示启动成功

 

2.2 启动TaskTracker

启动 lts-examples/lts-example-tasktracker/lts-example-tasktracker-java

com.github.ltsopensource.example.java.Main ,出现

com.github.ltsopensource.core.cluster.JobNode - [LTS] ========== Start success日志

表示启动成功

 

2.3 启动JobClient并提交任务

启动 lts-examples/lts-example-jobclient/lts-example-jobclient-java

com.github.ltsopensource.example.java.Main ,出现

com.github.ltsopensource.core.cluster.JobNode - [LTS] ========== Start success日志

表示启动成功, 这个例子里面在jobclient启动完成之后,提交了四个不同的任务。在提交

之后,你回收到任务执行完成的日志,并查看tasktracker端,也会有执行的日志

到这里一个LTS的任务执行链路已经成功打通,但是还没有一个可视化的界面提供用户查看,

操作等。

 

启动后台

3.1 解压前面下载到的lts-1.6.8-beta1-bin.zip

文件结构大概如下

-- lts-${version}-bin

|-- bin

| |-- jobtracker.cmd

| |-- jobtracker.sh

| |-- lts-admin.cmd

| |-- lts-admin.sh

| |-- lts-monitor.cmd

| |-- lts-monitor.sh

| |-- tasktracker.sh

|-- conf

| |-- log4j.properties

| |-- lts-admin.cfg

| |-- lts-monitor.cfg

| |-- readme.txt

| |-- tasktracker.cfg

| |-- zoo

| |-- jobtracker.cfg

| |-- log4j.properties

| |-- lts-monitor.cfg

|-- lib

| |-- *.jar

|-- war

|-- jetty

| |-- lib

| |-- *.jar

|-- lts-admin.war

1. 修改 conf/lts-monitor.cfgconf/lts-admin.cfg下的配置,如果有需要的话 (如果需

要改下端口,添加 port=端口号 到lts-admin.cfg)

2. 启动windows下运行bin/lts-admin.cmd, linux 下运行bin/lts-admin.sh访问

http://localhost:8081/index.htm

 

部署tomcat

拷贝 war/lts-admin.war tomcat的部署目录,解压之后,修改相应的配置文件即可

conf/lts-monitor.cfg conf/lts-admin.cfg

4、项目运行

 

0 0
原创粉丝点击