分布式任务调度调研

批处理服务/调度中心

  • 现在多数是通过消息队列和workflow engnie来调度。但是,部分C#和Java代码是通过单线程来运行的。
  • 需要管理跑批的依赖关系
  • 看看是否可以使用Spring Batch、Dangdang也有一个框架ElasticJob
  • 多个任务的组合、调度与监控

解决方案

重点解决各项目组的跑批任务调度问题,使用azkaban做分布式任务调度系统。azkaban的连接:https://azkaban.github.io/

任务调度系统基本功能

  • 支持多个任务的并发与顺序依赖调度,并有对应的DAG图展示;
  • 支持任务的编写类型,如unix shell等;
  • 节点任务控制,如支持某些任务跳过、失败重试、立即执行、指定时间周期性执行;
  • 监控任务执行状态,并支持报警通知;
  • metrics,支持一段时间内任务的运行时间查看;
  • 通过ui查看与编辑。

补充需求:

  • 支持相互依赖的任务之间的时间停顿,举例,b依赖于a成功执行后二十分钟之后再触发;
  • 支持多种任务依赖回调方式,http请求回调依赖?queue?
  • 支持任务执行失败后的回调操作。
  • 可以暂停、启动定时任务                                                      
  • 支持queue、topic                                                           
  • 任务的分布式(多个节点并发执行同一个任务)调度执行   

为什么选azkaban

  • 任务调度系统的基本功能都支持;
    • 监控报警支持成功、失败、结束、一段时间内部不成功/结束发送报警邮件。
    • 支持command和java编写job
  • 使用java语言,二次开发方便;
  • 支持unix cron trigger的语法配置job的执行计划,学习成本低;

你可能感兴趣的:(微服务实践之路)