点亮 ⭐️ Star · 照亮开源之路
https://github.com/apache/dolphinscheduler
作者 | 温子新,Apache DolphinScheduler Committer
在工作流任务调度的选择上,Apache DolphinScheduler 和 Apache Airflow 都是非常不错的选择。本文在相同硬件测试背景下对这两个调度平台的性能进行了对比。结果显示,DolphinScheduler 的性能表现让人惊喜,来看看具体测试数据和测试过程吧!
1
实验环境
测试环境采用 8 台 AWS 8C 16G 服务器作为 Apache DolphinScheduler 和 Airflow 的部署服务器,配置如下:
同理 Airflow 的 Scheduler 与 Worker 均部署在这 8 台服务器上,运行 Apache DolphinScheduler 时关闭 Airflow 服务,保证相互不影响。
数据库采用 AWS 的 RDS 作为存储,配置如下:
2
压测工具
整个压测过程中会使用到 2 个工具:DolphinScheduler 基准压测工具、Airflow 基准压测工具。
DolphinScheduler 基准压测工具
DS
简介
batch_inser_command.sh 用于批量往 t_ds_command 插入数据
clear_history_process_instance.sh 用于清理相关数据
batch_inser_command 参数说明:
process_definition_code=123 // 工作流
process_definition_version=1 // 版本
batch_size=10 // 1 次插入 sql 数量
batch_number=10 // 循环总数
启动 100 个工作流 1,写入数据库 t_d_command,等待 Master 去拉取
使用方法
1. 创建工作流 Shell , 脚本内容:echo 123,工作流实例 process_definition_code 是:7546934660384。
2. 登录 Linux 后台,使用 batch_inser_command.sh 往数据库插入 100 条数据,插入内容是 process_definition_code 是 7546934660384 工作流实例。
sh batch_inser_command.sh 7546934660384 1 10 10
Airflow 基准压测工具
DS
简介
通过 Python 脚本创建 DAG 文件,并放到 Airflow dags 目录,让 scheduler dag-processor 将 DAG 文件解析并持久化到数据库,最后启动 Airflow Scheduler 启动调度。
使用方法
一、通过环境变量初始化数据库信息:其中 admin 是 MySQL 用户名,admin123 是 MySQL 密码,10.0.0.1 是 MySQL 地址,3306 是 MySQL 端口,test 是对应 DB 库,命令如下:
export
Airflow__DATABASE__SQL_ALCHEMY_CONN=mysql+mysqldb://admin:admin123@10.0.0.1:3306/test 2.
二、通过运行 airperf.py 生产数据:python3 airperf.py generate
Airflow dag-processor 将 dags 文件夹的文件解析并持久化到数据库
Airflow Worker, Airflow Scheduler 开始调度和测试
python airperf.py analyse --part throughput 或者 python airperf.py analyse --part latency 分析任务并发和延时
3
测评过程
指标监测
DS
调度任务进行吞吐时,我们这里等任务全部入库后,直接统计数据内的字段来衡量当前系统的吞吐情况。
Apache DolphinScheduler 和 Airflow 采用相同的指标来对比,DolphinScheduler 指标明细说明见附 1,Airflow 指标明细说明见附 2。
DolphinScheduler 对比 Airflow 单机测评
DS
在单机情况下分别验证 Apache DolphinScheduler 与 Apache Airflow 实际处理简单的 Shell 的并发值。
DolphinScheduler 对比 Airflow 单机调度 Shell 脚本
由于我们是测试调度能力,这里选择的测试简单 Shell 脚本,脚本内容为: echo 123
我们分别验证了以下几个场景,验证 t_ds_commad 表并发是 300、400、500、700、800 的情况下 task_avg_count_start_time_per_min(任务平均启动时间/分钟)、Max num of started tasks per sec(启动总任务数最高值/秒)的值;同理,在关闭 Apache DolphinScheduler 服务后,在同 1 台单机上验证 Airflow 在以上情况下 task_avg_count_start_time_per_min 、Max num of started tasks per sec 的值。
注: 这里我们将服务运行日志输出调成 ERROR 级别。
结论:
可以看出单机情况下 Apache Dolphinscheduler 和 Airflow 的 CPU 都达到接近 99%;
Airflow 在不同 command 并发情况下,每分钟任务并发数(task_avg_count_start_time_per_min) 维持在 1001~1080 左右;
Apache DolphinScheduler 的 task_avg_count_start_time_per_min 维持在 2120~2420 左右, 是 Airflow 的 2+ 倍。
DolphinScheduler 单机调度能力测评(任务空跑模式)
DS
本次我们也对 Apache DolphinScheduler 的调度拉起任务能力进行了测评,结果如下:
DolphinScheduler 对比 Airflow 多机测评
DS
同时,我们也测试了 Apache DolphinScheduler 与 Airflow 在多机情况下 task_avg_count_start_time_per_min(任务平均启动时间/分钟)的表现,结果详情如下:
结论:
Airflow 在 4 Scheduler + 7 Worker 下,每分钟任务并发数(task_avg_count_start_time_per_min)可达到 4380;
Apache DolphinScheduler 仅在 2 Master + 5 Worker 时,每分钟任务并发数(task_avg_count_start_time_per_min) 可达到 6600。
4
总结
通过以上一些系列实验比对,在 8C 16G 硬件作为服务器配置、IOPS 9000 RDS 数据库环境条件下:
单机环境下,Apache DolphinScheduler 每分钟调度简单 Shell 任务并发是 Airflow 的 2+ 倍。
单机环境下,Apache DolphinScheduler 每分钟调度能力(任务空跑模式) 任务并发可达到 164460。
多机环境下,DolphinScheduler 是 Apache Airflow 每分钟调度任务并发的 2 倍左右。
附:
本次测试为了确保量化数据库本身吞吐性能,我们对 AWS RDS 数据库(IOPS 9000) 也进行了数据库性能基准测试。
使用的是业界常用的工具:Sysbench, 这是一个开源的、模块化的、跨平台的多线程性能测试工具,这里使用它来量化数据库吞吐性能。
安装方法
yum install sysbench
apt-get install sysbench
使用方法
1. 初始化 1000000 事务
sysbench --mysql-host=ds-test-mysql.cwkplpl0hwlq.ap-southeast-1.rds.amazonaws.com --mysql-user=admin --mysql-password=adminadmin --threads=80 --time=600 --events=1000000 --mysql-db=sysbench_test /usr/share/sysbench/oltp_insert.lua prepare
2. 运行 1000000 事务
sysbench --mysql-host=ds-test-mysql.cwkplpl0hwlq.ap-southeast-1.rds.amazonaws.com --mysql-user=admin --mysql-password=adminadmin --threads=80 --time=600 --events=1000000 --mysql-db=sysbench_test /usr/share/sysbench/oltp_insert.lua run
3. 清理 1000000 事务
sysbench --mysql-host=ds-test-mysql.cwkplpl0hwlq.ap-southeast-1.rds.amazonaws.com --mysql-user=admin --mysql-password=adminadmin --threads=80 --time=600 --events=1000000 --mysql-db=sysbench_test /usr/share/sysbench/oltp_insert.lua cleanup
在优化数据库入库刷新频率参数 innodb_flush_log_at_trx_commit=0 的前提下,在 Sysbench 的 oltp_insert 模式下插入 100 万的 events,这时每秒可达到 32125 个事务。
参与贡献
随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。
参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:
贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。
社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689
非新手问题列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22
如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html
来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。
参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,可以添加社区小助手微信(Leonard-ds) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。
添加社区小助手微信(Leonard-ds)
添加小助手微信时请说明想参与贡献。
来吧,开源社区非常期待您的参与。
< 🐬🐬 >
更多精彩推荐
☞在 AWS 上部署无服务器 Apache DolphinScheduler 任务调度系统
☞Apache Dolphinscheduler 任务插件版图再添 Linkis,大幅提高计算治理能力
☞DolphinScheduler 快速构建 Hugging Face 文本分类工作流,基于工作流的机器学习训练部署太强了!
☞Apache DolphinScheduler 任务调度3.1.0版本源码剖析
☞名额已排到10月 | Apache DolphinScheduler Meetup分享嘉宾继续火热招募中
☞非代码的贡献也能成为Committer,我与DolphinScheduler社区的故事
☞分布式可视化作业调度平台 DolphinScheduler MasterServer 设计核心要点揭秘
我知道你在看哟