高性能架构 学习笔记(第 3 部分)
3.2 经验数据估算
用户量与并发量关系:
javascript
// 用户量与并发量的经验公式
const userToConcurrency = {
// 第一步:总用户数 → 在线用户数
totalToOnline: {
ratio: '10:1',
example: '1000万总用户 → 100万在线用户'
},
// 第二步:在线用户数 → 峰值 QPS
onlineToQPS: {
ratio: '10:1',
example: '100万在线用户 → 10万峰值 QPS'
},
// 第三步:峰值 QPS → 峰值 TPS
qpsToTPS: {
ratio: '约 5:1 到 10:1',
example: '10万峰值 QPS → 1-2万峰值 TPS'
}
}
// 完整计算示例
function calculateSystemCapacity(totalUsers) {
// 在线用户数(约 10%)
const onlineUsers = totalUsers * 0.1
// 峰值 QPS(约在线用户的 10%)
const peakQPS = onlineUsers * 0.1
// 峰值 TPS(约为 QPS 的 1/5 到 1/10)
const peakTPS = peakQPS / 5
return {
totalUsers,
onlineUsers,
peakQPS,
peakTPS
}
}
// 示例:1000万用户的系统
const capacity = calculateSystemCapacity(10000000)
console.log(capacity)
/*
{
totalUsers: 10000000,
onlineUsers: 1000000, // 100万在线
peakQPS: 100000, // 10万 QPS
peakTPS: 20000 // 2万 TPS
}
*/3.3 并发量计算实战
3.3.1 场景一:电商系统
javascript
// 电商系统并发量计算
const ecommerceScenario = {
// 业务数据
business: {
totalUsers: 10000000, // 1000万注册用户
dailyActiveUsers: 1000000, // 100万日活
peakOnlineUsers: 500000 // 50万峰值在线
},
// 性能数据
performance: {
averageResponseTime: 0.2, // 平均响应时间 200ms
peakQPS: 50000, // 峰值 QPS 5万
peakTPS: 5000 // 峰值 TPS 5000
},
// 并发量计算
calculation: {
formula: '并发量 = QPS × 平均响应时间',
process: `
1. 峰值 QPS = 50,000
2. 平均响应时间 = 0.2 秒
3. 并发量 = 50,000 × 0.2 = 10,000
结论:系统需要同时处理 10,000 个并发请求
`
}
}3.3.2 场景二:秒杀系统
javascript
// 秒杀系统并发量计算
const seckillScenario = {
// 业务场景
scenario: {
event: 'iPhone 15 限时秒杀',
inventory: 1000, // 库存 1000 台
expectedParticipants: 100000 // 预计 10 万人参与
},
// 流量特征
traffic: {
peakTime: '秒杀开始前后 1 分钟',
peakQPS: 500000, // 峰值 QPS 50万
averageResponseTime: 0.1 // 平均响应 100ms
},
// 并发量计算
calculation: {
concurrentRequests: 500000 * 0.1, // 50,000 并发
challenge: '5万并发请求抢 1000 台手机'
},
// 优化策略
optimization: [
'请求队列 + 限流',
'Redis 预扣库存',
'异步处理订单',
'CDN 静态化'
]
}四、TPS 与 QPS 等价场景
4.1 等价条件
TPS ≈ QPS 的场景:
- 一次事务只包含一次查询
- 用户操作对应单一接口请求
示例:
javascript
// 场景:用户查询个人信息
// 单一接口请求
GET /api/user/profile
// 单一数据库查询
SELECT * FROM users WHERE id = ?
// 此时:TPS ≈ QPS ≈ RPS4.2 不等价场景
TPS < QPS 的场景:
- 一次事务包含多个查询
- 复杂业务流程
示例:
javascript
// 场景:用户下单
// TPS = 1(一次下单事务)
Transaction: 下单
// QPS = 5+(多次查询)
Queries: [
'SELECT 商品信息',
'SELECT 库存',
'SELECT 用户余额',
'SELECT 收货地址',
'SELECT 优惠券'
]
// 此时:TPS << QPS五、性能指标监控实战
5.1 监控系统架构
plaintext
性能监控系统架构:
┌─────────────────────────────────┐
│ 应用服务 │
│ ↓ 发送指标数据 │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ 数据收集层 │
│ Prometheus / StatsD │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ 数据存储层 │
│ InfluxDB / TimescaleDB │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ 可视化展示 │
│ Grafana / Kibana │
└─────────────────────────────────┘