免費試讀課程單元 · 系統設計面試(System Design Interview)
把伺服器和資料庫拆開
當你的新創公司大獲成功,那台包辦一切的伺服器卻撐不住了,會發生什麼事?
Wondering 課程《系統設計面試(System Design Interview)》的第 1 個課程單元
一台機器包辦一切
想像你的新創剛上線,所有東西都放在同一台伺服器上。
網頁應用程式、資料庫、快取,全部擠在這台機器裡。設定簡單,管理也方便。

注意三個元件全都裝在同一台機器的外框內,它們共用這台機器的全部資源。
這就是單一伺服器架構,幾乎每個產品都從這裡起步。
但當使用者暴增,這台機器還撐得住嗎?
這台機器做哪些事
在單一伺服器架構下,這台機器要處理整個流程。
- DNS 解析: 把網址轉成伺服器的位址。
- HTTP 請求: 瀏覽器把請求送到伺服器。
- 資料操作: 應用程式在同一台機器上讀寫資料庫。
- 回傳結果: 伺服器把處理好的結果送回使用者。
使用者輸入網址後,先經過 DNS 解析,找到伺服器的位址。
接著瀏覽器送出 HTTP 請求,伺服器上的網頁應用程式接手處理。
需要資料時,應用程式在同一台機器上讀寫資料庫,再把結果回傳。
簡單,但有天花板
全部放在一起,好處很明顯:簡單。只有一台機器要部署、要照顧。
問題是,這台機器的能力有上限。運算和儲存都只能用它自己的資源。
網頁應用程式和資料庫搶同一份資源。流量一大,兩邊一起變慢。
這就是單機容量的極限。
第一步:資料庫獨立
第一個重大的擴展步驟,是把資料庫搬到自己的伺服器上。
原本的機器只跑網頁應用程式,負責處理請求。新的機器專門負責資料。
網頁伺服器需要資料時,就去向資料庫伺服器要。
職責拆開後,系統分成兩層:網頁層與資料層。
- 單一伺服器
- 資料庫分離
兩層各自擴展
拆開的最大好處是:兩層可以獨立擴展。
網頁層負責運算,處理大量請求。請求變多,就替網頁層加資源。
資料層負責儲存,管理資料。資料變多,就替資料層加資源。
- 網頁層
- 資料層
不必為了其中一邊的需求,讓兩邊綁在一起升級。
何時該拆開?
回到開頭:新創大獲成功,伺服器撐不住了,該怎麼辦?
先確認:單機容量是不是已經不夠用?
- 使用者暴增
- 單機容量夠用嗎?
- 維持單一伺服器: 簡單好管理,暫時不必拆。
- 分離資料庫: 把資料庫搬到自己的伺服器。
- 兩層獨立擴展: 網頁層加運算,資料層加儲存。
- 是
- 否
如果是,把資料庫分離通常就是第一步。之後網頁層和資料層,就能依各自需求成長。
跟同事解釋時,一句話就夠:讓運算和儲存各住各的。
自我檢測
在單一伺服器架構中,網頁應用程式、資料庫和快取_____。
- 全部跑在同一台機器上
- 分別跑在不同的機器上
答案: 全部跑在同一台機器上
單一伺服器架構的特點就是所有元件(網頁應用程式、資料庫、快取)都跑在同一台機器上,因此設定簡單。
資料庫分離後,_____負責處理運算,_____負責儲存資料。
答案: 資料庫分離後,網頁層負責處理運算,資料層負責儲存資料。
分離後系統分成兩層:網頁層處理請求與運算,資料層負責儲存與管理資料。兩者分屬不同伺服器。
為什麼系統剛起步時,常把所有東西都放在同一台伺服器上?
- 架構簡單,容易建置與管理
- 能承受無限增長的流量
- 資料庫和網頁程式必須共用硬體才能運作
- 可以讓運算和儲存各自獨立擴展
答案: 架構簡單,容易建置與管理
初期流量小,單一伺服器最簡單:只要建置和管理一台機器。它並不是效能最好或最能承受大流量的做法。
繼續學習
這是《系統設計面試(System Design Interview)》共 35 個課程單元中的第 1 個。接下來:
- 負載平衡器與無狀態設計
- 快取與 CDN
- 2 的次方
- 延遲與儲存空間
- 釐清需求
Wondering 把任何主題變成可以閱讀、觀看或收聽的短課程單元,並附有練習題和 AI 家教。