`

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

    博客分类:
  • java
阅读更多
LTS 轻量级分布式任务调度框架(Light Task Scheduler)
-----------------

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

支持任务类型:
* 实时任务
* 也支持定时任务 (如:3天之后执行)
* CronExpression (如:0 0/1 * * * ?)

感兴趣,请加群:109500214 一起探讨、完善。并且记得star一下哈,3Q

github地址:https://github.com/ltsopensource/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](https://github.com/qq254963746/light-task-scheduler/tree/master/lts-example/src/main/java/com/lts/example/api) 模块下的 API 调用方式例子.

JobTracker 端
    final JobTracker jobTracker = new JobTracker();
    // 节点信息配置
    jobTracker.setRegistryAddress("zookeeper://127.0.0.1:2181");
    // 1. 任务队列用mongo
    jobTracker.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 {
        @Override
        public 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);


分享到:
评论

相关推荐

    分布式任务调度框架 集合

    LTS是一个轻量级分布式任务调度框架。有三种角色, JobClient, JobTracker, TaskTracker。 4. uncode-schedule 基于zookeeper+spring task的分布式任务调度组件,非常小巧,无需任何修改就可以使spring task具备...

    LTS分布式任务调度

    LTS(Lightweight Task Scheduler)是一种轻量级的分布式任务调度框架,专为处理大规模、高并发的任务调度场景而设计。LTS在云计算环境中广泛使用,尤其适用于需要高效、稳定地执行大量异步任务的应用场景。其核心...

    lts-admin分布式作业调度

    LTS,全称Light-Task-Scheduler,是一个轻量级的分布式作业调度平台,设计目标是提供简单易用、高可用、可扩展的任务调度服务。它的主要功能包括任务创建、执行监控、故障恢复以及丰富的调度策略。LTS适用于各种需要...

    lts分布式任务调度系统

    LTS(Lightweight Task Scheduler)分布式任务调度系统是一款高效、易用、稳定、可扩展的任务调度框架,旨在解决大规模分布式环境下的任务调度问题。LTS的核心功能包括任务的提交、执行、监控以及异常处理,为开发者...

    分布式任务调度系统调研

    LTS是一个轻量级的任务调度框架,用于解决分布式环境下的任务调度问题。其特点是具有良好的伸缩性、扩展性和健壮性,在多家公司中得到广泛应用。 **架构设计** LTS的架构主要由四个节点组成: 1. **JobClient**:...

    分布式任务调度

    **LTS**(轻量级任务调度器)是一款专为解决分布式环境下的任务调度问题而设计的框架。它支持多种类型的任务,如实时任务、定时任务以及Cron任务。其优秀的伸缩性、扩展性及稳定性和健壮性使其成为众多公司的首选...

    jobs分布式任务调度平台

    分布式任务调度平台Jobs是针对大型企业或互联网公司设计的一种高效、稳定、可扩展的任务调度解决方案。它基于Java开发,能够支持分布式环境中的任务管理和执行,适用于大数据处理、定时任务、实时计算等多种场景。...

    light-task-scheduler.rar

    LTS是一个轻量级分布式任务调度框架。有三种角色, JobClient, JobTracker, TaskTracker。各个节点都是无状态的,可以部署多个,来实现负载均衡,实现更大的负载量, 并且框架具有很好的容错能力。 采用多种注册中心...

    lts消息分布式源码

    Light Task Scheduler(LTS)是基于Java开发的一个轻量级任务调度框架,它提供了一种简单的方式来定义、提交和执行任务。LTS的核心特性包括: 1. 分布式:LTS支持分布式部署,可以将任务分散到多台服务器上,提高...

    大数据“分布式调度框架”大集合.docx

    Elastic-job-lite是一款轻量级、无中心化的解决方案,依赖Zookeeper进行任务协调。它通过监听Zookeeper数据变化来执行任务,运维平台通过读取Zookeeper数据展示作业状态,两者完全解耦。Elastic-job-lite简化了...

    light-task-scheduler-1.7.0.zip

    "light-task-scheduler"(简称LTS)是一个轻量级的分布式任务调度框架,旨在简化分布式环境下的任务调度管理。1.7.0版本是该框架的一个稳定发布,包含了许多优化和改进,使得它更适合大规模、高并发的业务场景。 二...

    light-task-scheduler:分布式计划作业框架

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

    LTS用户文档

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

    ThinkPHP轻量级PHP开发框架v5.1RC2核心版

    ThinkPHP是一个性能卓越并且功能丰富的轻量级PHP开发框架,本身具有很多的原创特性,并且倡导大道至简,开发由我的开发理念,用最少的代码完成更多的功能,宗旨就是让WEB应用开发更简单、更快速。遵循Apache2开源...

    lts admin管理war

    LTS(Light Task Scheduler)是一个开源的任务调度系统,专注于简单易用、高可用、高性能。标题中的“lts admin管理war”指的是使用LTS的管理界面来管理任务调度。这个管理界面通常是以WAR(Web Application Archive...

    LTS 使用说明文档1

    LTS(Leader The Sandbox)是一个基于 Java 的分布式任务执行框架,旨在提供一个灵活、可靠、高效的任务执行机制。下面是 LTS 使用说明文档的知识点总结: LTS 模块介绍 LTS 项目由多个模块组成,每个模块都有其...

    轻量级虚拟机工具Multipass介绍.docx

    轻量级虚拟机工具 Multipass 介绍 轻量级虚拟机工具 Multipass 是一个功能强大且轻量级的虚拟机命令管理工具,支持 Linux、Windows 和 macOS 等多种操作系统。与传统的虚拟机工具 VMware 相比,Multipass 具有更小...

    dataX+xxl-job+openjdk11+默认执行器+python

    **xxl-job**: XXL-JOB是一个轻量级的分布式任务调度平台,设计目标是为微服务架构提供简单易用的定时任务调度中心。它支持分片任务、分布式执行、故障转移、监控、日志管理等功能。XXL-JOB提供了一个Web界面,便于...

    FreeRTOS-LTS-202012-LTS.zip

    FreeRTOS 是一款轻量级、开源的实时操作系统,它的主要目标是在资源有限的微控制器上实现高效的任务调度和管理。FreeRTOS 的设计原则是简洁、模块化,允许开发者根据需求选择和配置内核功能,以适应不同的硬件平台和...

    架构:Hyperledger Fabric是用于开发解决方案和应用程序的企业级许可分布式账本框架。 其模块化和通用设计满足了广泛的行业用例。 它提供了一种独特的共识方法,可在保持隐私的同时实现大规模性能

    Hyperledger Fabric是分布式账本解决方案的平台,其模块化架构提供了高度的机密性,灵活性,灵活性和可扩展性。 它旨在支持不同组件的可插拔实现,并适应整个经济生态系统中存在的复杂性和复杂性。 Hyperledger ...

Global site tag (gtag.js) - Google Analytics