免費試讀課程單元 · 系統設計面試(System Design Interview)

單機起步

一家新創剛上線時,只用一台每月 50 美元的伺服器,就同時跑網站、資料庫和快取,這樣做錯了嗎?

Wondering 課程《系統設計面試(System Design Interview)》的第 1 個課程單元

一台伺服器包辦一切

假設一家新創剛上線,只租了一台每月 50 美元的伺服器。

網站、資料庫和快取,全都跑在這台機器上。DNS 解析、HTTP 請求和資料存取,也都由它處理。

這就是單機配置,也是最簡單的起點。

一台伺服器同時執行網站、資料庫和快取

注意三個角色共用同一個機箱,所以它們也共用同一台機器的容量。

這樣做錯了嗎?先別急著下結論。

簡單的好處與天花板

單機的好處很直接:架構簡單,成本也低。

用戶很少時,一台每月 50 美元的機器就能應付所有工作。

單機配置一眼看懂
  • 伺服器月費: 一台機器就能起步。
  • 優點
  • 架構簡單
  • 成本低
  • 限制
  • 受限於單一機器容量
  • 某部分會先成為瓶頸: 用戶變多時才會浮現。

但它有天花板。所有工作都受限於單一機器的容量。

用戶越來越多,總有一部分會先撐不住。那個先撐不住的地方,就叫瓶頸。

從單機到分片的路線

擴展的重點,在於知道每個成長階段該做哪些架構調整。

從單機出發,系統通常會經歷:拆分服務、加入負載平衡器、實作快取、導入 CDN、複製資料庫,最後對資料做分片。

單機之後的常見擴展階段

每一步都在解決流量成長時出現的特定瓶頸。

你不需要第一天就把整條路走完。

一家新創的成長故事

回到那家新創,想像它這樣長大:

痛點出現,才改架構
  • 單機就夠用: 網站、資料庫、快取都在一台伺服器。
  • 資料庫搬出去: 資料庫查詢變慢,改用專屬伺服器。
  • 加負載平衡器: 網站尖峰當機,擴充到三台網站伺服器。

第 1 天:用戶很少,單機就夠用,簡單又便宜。

1,000 位用戶:資料庫查詢變慢。團隊把資料庫搬到專屬伺服器,讓網站層和資料層可以各自擴展。

10,000 位用戶:網站伺服器在尖峰時段當機。這時才加入負載平衡器,擴充到三台網站伺服器。

讓痛點決定下一步

故事裡的每個決定,都由一個具體痛點觸發。

先看哪裡出問題:資料庫查詢變慢,就處理資料層;網站伺服器尖峰當機,就處理網站層。

該不該改架構?
  • 用戶持續成長
  • 出現具體痛點?
  • 維持現有架構: 避免過早優化。
  • 哪一層出問題?
  • 拆出資料庫: 資料庫搬到專屬伺服器。
  • 加負載平衡器: 擴充到三台網站伺服器。
  • 繼續觀察
  • 繼續觀察
  • 繼續觀察

沒有痛點時,維持現狀就好。

過早優化會浪費資源,也會增加不必要的複雜度。

換大台機器也沒錯

另一個常見誤解:垂直擴展一定不如水平擴展。

垂直擴展是換一台更大的伺服器;水平擴展是增加伺服器數量,例如那家新創後來用到三台網站伺服器。

兩種擴展方式
  • 垂直擴展
  • 水平擴展

早期為了保持簡單,垂直擴展往往才是正確選擇。

等單機真的撐不住,再考慮加機器。

回到開頭的問題

一台每月 50 美元的伺服器同時跑網站、資料庫和快取,並沒有錯。

它讓團隊用最低成本起步,也讓之後每一步擴展在解決什麼,變得一清二楚。

沒有痛點的擴展在解決什麼?

下次想改架構前,先問:現在的具體痛點是什麼?

說得出來,就針對它改。說不出來,就先別動。

自我檢測

一個社團剛推出報名網站,預計只有幾十位使用者。把網站、資料庫和快取都放在同一台伺服器上,是合理的起步方式嗎?

  • 合理
  • 不合理

答案: 合理

合理。用戶很少時,單機就能處理 DNS 解析、HTTP 請求和資料存取,架構簡單、成本也低。單機的限制是受限於一台機器的容量,等真的出現瓶頸再擴展即可。

擴展伺服器有兩種方式:_____是把現有機器換成更大的伺服器,_____是增加伺服器的數量。

答案: 擴展伺服器有兩種方式:垂直擴展是把現有機器換成更大的伺服器,水平擴展是增加伺服器的數量。

垂直擴展是「變大」:換一台更強的機器;水平擴展是「變多」:增加更多台伺服器。兩者沒有絕對的優劣,早期為了簡單,垂直擴展常常是正確選擇。

假設一家新創只用一台每月 50 美元的伺服器,同時跑網站、資料庫和快取。用戶成長到 1,000 位時,團隊發現資料庫查詢變慢,但網站伺服器本身還算穩定。最合適的下一步是什麼?

  • 把資料庫搬到專屬伺服器
  • 加入負載平衡器與三台網站伺服器
  • 立即把資料分片到多台資料庫
  • 維持現狀,等用戶破萬再處理

答案: 把資料庫搬到專屬伺服器

痛點出在資料庫,所以先把資料庫搬到專屬伺服器,讓網站層和資料層可以各自擴展。加入負載平衡器是用來解決網站伺服器過載(例如尖峰時段當機),此時還沒出現這個問題;資料分片則屬於後期的大規模手段。

繼續學習

這是《系統設計面試(System Design Interview)》共 59 個課程單元中的第 1 個。接下來:

  1. 拆分資料庫
  2. 垂直與水平
  3. 負載平衡
  4. 無狀態設計
  5. 快取與 CDN

免費開始這門課程

Wondering 把任何主題變成可以閱讀、觀看或收聽的短課程單元,並附有練習題和 AI 家教。