Apache DolphinScheduler + OceanBase,搭建分布式大数据调度平台的实践
本文整理自白鲸开源联合创始人,Apache DolphinScheduler PMC Chair,Apache Foundation Member 代立冬的演讲。主要介绍了DolphinScheduler及其架构、DolphinScheduler与OceanBase 的联合大数据方案。DolphinScheduler是什么?
Apache DolphinScheduler,作为一款云原生且配备强大的可视化界面的大数据工作流调度平台,可帮助用户简化数据工作流的编排过程,通过高效解决复杂大数据使命间的依赖与触发难题,确保各类大数据使命能够即插即用,融入各类数据分析与数据挖掘场景中,提供全流程可视化操作本事。
目前,已有超过6000家公司在其生产情况中成功摆设并应用了Apache DolphinScheduler。
https://img2024.cnblogs.com/other/2685289/202411/2685289-20241107135626909-1603263323.png
Apache DolphinScheduler 调度平台具备简单易用、架构筹划上保证系统高可靠性、高扩展性和云原生本事,拥有丰富的利用场景。
[*]高可靠性
[*]架构筹划上,去中央化的多 Master 和多 Worker , 具备高可用本事。
[*]采用使命队列避免过载,不会造成呆板卡死。
[*]简单易用
[*]拥有一键摆设本事,简化摆设,易维护。
[*]可视化界面,所有流程定义都是可视化,通过拖拽使命形成工作流模板。
[*]支持 Open API 、Python 方式与第三方系统对接。
[*]·高扩展性、云原生本事
[*]支持自定义使命类型。
[*]调度本事随集群线性增长。
[*]弹性伸缩, Master 和 Worker 支持动态上下线。
[*]丰富的利用场景
[*]支持停息恢复及停止等丰富操作。
[*]支持多租户,权限管理等大数据应用场景。
[*]支持 30+ 种使命类型,如 Spark, Flink,Hive, MR, Python, Shell 等。
从 Apache DolphinScheduler 调度平台界面能够看出来,DolphinScheduler 会实时关注使命运行状态,同时,可以直观地看到每个工作流的每个环节,可以轻松在线回溯使命状态。
DolphinSchedule 调度平台采用插件式筹划,支持多数据源格式,如OceanBase、MySQL、PostgerSQL、Hive、Impala、Spark、ClickHouse、Oracle、SQLServer、Db2、MongoDB 等可视化的数据源,并支持自由扩展数据源、支持可视化配置。方便数据源统一集中管理,一次配置,随处利用,大大减少配置修改带来的工作量,也方便后续数据血缘关系的处置惩罚。
同时,DolphinSchedule 支持多数据源数据的加工、数据导入脚本统一管理,包罗 Python、Shell、Jar 包、R 等多种格式。多层级结构确保文件管理层次清晰,不用考虑后续文件应该存储在哪一台呆板上,避免资源文件散乱难以维护。
https://img2024.cnblogs.com/other/2685289/202411/2685289-20241107135627575-1718835242.png
别的,DolphinSchedule 调度系统也非常机动,满足多种业务场景需要,工作流流程支持多策略启动、优先级、告警配置,使命流程多策略支持确保 ETL 过程可管理:
[*]支持使命失败策略选择,失败继承或竣事。
[*]支持多种关照策略,包罗失败发送关照、成功发送关照、全部关照、全部不发关照。
[*]支持优先级设定,确保高优先级流程优先执行。
[*]支持选定节点执行 ETL 使命流。
[*]支持串行与并行两种执行方式。
架构解析
下图是 Dolphinscheduler 的架构图,最上面的 UI 是用户可以感受到的界面, Open API 可以给 UI 提供调用接口,也方便第三方对接。
对于 Open API 这一层,调度最关键的是 MasterSever 和 WorkerSever ,MasterSever 的职责是分配使命,WorkerSever 的职责是担当 MasterSever 分的使命,然后执行,最后把执行结果汇报给 MasterSever。
由于担心所有的压力都集中在 Active MasterSever 上,因此做了无中央化的筹划架构。
https://img2024.cnblogs.com/other/2685289/202411/2685289-20241107135628184-151872156.png
在最初的架构筹划中,MasterSever 和 WorkerSever 完全隔离,WorkerSever 拿到使命之后,把使命更新到数据库里面,导致 WorkerSever 对于数据库造成的压力非常大。
比如联通把省公司的数据都汇总到数据中央,有一百多台的 WorkerSever 节点,WorkerSever 又做了数据库的连接池,数据库的压力会非常大。
WorkerSever 负责执行各种工作流,这也是调度系统常常会用到的,我们希望工作流和工作流之间是有筹划方法的,比如数仓按照数仓的分层原则,一层一层之间非常地清晰。
别的,我们有一个依赖类型,这个依赖可以跨项目、跨工作流去依赖其他不同频度的使命,比如说一个天使命,依赖一个小时的使命,这里有一个依赖节点就可以了。
整体上有一个注册中央,WorkerSever 都可以担当注册,WorkerSever 挂了,MasterSever 恢复,MasterSever 挂了,有其他的 MasterSever 监听到,其他的 MasterSever 担当它的工作流,举行故障 MasterSever 恢复。
MasterSever 1.0 时代的筹划是无中央化的,遇到的问题是如何让 MasterSever 同时工作。我们先筹划了一个简单的方式,先抢锁,然后去工作,跟踪的时候发现 Zookeeper 去充当锁,或是 MasterSever 去充当锁,抢锁的时间需要 50 -60 ms,非常慢。
于是,我们又做了筹划上的优化,首先是抢锁,抢到锁之后,把整个工作流界面做成一个图,然后去构建工作流,最终再把每个运行的使命形成使命实例。
这是 1.0 时代的筹划,后来发现性能比较低。
https://img2024.cnblogs.com/other/2685289/202411/2685289-20241107135628540-990277558.png
在 Dolphinscheduler 2.0 时开始找分布式锁,我们根据 MasterSever 的算法,支持多种拓展,来找到它们的槽位。
先去做分片,注册 MasterSever 会天生一个分片编号,Command 是执行的工作流,在去分布式锁的时候举行了这样的一个筹划,根据槽位查询数据库,然后会生产工作流的实例,交给 Worker 执行,根据分片的槽位去盘算。
https://img2024.cnblogs.com/other/2685289/202411/2685289-20241107135628959-1063849620.png
1.0 版本对线程的利用非常重,纵使是 8C16G 的呆板也需要配置几百个线程。
在 2.0 时代,我们举行了线性模式的拆分、改造。MasterSchedulerService ThreadPool 负责从 Command 表中分片获取要执行的 Command, 构造工作流实例,拆分待执行使命,天生使命实例,提交使命队列,启动WorkFlowExecuteThread处置惩罚。
WorkFlowExecuteThread工具,负责构建 DAG, DAG 拆分,天生使命实例,提交到使命队列;
同时负责处置惩罚使命状态和工作流状态变化,还负责使命/工作流超时监控。
新版本的 Master 端有那些变化呢?
[*]大幅减少 Master 的线程利用。
[*]利用分片机制获取命令队列。
[*]增加状态事件的处置惩罚机制。
[*]增加 Master 与 Master 之间的通信,一个 MasterSever 挂了之后,其他的 MasterSever 会相互的通信。
[*]增加 Master 的缓冲机制,不仅仅是在 MasterSever,在 IPASever上也增加了缓存。
https://img2024.cnblogs.com/other/2685289/202411/2685289-20241107135629272-699948748.png
做了系统的架构改造之后,吞吐量提升了 20 倍。
当然到了 3.0 版本,提升的倍数更多了。随着架构的演进,吞吐量会有更大的提升。
这也是开源有意思的地方:大家都可以提出本身的想法,把开源最新的头脑在项目中实现,并被成千上万的用户利用,在利用中完善项目,这就是开源最大的魅力。
https://img2024.cnblogs.com/other/2685289/202411/2685289-20241107135629704-248945869.png
Dolphinscheduler & OceanBase 解决方案
下图是 Dolphinscheduler 和 OceanBase 的解决方案,架构分为三层:
[*]底层是各种文件系统;
[*]中间层是分析引擎如 Spark、Flink、Hive;
[*]上层是应用层;
从存储到采集、盘算,到转化,不停到 BI,最后到看到结果的数据,充当了一个箭头的作用。
https://img2024.cnblogs.com/other/2685289/202411/2685289-20241107135630124-2057206837.png
Dolphinscheduler基于 OceanBase 高可用、低成本、高扩展、高性能特性有了一些学习和思索。
由于OceanBase 基于 Paxos 协议保证强一致性,因此我们在做分布事务的时候,数据强一致性以及不重、不丢都是必须要保证的。
别的我们非常看好OceanBase 的一些特性,比如在扩容时,自动实现负载平衡;再比如低成本,无需太多组件,而且可以随时玩起来。
那么,OceanBase 在 DolphinScheduler 里发挥了什么作用呢?
首先,作为 DolphinScheduler 的数据源,方便用户更简单快捷创建 SQL 使命。
数据存储在 OceanBase 里,简化数据工作流处置惩罚,方便把整个工作流串联起来,用 SQL 举行处置惩罚,所以我们对于 SQL 也做了很多的优化,包罗执行多少个 SQL,做了很多的筹划。
得益于 OceanBase 数据源的高扩展本事,结合 OceanBase 高压缩比的低成本上风,让用户在大规模利用时受益。
其次,作为 DolphinScheduler 元数据底子依赖,存放 DolphinScheduler 本身的各项关键信息。
Dolphinscheduler 底层的表数据量增量非常快,但是调度的使命一样平常不能删,需要生存一两年数据的时候,整体数据量相称复杂,原来实验利用平凡表存储,但是汇总数据的时候很麻烦。
现在我们用一个分布式数据库存储,让 OceanBase 充当元数据库,保证调度系统的稳固性。当然,在稳固性上我们会慎之又慎,需要做很多的稳固性测试,也希望有更多的社区小伙伴可以参加共同测试。
https://img2024.cnblogs.com/other/2685289/202411/2685289-20241107135630649-245309817.png
Dolphinscheduler 在国内外拥有丰富的用户底子,如中国联通、Shein、荔枝 PM、360 等,希望Dolphinscheduler 调度系统能为更多的用户带来便利。
Dolphinscheduler 有一个很出名的口号:工具选的好、下班回家早、调度用的对,半夜安心睡。希望调度系统和 AI 的结合,可以为大家的业务赋能,为大家的身段松绑。
让中国的开源真正地走向环球,让更多人知道中国的开源项目也很厉害,是我们的愿景。欢迎大家参与到社区讨论和共建里来,参与到中国开源项目的建设中来。
附:
[*]OceanBase GitHub项目地点:https://github.com/oceanbase/oceanbase
[*]Dolphinscheduler 项目地点:https://github.com/apache/dolphinscheduler*
[*]Dolphinscheduler 官网: https://dolphinscheduler.apache.org
本文由 白鲸开源 提供发布支持!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]