数据系统架构-8.任务调度系统

任务调度系统

在有了各种数据统计任务之后,就产生了任务调度需求,我们需要把任务管理起来统一调度,保证任务之间上下游的依赖关系,监控任务运行状态,异常情况下及时告警,尽可能自动化处理异常,调度系统高可用,使每天的数据统计任务按时执行完成。
这里我们采用了自研的方式来开发任务调度系统,保证系统的高度可控,以及后续功能扩展性。

当然也有一些开源比较好用的调度系统可以直接使用,比如:azkaban、xxl-job 等,可以参考这些开源的架构做调度系统设计。

系统目标

整个任务调度系统需要完成以下功能:

  • 任务信息管理
  • 依赖关系维护
  • 任务调度
  • 调度器高可用
  • 任务异常告警
  • 任务血缘关系管理
架构设计

在这里插入图片描述

目前整体架构如上图所示,各个部分的功能如下。

web端:负责各类任务信息的配置与维护,包括基本信息管理、依赖关系管理、输入输出管理、调度信息配置、报警信息配置等;

mysql:负责保存任务配置信息、任务调度执行计划信息等相关任务信息;

master-active:调度器主节点,主要负责任务的触发、依赖检查、任务发布至zookeeper、任务报警等模块;

master-standby:调度器主节点备用节点,通过zookeeper完成主备识别与自动切换容灾;

zookeeper:负责主备切换、管理可执行任务信息;

executor:任务执行器,包括任务的解析器、执行器、yarn资源感知、任务信息管理、任务报警等模块。

在这里插入图片描述

这个图描述了任务整体的调度流程,整体流程大致分为以下几个部分

  • master-scheduler[主节点-调度解析]
    step1:每60s拉取一次任务配置信息
    step2:获取上线任务列表 + 已在Quartz队列的任务
    step3:循环任务列表在scheduler中上下线定时任务
    step4:触发任务
  • master-quartzJob[主节点-执行计划解析]
    step5:获取执行任务信息
    step6:生成与更新执行任务信息记录至mysql表
  • master-taskWatcher[主节点-执行计划观察者]
    step7:获取待执行任务信息
    step8:按照日期分组获取等待执行的任务信息
    step9:检查zk节点是否存在,创建准备执行节点 /schedule/ready_{date}
    step10:检查是否支持并发与【依赖】任务是否完成,在zk上创建任务节点 /schedule/ready_{date}/{job_id},并在节点上保存关键调度信息
  • executor-readyWatcher[执行器-待执行任务观察者]
    step11:每30s从zk上获取/schedule/ 下的节点信息
    step12:循环ready节点的信息创建对应running节点 /schedule/running_{date}
    step13:检查执行中的任务是否超过单节点任务执行数量上限
    step14:获取可执行任务数量以下的ready任务信息,循环判断【资源】是否允许允许。允许运行则根据任务类型通过python脚本生成可执行命令
    step15:更新任务状态并开启线程执行任务
  • executor-jobExecutor[执行器-任务执行]
    step16:开启线程执行运行脚本
    step17:获取执行线程info、error输入流,根据运行结果判断是否成功,是否需要重试执行,并更新执行状态

其中相对独立的2个模块:

  • executor-python解析器
    根据任务类型,调用不同的python解析脚本,生成对应任务可执行命令文件,以供调度器实际运行时调度使用。由于该部分频繁的改动各类参数,所以采用python脚本生成的方式。
  • executor-yarn资源控制
    通过yarn的api接口获取到集群当前资源情况,控制执行器是否能向当前集群继续提交任务

整体操作zookeeper部分采用了Curator分布式锁。

优化升级

在项目上线一段时间之后,后续我们陆续做了一下功能优化:

  • 任务通过hash负载均衡到各个executor进行执行
  • 任务支持并行执行
  • 任务支持配置重试次数
  • 延迟告警
  • 任务变动通知下游任务
  • 支持自定义运行参数
  • 任务资源使用率等健康情况监控统计
  • 扩展支持更多的任务类型

至此整个任务调度系统暂时开发完成,初步完了任务调度系统所需要的核心功能。

