文字内容
1. Dorado: 字节跳动一站式大数据 任务开发调度平台实践 丁桂涛 字节跳动 数据平台架构师
3. 大纲 1. 任务开发调度的背景 2. Pre-Dorado 时代的“痛点” 3. Dorado 遇到的问题、解决方案和思考 4. Dorado 的技术架构和产品现状 5. Dorado 的未来规划
4. 大纲 1. 任务开发调度的背景 2. Pre-Dorado 时代的“痛点” 3. Dorado 遇到的问题、解决方案和思考 4. Dorado 的技术架构和产品现状 5. Dorado 的未来规划
5. 任务开发调度的背景:概览
6. 任务开发调度的背景:场景 ● 数据集成/通道任务 ○ 异构数据源之间的数据传输 ○ ETL:重在数据同步,数据转换操作较少 ○ 常用方案:DataX/Sqoop/... ... ● 数据开发 ○ 一般在数据仓库内部完成 ○ ETL:重在数据转换(清洗、聚合、排序等) ○ 一般依赖上游数据,需要周期调度 ○ 常用方案:MR/Spark/Flink/... ...
7. 任务开发调度的背景:概念 ● 任务 & 实例 ○ ○ ● 实例时间 ○ ○ ○ ● 任务:静态配置 实例:动态执行,任务 + 业务时间 user_dict 2019-06-01 2019-06-02 设定时间:周期频率/Cron 表达式 执行时间:真正执行的时间 业务时间:数据时间 agg_result 回溯 ○ ○ video_dict 重刷历史数据 修复下游数据 2019-06-02
8. 大纲 1. 任务开发调度的背景 2. Pre-Dorado 时代的“痛点” 3. Dorado 遇到的问题、解决方案和思考 4. Dorado 的技术架构和产品现状 5. Dorado 的未来规划
9. Pre-Dorado 时代的“痛点”:老平台技术架构 ● API Server ○ 任务开发、运维 ● Scheduler ○ ○ ● 轮询检查上游依赖和时间 生成可执行实例 Executor ○ ○ 轮询可执行实例 提交到 Mesos
10. Pre-Dorado 时代的“痛点”:老平台的问题 ● 数据依赖 ○ ○ ● 可扩展性 ○ ○ ● 调度延迟高 DB 压力大 可维护性 ○ ○ ● 检查上游依赖必须使用轮询方式,效率低 任务血缘计算复杂 每种任务类型需要维护一种代码模版 排查问题难 多个内部调度平台 ○ 网状依赖
11. 大纲 1. 任务开发调度的背景 2. Pre-Dorado 时代的“痛点” 3. Dorado 遇到的问题、解决方案和思考 4. Dorado 的技术架构和产品现状 5. Dorado 的未来规划
12. Dorado 需要解决的核心问题:调度“一个”“大” DAG ● A1 任务能在正确的时间点提交 ○ 上游已完成 ○ 设定时间已到达 B1 ● A2 A3 … ... B2 B3 B4 … ... … ... … ... 任务能找到自己影响的下游 ○ 数据修复 ○ … ... … ...
13. Dorado 遇到的问题:管理任务依赖 ● 上游任务依赖场景 ○ 跨周期:大小周期任务相互依赖 ○ 偏移:下游依赖上游的非当天/历史区间/历史某几天数据 ● 解决方案:Graph Manager ○ Property Graph,管理任务间依赖关系 ○ 提供上下游查询服务 依赖偏移可以帮助用户精准地找到一个任务的上下游。
14. Dorado 遇到的问题:管理数据依赖 ● 数据依赖场景:上游任务为常驻任务/托管在其它平台/... ... ○ Hive Partition ○ HDFS Label File ○ … ... ● 解决方案:Sensor Checker ○ Sensor Task:数据依赖 -> 任务依赖 ○ Sensor Instance:“按需”创建、自动重跑 ○ 轮询检查 Sensor 任务可以帮助用户依赖非平台托管任务。
15. Dorado 遇到的问题:管理时间依赖 ● 设定时间场景 ○ 固定执行周期频率:分钟/小时/天/周/月/... ... ○ 灵活设置开始时间:Cron 表达式 ● 解决方案:Time Checker ○ 延迟队列 ○ “分布式 Crontab” Cron 表达式可以帮助用户灵活控制调度周期。
16. Dorado 遇到的问题:产品上的 DAG/工作流 ● 场景 ○ 用户习惯:Airflow/Azkaban/... ... ○ DAG 子节点被外部任务依赖 ● 解决方案:虚拟头尾节点 ○ 依赖外部:头节点 ○ 被外部整体依赖:尾节点 ○ 被外部局部依赖:子节点 产品上的 DAG 是任务的一种组织概念,可以帮助用户更方便地设置依赖。
17. Dorado 遇到的问题:降低调度延迟 ● 调度延迟根源 ○ 轮询间隔 ○ 延迟大小跟任务量正相关 ● 解决方案:Event Handler ○ 轮询 -> 事件驱动 ○ Instance Events:初始化/成功/失败/... … ○ 收益:10min 级 -> 秒级 … ...
18. Dorado 遇到的问题:降低调度延迟 ● 调度延迟根源 ○ 轮询间隔 ○ 延迟大小跟任务量正相关 ● 解决方案:Event Handler ○ 轮询 -> 事件驱动 ○ Instance Events:初始化/成功/失败/... … ○ 收益:10min 级 -> 秒级 … ...
19. Dorado 遇到的问题:降低调度延迟 ● 调度延迟根源 ○ 轮询间隔 ○ 延迟大小跟任务量正相关 ● 解决方案:Event Handler ○ 轮询 -> 事件驱动 ○ Instance Events:初始化/成功/失败/... … ○ 收益:10min 级 -> 秒级 … ...
20. Dorado 遇到的问题:执行多环境控制 ● 多环境控制场景 ○ 灰度发布 ○ 环境隔离 ○ 集群隔离 ● 解决方案:Executor (K8S Cronjob) ○ Docker Image -> 环境 ○ 可配置的环境分发规则 K8S 可以帮助我们快速建立多个不同的执行环境,做到实例级隔离。
21. Dorado 遇到的问题:执行资源控制 ● 资源控制场景 ○ 核心任务需要保证执行资源 ○ 任务高峰期限制回溯任务数 ○ 控制重跑并行度 ○ 防止单用户提交过多任务影响其它任务 ○ … ... ● 解决方案:Quota Manager ○ 拆分队列,公平分配槽位 ○ 可配置的槽位限制规则 ○ 实例“去重” 依赖检查通过的实例,可能因为 Quota 的限制延迟提交。
22. Dorado 遇到的问题:数据集成/通道任务执行 ● 通道任务场景 ○ 数据源种类多:MySQL/HDFS/Kafka/Redis/... ... ○ 数据量大:上万分片/PK 极端不均匀/脏数据/... ... ○ 格式多样:JSON/PB/Parquet/... ○ … ... ● 解决方案:DTS(Flink-based DataX) ○ 插件化 ○ On Yarn ○ 自动并行度控制 ○ … ... DTS 可以帮助用户一键完成各异构数据源之间的高效传输。
23. 大纲 1. 任务开发调度的背景 2. Pre-Dorado 时代的“痛点” 3. Dorado 遇到的问题、解决方案和思考 4. Dorado 的技术架构和产品现状 5. Dorado 的未来规划
24. Dorado 的技术架构 ● Master: 单点,主备 ● Scheduler:1-N 个 ● Executor:实例进程 ● Logger:日志收集
25. Dorado 的产品现状 ● 上线:半年 ● 任务量:N 数量级增长 ● 用户:数仓/算法/分析师/产品/运营/... … ● 其它平台:一半以上的任务已迁移到 Dorado
26. 大纲 1. 任务开发调度的背景 2. Pre-Dorado 时代的“痛点” 3. Dorado 遇到的问题、解决方案和思考 4. Dorado 的技术架构和产品现状 5. Dorado 的未来规划
27. Dorado 未来规划 ● ● ● 开发运维 ○ 智能错误诊断 ○ 自动化资源调优 任务调度 ○ 开放平台:Open API/SDK/.. ... ○ 更多调度方式:Fixed Delay/Schedule Context/... … 业务场景 ○ 流式任务 ○ 机器学习
28. Thanks! Q&A
29. 欢迎关注msup微信公众账号 关注大会微信公共账号,及时了解大会动态、 日程及每日更新的案例! 关注公众号获得 更多案例实践