轻量级分布式任务调度框架(一、LTS简介、特点、工作流程)

轻量级分布式任务调度框架(⼀、LTS简介、特点、⼯作流程)
LTS路上有惊慌
【轻量级分布式任务调度框架(Light Task Schedule)】
(1) LTS简介
LTS(light-task-scheduler)主要⽤于解决分布式任务调度问题,⽀持实时任务,定时任务和Cron任务。有较好的伸缩性,扩展性,健壮稳定性⽽被多家公司使⽤,同时也希望开源爱好者⼀起贡献。
(2) LTS框架概况
(2.1) LTS 四种节点余热锅炉
JobClient:主要负责提交任务, 并接收任务执⾏反馈结果。
JobTracker:负责接收并分配任务,任务调度。
TaskTracker:负责执⾏任务,执⾏完反馈给JobTracker。
LTS-Admin:主要负责节点管理,任务队列管理,监控管理等。
详解:
其中JobClient,JobTracker,TaskTracker节点都是⽆状态的。可以部署多个并动态的进⾏删减,来实现负载均衡,实现更⼤的负载量, 并且框架采⽤FailStore 策略使LTS具有很好的容错能⼒。
LTS注册中⼼提供多种实现(Zookeeper,redis等),注册中⼼进⾏节点信息暴露,master选举。(Mongo or Mysql)存储任务队列和任务执⾏⽇志, netty or mina做底层通信, 并提供多种序列化⽅式fastjson, hessian2, java等。
(2.2) LTS⽀持任务类型
实时任务:提交了之后⽴即就要执⾏的任务。
定时任务:在指定时间点执⾏的任务,譬如今天3点执⾏(单次)。
Cron任务:周期性任务,CronExpression,和quartz类似(但是不是使⽤quartz实现的)譬如 0 0/1 * * * ?
⽀持动态修改任务参数,任务执⾏时间等设置,⽀持后台动态添加任务,⽀持Cron任务暂停,⽀持⼿动停⽌正在执⾏的任务(有条件),⽀持任务的监控统计,⽀持各个节点的任务执⾏监控,JVM监控等等.
(3) LTS架构图
组件说明:
广州市中小客车总量调控管理试行办法节点组
NodeGroup:⼀个节点组等同于⼀个⼩的集,同⼀个节点组中的各个节点是对等的,等效的,对外提供相同的服务。
每个节点组中都有⼀个master节点,这个master节点是由LTS动态选出来的,当⼀个master节点挂掉之后,LTS会⽴马选出另外⼀个master节点,框架提供API 监听接⼝给⽤户。
FailStore
顾名思义,这个主要是⽤于失败了存储的,主要⽤于节点容错,当远程数据交互失败之后,存储在本地,等待远程通信恢复的时候,再将数据提交。FailStore主要⽤户JobClient的任务提交,TaskTracker的任务反馈,TaskTracker的业务⽇志传输的场景下。
FailStore⽬前提供⼏种实现:leveldb,rocksdb,berkeleydb,mapdb,ltsdb,⽤于可以⾃由选择使⽤哪种,⽤户也可以采⽤SPI扩展使⽤⾃⼰的实现。
(4) LTS-Admin新版界⾯预览
泽巴足⽬前后台带有由ztajy提供的⼀个简易的认证功能. ⽤户名密码在auth.cfg中,⽤户⾃⾏修改.
(5) LTS特性
(5.1) Spring⽀持
LTS可以完全不⽤Spring框架,但是考虑到很⽤⽤户项⽬中都是⽤了Spring框架,所以LTS也提供了对Spring的⽀持,包括Xml和注解,引⼊lts-spring.jar即可。
(5.2) 业务⽇志记录器
在TaskTracker端提供了业务⽇志记录器,供应⽤程序使⽤,通过这个业务⽇志器,可以将业务⽇志提交到JobTracker,这些业务⽇志可以通过任务ID串联起来,可以在LTS-Admin中实时查看任务的执⾏进度。
(5.3) SPI扩展⽀持
SPI扩展可以达到零侵⼊,只需要实现相应的接⼝,并实现即可被LTS使⽤,⽬前开放出来的扩展接⼝
有对任务队列的扩展,⽤户可以不选择使⽤mysql或者mongo作为队列存储,也可以⾃⼰实现。对业务⽇志记录器的扩展,⽬前主要⽀持console,mysql,mongo,⽤户也可以通过扩展选择往其他地⽅输送⽇志。
(5.4) 故障转移
当正在执⾏任务的TaskTracker宕机之后,JobTracker会⽴马将分配在宕机的TaskTracker的所有任务再分配给其他正常的TaskTracker节点执⾏。
(5.5) 节点监控
可以对JobTracker,TaskTracker节点进⾏资源监控,任务监控等,可以实时的在LTS-Admin管理后台查看,进⽽进⾏合理的资源调配。
(5.6) 多样化任务执⾏结果⽀持
LTS框架提供四种执⾏结果⽀持,EXECUTE_SUCCESS,EXECUTE_FAILED,EXECUTE_LATER,EXECUTE_EXCEPTION,并对每种结果采取相应的处理机制,譬如重试。
EXECUTE_SUCCESS: 执⾏成功,这种情况,直接反馈客户端(如果任务被设置了要反馈给客户端)。
EXECUTE_FAILED:执⾏失败,这种情况,直接反馈给客户端,不进⾏重试。
EXECUTE_LATER:稍后执⾏(需要重试),这种情况,不反馈客户端,重试策略采⽤1min,2min,3min的策略,默认最⼤重试次数为10次,⽤户可以通过参数设置修改这个重试次数。
EXECUTE_EXCEPTION:执⾏异常, 这中情况也会重试(重试策略,同上)
(5.7) FailStore容错
采⽤FailStore机制来进⾏节点容错,Fail And Store,不会因为远程通信的不稳定性⽽影响当前应⽤的运⾏。具体FailStore说明,请参考概念说明中的FailStore 说明。
(6) LTS⼯作流程
下图是⼀个标准的实时任务执⾏流程。kcv
解析:
JobClient 提交⼀个任务给 JobTracker, 这⾥我提供了两种客户端API, ⼀种是如果JobTracker 不存在或者提交失败,直接返回提交失败。另⼀种客户端是重试客户端, 如果提交失败,先存储到本地FailSt
ore(可以使⽤NFS来达到同个节点组共享leveldb⽂件的⽬的,多线程访问,已经做了⽂件锁处理),返回给客户端提交成功的信息,待JobTracker可⽤的时候,再将任务提交。
JobTracker收到JobClient提交来的任务,将任务存⼊任务队列。JobTracker等待TaskTracker的Pull请求,然后将任务Push给TaskTracker去执⾏。TaskTracker收到JobTracker分发来的任务之后,然后从线程池中拿到⼀个线程去执⾏。执⾏完毕之后,再反馈任务执⾏结果给 JobTracker(成功or 失败[失败有失败错误信息]),如果发现JobTacker不可⽤,那么存储本地FailStore,等待TaskTracker可⽤的时候再反馈。反馈结果的同时,询问JobTacker有没有新的任务要执⾏。
JobTacker收到TaskTracker节点的任务结果信息。根据任务信息决定要不要反馈给客户端。不需要反馈的直接删除,需要反馈的,直接反馈,反馈失败进⼊FeedbackQueue, 等待重新反馈。
开瑞论坛
JobClient收到任务执⾏结果,进⾏⾃⼰想要的逻辑处理。
轻量级分布式任务调度框架LTS系列

本文发布于:2024-09-23 12:23:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/284518.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:任务   反馈   节点   提供   客户端   提交   重试
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议