【IT老齐098 笔记】京东实例讲解如何进行系统架构容量评估

视频来源:B站 IT老齐

本文为视频学习笔记 + 扩展整理,结合京东大促、电商系统等实际场景。


一、什么是容量评估

容量评估是在系统上线或大促前,预估系统需要多少资源(服务器、带宽、数据库等)才能扛住业务流量的过程。

说白了就是回答一个问题:大促来了,我需要几台机器?

1. 为什么要做容量评估

场景 不做容量评估的后果
新系统上线 机器配少了扛不住,配多了浪费钱
电商大促(618/双11) 流量暴增导致系统崩溃,直接损失营收
业务增长 用户量翻倍后系统响应变慢,用户流失
架构升级 无法评估新架构能否满足业务需求

2. 核心指标

指标 含义 说明
QPS Queries Per Second 每秒查询数,衡量读取能力
TPS Transactions Per Second 每秒事务数,衡量写入/处理能力
RT Response Time 平均响应时间
并发数 Concurrency 同时处理的请求数

核心关系公式:

复制代码
QPS = 并发数 ÷ 平均响应时间(秒)

例如:100 个并发,平均响应 0.1 秒 → QPS = 100 ÷ 0.1 = 1000


二、容量评估五步法

第一步:预估总流量

从产品/运营获取业务数据:

  • 日活用户数(DAU)
  • 日均 PV(页面访问量)
  • 日均订单量
  • 活动期间预计增长倍数

这些数据"不能全信也不可不信",通常参考历史数据 + 业务增长预期。

第二步:计算平均 QPS

复制代码
平均 QPS = 总请求数 ÷ 总时长(秒)

示例: 日均 300 万 PV,每个页面平均产生 30 次接口调用:

复制代码
总请求数 = 300万 × 30 = 9000万
平均 QPS = 9000万 ÷ 86400秒 ≈ 1042 QPS

第三步:计算峰值 QPS

平均值不代表真实压力,需要估算峰值。有两种常用方法:

方法一:二八原则

80% 的访问集中在 20% 的时间内

复制代码
峰值 QPS =(总 PV × 80%)÷(86400秒 × 20%)

示例: 300 万 PV

复制代码
峰值 QPS =(300万 × 0.8)÷(86400 × 0.2)= 240万 ÷ 17280 ≈ 139 QPS

方法二:峰值倍数法(更常用)

复制代码
峰值 QPS = 平均 QPS × 峰值系数(一般 3~5 倍)

示例: 平均 QPS 为 1000

复制代码
峰值 QPS = 1000 × 5 = 5000 QPS

大促场景(618/双11)峰值可达日常的 10~20 倍,需要单独评估。

第四步:压测单机性能

通过压力测试得出单台服务器的极限 QPS:

组件 经验参考值
Nginx(静态) 5万~10万 QPS
Java 应用(Spring Boot) 1000~5000 QPS
MySQL(简单查询) 6000~10000 QPS
Redis 8万~10万 QPS
RPC 调用(Dubbo) ~10万 QPS

这只是经验参考值,实际以压测结果为准。生产环境不要跑满,建议按极限的 80% 计算。

第五步:计算服务器数量

复制代码
所需服务器数 = 峰值 QPS ÷ 单机 QPS(按 80% 计算)

示例: 峰值 5000 QPS,单机压测极限 1000 QPS

复制代码
单机安全 QPS = 1000 × 0.8 = 800
所需服务器 = 5000 ÷ 800 = 6.25 → 取整 7 台

再加上容量冗余(通常 1.5~3 倍):

复制代码
最终服务器 = 7 × 2 = 14 台

三、京东大促容量评估实践

1. 流量预估

京东 618 容量规划的核心思路:

复制代码
历史峰值 × 业务增长系数 × 安全冗余系数 = 目标容量
维度 评估方法
流量预估 去年同期峰值 × 增长倍数
接口级预估 核心接口单独评估 QPS
链路级预估 从入口到 DB 全链路分析瓶颈

2. 全链路容量分析

一次用户请求可能经过多个环节,木桶原理------最短板决定整体容量

复制代码
用户请求
  → 网关(10万 QPS)
  → 应用服务(3000 QPS × N 台)
  → 缓存(Redis 10万 QPS)
  → 数据库(MySQL 8000 QPS)
  → 消息队列(Kafka 10万 QPS)

瓶颈分析: 假设应用层单机 3000 QPS,要支撑 3 万峰值 QPS:

