写点什么

吃透 DolphinScheduler 负载均衡:3 大核心算法 + 底层逻辑全解析

作者:白鲸开源
  • 2025-10-15
    天津
  • 本文字数:1017 字

    阅读完需:约 3 分钟


本文将介绍 Apache DolphinScheduler 的 Worker 负载均衡,含加权随机、平滑轮询、线性负载(默认)三种算法,及配置修改、Worker 权重与预热机制,并细述各算法原理。详情可参考文末源文档地址。

负载均衡是什么?

负载均衡即通过路由算法(通常是集群环境),合理地分摊服务器压力,达到服务器性能的最大优化。

DolphinScheduler-Worker 负载均衡算法

DolphinScheduler-Master 分配任务至 worker,默认提供了三种算法:

  • 加权随机(random)

  • 平滑轮询(roundrobin)

  • 线性负载(lowerweight)

默认配置为线性加权负载。

由于路由是在客户端做的,即 master 服务,因此你可以更改 master.properties 中的 master.host.selector 来配置你所想要的算法。

eg:master.host.selector=random(不区分大小写)

Worker 负载均衡配置

配置文件 worker.properties

权重

上述所有的负载算法都是基于权重来进行加权分配的,权重影响分流结果。你可以在 修改 worker.weight 的值来给不同的机器设置不同的权重。

预热

考虑到 JIT 优化,我们会让 worker 在启动后低功率的运行一段时间,使其逐渐达到最佳状态,这段过程我们称之为预热。感兴趣的同学可以去阅读 JIT 相关的文章。

因此 worker 在启动后,他的权重会随着时间逐渐达到最大(默认十分钟,我们没有提供配置项,如果需要,你可以修改并提交相关的 PR)。

负载均衡算法细述

随机(加权)

该算法比较简单,即在符合的 worker 中随机选取一台(权重会影响他的比重)。

平滑轮询(加权)

加权轮询算法一个明显的缺陷。即在某些特殊的权重下,加权轮询调度会生成不均匀的实例序列,这种不平滑的负载可能会使某些实例出现瞬时高负载的现象,导致系统存在宕机的风险。为了解决这个调度缺陷,我们提供了平滑加权轮询算法。

每台 worker 都有两个权重,即 weight(预热完成后保持不变),current_weight(动态变化),每次路由。都会遍历所有的 worker,使其 current_weight+weight,同时累加所有 worker 的 weight,计为 total_weight,然后挑选 current_weight 最大的作为本次执行任务的 worker,与此同时,将这台 worker 的 current_weight-total_weight。

线性加权(默认算法)

该算法每隔一段时间会向注册中心上报自己的负载信息。我们主要根据 CPU 使用率、内存使用率以及 worker slot 使用情况来进行判断。

如果任何一个低于配置项,那么这台 worker 将不参与负载。(即不分配流量)

文档链接:https://dolphinscheduler.apache.org/zh-cn/docs/3.3.1/architecture/load-balance

发布于: 刚刚阅读数: 4
用户头像

白鲸开源

关注

一家开源原生的DataOps商业公司。 2022-03-18 加入

致力于打造下一代开源原生的DataOps 平台,助力企业在大数据和云时代,智能化地完成多数据源、多云及信创环境的数据集成、调度开发和治理,以提高企业解决数据问题的效率,提升企业分析洞察能力和决策能力。

评论

发布
暂无评论
吃透 DolphinScheduler 负载均衡:3 大核心算法 + 底层逻辑全解析_大数据_白鲸开源_InfoQ写作社区