Skip to content

lurk111/task-platform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于自适应缓冲线程池的智能任务调度监控平台

📌 项目简介

本项目是一个完整的前后端分离系统,核心是自研的 AdaptiveBufferedThreadPoolExecutor(自适应缓冲线程池),解决了传统 JDK ThreadPoolExecutor 在高并发场景下频繁触发拒绝策略、导致大量任务丢失的痛点问题。

围绕该线程池,构建了一套可视化的任务调度监控平台,实现了任务全生命周期追踪、线程池运行状态实时监控、ABTP vs JDK 压测对比、动态参数热更新等核心功能。

🏗️ 项目结构

分支 内容 技术栈
main 后端代码 Spring Boot + MyBatis-Plus + MySQL + Redis + WebSocket
frontend 前端代码 Vue3 + Element Plus + ECharts + Axios

🔧 技术栈

层次 技术
核心线程池 自研 AdaptiveBufferedThreadPoolExecutor(基于 AQS + CAS)
后端框架 Spring Boot 3.3.2
持久层 MyBatis-Plus 3.5.5 + MySQL
缓存 Redis(监控指标缓存 + 历史趋势数据)
实时通信 WebSocket(1秒级指标推送)
系统监控 JMX OperatingSystemMXBean(CPU 负载采集)
前端框架 Vue3 + Vite
UI 组件 Element Plus
数据可视化 ECharts(折线图 / 柱状图 / 面积图)
部署 Sealos 云平台

✨ 核心功能

1. 自适应缓冲线程池(AdaptiveBufferedThreadPoolExecutor)

在 JDK ThreadPoolExecutor 基础上做了两项核心改造:

  • Buffer Factor 缓冲策略:引入缓冲因子参数(0~1),控制队列填充到多少比例后才开始扩展线程。IO 密集型业务设大值优先填队列,CPU 密集型业务设小值优先扩线程。
  • 防拒绝强制入队机制:当线程池满载时,根据 CPU 负载和线程负载双维度判断:
    • CPU 低 + 线程负载低 → 阻塞等待入队
    • CPU 低 + 线程负载高 → CPU 空转 + 指数退避重试
    • CPU 高 + 线程负载高 → 尝试一次入队,失败才真正拒绝

2. 实时监控大盘

  • 后端通过 @Scheduled 每秒采集线程池指标(活跃线程数、队列深度、CPU 负载、已完成任务数)
  • 通过 WebSocket 实时推送至前端
  • 前端使用 ECharts 渲染动态折线图,支持最近 60 秒的滚动展示
  • Redis 缓存最近 5 分钟历史数据,支持页面刷新后查看趋势

3. 压测对比模块

  • 支持自定义参数(核心线程数、最大线程数、队列大小、任务总数、Buffer Factor)
  • 一键对比 ABTP vs JDK ThreadPool 的拒绝次数、成功率、总耗时
  • 支持测试不同 Buffer Factor 值对系统吞吐的影响,生成柱状图 + 折线图

4. 动态参数热更新

  • 前端滑块调节核心线程数、最大线程数、空闲超时时间
  • 调用线程池的 setCorePoolSize()setMaximumPoolSize() 等方法
  • 零停机生效,无需重启服务

5. 任务全生命周期追踪

  • 每个任务拥有唯一 taskId,状态流转:PENDING → RUNNING → SUCCESS / FAILED
  • TaskWrapper 包装器记录任务开始时间、执行耗时、异常信息
  • 前端任务列表支持按状态筛选、分页查询

6. IO / CPU 密集型任务模拟

  • IO 密集型:Thread.sleep() 模拟网络等待,线程释放 CPU
  • CPU 密集型:死循环浮点运算,强制占用 CPU 资源
  • 监控大盘可直观观察两种任务类型对系统资源的不同影响

📊 性能指标

指标 JDK ThreadPool ABTP
任务执行成功率 ~6.5% 100%
拒绝策略触发次数 1870 次 0 次
参数调节方式 重启服务 零停机热更新
监控数据延迟 < 1 秒(WebSocket)

🚀 快速开始

后端启动(main 分支)

git checkout main
mvn clean package -DskipTests
java -jar target/backend-1.0.0.jar


前端启动(frontend 分支)
git checkout frontend
npm install
npm run dev

数据库初始化
CREATE DATABASE IF NOT EXISTS taskplatform DEFAULT CHARACTER SET utf8mb4;
-- 详见 main 分支中的建表 SQL

📁 后端目录结构(main 分支)
<TEXT>
src/main/java/com/taskplatform/
├── config/          # 配置类(线程池、跨域、WebSocket、Redis、Jackson)
├── controller/      # REST 接口(任务、监控、压测、参数调节)
├── service/         # 业务逻辑(任务管理、告警检测)
├── mapper/          # MyBatis-Plus 数据访问层
├── entity/          # 数据库实体类
├── pool/            # 核心线程池 + 指标采集器 + 任务包装器
├── websocket/       # WebSocket 实时推送
└── vo/              # 统一返回格式
📁 前端目录结构(frontend 分支)
<TEXT>
src/
├── api/             # 后端接口调用
├── views/           # 页面(监控大盘、任务提交、压测对比、参数调节)
├── utils/           # 工具类(Axios 封装、WebSocket 封装)
├── router/          # 路由配置
├── App.vue          # 主布局(侧边栏 + 内容区)
└── main.js          # 入口文件
👤 作者
[lurk]

📄 License
MIT

About

基于自适应缓冲线程池的智能任务调度监控平台

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors