`
eric_weitm
  • 浏览: 235947 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

light-task-scheduler

 
阅读更多

lts 基本逻辑:

lts 代表light-task-scheduler,https://github.com/ltsopensource/light-task-scheduler

 

一、是什么

分布式动态调度的框架

二、为什么

1、周期性、定时性的任务可以使用调度器scheduler(每个任务一个线程,对于周期性任务非常浪费资源)

2、如果有非常多调度性任务需要处理,可以每台机器分别布置一套调度器,并且不同机器调度不同的任务。

3、2中每个机器进行调度很浪费(比如每1ms检查一次条件),不同的任务不能跨机器共享硬件,而且无法看到所有调度任务的整体的情况。

另一种方案是,一个master进行时间和条件的调度,到了执行条件再扔给具体的机器执行,这样很方便进行横向扩展,只要维护一套调度集群,就解决所有调度需求(分布式调度)

4、分布式调度引进的问题:某个正在执行的机器挂了怎么恢复?(故障转移)具体执行逻辑怎么封装和提交?怎么动态扩展容量?需要的机器永远故障怎么办?(Fail And Store)解决通信故障

 

三、主要组件

JobClient:提交任务(存档到mysql),一般是应用端的一部分,向jobtracker发消息

JobTracker;统一接收任务,进行条件的调度,条件满足时发给taskTracker

TaskTracker:真正干活的,运行应用本身的Runner

Admin:后台

Monitor:监控

 

所有东西加一起,构成一个cluster

四、内部实现

1、jobtracker核心逻辑

com.github.ltsopensource.jobtracker.support.JobPusher#send 

从appcontext的XXQueue里面取出task,用netty走网络分发给各个taskTracker执行(传递参数)

2、tasktracker:

com.github.ltsopensource.tasktracker.runner.RunnerPool#execute

JobRunnerDelegate

DefaultRunnerFactory----具体的runner实现

五、部署

一般 job task admin/monitor分离,通过配置一样的lts.tasktracker.cluster-name,构成一个集群。

六、启动顺序

jobTracker taskTracker(配runner类,设置lts.tasktracker.node-group) client(指定tasktracker) admin

不同功能需要启动不同的taskTracker实例

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics