吞吐量指標:RPS、QPS、TPS 完全指南

理解系統效能的核心吞吐量指標,掌握 RPS、QPS、TPS 及相關指標的定義、差異與應用場景


目錄

  1. 什麼是吞吐量指標
  2. 核心指標比較
  3. 各指標詳解
  4. 相關指標
  5. 實際應用
  6. 計算與監控
  7. 常見問題
  8. 總結

什麼是吞吐量指標

吞吐量(Throughput)指標用於衡量系統在單位時間內處理的工作量,是評估系統效能的重要依據。

吞吐量 = 單位時間內完成的操作數量

常見單位:每秒(/s 或 per second)

為什麼需要多種指標?

不同層級關注不同維度:

使用者層   → RPS(請求)  → 使用者發了多少請求?
應用層     → QPS(查詢)  → 系統處理了多少查詢?
資料庫層   → TPS(交易)  → 完成了多少筆交易?

核心指標比較

三大指標總覽

指標 全名 中文 定義 常用場景
RPS Requests Per Second 每秒請求數 每秒接收的 HTTP 請求數量 Web 伺服器、API Gateway
QPS Queries Per Second 每秒查詢數 每秒處理的查詢數量 資料庫、搜尋引擎、DNS
TPS Transactions Per Second 每秒交易數 每秒完成的完整交易數量 資料庫、支付系統、電商

關係與差異

比較項目 RPS QPS TPS
衡量對象 HTTP 請求 查詢操作 完整交易
粒度 粗(請求層) 中(操作層) 細(業務層)
一次請求 1 RPS 可能多個 QPS 可能多個 TPS
包含範圍 接收請求 處理查詢 完整業務流程
典型應用 Nginx、API MySQL、Redis 銀行轉帳、訂單

數量關係

一般情況:1 RPS ≥ 1 QPS ≥ 1 TPS

範例:一次下單請求
├── 1 個 HTTP 請求(1 RPS)
├── 可能產生多次資料庫查詢(N QPS)
│   ├── 查詢商品庫存
│   ├── 查詢用戶餘額
│   └── 查詢優惠券
└── 最終完成 1 筆訂單交易(1 TPS)

各指標詳解

RPS (Requests Per Second)

定義:每秒接收並處理的 HTTP 請求數量

RPS = 總請求數 / 時間(秒)

應用場景

場景 說明
Web 伺服器 Nginx、Apache 的負載能力
API Gateway API 閘道的處理能力
負載均衡器 流量分發能力
CDN 靜態資源服務能力

特點

  • ✅ 最直觀的前端指標
  • ✅ 容易測量和監控
  • ❌ 不區分請求複雜度
  • ❌ 無法反映後端處理情況

範例

Nginx 配置參考:
- 單核可處理:~10,000 RPS(靜態內容)
- 單核可處理:~1,000 RPS(反向代理動態請求)

QPS (Queries Per Second)

定義:每秒執行的查詢操作數量

QPS = 總查詢數 / 時間(秒)

應用場景

場景 說明
關聯式資料庫 MySQL、PostgreSQL 查詢能力
NoSQL 資料庫 Redis、MongoDB 操作能力
搜尋引擎 Elasticsearch 搜尋能力
DNS 伺服器 域名解析能力

特點

  • ✅ 精確反映查詢層效能
  • ✅ 適用於讀取密集型應用
  • ❌ 不區分讀寫操作
  • ❌ 不反映查詢複雜度

各系統 QPS 參考值

系統 典型 QPS 說明
MySQL(單機) 5,000 - 15,000 視查詢複雜度
Redis(單機) 100,000+ 記憶體操作
Elasticsearch 1,000 - 10,000 視索引大小
DNS 伺服器 10,000 - 100,000 快取命中率影響大

TPS (Transactions Per Second)

定義:每秒完成的完整交易數量

TPS = 成功完成的交易數 / 時間(秒)

什麼是交易(Transaction)?

交易 = 一組必須全部成功或全部失敗的操作

範例:銀行轉帳
├── 1. 扣除 A 帳戶餘額
├── 2. 增加 B 帳戶餘額
└── 3. 記錄交易日誌
這三個操作必須同時成功,否則全部回滾

應用場景

場景 說明
銀行系統 轉帳、存款、提款
電商平台 下單、支付、退款
訂票系統 訂位、付款、出票
庫存系統 入庫、出庫、盤點

特點

  • ✅ 最能反映業務處理能力
  • ✅ 包含完整業務流程
  • ✅ 符合 ACID 特性
  • ❌ 計算較複雜
  • ❌ 不同交易複雜度差異大

業界參考值

系統類型 典型 TPS 說明
傳統銀行核心 1,000 - 5,000 高可靠性要求
電商平台 10,000 - 100,000 雙 11 峰值更高
支付系統 10,000 - 50,000 Visa 可達 65,000+
一般網站 100 - 1,000 視業務複雜度

相關指標

延遲指標 (Latency)

指標 說明 理想值
RT (Response Time) 回應時間:請求發送到回應收到的時間 < 200ms
P50 50% 請求的回應時間 參考基準
P95 95% 請求的回應時間 < 500ms
P99 99% 請求的回應時間 < 1s
吞吐量與延遲的關係:

            高吞吐量
    理想區域   │   過載區域
   (低延遲、  │  (高延遲、
    高吞吐)   │   吞吐下降)
 ─────────────┼─────────────→ 高延遲
    閒置區域   │   異常區域

並發指標 (Concurrency)

指標 說明
Concurrent Users 同時在線的使用者數
Concurrent Connections 同時建立的連線數
Thread Pool Size 執行緒池大小

Little's Law(利特爾法則)

L = λ × W

