具代表性的面試主題

如何用 Little 定律估算服務並發與佇列容量?

通用中等
OfferCC 編輯團隊發佈 更新

題幹

某 API 平均吞吐為 200 req/s、端到端平均延遲為 150 ms。請估算系統內平均請求數,並說明這個公式如何幫助你設定並發上限、識別佇列積壓與驗證容量。

1. 題目

一個非同步訂單處理服務在尖峰期出現延遲上升。監控顯示穩定吞吐約 200 req/s,端到端平均延遲約 150 ms。請用 Little 定律估算在途請求數,解釋延遲、吞吐與佇列的關係,並給出避免 backlog 失控的工程動作。

2. 約束與澄清

  • Little 定律描述穩定系統的長期平均關係:L = λW,其中 L 是系統內平均請求數,λ 是平均吞吐,W 是平均停留時間。
  • 先說明統計視窗、請求邊界與單位;短暫突發或尚未穩定的系統不能直接套用長期平均。
  • 要區分服務時間、排隊時間與端到端停留時間,否則會低估並發或誤配執行緒池。
  • 還要確認容量上限、逾時策略、優先級與可丟棄工作。

3. 核心推導

把 200 req/s 與 0.15 s 相乘,得到平均在途請求數 L = 30。這不是「最多只能有 30 個請求」,也不是 p99 並發;它是給定視窗下的平均庫存。若吞吐不變而平均停留時間翻倍,平均在途請求也翻倍,通常表示佇列或依賴延遲正在成長。

4. 參考分析

text
lambda = 200          # requests / second
W = 0.150             # seconds / request
L = lambda * W        # 30 requests in the system on average

if arrival_rate > sustainable_service_rate:
  queue grows without a stable bound
  apply_admission_control_or_scale_out()

capacity = concurrency_limit / target_latency

工程上應分別測量進入佇列、開始處理、完成處理的時間。使用 Little 定律可反推容量:當並發上限為 100、目標平均停留時間為 200 ms 時,穩定吞吐的粗略上限約為 500 req/s;實際還要留出尾延遲、突發與依賴抖動餘量。

5. 過載場景與取捨

當到達率持續高於可服務率,佇列會增長,W 變大,進而讓 L 變大,形成逾時與重試放大的回饋迴路。無限佇列只把失敗延後,工作完成時可能已失去價值。可採用有界佇列、快速失敗、優先級、負載削減、背壓或擴容;每種策略都要明確丟棄哪類工作以及如何向呼叫方回報。

6. 驗證與觀測

  • 按時間視窗記錄到達率、完成率、在途數、平均與 p95/p99 延遲。
  • 用 L、λ、W 三組獨立指標互相校驗,發現單位或取樣邊界錯誤。
  • 進行受控壓測,逐步提高到達率,觀察佇列長度、逾時率與恢復時間。
  • 為佇列深度、年齡、並發上限、拒絕率與重試率設定告警,並驗證擴容或降載後的回落速度。

7. 常見誤區

  • 把平均 L 當作硬並發上限,忽略突發、尾延遲與排隊分布。
  • 用服務處理時間代替端到端 W,漏掉網路、鎖與依賴等待。
  • 在未達到穩定狀態時用一小段樣本推斷長期容量。
  • 只擴容消費者,不限制生產者,結果讓共享依賴或下游佇列繼續過載。

8. 面試評分點

能正確代入公式

應統一單位,算出 200 × 0.15 = 30,並解釋這是平均在途請求數而非上限。

能劃分時間邊界

應區分排隊、服務與端到端時間,說明取樣視窗與穩定狀態假設。

能識別過載回饋

應說明到達率超過服務率會讓佇列、延遲、重試與並發相互放大,並提出有界化措施。

能用資料驗證容量

應結合壓測、p95/p99、佇列年齡、拒絕率與恢復時間驗證結論,而非只報一個平均數。

公開來源

同類題目

資源

產品比較

每份比較均依官方資料整理,並標示複核日期。

查看完整比較