复制代码
应用层:30000 ÷ 3000 = 10 台
数据库:30000 ÷ 8000 = 3.75 → 4 台(读写分离)
Redis:30000 ÷ 100000 = 1 台(单机足够)

3. 大促容量公式

复制代码
目标容量 = max(去年峰值, 运营预估) × 增长系数 × 冗余系数
参数 取值建议
增长系数 1.2~2.0(根据业务增长率)
冗余系数 1.5~3.0(核心系统取高值)

四、各层资源评估

1. 带宽评估

复制代码
所需带宽 = 峰值 QPS × 平均响应大小

示例: 峰值 5000 QPS,平均响应体 50KB

复制代码
带宽 = 5000 × 50KB = 250MB/s ≈ 2Gbps

2. 数据库容量评估

维度 评估方式
连接数 应用服务器数 × 单机连接池大小
磁盘 日增数据量 × 保留天数 × 1.3(索引开销)
QPS 核心 SQL 压测 + 慢 SQL 治理

3. 缓存容量评估

复制代码
Redis 内存 = 热点数据量 × 平均 Value 大小 × 副本数

示例: 1000 万用户信息缓存,每条 1KB,3 副本

复制代码
内存 = 1000万 × 1KB × 3 = 30GB

五、容量评估的保障措施

1. 压测验证

容量评估只是"纸上谈兵",必须通过压测验证:

压测类型 说明
单机压测 确定单台服务器极限
集群压测 验证整体架构承载能力
全链路压测 模拟真实大促流量(京东/阿里都在用)

2. 降级预案

容量评估再精准,也要有兜底方案:

降级手段 适用场景
限流 流量超出预期
熔断 下游服务不可用
降级 非核心功能关闭
异步化 将同步操作改为异步

3. 弹性扩容

云原生架构下,可通过自动扩容应对突发流量:

复制代码
监控指标(CPU/QPS)超阈值 → 触发扩容 → 新节点上线 → 流量分摊

六、总结

容量评估速查表

步骤 关键动作 产出
1. 预估总流量 获取 DAU、PV、订单量 业务基准数据
2. 算平均 QPS 总请求 ÷ 总时长 日常负载水位
3. 算峰值 QPS 平均值 × 3~5 倍 峰值目标
4. 压测单机 单台服务器跑满 × 0.8 单机安全容量
5. 算服务器数 峰值 ÷ 单机容量 × 冗余系数 最终资源需求

核心公式汇总

复制代码
QPS = 并发数 ÷ 平均响应时间
峰值 QPS = 平均 QPS × 3~5
所需服务器 = 峰值 QPS ÷(单机极限 QPS × 0.8)× 冗余系数
所需带宽 = 峰值 QPS × 平均响应大小

面试回答要点

面试问题 关键回答
怎么做容量评估? 五步法:预估流量 → 算平均 → 算峰值 → 压测单机 → 算服务器
峰值怎么算? 二八原则或均值 × 3~5 倍,大促可达 10~20 倍
怎么确定单机性能? 压测,生产按极限的 80% 跑
冗余怎么留? 1.5~3 倍,核心系统取高值
容量评估之后呢? 压测验证 + 降级预案 + 弹性扩容

参考资料:

相关推荐
郝学胜-神的一滴4 分钟前
Qt6 + OpenGL 3.3 渲染环境搭建全指南:从空白窗口到专属渲染画布的优雅实现
数据结构·c++·线性代数·算法·系统架构·图形渲染
llm大模型算法工程师weng15 分钟前
在flomo中安放“不确定”:一款笔记产品如何让人“被看见”
笔记
今儿敲了吗27 分钟前
51| 八皇后
c++·笔记·学习·算法·深度优先
适应规律34 分钟前
强化学习笔记(赵世钰)
笔记·线性代数·概率论
爱学习的程序媛2 小时前
在线客服系统技术全解析:架构、交互与数据格式
人工智能·架构·系统架构·智能客服·在线客服
鸽子一号2 小时前
c#笔记之泛型和结构体、枚举
笔记
墨^O^3 小时前
进程与线程的核心区别及 Linux 启动全过程解析
linux·c++·笔记·学习
寒秋花开曾相惜3 小时前
(学习笔记)3.9 异质的数据结构(3.9.1 结构)
c语言·网络·数据结构·数据库·笔记·学习
猹叉叉(学习版)3 小时前
【系统分析师_知识点整理】 10.软件需求工程
笔记·需求分析·软考·系统分析师
LuminousCPP3 小时前
C语言自定义类型全解析
c语言·笔记·枚举·结构体·联合体