L = 系統中的平均請求數(並發數)
λ = 平均到達率(吞吐量,如 RPS)
W = 平均等待時間(回應時間)

範例:
如果 RPS = 100,平均回應時間 = 0.5 秒
則平均並發數 = 100 × 0.5 = 50

其他吞吐量指標

指標 全名 說明
IOPS I/O Operations Per Second 每秒 I/O 操作數(磁碟效能)
MPS Messages Per Second 每秒訊息數(訊息佇列)
FPS Frames Per Second 每秒幀數(影像處理)
OPS Operations Per Second 每秒操作數(通用)

實際應用

場景 1:Web 應用架構

使用者請求流程中的指標對應:

Browser ──→ CDN ──→ Load Balancer ──→ Web Server ──→ App Server ──→ Database
           │           │                  │              │            │
         RPS(CDN)   RPS(LB)            RPS(Nginx)     RPS(API)     QPS/TPS

場景 2:電商下單

一次下單操作的指標分解:

用戶點擊「下單」
    ├── 1 RPS(HTTP 請求)
    └── 後端處理
        ├── 查詢商品資訊(1 QPS)
        ├── 查詢庫存(1 QPS)
        ├── 查詢用戶資訊(1 QPS)
        ├── 查詢優惠券(1 QPS)
        ├── 建立訂單(1 TPS)
        │   ├── INSERT 訂單
        │   ├── UPDATE 庫存
        │   ├── UPDATE 優惠券狀態
        │   └── COMMIT
        └── 返回結果

總計:1 RPS → 4+ QPS → 1 TPS

場景 3:系統容量規劃

指標 計算方式 範例
預估 RPS 日活用戶 × 每用戶請求數 / 86400 × 峰值係數 100萬 × 10 / 86400 × 3 ≈ 350 RPS
預估 QPS RPS × 每請求查詢數 350 × 5 = 1,750 QPS
預估 TPS RPS × 交易比例 350 × 0.1 = 35 TPS

計算與監控

計算公式

# RPS 計算
RPS = 總請求數 / 統計時間(秒)

# QPS 計算
QPS = 總查詢數 / 統計時間(秒)

# TPS 計算
TPS = 成功交易數 / 統計時間(秒)

# 系統容量
最大 RPS = 1000ms / 平均回應時間(ms) × 並發執行緒數

監控工具

指標 監控工具
RPS Nginx access log、Prometheus + Grafana、CloudWatch
QPS MySQL slow query log、Redis INFO、數據庫監控
TPS APM 工具(Datadog、New Relic)、業務日誌

Nginx 查看 RPS

# 即時查看 RPS(每秒請求數)
tail -f /var/log/nginx/access.log | pv -l -i10 -r > /dev/null

# 統計最近一分鐘的 RPS
awk -v now=$(date +%s) '$4 ~ /\[/ {
    gsub(/\[/, "", $4);
    cmd = "date -d \""$4"\" +%s";
    cmd | getline ts;
    close(cmd);
    if (now - ts < 60) count++
} END { print count/60 " RPS" }' /var/log/nginx/access.log

MySQL 查看 QPS

-- 查看當前 QPS
SHOW GLOBAL STATUS LIKE 'Questions';
-- 間隔 1 秒再查一次,差值即為 QPS

-- 或使用 SHOW STATUS
SHOW GLOBAL STATUS WHERE Variable_name IN (
    'Queries',
    'Questions',
    'Com_select',
    'Com_insert',
    'Com_update',
    'Com_delete'
);

Redis 查看 QPS

# 查看 Redis 即時 QPS
redis-cli INFO stats | grep instantaneous_ops_per_sec

常見問題

問題 1:RPS 和 QPS 有什麼區別?

RPS:衡量 HTTP 請求數量(網路層)
QPS:衡量查詢操作數量(應用層/資料庫層)

一個 HTTP 請求(1 RPS)可能觸發多次資料庫查詢(N QPS)

問題 2:QPS 和 TPS 有什麼區別?

QPS:單次查詢操作(可能只是 SELECT)
TPS:完整交易(包含 BEGIN → 多個操作 → COMMIT)

一個交易(1 TPS)通常包含多次查詢(N QPS)

問題 3:如何提升 TPS?

方向 方法
減少 RT 優化 SQL、加快取、減少網路延遲
增加並發 增加執行緒、連線池、水平擴展
減少鎖競爭 分庫分表、樂觀鎖、減小交易範圍
異步處理 訊息佇列、非同步 I/O

問題 4:高 QPS 但低 TPS 說明什麼?

可能原因:
1. 交易包含大量查詢 → 優化業務邏輯
2. 交易鎖等待嚴重 → 檢查死鎖、鎖競爭
3. 交易提交慢 → 檢查磁碟 I/O、redo log
4. 大量交易回滾 → 檢查業務邏輯錯誤

總結

核心要點

指標 記憶口訣 典型場景
RPS 請求進來多少個 Web 伺服器、API 閘道
QPS 查詢執行多少次 資料庫、快取、搜尋
TPS 交易完成多少筆 支付、訂單、轉帳

快速對照表

比較項 RPS QPS TPS
全名 Requests Per Second Queries Per Second Transactions Per Second
中文 每秒請求數 每秒查詢數 每秒交易數
層級 網路/應用入口 查詢/操作 業務交易
關係 1 ≥1 ≤1
典型值 1K-100K 1K-100K 100-10K

選擇指標的原則

問自己:我要衡量什麼?

「系統能承受多少流量?」    → RPS
「資料庫查詢效能如何?」    → QPS
「業務處理能力如何?」      → TPS
「使用者體驗如何?」        → RT / P99

建立日期:2025-12-04 最後更新:2025-12-04

🔗相關文章