[Day 15] Scaling 介紹

erichung0404
2024-08-15 19:08:47

回想一下上篇提出的問題, 雖然感覺在真實世界中, 可能有數不清的問題會發生, 但我們可以將類似的問題分類, 比如以上篇的問題來說, 我們可以歸類成: Security, Availability, Durability, Scalability

目前所有服務都暴露在網路上, 容易被人攻擊 => Security

若我們任一 伺服器 掛掉, 我們的服務就不能使用了:skull: => Availability

若 Storage System 遭遇硬體故障, 資料就全部不見了 :scream: => Durability

若有大量使用者使用我們的服務, 一台 伺服器 可能會過載, 好一點只是回覆速度比較慢, 慘的話伺服器可能直接熱當就下線了 => Scalability

(題外話: 對 分散式系統 有認識的話, 這邊還沒有要講 CAP, 之後會提到~)

一下太多名詞不好消化, 所以我們先從 Scalability 開始介紹, 並於接下來幾天, 基於我們的基礎架構圖, 介紹各種 Scaling 的方法

Scalability

Scalability (擴展性) 是指 "系統能夠彈性增加資源的能力"
"資源" 可以大至 伺服器, Database, Web Server 等等, 小至 硬碟, CPU, GPU 等

以上面提到的問題為例

若有大量使用者使用我們的服務, 一台 伺服器 可能會過載

雖然這邊是以 Web Server 為例, 但除了因為太多使用者請求造成 伺服器 資源用盡 (Resource Outage) 以外 (比如演唱會搶票XD)
如果是由使用者產生內容, 比如 Content Management System (CMS), Content Management System (CMS), Cloud Storage 等等的服務, 可能容易遇到儲存空間不足的問題

所以擴展系統是中大型服務避免不了的問題

根據需要擴展的資源類型, 我們可以分為 垂直擴展 和 水平擴展

垂直擴展

是指 "增加單個節點 (此處指伺服器) 的資源" 以提升性能

比如當我們的 伺服器 達到記憶體 / 儲存空間上限, 如果我們的伺服器支援 熱插拔 (Hot Plugging), 我們可以直接升級或是增加更多記憶體, CPU 也同理 (雖然需要重啟)

好處是簡單快速, 相較於水平擴展會有很多要處理的問題, 垂直擴展省事很多

缺點是仍然存在 Bottleneck, 受限於當下最高階硬體的上限 和 主機板規格 / 插槽等, 而且比較貴, 也不一定買得到

可以參考: Intel Xeon Platinum 核心 CPU - 中央處理器

水平擴展

相較於 垂直擴展 提升單節點的效能, 水平擴展則是 "增加更多節點以分攤運算資源", 由於請求會被分散到不同的節點處理, 所以使用此架構的系統又稱作 "分散式系統"

以上面的太多使用者請求為例, 一個簡單的解決方式就是 "分散使用者請求到不同的節點處理"

所以假設一台伺服器最多能夠同時處理 100 個使用者請求, 若我們觀察到平均每天會有 10,000 個請求, 我們就可以 "考慮" "增加 100 台伺服器", 讓每台伺服器 "最多處理 100 個請求", 就可以維持我們服務的 Availability, 使用者就不需要排隊啦!

好處是我們可以 "串聯多台中低階伺服器" 來達到甚至超越 "單一高階伺服器" 的效能, 並且理論上這種效能的提升是 "沒有上限" 的 (或者說效能接近處理單一請求): 沒有一台伺服器解決不了的事, 如果有, 那就再加一台!

當然, 有如此大的好處也帶來了許多麻煩
比如由於需要協調各個節點間的溝通和狀態, 就會衍生 一致性 (Consistency) 的問題, 比如使用者的登入資訊儲存在 節點A, 但我們將使用者請求分攤到 節點B, 導致使用者需要重新登入, 體驗就不好

水平擴展還有很~多~情況需要解決, 所以之後的內容將會基於水平擴展介紹

Reference

What is Content as a Service (CaaS)? Content as a Service Explained in 5 Minutes

Intel Xeon Platinum 核心 CPU - 中央處理器