2. 系统总体架构设计:前后端分离架构、微服务模块划分、核心组件交互关系图

本章聚焦于自助容量压测作业平台的顶层架构设计。我们采用前后端分离与微服务架构,确保平台具备高可扩展性、模块独立性与团队并行开发能力。以下从架构模式、模块划分、组件交互三个维度展开。

2.1 前后端分离架构

前端采用 Vue 3 + TypeScript 构建单页应用(SPA),后端基于 Spring Cloud Alibaba 微服务栈。前后端通过 RESTful API 与 WebSocket 进行通信,实现界面与逻辑的解耦。

层次 技术栈 职责
前端展示层 Vue 3, Element Plus, ECharts 任务编排画布、压测报告可视化、用户交互
API 网关层 Spring Cloud Gateway 统一入口、路由转发、鉴权、限流
业务服务层 Spring Boot, Dubbo 任务管理、引擎调度、数据采集
数据存储层 MySQL, Redis, InfluxDB 持久化配置、缓存、时序指标
架构优势:前端独立部署,支持 CDN 加速;后端服务可独立扩缩容,压测任务执行时不影响前端响应。

2.2 微服务模块划分

我们将平台拆分为 6 个核心微服务,每个服务围绕一个业务领域构建,拥有独立的数据库或 schema。

  • 用户服务 (user-srv): 负责登录、权限、团队管理。使用 JWT 令牌与 RBAC 模型。
  • 任务服务 (task-srv): 核心业务服务,管理压测任务的 CRUD、版本控制、编排配置。
  • 引擎服务 (engine-srv): 无状态计算节点,接收任务指令,驱动压测引擎(如 JMeter / Locust)执行。
  • 数据服务 (data-srv): 负责压测过程中的实时指标采集、聚合与存储,提供查询接口。
  • 报告服务 (report-srv): 任务结束后生成 PDF/HTML 报告,包含 TPS、响应时间、错误率等关键指标。
  • 通知服务 (notify-srv): 通过邮件、钉钉、Webhook 推送任务状态变更与异常告警。
设计原则:每个服务可独立部署、独立数据库、独立 CI/CD 流水线。服务间通过 Dubbo RPC 或 RocketMQ 异步消息解耦。

2.3 核心组件交互关系图

下图展示了用户发起一次压测任务时,各微服务之间的核心交互流程与数据流向。

核心组件交互关系图 核心组件交互关系图 前端 SPA (Vue 3) API 网关 (Gateway) 任务服务 (task-srv) 引擎服务 (engine-srv) 数据服务 (data-srv) 报告服务 (report-srv) 通知服务 (notify-srv) 存储层 (MySQL/Redis/InfluxDB) 交互说明: 1. 用户通过前端编排任务,请求经网关路由至任务服务。 2. 任务服务下发执行指令给引擎服务,引擎开始压测并推送实时数据到数据服务。 3. 任务结束后,报告服务拉取数据生成报告,通知服务发送结果给用户。

2.4 模块间通信方式

为了平衡实时性与系统解耦,我们采用两种通信模式:

通信模式 适用场景 技术选型
同步 RPC 任务编排、配置查询、用户鉴权 Dubbo + Protobuf
异步消息 任务状态变更、数据采集、通知推送 RocketMQ
实时流 压测指标仪表盘、日志 tail WebSocket + Kafka
避坑提示:避免在同步 RPC 中传递大量压测指标数据,否则会阻塞网关线程。指标数据应通过异步消息或实时流通道传输。

2.5 部署架构概览

平台采用容器化部署,每个微服务对应一个或多个 Pod,通过 Kubernetes 进行编排。下图展示部署拓扑。

部署架构概览 部署架构概览 浏览器 / 客户端 Nginx / SLB Kubernetes 集群 user-srv task-srv engine-srv data-srv report-srv notify-srv RocketMQ / Redis MySQL / InfluxDB
弹性伸缩:engine-srv 是压测执行的核心,支持基于 CPU 或任务队列长度的 HPA(Horizontal Pod Autoscaler),在压测高峰期自动扩容。

2.6 架构设计要点总结

  • 前后端分离:前端专注交互与可视化,后端专注业务逻辑与高并发处理。
  • 微服务粒度:按业务边界拆分,每个服务拥有独立数据源,避免共享数据库耦合。
  • 异步解耦:压测任务执行链路长,使用消息队列削峰填谷,提升系统稳定性。
  • 可观测性:每个微服务集成 Prometheus 指标暴露、ELK 日志采集、SkyWalking 链路追踪。
架构决策记录:选择 Spring Cloud Alibaba 而非 Spring Cloud Netflix,是因为 Nacos 提供更完善的服务发现与配置中心能力,且社区活跃度更高。