美文网首页
ElasticJob Lite调研

ElasticJob Lite调研

作者: 一只叫十块钱的猫 | 来源:发表于2018-11-08 22:44 被阅读0次

因现有系统的调度系统对作业的生命周期,执行轨迹与状态监控和报警,无统一的管理和资源规划;导致运维维护困难、调度与执行耦合性严重、开发不规范、作业周期设置不合理等因素带来的一系列定位问题困难,人工干预困难及资源控制不合理的问题;调研了几项比较热门的开源的分布式调度系统,最后因某些原因,选择了自研;

Elastic Job主要功能的

A. 开源地址 https://github.com/elasticjob/elastic-job-lite

B. Elastic Job文档 http://elasticjob.io/docs/elastic-job-lite/02-guide/

C. Bug列表 https://github.com/elasticjob/elastic-job-lite/issues

|支持功能项| 待改造项目| Elastic Job|

| ---- | ---: | :--: |

|动态管理Job生命周期| 否| 是|

|直观展示Job的web页面| 否| 是|

|Misfire功能 |否| 是|

|Job容错Failover功能| 否| 是|

|HA| 否| 是|

|跟踪Job执行轨迹| 否| 是|

|线程是否可控| 是| 否|


Elastic Job 主要支持功能项列表

A. 支持Job生命周期的管理

  1. 提供全部的job列表,支持Job的在线搜索及统计,并直观的展现Job的运行状态

  2. 支持对Job直接触发;动态的暂停,失效,及修改Job信息(Cron表达式,分片总数,携带自定义参数,是否失效转移,是否开启错过执行等主要的信息的动态修改);

B. 支持Job Fail Over 失效转移的策略

  1. 当运行Job A的所在机器 Task Server A 宕机后,如果开启失效转移,Job A会立即选择一个备机 Task Server B上补偿 执行 Job A;

  2. 触发重新选举,选择由哪台Task Server来执行 Job A;

C. 支持分布式调度协调,确保在job在分布式环境下执行的幂等性

  1. 确保一个Job在分布式环境下只有一台Task Server 在执行(注意事项),采用热备方式保证HA

  2. 通过zk leader选举,leader协调分布式环境下的Job,执行分片和清理分片

D. 支持Job MisFire 错过重新执行策略

  1. 开启Misfire和 Monitor-Execution后,当Job B 1执行时,发现Job B2正在执行,为Job B2设置Misfire标志,当Job B1执行完比后执行 Job B2

E. 支持Job运行轨迹的记录

  1. 提供了事件追踪功能,可通过事件订阅的方式处理调度过程的重要事件,用于查询、统计和监控。Elastic-Job目前提供了基于关系型数据库两种事件订阅方式记录事件

F. 支持丰富的作业类型

  1. Simple 类型 一般Job采用此方式

  2. Dataflow 类型 : 以流式方式处理业务逻辑

  3. Script类型 : 以脚本方式创建Job

G. 支持作业并行调度

  1. 同一Job在执行时,可以以多实例执行;只需要指定不同的job name;

H. 支持定制化处理

  1. 支持定制化的异常处理

  2. 支持定制化的线程池处理


Elastic Job 操作时需要注意的问题

A. 业幂等性操作的问题

  1. 开启monitorExecution才能实现分布式作业幂等性(即不会在多个作业服务器运行同一个分片)的功能,但monitorExecution对短时间内执行的作业(如每5秒一触发)会造成Job堆积的情况;性能影响较大,建议关闭并自行实现幂等性;同样不建议开启misfire,对zk性能有影响;

  2. 重启全部作业机器时,如果开启失效转移,一些特定的业务场景需要手动清除此作业的Failover数据节点,避免重启时候作业机器开始执行被标记为failover的作业;


Elastic Job 目前存在问题

A. 间隔短的Job幂等性问题需要业务代码去控制;

B. 性能问题:一个分片为1的Job,产生线程数为4个,一个执行分片的Job线程数为 4 + 可运行核数*2;需要修改源码规范线程使用;

C. Tomcat正常关闭(非 kill)的情况下,提醒内存泄露,线程池中的线程和调度线程未被销毁;此问题因创建Schduler时未指定容易销毁时关闭调度,导致调度线程未终止;修改源码JobScheduler指定销毁动作即可;

D. 分布式一次监听AbstractDistributeOnceElasticJobListener在并发下存在不可用问题;此问题通过修改源码已经修复;

E. 短频执行的任务不适合开启监听和事件跟踪;

架构设计

image

A. 环境说明

  1. Job配置存储:xml存储/java代码配置/scrip配置

  2. 外部依赖zookeeper( 3.4.6及其以上版本);实现master选举,分布式协调/通知,分布式队列,分布式锁

  3. JDK 1.7以上版本

  4. Maven3.0.4及其以上版本

B. 模块说明

  1. Registry注册中心提供Job config,Job instance,Job status 存储;提供Rest API方便外部应用(Console)对Job生命周期进行统一控制;如:获取Job信息及运行信息,更新Job配置信息,暂停或禁止Job运行等操作

  2. Console提供可视化页面,采集Job列表,配置信息,运行信息,分片状态,Job事件信息及Job命令下发;

  3. Lite 作为Elastic Job的起承转合:主要负责 作业机器(Job instance)选主,作业分片,作业创建,作业注册,作业启动/暂停/禁止/misfire/failover;并通过一些列的Listener完成zookeeper节点变化的监听,实现宕机自动切换,失效转移,命令下发等功能;基于事件监听实现Job运行轨迹的跟踪;

C. 启动流程

image

D. 作业执行

image

项目部署

A. 应用部署

  1. 启动Elastic-Job-Lite指定注册中心的Zookeeper

  2. 运行包含Elastic-Job-Lite和业务代码的jar文件。不限与jar或war的启动方式

B. 运维部署

  1. 解压缩elastic-job-lite-console-${version}.tar.gz并执行bin\start.sh

  2. 打开浏览器访问http://localhost:8899/即可访问控制台。8899为默认口号,可通过启动脚本输入-p自定义端口号。

  3. 访问RESTFul API方法同控制台

  4. elastic-job-lite-console-${version}.tar.gz可通过mvn install编译获取

其他开源的分布式调度框架


相关文章

网友评论

      本文标题:ElasticJob Lite调研

      本文链接:https://www.haomeiwen.com/subject/zyigxqtx.html