目錄
什麼是吞吐量指標
吞吐量(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