本文最后更新于:4 小时前
1 阿里云大规模并发架构配置与容量规划指南
1.1 文档概述
1.1.1 文档目的
本文档旨在记录和分析大规模并发场景下的系统架构配置方案,为后续类似场景提供标准化参考依据和容量规划指导。
1.1.2 适用场景
- 大规模在线考试/测评系统
- 高并发活动/秒杀场景
- 大型直播/在线教育平台
- 企业级SaaS应用高峰期
1.1.3 核心指标摘要
| 指标 |
数值 |
说明 |
| 目标用户数 |
28,726 人 |
预期参与用户总量 |
| 实际在线峰值 |
26,152 人 |
实际同时在线用户数 |
| 在线率 |
91.04% |
实际/目标用户比 |
| 系统可用性 |
99.9%+ |
服务无中断 |
| 平均响应时间 |
<200ms |
用户端体验 |
1.2 系统架构总览
1.2.1 架构分层
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| ┌─────────────────────────────────────────────────────────────┐ │ 用户层 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 负载均衡层 - CLB │ │ Max 1.1Gbps流出 / 309 CPS / 21K 并发连接 │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 应用服务层 - ACK集群 │ │ 20固定节点 + 108弹性节点 │ │ 268+ Pod副本 │ └─────────────────────────────────────────────────────────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ 数据库层 │ │ 缓存层 │ │ 消息队列层 │ │ MySQL主从集群 │ │ Redis 4分片集群 │ │ RocketMQ Serverless│ │ 16C64G × 4 │ │ 2G × 4 分片 │ │ 按需弹性 │ └──────────────────┘ └──────────────────┘ └──────────────────┘
|
1.2.2 组件选型说明
| 组件 |
选型 |
选型理由 |
| 负载均衡 |
阿里云CLB |
四层/七层负载,高可用,弹性带宽 |
| 数据库 |
MySQL RDS 主从 |
读写分离,高可用,自动备份 |
| 缓存 |
Redis 集群版 |
高性能,分布式,数据分片 |
| 消息队列 |
RocketMQ Serverless |
弹性伸缩,按量付费,免运维 |
| 注册中心 |
MSE Nacos |
微服务注册发现,配置管理 |
| 容器编排 |
ACK (K8s) |
弹性伸缩,微服务部署,资源隔离 |
1.3 负载均衡配置 (CLB)
1.3.1 配置规格
| 配置项 |
规格 |
说明 |
| 最大带宽 |
5,120 Mbps |
弹性带宽上限 |
| 协议支持 |
TCP/HTTP/HTTPS |
四层/七层负载均衡 |
| 健康检查 |
已启用 |
自动剔除异常节点 |
1.3.2 性能水位
| 指标 |
峰值 |
平均值 |
利用率 |
评估 |
| 流出带宽 |
1.1 Gbps |
- |
21.5% |
✅ 充足 |
| 流入带宽 |
31 Mbps |
- |
0.6% |
✅ 充足 |
| 新建连接数 (CPS) |
309 c/s |
80 c/s |
- |
✅ 正常 |
| 并发连接数 |
21,125 |
5,000 |
- |
✅ 可控 |
1.3.3 关键洞察
- 带宽规划:当前配置5120Mbps,实际峰值仅1.1Gbps,预留约4.6倍冗余,可支撑更大规模
- 连接数:CPS峰值309,说明连接建立频率较低,用户连接保持时间较长(长连接场景)
- 流入/流出比:流出带宽远大于流入,符合读多写少的业务特征
1.3.4 容量规划建议
| 用户规模 |
建议带宽 |
建议CPS容量 |
| 30,000 |
2 Gbps |
500 c/s |
| 50,000 |
3 Gbps |
800 c/s |
| 100,000 |
6 Gbps |
1,500 c/s |
1.4 数据库配置
1.4.1 MySQL 配置
1.4.1.1 架构配置
| 配置项 |
规格 |
| 主库 |
16核 64GB × 1 |
| 从库 |
16核 64GB × 3 |
| 弹性扩展 |
Serverless (最大16PCU × 15节点) |
1.4.1.2 性能水位 - 主库
| 指标 |
峰值 |
平均值 |
利用率 |
评估 |
| CPU |
12.88% |
6.04% |
低 |
✅ 充足 |
| 内存 |
21.38% |
17.48% |
低 |
✅ 充足 |
| QPS |
6,417.76 |
2,648.20 |
- |
✅ 可控 |
| TPS |
492.90 |
105.24 |
- |
✅ 可控 |
1.4.1.3 性能水位 - 从库
| 指标 |
峰值 |
平均值 |
利用率 |
评估 |
| CPU |
37.62~41.19% |
11.46~14.74% |
中低 |
✅ 正常 |
| 内存 |
13.3~14% |
12.8~13.25% |
低 |
✅ 充足 |
| QPS |
5,482~5,776 |
2,236~2,698 |
- |
✅ 可控 |
1.4.1.4 关键洞察
- 主从分离效果显著:主库CPU峰值仅12.88%,读请求有效分散到从库
- 从库压力高于主库:从库CPU峰值41%,说明读请求占主导,从库数量可进一步增加
- Serverless弹性有效:自动伸缩应对突发流量,避免资源浪费
- TPS/QPS比:TPS远低于QPS,事务操作较少,以查询为主
1.4.1.5 容量规划建议
| 用户规模 |
主库配置 |
从库数量 |
Serverless上限 |
| 30,000 |
16C64G |
3 |
16PCU × 15 |
| 50,000 |
32C128G |
4~5 |
32PCU × 20 |
| 100,000 |
64C256G |
6~8 |
64PCU × 30 |
1.4.2 Redis 缓存配置
1.4.2.1 架构配置
| 配置项 |
规格 |
| 架构 |
2主2从 - 四分片 |
| 单分片内存 |
2 GB |
| 单分片带宽 |
96 MB/s |
| 最大连接数 |
500,000 |
| 参考QPS |
960,000 |
1.4.2.2 性能水位
| 指标 |
峰值 |
评估 |
| 内存使用率 |
13.5% |
✅ 充足 |
| CPU使用率 |
20.24% |
✅ 正常 |
| 连接数使用率 |
0.08% |
✅ 极度空闲 |
1.4.2.3 关键洞察
- 缓存命中率高:内存使用率仅13.5%,说明缓存策略有效
- 连接池优化空间大:连接数使用率极低,可适当降低最大连接数配置
- 带宽充足:96MB/s单分片带宽,总带宽384MB/s,远超实际需求
1.4.2.4 容量规划建议
| 用户规模 |
分片数 |
单分片内存 |
单分片带宽 |
| 30,000 |
4 |
2 GB |
96 MB/s |
| 50,000 |
4~6 |
4 GB |
128 MB/s |
| 100,000 |
8 |
8 GB |
256 MB/s |
1.5 中间件配置
1.5.1 RocketMQ 消息队列
1.5.1.1 配置规格
| 配置项 |
规格 |
| 计费模式 |
Serverless (按请求次数) |
| 弹性TPS上限 |
25,000 发送 / 25,000 接收 |
1.5.1.2 性能水位
| 指标 |
峰值 |
平均值 |
利用率 |
评估 |
| TPS |
530 |
33.5 |
2.1% |
✅ 极度空闲 |
| 存储空间 |
0.333 GB |
- |
- |
✅ 可忽略 |
1.5.1.3 关键洞察
- 业务异步化程度低:TPS峰值仅530,说明业务以同步调用为主
- 成本优化空间大:当前用量极低,Serverless按量计费非常经济
- 扩展能力充足:配置上限25,000 TPS,可支撑50倍当前峰值
1.5.2 MSE Nacos 注册中心
1.5.2.1 配置规格
1.5.2.2 性能水位
| 指标 |
峰值 |
平均值 |
评估 |
| 内存使用率 |
54% |
53.8% |
⚠️ 中等 |
| CPU使用率 |
6% |
4% |
✅ 正常 |
1.5.2.3 关键洞察
- 内存压力中等:54%使用率处于中等水平,需关注服务实例增长对内存的影响
- CPU空闲:4%使用率说明注册中心压力较小
- 扩容建议:若服务实例超过当前2倍,建议升级到4核8GB
1.6 Kubernetes集群配置 (ACK)
1.6.1 节点池配置
1.6.1.1 固定节点池
| 节点池名称 |
实例规格 |
节点数 |
用途 |
| nodepool-priority |
ecs.u2a-c1m2.2xlarge, ecs.e-c1m2.2xlarge |
15 |
核心服务 |
| nodepool |
ecs.e-c1m2.2xlarge, ecs.u2a-c1m2.2xlarge, ecs.u1-c1m2.2xlarge |
5 |
通用服务 |
1.6.1.2 弹性伸缩节点池
| 配置项 |
规格 |
| 最大实例数 |
108 |
| 最小实例数 |
2 |
| 伸缩策略 |
基于资源利用率自动伸缩 |
1.6.1.3 节点规格说明
| 规格 |
vCPU |
内存 |
适用场景 |
| ecs.u2a-c1m2.2xlarge |
8核 |
16GB |
计算密集型 |
| ecs.e-c1m2.2xlarge |
8核 |
16GB |
通用型 |
| ecs.u1-c1m2.2xlarge |
8核 |
16GB |
经济型 |
1.6.2 工作负载配置
HPA配置说明:所有Deployment的HPA最大副本数设置为 50个。
1.6.2.1 无状态服务资源分配
| 服务名称 |
副本数 |
CPU请求 |
CPU限制 |
内存请求 |
内存限制 |
优先级 |
| etms-gateway |
35 |
250m |
600m |
2,512Mi |
3,096Mi |
P0-核心 |
| etms-web |
50 |
330m |
810m |
330Mi |
520Mi |
P0-核心 |
| etms-system |
30 |
2核 |
4核 |
5,590Mi |
5,590Mi |
P1-重要 |
| etms-person |
30 |
670m |
1,430m |
7,590Mi |
7,590Mi |
P1-重要 |
| etms-train |
25 |
1核 |
2,500m |
5,310Mi |
5,310Mi |
P1-重要 |
| etms-project |
20 |
2,520m |
5,040m |
7,507Mi |
8,024Mi |
P1-重要 |
| etms-statistic |
20 |
2,970m |
4核 |
9,290Mi |
9,290Mi |
P1-重要 |
| etms-course |
15 |
2,670m |
4,800m |
6,520Mi |
6,820Mi |
P1-重要 |
| etms-resource |
12 |
940m |
1,400m |
4,100Mi |
5,270Mi |
P2-普通 |
| etms-auth |
10 |
1,520m |
2核 |
2,040Mi |
2,560Mi |
P1-重要 |
| etms-operation |
10 |
670m |
1,330m |
4Gi |
4,560Mi |
P2-普通 |
| seata-server |
10 |
270m |
- |
1,150Mi |
1,150Mi |
P2-普通 |
| kkfileview |
4 |
40m |
- |
1,630Mi |
3,260Mi |
P3-低 |
| etms-job |
1 |
50m |
- |
950Mi |
1,370Mi |
P2-普通 |
| etms-xxl-job-admin |
1 |
40m |
- |
680Mi |
1,360Mi |
P2-普通 |
| etms-polyvweb |
0 |
40m |
- |
330Mi |
- |
P3-低 |
1.6.2.2 资源汇总
| 资源类型 |
总请求量 |
总限制量 |
说明 |
| CPU请求 |
~53 核 |
- |
所有Pod CPU请求总和 |
| CPU限制 |
- |
~96 核 |
所有Pod CPU限制总和 |
| 内存请求 |
~145 Gi |
- |
所有Pod内存请求总和 |
| 内存限制 |
- |
~160 Gi |
所有Pod内存限制总和 |
| 总副本数 |
268 |
- |
当前运行Pod总数 |
1.6.3 JVM参数配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [ "java", "-XX:+CrashOnOutOfMemoryError", "-Djava.security.egd=file:/dev/./urandom", "-XX:+UseContainerSupport", "-XX:MaxRAMPercentage=60.0", "-XX:InitialRAMPercentage=50.0", "-XX:MinRAMPercentage=50.0", "-XX:MaxDirectMemorySize=512m", "-XX:MetaspaceSize=512m", "-XX:MaxMetaspaceSize=512m", "-XX:ReservedCodeCacheSize=256m", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=200", "-XX:+DisableExplicitGC", "-jar", "app.jar" ]
|
1.6.3.1 JVM参数说明
| 参数 |
值 |
说明 |
| MaxRAMPercentage |
60.0% |
JVM最大堆内存占容器内存的60% |
| InitialRAMPercentage |
50.0% |
JVM初始堆内存占容器内存的50% |
| MinRAMPercentage |
50.0% |
JVM最小堆内存占容器内存的50% |
| MaxDirectMemorySize |
512m |
最大直接内存 |
| MetaspaceSize |
512m |
元空间初始大小 |
| MaxMetaspaceSize |
512m |
元空间最大大小 |
| ReservedCodeCacheSize |
256m |
代码缓存大小 |
| GC算法 |
G1GC |
低延迟垃圾收集器 |
| MaxGCPauseMillis |
200 |
GC最大暂停时间目标 |
1.6.3.2 JVM配置最佳实践
- 堆内存设置:使用
-XX:MaxRAMPercentage而非固定值,适应不同容器规格
- OOM保护:
-XX:+CrashOnOutOfMemoryError确保OOM时快速失败,便于监控发现
- GC选择:G1GC适合大堆内存,200ms暂停时间目标平衡吞吐和延迟
- 直接内存限制:512m限制防止Netty等组件过度使用直接内存
1.7 容量规划指南
1.7.1 用户规模扩展矩阵
| 组件 |
30K用户 |
50K用户 |
100K用户 |
200K用户 |
| CLB带宽 |
2 Gbps |
3 Gbps |
6 Gbps |
12 Gbps |
| MySQL主库 |
16C64G |
32C128G |
64C256G |
128C512G |
| MySQL从库 |
3台 |
4~5台 |
6~8台 |
10~12台 |
| Redis分片 |
4分片×2G |
4~6分片×4G |
8分片×8G |
16分片×8G |
| ACK固定节点 |
20 |
30 |
50 |
80 |
| ACK弹性上限 |
108 |
150 |
250 |
400 |
| Gateway副本 |
35 |
50 |
80 |
120 |
| Web副本 |
50 |
80 |
120 |
200 |
1.7.2 成本优化建议
1.7.2.1 资源超卖率分析
| 组件 |
请求资源 |
实际使用 |
超卖率 |
建议 |
| MySQL |
16C64G |
CPU 12.88% |
7.7:1 |
可降配 |
| Redis |
8GB内存 |
13.5% |
7.4:1 |
可降配 |
| ACK节点 |
320C 640G |
- |
- |
需监控 |
1.7.2.2 成本优化策略
弹性伸缩优化
- 设置合理的HPA触发阈值(CPU 70%,内存 80%)
- 配置冷却时间防止频繁伸缩(扩容30s,缩容300s)
- 预热机制:大型活动前提前扩容
资源配置优化
- 使用
requests和limits分离,允许适度超卖
- 非核心服务可使用Burstable QoS
- 定期review资源使用率,调整配额
计费模式选择
- 固定节点:包年包月(节省30%+)
- 弹性节点:按量付费+抢占式实例(节省60%+)
- Serverless组件:按量付费(MQ、函数计算)
1.8 监控与告警
1.8.1 核心监控指标
1.8.1.1 基础设施层
| 指标 |
告警阈值 |
紧急阈值 |
响应动作 |
| 节点CPU |
>70% |
>90% |
扩容/排查 |
| 节点内存 |
>80% |
>95% |
扩容/排查 |
| 磁盘使用率 |
>80% |
>90% |
清理/扩容 |
| 网络带宽 |
>70% |
>90% |
扩容 |
1.8.1.2 应用层
| 指标 |
告警阈值 |
紧急阈值 |
响应动作 |
| Pod重启次数 |
>3次/小时 |
>10次/小时 |
排查OOM/健康检查 |
| HPA副本数 |
>80%最大值 |
>95%最大值 |
扩大HPA上限 |
| 请求延迟P99 |
>500ms |
>2000ms |
性能优化 |
| 错误率 |
>1% |
>5% |
紧急排查 |
1.8.1.3 数据库层
| 指标 |
告警阈值 |
紧急阈值 |
响应动作 |
| 连接数使用率 |
>70% |
>90% |
扩大连接池/优化慢查询 |
| 慢查询数 |
>10/分钟 |
>50/分钟 |
SQL优化 |
| 主从延迟 |
>1s |
>5s |
检查从库负载 |
| 死锁数 |
>0 |
>5 |
紧急排查 |
1.8.1.4 缓存层
| 指标 |
告警阈值 |
紧急阈值 |
响应动作 |
| 内存使用率 |
>70% |
>90% |
扩容/清理过期key |
| CPU使用率 |
>70% |
>90% |
扩容/优化大key |
| 连接数使用率 |
>70% |
>90% |
扩大连接池 |
| 缓存命中率 |
<90% |
<80% |
优化缓存策略 |
1.8.2 大型活动保障Checklist
1.8.2.1 活动前 (T-7天)
1.8.2.2 活动前 (T-1天)
1.8.2.3 活动中
1.8.2.4 活动后 (T+1天)
1.9 最佳实践总结
1.9.1 架构设计原则
- 无状态化:应用服务无状态,便于水平扩展
- 读写分离:数据库主从分离,读请求分散到从库
- 缓存优先:热点数据缓存,降低数据库压力
- 异步解耦:非核心流程异步化,消息队列削峰
- 弹性伸缩:基于指标自动扩缩容,应对流量波动
1.9.2 性能优化要点
数据库优化
- 索引优化:覆盖索引、联合索引
- 查询优化:避免SELECT *、分页优化
- 连接池调优:合理设置连接数和超时
缓存优化
- 缓存预热:活动前提前加载热点数据
- 过期策略:合理设置TTL,避免缓存雪崩
- 大Key治理:监控大Key,拆分或压缩
应用优化
- JVM调优:堆内存、GC参数、线程池
- 连接池优化:HTTP连接池、数据库连接池
- 异步化:CompletableFuture、响应式编程
1.9.3 高可用保障
- 多可用区部署:跨AZ部署,避免单点故障
- 熔断降级:Sentinel/Hystrix熔断,保护核心链路
- 限流控制:网关层限流,防止流量冲击
- 灰度发布:金丝雀发布,降低发布风险
- 故障演练:定期混沌工程演练,验证容灾能力
1.10 附录
1.10.1 术语表
| 术语 |
全称 |
说明 |
| CLB |
Cloud Load Balancer |
阿里云负载均衡服务 |
| ACK |
Alibaba Cloud Container Service for Kubernetes |
阿里云Kubernetes服务 |
| MSE |
Microservices Engine |
阿里云微服务引擎 |
| HPA |
Horizontal Pod Autoscaler |
Kubernetes水平Pod自动伸缩 |
| CPS |
Connections Per Second |
每秒新建连接数 |
| QPS |
Queries Per Second |
每秒查询数 |
| TPS |
Transactions Per Second |
每秒事务数 |
| RDS |
Relational Database Service |
关系型数据库服务 |
| PCU |
PolarDB Capacity Unit |
PolarDB计算单元 |
1.10.2 参考配置模板
1.10.2.1 MySQL最小高可用配置
1 2 3 4
| 主库: 4核8GB × 1 从库: 4核8GB × 2 存储: SSD 500GB 备份: 自动备份 7天
|
1.10.2.2 Redis最小集群配置
1 2 3
| 架构: 2主2从 - 2分片 单分片: 1GB内存, 64MB/s带宽 最大连接数: 50,000
|
1.10.2.3 ACK最小生产配置
1 2 3
| 固定节点: 3台 (ecs.e-c1m2.xlarge) 弹性上限: 10台 HPA最大副本: 10
|
1.10.3 变更记录
| 版本 |
日期 |
变更内容 |
作者 |
| v1.0 |
2026-03-29 |
初始版本,记录26K用户并发配置 |
fcs |
文档维护说明:本文档应随着系统架构演进和业务规模变化持续更新。每次大型活动后,应根据实际数据更新容量规划模型和最佳实践建议。