HTTP Request Lifecycle 一個請求,如何穿越現代系統的每一層 ...

HTTP Request Lifecycle 一個請求,如何穿越現代系統的每一層?

Jan 16, 2026

image

在系統設計裡,有一個幾乎被所有人低估、卻決定一切上限的基本單位:

HTTP Request

多數人對它的理解停留在:

Client 發送請求 → Server 回傳 Response

但在真實世界裡,一個 HTTP Request 遠遠不只如此

它會穿越網路、佇列、執行緒、服務、資料庫、快取,

並在每一層留下延遲、風險與成本

如果你看不懂 Request 的生命週期,你就無法真正理解:

  • 為什麼系統會慢

  • 為什麼多加服務反而不穩

  • 為什麼流量一大就一起死


一、什麼是 HTTP Request Lifecycle?

HTTP Request Lifecycle 指的是:

從使用者「發出請求」開始,到「回應送回使用者」為止,

這個請求在整個系統中經歷的完整路徑與狀態變化

它不是一行程式碼,而是一條跨越多層系統邊界的旅程


二、從使用者開始:Client 端其實已經在影響系統了

1️⃣ DNS Lookup

  • 使用者輸入網址

  • DNS 解析將 Domain 轉成 IP

  • 這一步就可能失敗或延遲

👉 DNS 延遲是 Request Lifecycle 的第一個不可控因素


2️⃣ TCP / TLS 建立

  • TCP 三向交握

  • HTTPS 還要 TLS 握手

  • 是否有 Connection Reuse(Keep-Alive)差很多

👉 每一次新連線,都是昂貴操作


三、進入系統邊界:Load Balancer 與 Gateway

3️⃣ Load Balancer

  • 決定這個請求要被送到哪一台機器

  • 可能涉及:

    • Round-robin

    • Least connection

    • Health check 狀態

👉 Load Balancer 是第一個「放大或吸收流量衝擊」的地方


4️⃣ API Gateway / Reverse Proxy

在這一層,請求通常會被:

  • 驗證(Auth / JWT)

  • 限流(Rate Limit)

  • 重寫路徑(Routing)

  • 記錄 Log

👉 這裡不是轉發器,是政策執行層


四、進入服務內部:真正危險的地方

5️⃣ Thread / Event Loop

請求進到應用程式後,會佔用:

  • 一個 Thread(同步模型)

  • 或一段 Event Loop(非同步模型)

如果這裡卡住:

  • 新請求進不來

  • 舊請求出不去

👉 Thread / Event Loop 是系統的呼吸系統


6️⃣ Business Logic

這裡是大家最熟的地方:

  • 驗證參數

  • 執行邏輯

  • 組合資料

但真正的風險不是邏輯錯,而是:

邏輯裡面呼叫了誰?


五、請求擴散:Fan-out 的開始

7️⃣ 呼叫其他服務(Sync Call)

一個 Request 很可能會:

  • 呼叫 User Service

  • 呼叫 Order Service

  • 呼叫 Pricing Service

這稱為 Request Fan-out

👉 Fan-out 會讓延遲與失敗機率呈倍數成長


8️⃣ Cache / Database Access

每一次:

  • Cache Miss

  • DB Query

  • Index Scan

都會讓 Request 停下來「等」

👉 系統慢,通常不是在算,而是在等


六、錯誤處理:決定系統能不能活下來

9️⃣ Timeout

Timeout 不是為了「避免慢」

而是為了:

限制一個 Request 能傷害系統多久

沒有 Timeout:

  • Request 永遠卡住

  • Thread 永遠被佔用


🔟 Retry

Retry 看似保險,實際上很危險:

  • 一個失敗 → 變成三個請求

  • 流量放大

  • 雪崩開始

👉 Retry 必須搭配 Backoff 與上限


七、回應階段:系統已經付出成本了

1️⃣1️⃣ Response 組裝

  • 序列化 JSON

  • 壓縮

  • 設定 Header


1️⃣2️⃣ 回傳給 Client

Response 返回:

  • 經過 Gateway

  • 經過 Load Balancer

  • 經過網路

👉 使用者看到的「慢」,是整條路徑的總和


八、為什麼理解 Request Lifecycle 這麼重要?

因為它會直接影響你做的每一個架構決策:

  • 是否該同步呼叫?

  • Cache 要放在哪?

  • Timeout 設多長?

  • 為什麼多加一個服務,穩定性反而下降?

  • 為什麼 Queue 能救系統?

  • 為什麼 Observability 是必須的?

所有 System Design 問題,幾乎都能追溯回 Request Lifecycle。


九、一個成熟系統的特徵

不是:

  • 功能很多

  • 技術很新

而是:

每一個 Request,都被清楚限制、觀察、保護

你不需要控制 Request 做什麼,

你需要控制的是:

  • 它可以佔用多少資源

  • 它可以活多久

  • 它失敗時會不會拖垮別人


結語

HTTP Request 不是資料包,

它是系統中的生命體

它會出生、擴散、等待、失敗、回收。

當你能清楚畫出一個 Request 的完整生命週期,

你才真正開始「設計系統」,而不只是「寫程式」。

¿Te gusta esta publicación?

Comprar Sun un café

Más de Sun

PrivacidadCondicionesDenunciar