searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

dolphinscheduler性能测试方法及实践

2024-06-04 09:06:52
10
0

一、测试范围和目标
Dolphinscheduler包含四个微服务,api/master/worker/alert,性能主要体现在master和worker两个服务。
Master负责任务分发和管理,性能体现在并发处理任务的能力上,可以直接采用shell任务进行测试。
Worker负责任务的具体执行和状态上报,性能体现在并发执行的资源开销上,本次使用linkis-client提交spark任务,并观测并发执行时的内存和CPU负载情况。


二、度量指标
Master性能采用每分钟最大处理任务数进行度量,即一次性大量提交远大于master处理能力的任务值数据库中,master对任务开始进行处理,其峰值处理能力可以达到多少。
Worker性能通过记录内存和CPU负载进行比对,通过预置不同内存和CPU配置,给出并发任务逐渐增加时的观测数据。


三、Master性能
3.1 不限资源,1 master + 1 executor,普通shell任务

 

3.2 测试分析
当前实测性能大约为每分钟执行2500个任务


四、Worker性能测试
4.1 4c+8g,20个spark sql任务并发

 


4.2 4c+8g,50个spark sql任务并发


4.3 8c+16g,20个spark sql任务并发

 


4.4 8c+16g,50个spark sql任务并发

 


4.5 测试数据分析
在任务并发提交时,CPU短时负载很高,即使少量任务也可以打满CPU,在任务被全部调起后,CPU回到正常负载水平。
内存随着任务被调起执行,逐渐升高,并长时间维持在一个区间内,在任务逐渐被执行完成后,内存负载下降,并最终回到空闲状态。


五、测试相关准备
5.1 数据库数据准备

import java.sql.*;

 

public class DolphinTest {

 

    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        Class.forName("com.mysql.cj.jdbc.Driver");

        String url = "jdbc:mysql://localhost:3306/dolphinschedulerdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&rewriteBatchedStatements=true";

        Connection conn = DriverManager.getConnection(url, "XXX", "XXX");

 

        // process_definition_code 指定工作流

        // executor_id 执行用户

        // process_definition_version 指定工作流版本

        PreparedStatement pstmt = conn.prepareStatement(

                "insert into t_ds_command(command_type, process_definition_code, command_param" +

                ", task_depend_type, failure_strategy, warning_type, warning_group_id" +

                ", start_time, executor_id, update_time" + // schedule_time,

                ", process_instance_priority, worker_group, environment_code, dry_run" +

                ", process_instance_id, process_definition_version)" +

                " values (?, ? ,?" +

                ", ?, ?, ?, ?" +

                ", ?, ?, ?" +

                ", ?, ?, ?, ?" +

                ", ?, ?)");

 

        for (int i = 0; i < 10000; i++){

 

            pstmt.setInt(1, 0);

            pstmt.setLong(2, 12990046315936L);

            pstmt.setString(3, "{}");

            pstmt.setInt(4, 2);

            pstmt.setInt(5, 0);

            pstmt.setInt(6, 0);

            pstmt.setInt(7, 0);

            Timestamp timestamp = new Timestamp(System.currentTimeMillis());

            pstmt.setTimestamp(8, timestamp);

            pstmt.setInt(9, 1);

            pstmt.setTimestamp(10, timestamp);

            pstmt.setInt(11, 2);

            pstmt.setString(12, "default");

            pstmt.setLong(13, -1);

            pstmt.setInt(14, 0);

            pstmt.setInt(15, 0);

            pstmt.setInt(16, 1);

 

            pstmt.addBatch();

 

        }

 

        pstmt.executeBatch();

        pstmt.close();

        conn.close();

    }

 

}

5.2 master性能统计sql

select

date_format(start_time, '%Y-%m-%d %H:%i:00') as minute,

count(1)

from t_ds_task_instance

where start_time >= 'XXX' and  start_time <= 'XXX'

group by minute

order by minute desc

0条评论
0 / 1000
w****u
1文章数
0粉丝数
w****u
1 文章 | 0 粉丝