當系統面臨大量用戶訪問,負載過高的時候,通常會使用增加服務器數量來進行橫向擴展,使用集群和負載均衡提高整個系統的處理能力。
從單機網站到分布式網站,很重要的區別是業務拆分和分布式部署,將應用拆分后,部署到不同的機器上,實現大規模分布式系統。
分布式和業務拆分解決了,從集中到分布的問題,但是每個部署的獨立業務還存在單點的問題和訪問統一入口問題,為解決單點故障,我們可以采取冗余的方式,將相同的應用部署到多臺機器上。
解決訪問統一入口問題,我們可以在集群前面增加負載均衡設備,實現流量分發。
圖片
圖片
提高應用處理性能,增加吞吐量,加強網絡處理能力。
提供故障轉移,實現整個應用的高可用。
通過添加或減少服務器數量,提供網站伸縮性擴展性。
負載均衡設備上做一些過濾,黑白名單等處理。
系統的擴展可分為縱向(垂直)擴展和橫向(水平)擴展。
縱向擴展,是從單機的角度通過增加硬件處理能力,比如CPU處理能力,內存容量,磁盤等方面,實現服務器處理能力的提升,不能滿足大型分布式系統(網站),大流量,高并發,海量數據的問題。
因此需要采用橫向擴展的方式,通過添加機器來滿足大型網站服務的處理能力。
比如:一臺機器不能滿足,則增加兩臺或者多臺機器,共同承擔訪問壓力。這就是典型的集群和負載均衡架構:如下圖:
圖片
圖片
輪詢很容易實現,將請求按順序輪流分配到后臺服務器上,均衡的對待每一臺服務器,而不關心服務器實際的連接數和當前的系統負載。
適合場景:適合于應用服務器硬件都相同的情況。
圖片
在輪詢的基礎上根據硬件配置不同,按權重分發到不同的服務器。
適合場景:跟配置高、負載低的機器分配更高的權重,使其能處理更多的請求,而性能低、負載高的機器,配置較低的權重,讓其處理較少的請求。
圖片
通過系統隨機函數,根據后臺服務器列表的大小值來隨機選取其中一臺進行訪問。
隨著調用量的增大,客戶端的請求可以被均勻地分派到所有的后端服務器上,其實際效果越來越接近于平均分配流量到后臺的每一臺服務器,也就是輪詢法的效果。
圖片
記錄每個服務器正在處理的請求數,把新的請求分發到最少連接的服務器上,因為要維護內部狀態不推薦。
圖片
根據服務消費者請求客戶端的IP地址,通過哈希函數計算得到一個哈希值,將此哈希值和服務器列表的大小進行取模運算,得到的結果便是要訪問的服務器地址的序號。
適合場景:根據請求的來源IP進行hash計算,同一IP地址的客戶端,當后端服務器列表不變時,它每次都會映射到同一臺后端服務器進行訪問。
圖片
根據OSI模型分的二層負載,一般是用虛擬mac地址方式,外部對虛擬MAC地址請求,負載均衡接收后分配后端實際的MAC地址響應。
備注:MAC(Media Access Control Address)
一般采用虛擬IP地址方式,外部對虛擬的ip地址請求,負載均衡接收后分配后端實際的IP地址響應。
四層的負載均衡在三層負載均衡的基礎上,通過發布三層的IP地址(VIP),然后加四層的端口號,來決定哪些流量需要做負載均衡。
四層負載均衡在中間傳輸層執行,它處理消息的傳遞,但不考慮消息的內容,用ip+port接收請求,再轉發到對應的機器。
四層負載均衡不理解應用協議,比如:
實現四層負載均衡的軟件有:
七層負載均衡不同于四層負載均衡,它在高級應用層上執行,會處理每個消息的實際內容。
所謂七層負載均衡,也稱為“內容交換”,也就是主要通過報文中的真正有意義的應用層內容,決定最終選擇的內部服務器。
七層負載均衡它可以根據消息內容(如URL)做出負載均衡決策,比如:對URL圖片類的請求轉發到特定的圖片服務器。
實現七層負載均衡的軟件有:
總的來說,一般是LVS做4層負載,Nginx或者Haproxy做7層負載,性能上LVS>HA>Nginx,功能性和便利性上Nginx>HA>LVS。
本文鏈接:http://www.tebozhan.com/showinfo-26-80191-0.html負載均衡原理最全詳解
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: Htmx,它到底是框架還是庫?
下一篇: 記一次 .NET某防偽驗證系統崩潰分析