尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Apache DolphinScheduler 核心特性深度解析:从可视化 DAG 到去中心化高可用架构

Apache DolphinScheduler 核心特性深度解析:从可视化 DAG 到去中心化高可用架构 Apache DolphinScheduler 核心特性深度解析从可视化 DAG 到去中心化高可用架构【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/gh_mirrors/do/dolphinschedulerApache DolphinScheduler海豚调度是面向现代数据管道的低代码工作流编排平台其官方特性文档docs/docs/en/about/features.md从易用性、丰富场景、高可靠性、高可扩展性四个维度定义了平台的核心能力。本文以该文档为主线结合仓库源码、插件目录与测试实现逐条拆解这些特性背后的工程实现帮助读者理解可视化拖拽 DAG、去中心化多 Master/Worker、自持任务队列等能力究竟如何在代码层面落地并掌握在实际部署与二次开发中用好这些特性的方法。DolphinScheduler 中以 DAG 形式组织的多个任务及其依赖关系示例一、简单易用Simple to Use特性文档将易用性概括为两大能力可视化 DAG与模块化操作。前者解决如何编排后者解决如何扩展。1.1 可视化 DAG拖拽式工作流定义与运行期控制DolphinScheduler 的核心建模思想是将有向无环图DAG作为工作流的底层数据结构。用户在前端画布上通过拖拽将 Shell、Spark、SQL 等任务节点连接成依赖关系平台将其翻译为一张 DAG 并驱动执行。这一模型在代码层面有清晰的落点DAG.java 是位于dolphinscheduler-common模块的通用 DAG 容器它用三张哈希表分别维护nodesMap节点 → 节点信息NodeInfoedgesMap起点节点 → 终点节点 → 边信息EdgeInforeverseEdgesMap反向边集合用于快速查询某节点的所有前驱。该实现有两个关键工程细节值得注意其一加边即环检测。addEdge(fromNode, toNode)在真正写入边之前会调用isLegalAddEdge做可达性校验从toNode出发沿后继边 BFS 遍历若能够回到fromNode则说明新增边会形成环返回false并拒绝写入对应 DAG.java#L380-L414。这正是拖拽连线时平台拒绝成环的底层保障。其二线程安全与拓扑排序。所有读写操作均由ReentrantReadWriteLock保护DAG.java#L46支持多线程并发调度时的安全访问hasCycle()与topologicalSort()复用同一套基于队列的拓扑排序实现DAG.java#L314-L343Master 端在拉起工作流实例时正是依赖拓扑序来确定任务的执行先后。仓库中还提供了对应的单元测试 DAGTest.java覆盖了节点增删、环检测、拓扑排序等场景。所谓运行期控制指的是工作流创建之后仍可随时干预可以定时触发timed、暂停paused、恢复resumed、停止stopped并且这些状态控制会贯穿工作流实例 → 任务实例两级配合全局参数与局部参数的覆盖机制运维人员可以在不改动 DAG 结构的前提下动态调整运行行为。1.2 模块化操作插件机制支撑的易定制与易维护模块化不是口号而是贯穿整个仓库的工程事实。DolphinScheduler 将几乎所有可扩展点都抽象为独立的 Maven 模块与 SPI 插件任务插件dolphinscheduler-task-plugin下按任务类型各建一个模块见下文 2.1 节通过dolphinscheduler-task-all聚合装配告警插件dolphinscheduler-alert/dolphinscheduler-alert-plugins下按渠道拆分email、dingtalk、feishu、wechat、http、script、slack 等十余种数据源插件dolphinscheduler-datasource-plugin按数据库厂商拆分MySQL、PostgreSQL、Hive、Oracle、SQL Server、Trino、StarRocks 等 30 余种注册中心插件dolphinscheduler-registry/dolphinscheduler-registry-plugins提供 zookeeper、etcd、jdbc 三种实现存储插件dolphinscheduler-storage-plugin抽象 HDFS、S3、OSS、GCS、OBS、ABS 等文件系统。这种每个扩展点一个插件、一个统一聚合模块的组织方式意味着新增一种任务类型或告警渠道时只需要新增一个 Maven 模块实现 SPI 接口无需改动调度核心天然满足文档所说的customization and maintenance。二、丰富场景Rich Scenarios2.1 多任务类型支持不止 10 种而是 30 开箱即用特性文档宣称支持超过 10 种任务类型而从当前仓库的dolphinscheduler-task-plugin目录见 dolphinscheduler-task-plugin/pom.xml可以确认实际开箱即用的任务插件已远超 10 种覆盖了数据开发全链路类别任务插件基础计算shell、python、java、sql、procedure、mr、spark、flink、flink-stream、hivecli数据同步datax、sqoop、chunjun、seatunnel、datasync、databend 相关云原生/大数据平台k8s、kubeflow、emr、dms、sagemaker、aliyunserverlessspark、dinky、linkis、zeppelin、mlflow、pytorch、openmldb、jupyter、dvc通用集成http、remoteshell、datafactory、dataquality跨语言支持体现在任务类型本身的多样性上Shell 脚本、Python、Java 自定义任务、SQL 直接执行等而易扩展则回到 1.2 节的插件机制实现一个TaskChannel并将其声明为插件即可让新任务类型出现在 DAG 画布的工具栏中供所有用户拖拽使用。2.2 工作流运维状态控制 参数体系文档强调工作流可被定时、暂停、恢复、停止便于对全局参数与局部参数进行维护与控制。在 DolphinScheduler 中全局参数定义在工作流层面对所有任务节点可见可在工作流定义 → 参数中配置也支持通过定时调度时的启动参数临时覆盖局部参数定义在单个任务节点上仅对该任务生效运行态下$引用的参数会在任务提交前完成替换配合运行参数run params机制可在每次手动启动或补数时动态注入值从而实现同一张 DAG、不同参数、反复运行的灵活运维模式。配合工作流/任务实例的版本管理与多种运行入口Web UI、Python SDK、YAML 文件、Open API这类控制能力可以稳定支撑日常的调度维护、故障重跑与补数据backfill场景。三、高可靠性High Reliability特性文档对可靠性的表述包含三个关键词去中心化设计、自持高可用任务队列、容错能力。这也是 DolphinScheduler 与单 Master 架构调度系统最本质的差异。3.1 去中心化设计多 Master / 多 Worker 的横向扩展DolphinScheduler 不采用单 Master 调度 单 ZooKeeper 选举的中心化模型而是多 Master 对等、多 Worker 对等所有 Master 节点通过注册中心ZooKeeper / etcd / JDBC见 dolphinscheduler-registry同时对外提供服务任一 Master 均可接管工作流的调度Worker 节点按 Worker Group 分组任务被分发到对应组的可用 Worker 上执行。从源码结构看注册与健康管理由 MasterRegistryClient.java以及 Worker 侧对应的 RegistryClient负责节点上线、心跳与下线清理Master 端执行流由 WorkflowExecuteThreadPool.java 驱动工作流实例任务侧由 TaskExecuteThreadPool.java 驱动任务实例的执行与响应。多 Master 意味着调度能力可以水平扩展任何单个节点失效都不会让整个集群失去调度中枢。Master / Worker 去中心化部署与分工示意支撑集群级高可用与水平扩展3.2 自持 HA 任务队列任务组协调机制文档中self-supporting HA task queue所指的是 DolphinScheduler 内置的任务组Task Group与任务组队列能力当多个工作流中的任务被配置到同一个任务组时组内通过排队控制并发资源占用避免资源被瞬时任务洪峰打满。这一机制在 Master 端由 TaskGroupCoordinator.java 实现它以守护线程方式轮询任务组队列结合TaskGroupQueueStatus状态机控制任务入队、占位、唤醒与释放当队列中有任务可执行时通过TaskInstanceWakeupRequest唤醒对应任务实例相关逻辑见 TaskGroupCoordinator.java 中基于TaskGroupQueueDao的排队与TaskInstanceWakeupRequest的唤醒流程。任务组队列状态持久化于数据库即使 Master 节点重启队列状态也能恢复这正是自持与高可用的体现。3.3 容错能力Master / Worker 双端故障转移容错fault tolerance是可靠性的最后一道防线。Master 端通过 FailoverExecuteThread.java 这个守护线程周期性地执行故障检测进程启动后先等待约 10 秒让集群就绪随后循环调用masterFailoverService.checkMasterFailover()每次检查后按masterConfig.getFailoverInterval()配置的间隔休眠FailoverExecuteThread.java#L56-L75。实际的故障转移逻辑被拆分为两个服务对应两类故障场景MasterFailoverService.java处理 Master 节点故障——将故障 Master 名下未完成的工作流实例接管、重新调度WorkerFailoverService.java处理 Worker 节点故障——将故障 Worker 上正在执行的任务实例标记并交由其他健康 Worker 重跑。两者统一由 FailoverService.java 编排。这套心跳检测 周期性扫描 双端接管的机制配合上述去中心化注册让集群在节点宕机时依然能保证任务不丢失、工作流可继续推进。四、高可扩展性High Scalability特性文档对可扩展性的定义包括多租户支持、在线资源管理并给出每天稳定运行 10 万数据任务的容量承诺。4.1 多租户隔离与权限的工程化多租户能力让不同团队/项目在同一集群上共享调度能力而互不干扰。其实现基础是租户Tenant→ Worker Group / 操作系统用户 → 任务执行环境的绑定链每个租户关联操作系统用户与可用的 Worker Group任务提交后由对应租户身份执行从而在进程级实现资源隔离再叠加项目、资源、数据源三级权限控制README 中明确列出 permission control including project, resource and data source做到谁的项目、谁的资源、谁的库表清晰隔离。水平扩展方面由于 Master/Worker 均无状态化设计新增节点即可线性扩展调度与执行吞吐。4.2 在线资源管理所谓在线资源管理是指无需重启或重新部署即可对集群资源进行动态管理Worker Group 的划分、租户的绑定、任务组的并发配额、数据源连接等均可在 Web UI 上在线调整并即时生效配合工作流与实例的版本管理、任务状态的多态控制暂停/停止/恢复随时可做共同支撑大规模、长时间稳定运行的调度集群。4.3 容量承诺的正确理解特性文档中的100,000 data tasks per day是该特性文档给出的设计容量目标即日均 10 万数据任务量级。需要说明的是这是一个面向目标场景的容量陈述实际可支撑的任务量与集群规模、硬件配置、任务类型和负载特征直接相关。结合 README 中多 Master 多 Worker 原生支持水平扩展的定位合理做法是以文档容量目标为规划基准通过横向扩容 Master/Worker 节点、合理划分 Worker Group 与任务组配额来逼近并稳定支撑该量级。五、特性背后的工程实践要点特性维度关键能力仓库落点可深入阅读可视化 DAG拖拽建流、环检测、拓扑排序DAG.java、DAGTest.java模块化任务/告警/数据源/注册中心/存储插件dolphinscheduler-task-plugin、dolphinscheduler-alert、dolphinscheduler-datasource-plugin去中心化 HA多 Master/Worker 注册与调度MasterRegistryClient.java、WorkflowExecuteThreadPool.javaHA 任务队列任务组排队与唤醒TaskGroupCoordinator.java容错Master/Worker 双端故障转移FailoverService.java、MasterFailoverService.java、WorkerFailoverService.java对想要进一步验证这些特性的读者建议从三处入手跑通基础链路参考 README.md 的 QuickStart先用 Standalone 或 Docker 方式deploy/docker/docker-compose.yml拉起集群在 Web UI 中拖拽一张多任务 DAG 并手动运行直观体验可视化 运行期控制验证容错在多 Master/多 Worker 部署参考 deploy/kubernetes/dolphinscheduler/values.yaml 的副本数配置下 kill 一个 Worker观察故障任务是否被其他 Worker 接管重跑阅读测试仓库在dolphinscheduler-common、dolphinscheduler-master等模块下提供了大量单元测试如 DAG 环检测、容错服务测试是理解特性实现细节的第一手资料。结语围绕官方特性文档的四个维度可以看到DolphinScheduler 的每一项特性都不是孤立的宣传点而是由可验证的工程机制支撑可视化 DAG 背后是带环检测与拓扑排序的通用图数据结构模块化背后是完备的插件 SPI 体系高可靠性背后是去中心化注册、自持任务组队列与 Master/Worker 双端故障转移的协同高可扩展性背后则是多租户隔离、在线资源管理与水平扩展架构。理解了这些特性 → 实现的对应关系无论是日常运维、容量规划还是基于插件机制做二次开发都能做到有的放矢。【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/gh_mirrors/do/dolphinscheduler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表