"Horizontal-Scaling"
- Stateless 設計原則
要把服務改成能水平擴展的無狀態設計時,釐清什麼算「本機狀態」、哪些常見寫法會破壞無狀態、隱式狀態怎麼抓、以及定時 job 這種無狀態例外怎麼處理
- Session 處理
多實例下要決定用戶登入狀態怎麼放時,比較 sticky session、外部 session store、無狀態 token 三種途徑,以及剛寫完就要讀到的 session 一致性怎麼保證
- Shared storage 選型
把外置的狀態放進共享儲存時,按存取型態與狀態性質選 DB、KV、物件儲存,並處理多實例共享一個 DB 帶來的讀路徑與連線瓶頸
- 擴展的觸發與縮回
設計自動擴縮時,釐清擴展前要先窮盡哪些低成本手段、觸發訊號怎麼分層、以及縮回為什麼比擴容難、要先 drain 才能縮
- LB 是水平擴展的前提
想靠加實例分攤流量卻發現擴不動時,釐清水平擴展的兩個前提——流量要分得進新實例(LB)、任何實例要能接任何請求(無狀態)
- 垂直與水平擴展的判斷
決定該加 CPU 還是加實例時,用「這個元件能不能做成無狀態」當判斷樞紐,並知道有狀態的節點該用垂直撐、讀路徑用副本擴、撐不住才分片