框架概况

LTS是一个轻量级分布式任务调度框架。有三种角色, JobClient, JobTracker, TaskTracker。各个节点都是无状态的,可以部署多个,来实现负载均衡,实现更大的负载量, 并且框架具有很好的容错能力。 采用多种注册中心(Zookeeper,redis等)进行节点信息暴露,master选举。(Mongo or Mysql)存储任务队列和任务执行日志, netty做底层通信。

JobClient : 主要负责提交任务, 和 接收任务执行反馈结果。
JobTracker : 负责接收并分配任务,任务调度。
TaskTracker: 负责执行任务,执行完反馈给JobTracker。
支持任务类型:

实时任务
也支持定时任务 (如:3天之后执行)
CronExpression (如:0 0/1 * * * ?)
感兴趣,请加QQ群:109500214 一起探讨、完善。并且记得star一下哈,3Q

github地址:https://github.com/qq254963746/light-task-scheduler

架构图

节点组:

  1. 一个节点组等同于一个集群,同一个节点组中的各个节点是对等的,外界无论连接节点组中的任务一个节点都是可以的。
  2. 每个节点组中都有一个master节点(master宕机,会自动选举出新的master节点),框架会提供接口API来监听master节点的变化,用户可以自己使用master节点做自己想做的事情。
  3. JobClient和TaskTracker都可以存在多个节点组。譬如 JobClient 可以存在多个节点组。 譬如:JobClient 节点组为 ‘lts_WEB’ 中的一个节点提交提交一个 只有节点组为’lts_TRADE’的 TaskTracker 才能执行的任务。
  4. (每个集群中)JobTacker只有一个节点组。
  5. 多个JobClient节点组和多个TaskTracker节点组再加上一个JobTacker节点组, 组成一个大的集群。

工作流程:

  1. JobClient 提交一个 任务 给 JobTracker, 这里我提供了两种客户端API, 一种是如果JobTracker 不存在或者提交失败,直接返回提交失败。另一种客户端是重试客户端, 如果提交失败,先存储到本地FailStore(可以使用NFS来达到同个节点组共享leveldb文件的目的,多线程访问,已经做了文件锁处理),返回 给客户端提交成功的信息,待JobTracker可用的时候,再将任务提交。
  2. JobTracker收到JobClient提交来的任务,将任务存入任务队列。JobTracker等待TaskTracker的Pull请求,然后将任务Push给TaskTracker去执行。
  3. TaskTracker收到JobTracker分发来的任务之后,然后从线程池中拿到一个线程去执行。执行完毕之后,再反馈任务执行结果给 JobTracker(成功or 失败[失败有失败错误信息]),如果发现JobTacker不可用,那么存储本地FailStore,等待TaskTracker可用的时候再反馈。反馈 结果的同时,询问JobTacker有没有新的任务要执行。
  4. JobTacker收到TaskTracker节点的任务结果信息。根据任务信息决定要不要反馈给客户端。不需要反馈的直接删除,需要反馈的,直接反馈,反馈失败进入FeedbackQueue, 等待重新反馈。
  5. JobClient收到任务执行结果,进行自己想要的逻辑处理。

特性

负载均衡:

JobClient和TaskTracker可是根据自己设置的负载均衡策略来请求JobTracker节点组中的一个节点。当连接上后将一直保持连接这个节点,保持连接通道,直到这个节点不可用,减少每次都重新连接一个节点带来的性能开销。

健壮性:

当节点组中的一个节点当机之后,自动转到其他节点工作。当整个节点组当机之后,将会采用存储文件的方式,待节点组可用的时候进行重发。
当执行任务的TaskTracker节点当机之后,JobTracker会将这个TaskTracker上的未完成的任务(死任务),重新分配给节点组中其他节点执行。

伸缩性

因为各个节点都是无状态的,可以动态增加机器部署实例, 节点关注者会自动发现。
扩展性:
采用和dubbo一样的SPI扩展方式,可以实现任务队列扩展,日志记录器扩展等
日志记录
对于任务的分发,执行,还有用户通过 (BizLogger) 【LtsLoggerFactory.getBizLogger()】 输入的业务日志,LTS都有记录,用户可以在LTS Admin 后台界面查看某个任务的所有日志,可以实时查看这个任务的执行情况。

开发计划

WEB后台管理:性能统计分析,预警等
实现LTS的分布式队列存储
LTS Admin

调用示例
下面提供的是最简单的配置方式。更多配置请查看 lts-example 模块下的 API 调用方式例子.

JobTracker 端

    final JobTracker jobTracker = new JobTracker();// 节点信息配置jobTracker.setRegistryAddress("zookeeper://127.0.0.1:2181");// 1. 任务队列用mongojobTracker.addConfig("job.queue", "mongo");// mongo 配置jobTracker.addConfig("mongo.addresses", "127.0.0.1:27017"); jobTracker.addConfig("mongo.database", "lts");jobTracker.setOldDataHandler(new OldDataDeletePolicy());// 启动节点jobTracker.start();

TaskTracker端

    TaskTracker taskTracker = new TaskTracker();taskTracker.setJobRunnerClass(TestJobRunner.class);taskTracker.setRegistryAddress("zookeeper://127.0.0.1:2181");taskTracker.setNodeGroup("test_trade_TaskTracker");taskTracker.setWorkThreads(20);taskTracker.start();// 任务执行类public class TestJobRunner implements JobRunner {@Overridepublic void run(Job job) throws Throwable {System.out.println("我要执行"+ job);System.out.println(job.getParam("shopId"));// TODO 用户自己的业务逻辑, 应该保证幂等try {Thread.sleep(5*1000L);} catch (InterruptedException e) {e.printStackTrace();}}}

