一、问题描述

DolphinScheduler调度平台的UI界面加载缓慢,项目中的任务实例加载时间过长,需要解决这个问题,提高DolphinScheduler平台UI页面的加载速度。


二、原因分析

经过分析发现,任务实例过多是导致UI加载缓慢的主要原因。由于任务实例无法直接删除,根据文档了解到需要删除相应的工作流实例。删除工作流实例后,相关的任务实例和日志会自动被删除。然而,手动删除工作流实例耗时较长,因此不是一个有效的解决方案。为了提高效率,可以利用DolphinScheduler提供的API接口来实现删除操作,然后在DolphinScheduler平台上设置一个定时任务,定期清理工作流实例。可以编写Shell脚本或Python脚本来实现清理逻辑。

根据DolphinScheduler的API文档,进程实例(Process Instance)对应着UI页面中的工作流实例。因此,通过定时清理过期的进程实例,可以有效优化DolphinScheduler平台的UI加载速度。


三、解决方案

1. 设置API访问令牌

创建令牌步骤如下:

DolphinScheduler运维-页面加载缓慢-LMLPHP

2. 逻辑分析

2.1 查找用于删除的API

查看DolphinScheduler的API文档,文档地址:http://localhost:12345/dolphinscheduler/swagger-ui/index.html。
找到进程实例相关操作的API,可以看到有两个进行删除操作的API,选择批量删除的接口/dolphinscheduler/projects/{projectCode}/process-instances/batch-delete来执行删除操作。
需要两个参数。

  • processInstanceIds:进程实例id的数组,用逗号分隔
  • projectCode:项目代码

DolphinScheduler运维-页面加载缓慢-LMLPHP

2.2 获取进程实例id的数组

可以从/dolphinscheduler/projects/{projectCode}/process-instances接口获取进程实例的相关信息。
需要三个参数。

  • pageNo:当前页
  • pageSize:每页多少条数据
  • projectCode:项目代码
    DolphinScheduler运维-页面加载缓慢-LMLPHP

2.3 获取项目代码

找到项目相关操作的API,可以使用/dolphinscheduler/projects/list获取所有项目的一个列表信息,可以根据其中的项目名获得项目代码。

3. 代码实现

此代码将会清理所有项目4个月前1号到3个月前1号的工作流实例。

3.1 shell代码实现

#!/bin/bash

# 认证令牌
token='5c7437968f5d4492dc694902d6e6847f'
# 链接
url='http://localhost:12345/dolphinscheduler'
# 每页多少条
page_size=10

# 三个月前日期时间
three_month_ago_datetime=$(date -d "-3 months" '+%Y-%m-01')
# 四个月前日期时间
four_month_ago_datetime=$(date -d "-4 months" '+%Y-%m-01')

# 获取所有项目名称
project_names=($(curl -X GET -H "token: ${token}" "${url}/projects/list" | jq -r '.data[] | "\(.name)"'))

# 循环获取项目名
for project_name in "${project_names[@]}"
do
  echo "************************** 项目名: ${project_name} **************************"
  # 根据项目名获取项目代码
  project_code=$(curl -X GET -H "token: ${token}"
03-20 12:34