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 核心组件交互关系图
下图展示了用户发起一次压测任务时,各微服务之间的核心交互流程与数据流向。
2.4 模块间通信方式
为了平衡实时性与系统解耦,我们采用两种通信模式:
| 通信模式 | 适用场景 | 技术选型 |
|---|---|---|
| 同步 RPC | 任务编排、配置查询、用户鉴权 | Dubbo + Protobuf |
| 异步消息 | 任务状态变更、数据采集、通知推送 | RocketMQ |
| 实时流 | 压测指标仪表盘、日志 tail | WebSocket + Kafka |
避坑提示:避免在同步 RPC 中传递大量压测指标数据,否则会阻塞网关线程。指标数据应通过异步消息或实时流通道传输。
2.5 部署架构概览
平台采用容器化部署,每个微服务对应一个或多个 Pod,通过 Kubernetes 进行编排。下图展示部署拓扑。
弹性伸缩:engine-srv 是压测执行的核心,支持基于 CPU 或任务队列长度的 HPA(Horizontal Pod Autoscaler),在压测高峰期自动扩容。
2.6 架构设计要点总结
- 前后端分离:前端专注交互与可视化,后端专注业务逻辑与高并发处理。
- 微服务粒度:按业务边界拆分,每个服务拥有独立数据源,避免共享数据库耦合。
- 异步解耦:压测任务执行链路长,使用消息队列削峰填谷,提升系统稳定性。
- 可观测性:每个微服务集成 Prometheus 指标暴露、ELK 日志采集、SkyWalking 链路追踪。
架构决策记录:选择 Spring Cloud Alibaba 而非 Spring Cloud Netflix,是因为 Nacos 提供更完善的服务发现与配置中心能力,且社区活跃度更高。