如果沒有適當的基礎架構或調整,隨著應用程式規模擴大,資料庫可能會成為系統瓶頸。流量激增時,工程師往往面臨艱難的抉擇:應該提升現有伺服器的效能,還是增加伺服器數量?本指南將說明水平和垂直資源調度的差異、各自的優缺點,以及如何根據需求選擇合適的做法。
資料庫資源調度是指提高系統容量、效能和可用性的程序。這可讓資料庫能處理更多資料,並因應使用者人數增加的需求。
業界專家主要使用兩個詞彙來描述這個過程。垂直資源調度就是「向上擴充」,水平資源調度則是「向外擴充」。瞭解這兩種路徑,是建構可靠資料系統的第一步。
垂直資源調度 (又稱向上擴充) 是指為現有伺服器增加更多運算能力。您會保留相同的資料庫節點,但為其提供更多 CPU、記憶體或儲存空間來完成工作。
這通常被視為擴充關聯式資料庫的傳統方式。由於所有資料仍集中在同一處,因此架構得以保持簡單。
小規模:假設一家快速成長的新創公司在單一資料庫上執行網頁應用程式。當流量開始攀升時,這家公司可以改用較大的執行個體,進而獲得更多運算能力來處理額外的訪客,不必重寫應用程式程式碼。
企業規模:擁有舊版系統的大型企業也可能採用垂直資源調度。這類系統通常仰賴資料之間的複雜關係。由於這類企業的程式碼是為單一資料庫所建構,因此可透過提升單一機器的效能來向上擴充,不必嘗試遷移至分散式系統。
內部需求:部分公司也會針對內部報表採用垂直資源調度。這類公司可能會在主要資料庫伺服器中新增更多 RAM,以便更快處理耗用大量資源的大型查詢,同時確保一般使用者的體驗不受影響。
水平資源調度 (又稱向外擴充) 是指在資料庫系統中新增機器,而非提升單一機器的效能,藉此將工作分配給一群伺服器。這是現代雲端運算和分散式系統的核心概念。
工程師會運用資料分割 (sharding) 和複製 (replication) 等技術來達成這個目標,前者將資料切成較小的區塊並分散到不同伺服器,後者則將資料複製到多個節點。
優點
挑戰
Spanner 等分散式 SQL 資料庫可協助您解決這些難題。Spanner 會處理在多部機器之間同步資料的繁重工作,因此您不必手動分割資料,也不必犧牲關聯式資料庫所提供的保障。這樣一來,您就能向外擴充,同時避免系統過於複雜。
容量:全球電子商務平台可能會在大型特價活動期間,進行水平資源調度。當數百萬人同時造訪網站時,系統會自動將資料重新分配至新節點,以處理流量,確保單一伺服器不會過載。
備援:關鍵任務財務應用程式有時也會採用水平資源調度。這類應用程式可將資料庫分散到多個實體位置,也就是可用區。這種設定有助於確保即使某個資料中心發生問題,應用程式仍能正常運作,兌現資料一致性的承諾。
鄰近性:全球遊戲公司可能會在世界各地部署資料庫節點。將資料庫節點設在離玩家較近的位置,就能提供快速流暢的體驗,延遲時間極短。舉例來說,如果玩家住在東京,系統會將其設定檔資料儲存在東京的資料庫節點,確保讀寫速度極快。
談到雲端資源調度時,垂直資源調度是指升級託管資料庫的虛擬機器大小。水平資源調度是指在自動調度資源群組或分散式叢集中,新增更多機器執行個體。
有些公司會混合使用這兩種方法,這種做法稱為對角資源調度。這種做法是增加系統節點 (水平資源調度),並升級硬體容量 (垂直資源調度)。大型企業可藉此兼顧高可用性和強大效能,確保資料庫足以應付複雜的本機工作。
可以。過去這項作業相當困難,但現今的分散式 SQL 資料庫 (例如 Spanner) 採用先進的時鐘同步技術和智慧通訊協定,可進行水平資源調度,同時確保資料井然有序且準確無誤。
請留意相關警訊,例如 CPU 或記憶體用量偏高、查詢時間過長,以及使用者在尖峰時段的延遲時間增加。這些跡象都顯示,您目前的資料庫可能難以負荷。
水平和垂直資源調度之間的主要差異,在於將資源新增至系統的方式。垂直資源調度是提升單一機器的效能,水平資源調度則是將更多機器加入網路。
功能 | 垂直資源調度 | 水平資源調度 |
概念 | 為單一機器新增資源 | 將更多機器新增至網路 |
容量 | 硬體的硬性上限 | 幾乎不受限 |
停機時間 | 通常需要停機時間 | 完全不需要停機時間 (動態新增節點) |
複雜度 | 偏低 (架構簡單) | 較高 (需要分散式邏輯) |
費用 | 大型硬體成本較高 | 使用標準機器進行線性資源調度 |
功能
垂直資源調度
水平資源調度
概念
為單一機器新增資源
將更多機器新增至網路
容量
硬體的硬性上限
幾乎不受限
停機時間
通常需要停機時間
完全不需要停機時間 (動態新增節點)
複雜度
偏低 (架構簡單)
較高 (需要分散式邏輯)
費用
大型硬體成本較高
使用標準機器進行線性資源調度
業界仍普遍存在一些關於 SQL 和 NoSQL 資料庫的過時觀念。傳統 SQL 資料庫在擴充時,主要難題在於如何處理聯結和資料一致性。將關聯式資料庫分散到多部伺服器,在技術上可能是一大挑戰,但現代分散式解決方案已解決許多這類問題,讓開發人員能水平擴充 SQL,同時保留所需的關聯式功能。以下列出三項常見誤解,並說明背後的事實:
事實:可以。舊版關聯式設計偏好垂直擴充,但現代分散式 SQL 系統可讓關聯式資料庫在多部機器間使用。這種做法結合了 SQL 的一致性與現代雲端架構的水平擴充能力。
事實:NoSQL 適合處理大量非結構化資料集,但 SQL 資料庫通常更適合複雜的結構化查詢。在某些情況,如果應用程式仰賴資料點之間的深層關係,經過妥善調整的 SQL 資料庫會比 NoSQL 資料庫更出色。
事實:不必做選擇。現代架構模式可讓您將系統擴充至多部機器,同時在整個叢集中維持嚴格的資料安全規則 (ACID 相容性)。
決定如何擴充資料庫時,通常會考量預算、資料量和所需運作時間。一般建議如下:
Google Cloud 提供多種資料庫工具,可配合您的資源調度策略。無論您需要簡單的向上擴充,還是高容量的水平擴充,這些產品都能滿足需求。

