高性能架构 学习笔记(第 2 部分)
2.2 三者关系对比
2.2.1 数值对比
核心问题:TPS、QPS、RPS 哪个值更高?
答案:QPS ≈ RPS > TPS
javascript
// 三者关系示例
const metricsComparison = {
// 场景:用户下单
// TPS:一次完整事务
tps: {
value: 1,
description: '下单这个完整业务流程',
includes: [
'查询商品',
'扣减库存',
'创建订单',
'扣除余额',
'发送通知'
]
},
// QPS:多个查询操作
qps: {
value: 5,
description: '5 次数据库查询',
breakdown: [
'SELECT 商品信息',
'SELECT 库存',
'SELECT 用户余额',
'SELECT 收货地址',
'SELECT 优惠券'
]
},
// RPS:多个接口请求
rps: {
value: 5,
description: '5 次 API 调用',
apis: [
'GET /api/product/:id',
'GET /api/inventory/:id',
'GET /api/user/balance',
'GET /api/address',
'POST /api/order/create'
]
}
}
console.log('TPS:', metricsComparison.tps.value) // 1
console.log('QPS:', metricsComparison.qps.value) // 5
console.log('RPS:', metricsComparison.rps.value) // 52.2.2 详细对比表
| 指标 | 全称 | 含义 | 典型值 | 适用场景 |
|---|---|---|---|---|
| TPS | Transactions Per Second | 每秒事务数 | 较低 | 核心业务性能评估 |
| QPS | Queries Per Second | 每秒查询数 | 较高 | 数据库/API 性能监控 |
| RPS | Requests Per Second | 每秒请求数 | 较高 | Web 服务器性能 |
选择建议:
javascript
const metricSelection = {
// 场景1:评估业务系统整体性能
businessSystem: '使用 TPS',
reason: '反映完整业务流程的处理能力',
// 场景2:监控接口性能
apiMonitoring: '使用 QPS/RPS',
reason: '反映接口层面的吞吐量',
// 场景3:数据库性能优化
database: '使用 QPS',
reason: '反映数据库查询压力',
// 场景4:面试场景
interview: '同时了解 TPS、QPS、RPS',
reason: '展示全面的技术理解'
}2.3 吞吐量(Throughput)
定义:系统在单位时间内处理的请求数量
表示方式:
- QPS(Query Per Second)
- TPS(Transaction Per Second)
- RPS(Request Per Second)
计算方式:
javascript
// 吞吐量计算示例
class ThroughputCalculator {
// 计算 QPS
calculateQPS(totalRequests, durationSeconds) {
return totalRequests / durationSeconds
}
// 计算 TPS
calculateTPS(totalTransactions, durationSeconds) {
return totalTransactions / durationSeconds
}
// 实时监控
monitorRealtime() {
let requestCount = 0
let startTime = Date.now()
return {
recordRequest: () => {
requestCount++
},
getQPS: () => {
const elapsed = (Date.now() - startTime) / 1000
return Math.floor(requestCount / elapsed)
}
}
}
}
// 使用示例
const calculator = new ThroughputCalculator()
// 计算 1 分钟内处理了 6000 个请求的 QPS
const qps = calculator.calculateQPS(6000, 60)
console.log(`QPS: ${qps}`) // QPS: 100
// 计算 1 小时内完成了 18000 个订单的 TPS
const tps = calculator.calculateTPS(18000, 3600)
console.log(`TPS: ${tps}`) // TPS: 5企业数据保密性:
javascript
// 为什么企业不公开性能数据?
const dataConfidentiality = {
reasons: [
'商业机密:用户量、交易量是核心数据',
'安全风险:数据可能被竞争对手利用',
'攻击风险:暴露性能瓶颈,容易被攻击',
'运营策略:数据可能影响市场判断'
],
risk: {
scenario: '攻击者得知系统 QPS 上限',
attack: '在业务低峰期发起 DDoS 攻击',
result: '系统瞬间崩溃'
}
}三、并发量计算
3.1 并发量定义
并发量:系统同时处理的请求数量
计算公式:
plaintext
并发量 = QPS × 平均响应时间
Concurrent Users = QPS × Average Response Time