{T}

高性能架构 学习笔记(第 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)    // 5

2.2.2 详细对比表

指标全称含义典型值适用场景
TPSTransactions Per Second每秒事务数较低核心业务性能评估
QPSQueries Per Second每秒查询数较高数据库/API 性能监控
RPSRequests 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