無狀態服務 (Stateless Services)

★★★★Draft

FromSystem Design Interview

📚 From the Books

無狀態服務 (Stateless Services)ConceptScaling

要讓 Web 層能隨便加減機器,前提是任何一台都能處理任何請求。把 session 這類狀態搬出伺服器、放進共用儲存,Web 層才真正可以水平擴展。

🧠 Core Ideas

TIP

有狀態伺服器會「記得」某個客戶端——於是那個客戶端的請求就被綁死在那台機器上。無狀態伺服器什麼都不記,狀態全在共用儲存裡,於是請求送到哪台都一樣

⚖️ Tradeoffs

Sticky Session 的代價
  • 有狀態架構下,同一客戶端的每個請求都得回到同一台伺服器。
  • 多數 LB 靠 sticky session 達成,但這會帶來額外開銷,並讓新增 / 移除伺服器、處理故障都更難
把狀態搬去哪
  • 把 session 資料移到共用的持久儲存:關聯式資料庫、Memcached / Redis、或 NoSQL。
  • 常選 NoSQL 是因為它易於擴展。
  • 每台 Web 伺服器都從這個共用儲存取狀態,自己不留任何 session。
無狀態才能自動擴展
  • 狀態一旦離開 Web 伺服器,依流量自動增減伺服器 (auto-scaling) 就變得輕而易舉。
  • 無狀態系統更簡單、更穩固、也更容易擴展——這是「保持 Web 層無狀態」被列為擴展第一原則的原因。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading