A Brief Introduction to Elastic-job

Emac

2015/12

Long long time ago..

Elastic-job

前来救援

Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架。去掉了和dd-job中的监控和ddframe接入规范部分。该项目基于成熟的开源产品Quartz和Zookeeper及其客户端Curator进行二次开发。

主要特性

  • 作业分片
  • 分布执行
  • 弹性扩容
  • 容错处理

简单任务

  • Simple类型作业意为简单实现,未经任何封装的类型。用于执行普通的定时任务,与Quartz原生接口相似,只是增加了弹性扩缩容和分片等功能。

流式任务

  • ThroughputDataFlow类型作业意为高吞吐的数据流作业,可以将获取到的数据多线程处理,但不会保证多线程处理数据的顺序。
     
  • SequenceDataFlow类型作业则根据当前服务器所分配的分片项数量进行多线程处理,每个分片项使用同一线程处理,防止了同一分片的数据被多线程处理,从而导致的顺序问题。

任务定义

  • config
    作业全局配置信息
     
  • execution
    执行时信息,子节点是分片项序号,从零开始,至分片总数减一
  • server
    作业服务器信息,子节点是作业服务器的IP地址
     
  • leader
    作业服务器主节点信息

注册中心

启动

执行

分片策略

  • AverageAllocationJobShardingStrategy
    基于平均分配算法的分片策略,也是默认的分片策略。
     

  • OdevitySortByNameJobShardingStrategy

    根据作业名的哈希值奇偶数决定IP升降序算法的分片策略。

     

  • RotateServerByNameJobShardingStrategy

    根据作业名的哈希值对服务器列表进行轮转的分片策略。

运维平台

  • 登录安全控制

  • 注册中心管理

  • 作业维度状态查看

  • 服务器维度状态查看

  • 快捷修改作业设置

  • 控制作业暂停和恢复运行

应用示例

前方高能:Elastic-job

的使用限制

  • 作业一旦启动成功后不能修改作业名称
  • 同一台作业服务器只能运行一个相同的作业实例
  • 没有自动删除作业服务器的功能

同类框架

  • Luigi:实现了一个Python版的任务注册中心,不支持任务分片和调度。
     
  • CronHub:用于监控集群中的大量crontab任务,目前已停止开发。

Happy Ending~

A Brief Introduction to Elastic-job

By Emacoo Shen

A Brief Introduction to Elastic-job

Check out https://github.com/dangdangdotcom/elastic-job for more information.

  • 1,950