任务调度

服务有两种类型,Long Running(应用)及Batch(任务)。Docker Swarm支持Long Running服务的运行,但不支持Batch服务的运行,所以我们需要一套任务调度的方案来解决这个问题。

Batch服务同样基于Docker容器运行,遵循一个服务一个容器的原则,与Long Running服务隔离,并且每个Batch服务都会分配到一个独立的容器去运行,方便任务的隔离和管理。

传统的任务调度服务,如crontab等,有以下几个缺点,难以满足我们的需求:

  • 任务分散,无法统一管理
  • 单机部署,可用性差
  • 无调度功能,机器之间的负载可能不均衡
  • 交互性差,任务部署效率低
  • 没有重试机制,任务可能运行失败
  • 无法运行大规模分布式任务

我们认为一个运行在docker容器之上的分布式任务调度服务需要具有以下功能:

  • 统一的任务管理
    • 任务运行状态
    • 任务运行记录
    • 生命周期管理(任务的停止及回收)
  • 任务编排
    • 任务部署:支持一次性任务、定时任务、大规模分布式任务的运行
    • 资源限制:CPU、内存等资源限制
    • 任务依赖:多个任务之间可以有依赖关系,被依赖的任务会先执行
  • 任务调度
    • 一致性:分布式调度策略保证任务的一致性,一次任务调度只会触发一次执行
    • 负载均衡:任务将优先调度到负载较低的机器上
    • 失败重试:任务失败后可被调度其他机器上重试,可设置最大重试次数
  • 日志&监控
    • 任务日志收集到日志服务中
    • 任务容器的CPU、内存等数据收集到监控服务中

results matching ""

    No results matching ""