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

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

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

1

负载均衡是什么?

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

2

DolphinScheduler-Worker

负载均衡算法

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

  • 加权随机(random)
  • 平滑轮询(roundrobin)
  • 线性负载(lowerweight)

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

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

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

3

Worker负载均衡配置

配置文件 worker.properties

权重

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

预热

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

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


4

负载均衡算法细述

随机(加权)

该算法比较简单,即在符合的 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

1760944344360f9061239481d8ed2
17609443447313fc7a930f8814bde
1760944344360f9061239481d8ed2
1760944345589793b0af496dea826



用户案例



天翼云Zoom网易邮箱
每日互动 惠生工程 作业帮
博世智驾 蔚来汽车 长城汽车
集度长安汽车思科网讯
食行生鲜联通医疗联想
新网银行唯品富邦消费金融
自如有赞伊利当贝大数据
珍岛集团传智教育Bigo
YY直播 拈花云科太美医疗
Cisco Webex兴业证券


1760944345589793b0af496dea826



迁移实战



Azkaban Ooize(当贝迁移案例)
airflow (有赞迁移案例)
Air2phin(迁移工具)
Airflow迁移实践

1760944345589793b0af496dea826



发版消息




Apache DolphinScheduler 3.2.2版本正式发布!
Apache DolphinScheduler 3.2.1 版本发布:增强功能与安全性的全面升级
Apache DolphinScheduler 3.3.0 Alpha发布,功能增强与性能优化大升级!


1760944345589793b0af496dea826



加入社区



关注社区的方式有很多:

  • GitHub: https://github.com/apache/dolphinscheduler
  • 官网:https://dolphinscheduler.apache.org/en-us
  • 订阅开发者邮件:dev@dolphinscheduler@apache.org(向邮箱发送任意内容,收到邮件后回复同意订阅即可)
  • X.com:@DolphinSchedule
  • YouTube:https://www.youtube.com/@apachedolphinscheduler
  • Slack:https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-1cmrxsio1-nJHxRJa44jfkrNL_Nsy9Qg

同样地,参与Apache DolphinScheduler 有非常多的参与贡献的方式,主要分为代码方式和非代码方式两种。

非代码方式包括:

完善文档、翻译文档;翻译技术性、实践性文章;投稿实践性、原理性文章;成为布道师;社区管理、答疑;会议分享;测试反馈;用户反馈等。

‍代码方式包括:

查找Bug;编写修复代码;开发新功能;提交代码贡献;参与代码审查等。

贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3A%22first+time+contributor%22

优先级问题列表https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3Apriority%3Ahigh

如何参与贡献链接https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2/%E8%B4%A1%E7%8C%AE%E6%8C%87%E5%8D%97_menu/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E_menu

如果你❤️小海豚,就来为我点亮Star吧!

https://github.com/apache/dolphinscheduler

1760944347157e04f33ce91bb9eaa


17609443478536464bafe7d1de408

你的好友秀秀子拍了拍你

并请你帮她点一下“分享”