從單伺服器模式到負載均衡設計

Grey Zeng發表於2022-12-13

從單伺服器模式到負載均衡設計

作者:Grey

原文地址:

部落格園:從單伺服器模式到負載均衡設計

CSDN:從單伺服器模式到負載均衡設計

單伺服器模型是最簡單的一種架構,參考如下圖
img

使用者訪問一個 URL,URL 會先到 DNS 伺服器進行域名解析,然後返回給客戶端一個 IP 地址,客戶端會透過這個 IP 地址訪問到真正的服務,服務接收到客戶端請求以後,返回對應的 HTML 頁面,就完成了整個過程。

當然,以上是靜態頁面,相對複雜的應用會配置資料庫,架構如下

img

在選擇資料庫的時候,會涉及資料庫選型問題,有兩類比較主流的資料庫可以選擇,即關係型資料庫非關係型資料庫

關係型資料庫也被稱為關係型資料庫管理系統(RDBMS),關係型資料庫以表和行來表示和儲存資料。其優勢是你可以使用 SQL 語句在不同的資料庫表中執行連線操作。

非關係型資料庫也被稱為 NoSQL 資料庫。 一般被歸納為四類:鍵值儲存、圖形儲存、列儲存和文件儲存。非關係型資料庫一般不支援連線操作。

對於大多數開發者來說,關係型資料庫是最好的選擇,因為它們已經存在了40多年且一直執行良好;然而,如果關係型資料庫不適合你的特定用例,

比如

  • 應用需要超低的延遲。

  • 資料是非結構化的,或者你沒有任何關係型資料。

  • 只需要對資料進行序列化和反序列化(JSON、XML、YAML等)。

  • 需要儲存大量的資料

則非關係型資料庫可能是正確的選擇。

關係型和非關係型資料庫的選型可以參考這個網站:DB-Engines Ranking

隨著使用者數量增多,單服務架構的設計可能會導致一些問題,比如:

使用者是直接連線到網路伺服器的。如果網路伺服器離線,使用者將無法訪問網站,在另一種情況下,如果許多使用者同時訪問網路伺服器,並達到網路伺服器的負載極限,使用者一般會遇到較慢的響應或無法連線到伺服器。

針對這些問題,有兩種主要的思路,分別是:水平擴充套件垂直擴充套件

垂直擴充套件,簡言之就是在你的伺服器上增加更多的配置,比如 CPU、記憶體 等資源。

水平擴充套件,簡言之就是增加更多的服務例項來擴充套件的服務能力。

當流量較低時,垂直擴充套件是一個很好的選擇,簡單直接。但是垂直擴充套件也有嚴重的侷限性,因為

  • 不可能在一臺伺服器上增加無限的 CPU 和記憶體。

  • 垂直擴充套件不具備故障轉移和冗餘功能。如果一臺伺服器癱瘓了,整個網站/應用程式就會完全癱瘓。

由於垂直擴充套件的侷限性,水平擴充套件對於大規模的應用來說是比較理想的。

水平擴充套件的一個技術就是負載均衡。可以比較好的解決這個問題。架構如下

img

如圖所示,使用者直接連線到負載均衡器的公共 IP。在這種設定下,網路伺服器已經無法被客戶直接訪問。為了提高安全性,伺服器之間的通訊使用了私有 IP。私有 IP 是一個只能在同一網路中的伺服器之間到達的 IP 地址;但是,它在網際網路上是無法到達的。負載均衡器透過私有 IP 與網路伺服器進行通訊。
在圖中,在新增了一個負載均衡伺服器和第二個 Web 伺服器後,我們成功地解決了沒有故障轉移的問題,並提高了Web層的可用性。

  • 如果伺服器1離線,所有的流量將被路由到伺服器2。這可以防止網站離線。我們還將在伺服器池中新增一個新的健康的Web伺服器,以平衡負載。

  • 如果網站流量迅速增長,而兩臺伺服器不足以處理這些流量,負載均衡器可以優雅地處理這個問題。你只需要向網路伺服器池新增更多的伺服器,負載平衡器就會自動開始向它們傳送請求。

參考資料

System Design Interview

相關文章