JobClient端

 JobClient jobClient = new RetryJobClient();// final JobClient jobClient = new JobClient();jobClient.setNodeGroup("test_jobClient");jobClient.setRegistryAddress("zookeeper://127.0.0.1:2181");jobClient.start();// 提交任务Job job = new Job();job.setTaskId("3213213123");job.setParam("shopId", "11111");job.setTaskTrackerNodeGroup("test_trade_TaskTracker");// job.setCronExpression("0 0/1 * * * ?");  // 支持 cronExpression表达式// job.setTriggerTime(new Date()); // 支持指定时间执行Response response = jobClient.submitJob(job);

项目主页:http://www.open-open.com/lib/view/home/1434375729020

LTS 轻量级分布式任务调度框架(Light Task Scheduler)相关推荐

  1. LTS 轻量级分布式任务调度框架(Light Task Schedule) - 推酷

    LTS 轻量级分布式任务调度框架(Light Task Schedule) - 推酷

  2. hadoop 依赖式job_每天一学:一个轻量级分布式任务调度框架 XXL-JOB

    概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用. 官方地址中文版:http://www.xux ...

  3. 自己动手实现分布式任务调度框架

    前段时间,公司要改造现有的单节点调度为分布式任务调度,然后就研究了目前市面上主流的开源分布式任务调度框架,用起来就一个感觉:麻烦!特别是之前在一个类里写了好多个调度任务,改造起来更加麻烦.我这人又比较 ...

  4. XXL-Job分布式任务调度框架-- 介绍和调度中心的搭建启动1

    一 xxl-job介绍 1.1 xxl-job介绍 xxl-job是轻量级的分布式任务调度框架,目标是开发迅速.简单.清理.易扩展; 老版本是依赖quartz的定时任务触发,在v2.1.0版本开始 移 ...

  5. 轻量级分布式任务调度平台 XXL-JOB

    From:https://www.cnblogs.com/xuxueli/p/5021979.html github 地址 及 中文文档地址:https://github.com/xuxueli/xx ...

  6. 生产环境的分布式任务调度框架如何选择?quartz、xxl-job、Elastic-Job、Saturn

    一.Quartz 支持集群和分布式,但是没有友好的管理界面,功能单一,对于管理调用的任务比较困难. quartz使用数据库锁.在quartz的集群解决方案里有张表scheduler_locks,qua ...

  7. 分布式任务调度框架和微服务的区别

    一.前言 分布式大行其下的时代,让大家彻底的抛弃了传统陈旧的技术框架.几乎每一个技术人都知道和掌握了微服务架构,微服务自然有它的美,但是所以技术框架都必须服务于业务,结合自身业务选取甚至自研适合自身的 ...

  8. 分布式任务调度框架Power-Job

    分布式任务调度框架的由来及对比 在大型业务业务系统中,不可避免会出现一些需要定时执行需求的场景,例如定时同步数据,定时清洗数据,定时生成报表,大量机器一同执行某个任务,甚至有些需要分布式处理的任务例如 ...

  9. 分布式任务调度框架(Temporal)介绍

    分布式任务调度框架基本能力: 任务管理能力(增删改查.执行.定时执行.延时执行.健康监控) 集群管理能力(扩展简单.效率高) 编程能力(运行代码) Web界面管理 目前市面上有很多可用于处理分布式任务 ...

最新文章

  1. 机器人流程自动化技术的新发展
  2. java hashmap 初始化赋值_HashMap引用传递,对象直接赋值,修改的是同一个对象,new HashMap「」(Map)才是生成新的对象...
  3. python reader循环_python – 多次循环遍历csv.DictReader行
  4. 以前的的华为手机可不可以用鸿蒙系统_鸿蒙系统面世之后,以前的华为手机可以用鸿蒙系统吗?不好意思!...
  5. 阿里巴巴云原生应用安全防护实践与 OpenKruise 的新领域
  6. gc机制 php7_PHP7垃圾回收机制详解(附GC处理完整流程图)
  7. LeetCode-652. 寻找重复的子树
  8. 显示所有大写字母python_python 输出所有大小写字母的方法
  9. 机器学习算法工程师的经典面试问题
  10. PAT (Basic Level) Practice1006 换个格式输出整数
  11. 2021暗月web渗透测试攻防全栈红队视频教程网络安全程师培训全系列学习心得分享
  12. 支气管炎的饮食要注意哪些
  13. 基于C#和SQL SERVER的企业进销存管理系统的设计和实现
  14. 教程丨如何在AdsPower浏览器内快速配置UCloud 服务器
  15. python + selenium 自动化测试框架
  16. 杨过最后达到了独孤求败的什么境界, 其实金庸在书中已说明
  17. android 手机 报证书错误,安卓 ssl证书 安卓ssl证书出现错误的可能原因? - SSL网...
  18. 【毕业设计_课程设计】基于python的微信公众平台机器人的设计与实现
  19. 自然语言处理从零到入门 BERT
  20. linux传不上去文件,linux下上传文件,文件上传不上去

热门文章

  1. 笔记本电脑哪个品牌好 最新笔记本电脑排行榜前十名2023
  2. Python中的listdir()函数
  3. python 定时播放音乐_树莓派定时播放音乐,Python3.7
  4. pp助手安装app出现“ApplicationVerificationFailed”问题的解决
  5. mysql create definer_mysql stored routine (存储例程) 中 definer 的作用 和实例
  6. 基于tensorflow的聊天机器人
  7. Excel批量解密文件夹下密码一致的文件
  8. 一介草民对国内电子商务的挫见长篇连载
  9. 元宇宙产业委调研行杭州站 | 联合西溪谷管委会共商元宇宙赋能实体经济
  10. Android应用如何实现换肤功能