蘑菇街 刘旭晖:大数据平台调度系统架构理论和实践_IT168文库

琴同甫

2017/11/14 发布于 技术 分类

大数据平台的建设过程中,作业调度系统的建设往往是重中之重。本次分享主要谈谈业界主流的调度系统的场景定位,思想流派,设计目标和各自的优缺点,并结合我司自研Jarvis调度系统两年多来的思考和实践经验,和大家一起探讨一下一个以易用性和可维护性为导向的作业调度系统,应该如何规划它产品功能定位。

文字内容
1. 调度大数系据统平S架A台C工构C作2理流01调论7度与系实统 践 天火@蘑菇街 - colorant @ Wechat
2. Agenda 调度系统背景知识 工作流调度系统基础理论和流派 SACC2017我司Jarvis调度系统开发实践 • 系统架构 • 设计目标 • 现状和未来
3. 调度系统分类 资源调度系统 作业调度系统 • Yarn • Mesos • Omega • Borg • Fuxi • Gaia • Normandy • Oozie SACC20••••1ZALCzhhe7kruotaossbnaoesn • SchedulerX • Elastic-job • Saturn
4. 作业调度系统-定时分片类系统 场景定位 关注目标 业务影响 • 将一个作业拆分成多个小任务,分布式执行 • TBSchedule,SchedulerX,Elastic-job, Saturn SACC2017• 不漏不重,负载均衡,弹性扩容,失效转移 • 精确定时触发,强实时性和高可靠性 • 对所调度的任务往往有代码侵入性要求 • 有些系统还要求常驻Daemon进程,用于协 调本地作业的管理和通讯
5. 作业调度系统-DAG工作流类系统 场景定位 • 所服务的往往是流程依赖比较复杂的场景 • 可能涉及到成百上千个相互交叉依赖关联的作业 2017• Oozie,Azkaban,Chronos,Zeus,Lhotse,Jarvis SACC关注目标 • 丰富灵活的触发机制:时间,依赖,混合 • 灵活的作业变更管理,流程管控 • 优先级管理,业务隔离,错误跟踪,异常报警 • 系统和业务健康度监控,性能优化和问题诊断
6. SACC2017
7. 工作流调度系统的两种心法流派 • 概念:作业计划和任务实例 • 工作机制和代表系统 SACC2017静态执行列表 根据作业计划 提前生成并持久化任务执行列表 遍历检查列表 动态执行列表 不提前固化任务执行列表 根据触发条件动态生成 通过时间或上游任务触发 满足条件触发执行 根据当前依赖关系生成任务实例 代表:Oozie,Azkaban 众多公有云上的workflow服务 代表:Zeus, chronos 我司的Jarvis调度系统
8. 两种流派的优缺点 静态执行列表方案 • 系统架构和运行逻辑相对简单 • 容易分析问题 SACC2017• 能处理的场景也比较有限。 动态执行列表方案 • 能覆盖的场景范围更广 • 计划变更响应更及时 • 系统架构实现相对复杂 如果是在业务场景比较简单,任务依赖容易理清的场景下,静态执行 列表方案的系统维护代价会比较小。反之,则应该考虑构建动态执行 列表方案的系统
9. 工作流的定义管理方式 静态显式定义和管理工作流 • oozie,azkaban以及各种公有云的workflow服务 • 用户需要显示定义一个工作流,包含哪些作业,依赖关系如何 动态隐式定义和管理工作流 2017• Chronos, Zeus和我司的Jarvis调度系统 C• 管理维度是作业,用户定义的是作业之间的依赖关系 AC• 哪些作业构成一个工作流,系统实际上并不关心,用户也不需要申明 S那两种处理方式各有什么优缺点呢? • 前者,适合工作流规模较小,作业没有交叉依赖,依赖不会频繁变更的场景 • 后者,用户无需理会工作流这个概念,作业流程变更操作简单
10. SACC2017
11. Why another Scheduler 业务环境需求 • 应用环境复杂,用户需求多变 • 周边组件众多,需要对接各种存储, 计算,查询和用户管理组件 • 血缘管理,权限隔离,负载流控,监 2017控报警,质量分析 SACC现有系统问题 • 功能形态简单,需要大量二次开发 • 流程框架封闭,很难对接外部系统 • 缺乏管理手段,使用和运维代价高
12. 系统架构 • 目标:高可用,组件模块化,无状态化 SACC2017
13. Jarvis 2 设计目标-系统 核心调度逻辑 • 准实时调度,计划的变更,即时生效,支持短周期任务 • 时间触发,依赖触发或者混合触发,支持多种范围依赖关系 • 根据血缘信息,自动建立作业依赖关系 • 调度时间和数据时间的分离 2017多租户环境 • 内建流控机制,Worker端负载均衡 C• 支持作业优先级管理,支持业务分组管理 SAC• 和各种周边系统和底层存储计算框架即有的权限体系灵活对接 系统架构集成 • 组件模块化,核心组件无状态化 • 丰富的作业类型,能够灵活拓展 • 开放系统接口,对外提供REST API,便于对接周边系统 • 支持灰度功能,允许按特定条件筛选作业按照特定的策略灰度执行
14. Jarvis 2 设计目标-产品交互 用户后台作业管理 • 用户可以自主通过交互界面的对作业进行添删改,对任务进行重跑等 • 支持对当日任务计划和历史运行流水,运行日志的检索 • 支持作业元数据信息检索,包括作业概况,变更记录,依赖关系树等。 2017作业执行逻辑管理 • 支持作业失败自动重试,可以设置自动重试次数,重试间隔等 C• 支持历史任务独立重刷或按照依赖关系重刷后续整条作业链路 AC• 允许设置作业生命周期,可以临时禁止或启用一个周期作业 S• 支持动态按应用/业务/优先级等维度调整作业执行的并发度 任务运行状态管理 • 支持任务失败报警,超时报警,等异常情况的报警监控 • 支持任务日志分析,自动识别错误原因和类型
15. 服务好更多用户 业务环境和问题 • 公有云工作流调度系统 • 租户之间完全独立,租户之间的业务很难相互关联 • 工作流之间几乎完全独立 2017• 我司业务环境 • 业务相互依赖关系复杂,组织重构,业务变更也比较频繁 C• 在同一业务内部,也有不同的资源和流控管控需求。 SACJarvis 2应对上述问题,主要实现并支持如下功能 • 作业优先级:核心业务,非核心业务,优先等级,失败重试任务等 • 多维度并发度控制:作业类型,应用类型,调度类型和优先级类型 • 负载均衡:工作节点的被动负载反馈和调度节点的主动负载均衡
16. SACC2017
17. SACC2017
18. SACC2017
19. Jarvis的现状和问题 现状 • 经过快两年的开发和持续改进,前文所设定的产品功能目标, 基本上都已经实现 • 日常稳定承载约2万个固定周期调度作业,以及同样数量级 2017的一次性任务作业和重刷任务作业 SACC问题 • 部分业务逻辑实现过于定制化,不利于系统功能的后续拓展 和调整 • 在突发峰值或者极端高负载情况下的系统稳定性还需要经历 更多的复杂场景来加以磨练
20. 未来的改进计划 系统整体业务健康度检测和评估手段改进 • 系统监控评估 • 业务专家系统 2017自动测试体系的完善 • 单元测试不足以发现大流量负载,复杂并发场景下隐蔽Bug SACC• 需要构建随机生成测试用例和模拟组件失效模式的测试体系 开源 • 开源不是一个目标,而是用来提高产品质量的手段 • 重要的是开放思想,目的是让大家一起参与,共同努力,共同受 益,而不是光晒代码
21. 欢迎交流 • 以上内容,时间所限,大幅简化了,更多内容和细节 • 欢迎关注我的公众号“大数据务虚杂谈” SACC2017 欢迎来人来函交流 天火@蘑菇街 - colorant @ Wechat
22. SACC2017