个人主页
上一篇 《数据系统架构-7.数据智能》
下一篇 《数据系统架构-9.统一查询服务one-service》

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
推荐,资料太大存放在网盘中,需要可下载观看。含教材。 第一部分 考试简介 1.1 考试大纲要求 1.2 考试科目介绍 第二部分 信息系统基础 2.1 信息系统工程总体规划 2.2 政府信息化与电子政务 2.3 企业信息化与电子商务 2.4 信息资源管理 2.5 信息化的标准、法律和规定 第三部分 系统开始基础 3.1 系统规划 3.2 软件开发方法 3.3 需求工程 3.4 软件系统建模 3.5 系统设计 3.6 测试与评审 3.7 软件开发环境与工具 3.8 系统运行与评价 第四部分 操作系统 4.1进程管理 4.2存储管理 4.3文件管理 4.4作业管理 4.5设备管理 第五部分 数据库系统 5.1数据库模式 5.2数据库完整性约束 5.3并发控制 5.4数据库设计 5.4.1数据库设计阶段 5.4.2ER模型 5.5数据库安全 5.6备份与恢复技术 5.7分布式数据库 5.8数据仓库 5.9数据挖掘 第六部分 计算机网络 6.1开放系统互连参考模型 6.2 TCP/IP协议族 6.3网络规划与设计 6.4计算机网络分类 6.5网络接入技术 6.6网络存储技术 6.7虚拟局域网(VLAN) 第七部分 软件架构设计 7.1 软件架构的概念 7.2 软件架构风格 7.3 面向服务的架构 7.4 特定领域软件架构 7.5 基于架构的软件开发方法 7.6 软件架构评估 7.7 软件产品线 第八部分 基于构件的开发 8.1 中间件技术 8.1.1 中间件的概念 8.1.2 主要的中间件 8.2 典型应用架构 8.3 企业应用集成 第九部分 应用数学 9.1 概率统计应用 9.2 图论应用 9.3 组合分析 9.4 算法的选择与应用 9.5 运筹方法 9.6 数学建模 第十部分 系统安全性与保密性设计 10.1安全与保密基础技术 10.2网络安全 10.3安全体系结构 10.3.1OSI安全模型 10.3.2MIS+S、S-MIS、S2-MIS 10.4安全审计 10.5安全策略 10.5.1核心 - 七定 10.5.2安全策略设计原则 第十一部分 系统配置与性能评价 11.1系统故障模型 11.2系统配置方法 11.3可靠性分析与可靠度计算 11.4性能评价方法 11.5软件容错 第十二部分 知识产权与标准化 12.1知识产权 12.1.1保护期限 12.1.2知识产权人确定 12.1.3侵权判断 12.1.4标准的分类 12.2标准化 12.2.1标准的分类 12.2.2标准类型的识别 第十三部分 多媒体基础知识 13.1多媒体技术基本概念 13.1.1音频相关概念 13.1.2图像相关概念 13.1.3媒体的种类 13.2多媒体相关计算问题 13.2.1图像容量计算 13.2.2音频容量计算 13.2.3视频容量计算 13.3常见多媒体标准 13.4数据压缩技术 13.4.1数据压缩基础 13.4.2有损压缩与无损压缩 第十四部分 嵌入式系统 14.1 嵌入式系统的特点 14.2 嵌入式系统的基本架构 14.3 嵌入式系统网络 14.4 嵌入式系统数据库 14.5 实时任务调度和多任务设计 14.5.1 调度算法分类 14.5.2 单调执行速率调度法 14.5.3 时间轮转调度 14.5.4 最早截止时间优先调度算法 14.5.5 优先级反转 14.6 中断处理和异常处理 14.7 嵌入式系统开发设计 14.7.1 交叉开发环境 14.7.2 开发过程 14.7.3 调试方法 第十五部分 开发管理 15.1 范围管理 15.2 时间管理 15.3 成本管理 15.4 文档管理 15.4.1 软件文档管理指南 15.4.2 计算机软件文档编制规范 15.5 软件配置管理 15.6 软件质量管理 15.6.1 质量管理的概念 15.6.2 质量模型 15.6.3 质量管理过程 15.6.4 质量保证与质量控制 15.7 风险管理 15.8 软件过程改进 15.8.1 CMM 15.8.2 CMMI 15.8.3 ISO/IEC 15504 15.8.4 SJ/T 11234-2001 第十六部分 系统架构设计案例分析 16.1 考点分析 16.2 如何解答试题 16.3 试题解答实例 16.3.1 质量属性与软件架构策略 16.3.2 数据流图与流程图 16.3.3 嵌入式系统设计 16.3.4 软件架构风格的选择 16.3.4 信息系统安全设计 第十七部分 系统架构设计论文 17.1 考点分析 17.2 做好准备工作 17.3 论文写作格式 17.4 如何解答试题 17.5 如何写好摘要 17.6 如何写好正文 17.7 常见问题及解决办法 17.8 论文评分标

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值