58大数据任务调度和智能运维实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 58大数据任务调度和智能运维实践
2. 张梦龙
58同城资深开发工程师,负责数据开发
平台、工作流调度系统等建设工作
3. 目录
1 调度系统的定位与挑战
2 架构设计与演进
3 智能运维最佳实践
4. 01
调度系统的定位与挑战
5. 星河-数据开发平台
6. 定位-数据中台的心脏
“工作流调度”解决了什么问题?
•
•
•
按照条件、顺序依次执行
按执行周期定时运行
最简配置
业界解决方案:DolphinScheduler、Airflow、
Azkaban
工作流
7. 任务调度系统-挑战
01
稳定
•
•
•
•
日均25W调度任务
跨部门任务相互依赖
统一调度集团所有任
务
故障恢复能力
02
性能
•
•
上下游依赖链长,
秒级依赖处理
夜间高峰期高吞
吐要求
03
扩展
•
•
数据中台基础能力
各类业务系统接入
8. 发展历程
满足业务需求
任务数:9w+
接入平台:4个
2016-2019
解决性能、高可用问题
支持百万级任务调度
任务数:13w
接入平台:8个
2020
资源隔离,智能运维
任务数:25w
接入平台:几十个
2021-至今
9. 星河调度系统-核心能力
可视化 易于使用,托拉拽实现任务依赖配
置,无需编码也可进行ETL操作
02 丰富的任务类型 Hive、Shell、MR、SparkSQL、
Python等20多种
支持用户开发自定义插件
03 高可用 04 依赖 05 智能监控
01
容错能力
节点失败转移,失败重试
时间依赖、事件依赖、自依赖
实时查看任务运行日志,丰富的告
警类型,基线监控
10. 02
架构设计与演进
11. 工作流定义方式
静态显式
动态隐式
DolphinScheduler、
Airflow流派
•
•
•
•
调度最小单位flow
先定义flow,后创建job
需解决跨流依赖问题
适合小规模、业务变更少
的场景
星河调度系统(dp-
scheduler)
•
•
•
调度最小单位job
无DAG概念,管理压力较
小
业务调整、依赖变更灵活,
不需要关注工作流概念
12. 探索历程-最初架构
背景
•
•
每天9w+次任务调度(19年)
凌晨高峰期单任务调度延迟5分
钟+
存在的问题
1.
调度单点问题
2. 缺乏监控、运维能力差
3. 吞吐能力受限
13. 探索历程-当前架构
整体架构 Master-Worker、消息队列
• 稳定性
去中心Master✖️ n,Worker✖️ n
Worker cgroup资源隔离
高可用
• 扩展性&运维
Master&Worker水平扩展
按类型、时段等条件自定义规则
分发
执行组件插件化开发,热部署
Master灰度发布、Worker蓝绿
部署滚动升级
Worker无DB依赖
多yarn集群扩展
• 性能
高效依赖检查、状态流转
14. 调度Master高可用
Master宕机场景下实例重新下发、
幂等保证
15. 去中心化设计之Master分布式锁实现
动态中心化设计,让管理者被动态
选举出来,而不是预置
基于zookeeper分布式锁,选举临时管理
者(Master)来调度任务。保证集群中同
一时刻只有一个Master在消费数据
16. 03
智能运维最佳实践
17. 任务运维管理面临的问题
几十万任务,任务数量多 任务上下游依赖复杂,最大可达60+层
值班同学起夜频率高 任务诊断困难,依赖人工经验
18. 分级保障
•
•
P0
•
P1
•
•
P2
•
最核心任务,公司级数据,严控产出时间。
例如影响收入的任务、依赖链顶层任务。
任务异常立即响应,平台第一时间跟进并通
知用户
重要任务,业务核心数据、严控产出时间,
非核心在线业务,如部门内核心业务系统相
关任务、跨部门合作数据任务等。
任务异常6点前响应,故障优先恢复
次要任务,业务普通数据,天内产出,离
线任务。
当天跟进修复
任务数,服务质量呈金字塔分
布
效果:核心任务优先保障,15分钟内响应
P2
P1
P0
重要性等级按指数递
减
19. 任务运维——基线监控
上游依赖复杂,异常任务定位困难
任务告警太晚,发现时已无法补救
基线:基于任务产出时间构建
能力
• 任务延迟根因分析
• 精度可以达到1分钟内
• 关键路径
20. 基线核心逻辑:预期时间推算模型
拉取基线任务全部上游,构建DAG,进行链路分析(逆拓扑排序)
任务预期运行时长:avg(7天平均运行时长)
任务最晚完成时间:min(下游最晚完成时间 - 下游平均
时长)
21. 基线监控实践
凌晨 00:30
凌晨 00:40
凌晨 01:20
值班同学收到基线预警,8:30基线余量不足,可能会破线
值班同学上线,系统定位延迟任务,发现由于队列堆积,杀掉
非核心任务,加大任务资源
8:30基线预警恢复安全,任务已追上。事故被扼杀在摇篮中
22. 基线关键路径实践
目标:优化链路,保障数据 SLA
增加资源
12
优化逻辑
基线上游核心任务优先保证
资源
提升资源利用率,缩短运行
时长
调整时间
减少上游时间余量,提前运
行
23. 值班组
• 多策略排班机制
• 报警升级、恢复
• 多通道报警
24. 补数据场景
1. 上游任务数据出错,
任务依赖关系复杂,
如何快速恢复?
2. 下游任务有禁止重跑、
已恢复无需重跑怎么
处理?避免重跑导致
二次问题,产出错误
数据
3. 下游任务pending,
恢复后大量任务提交
如何保障核心任务争
抢到资源?
25. 补数据
1. 定位问题源头任务,创建补数据
2. 展开全部下游任务,发起补数重跑(审
批流),设置高优先级: set
mapreduce.job.priority=HIGH
3. 开始清理下游任务:正在运行的,根
据调度优先级kill;已完成的,重置信
号;未开始的,停止调度;设置禁止
重跑的,跳过
4. 上游任务结束后,未开始的恢复调度
26. 未来规划
A B C
数据质量 智能运维 智能数仓
27. 欢迎加入交流群
小秘书微信
58技术公众号
28. THANKS