点亮 ⭐️ Star · 照亮开源之路

https://github.com/apache/dolphinscheduler

29190e2a7e32ec731f6d73d1ad062c7f.jpeg

作者 | 温子新,Apache DolphinScheduler Committer

在工作流任务调度的选择上,Apache DolphinScheduler 和 Apache Airflow 都是非常不错的选择。本文在相同硬件测试背景下对这两个调度平台的性能进行了对比。结果显示,DolphinScheduler 的性能表现让人惊喜,来看看具体测试数据和测试过程吧!

1

实验环境

测试环境采用 8 台 AWS 8C 16G 服务器作为 Apache DolphinScheduler 和 Airflow 的部署服务器,配置如下:

6c3de79a802a49c67c969d618036c638.png

同理 Airflow 的 Scheduler 与 Worker 均部署在这 8 台服务器上,运行 Apache DolphinScheduler 时关闭 Airflow 服务,保证相互不影响。

数据库采用 AWS 的 RDS 作为存储,配置如下: 

3733de968a4bf97b295b1a63e8ee7fef.png

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。

b72e237c84dcb0b930d31699e247f0d0.png

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

  1. Airflow dag-processor 将 dags 文件夹的文件解析并持久化到数据库

  2. Airflow Worker, Airflow Scheduler 开始调度和测试

  3. python airperf.py analyse --part throughput 或者 python airperf.py analyse --part latency 分析任务并发和延时

3

测评过程

指标监测

DS

调度任务进行吞吐时,我们这里等任务全部入库后,直接统计数据内的字段来衡量当前系统的吞吐情况。

Apache DolphinScheduler 和 Airflow 采用相同的指标来对比,DolphinScheduler 指标明细说明见附 1,Airflow 指标明细说明见附 2。

6134b4296414230bda884c60ce6cbe6d.png

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 的值。

6294cc6e4654716745a9e4a140f3158f.png

注: 这里我们将服务运行日志输出调成 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 的调度拉起任务能力进行了测评,结果如下:

5575e2d4331a3547cb29582fb97e7beb.png

DolphinScheduler 对比 Airflow 多机测评

DS

同时,我们也测试了 Apache DolphinScheduler 与 Airflow 在多机情况下 task_avg_count_start_time_per_min(任务平均启动时间/分钟)的表现,结果详情如下:

2266045f96ac1d9afc08434e97161458.png

结论:

  • 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 个事务。

2e1011d719f38777fa9ddf61e6ed8d97.png

参与贡献

随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。

5352be43fde71469248f82ca0d3aba0c.png

参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:

47bf4b5a8ed2982f7143e934aaee49a4.png

贡献第一个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) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。

75e22fe239d1f451df83ac0282731874.jpeg

添加社区小助手微信(Leonard-ds) 

添加小助手微信时请说明想参与贡献。

来吧,开源社区非常期待您的参与。

< 🐬🐬 >

更多精彩推荐

在 AWS 上部署无服务器 Apache DolphinScheduler 任务调度系统

☞Apache Dolphinscheduler 任务插件版图再添 Linkis,大幅提高计算治理能力

DolphinScheduler 快速构建 Hugging Face 文本分类工作流,基于工作流的机器学习训练部署太强了!

☞Apache DolphinScheduler 任务调度3.1.0版本源码剖析

☞名额已排到10月 | Apache DolphinScheduler Meetup分享嘉宾继续火热招募中

☞非代码的贡献也能成为Committer,我与DolphinScheduler社区的故事

分布式可视化作业调度平台 DolphinScheduler MasterServer 设计核心要点揭秘

我知道你在看d6795cba293a29ad2e100c6f014b34ba.png

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