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

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

作者: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章