集羣中的應用服務器(節點)一般被設計成無狀態,用戶能夠請求任何一個節點。算法
負載均衡器會根據集羣中每一個節點的負載狀況,將用戶請求轉發到合適的節點上。數據庫
負載均衡器能夠用來實現高可用以及伸縮性:緩存
負載均衡器運行過程包含兩個部分:服務器
輪詢算法把每一個請求輪流發送到每一個服務器上。網絡
下圖中,一共有 6 個客戶端產生了 6 個請求,這 6 個請求按 (1, 2, 3, 4, 5, 6) 的順序發送。(1, 3, 5) 的請求會被髮送到服務器 1,(2, 4, 6) 的請求會被髮送到服務器 2。併發
該算法比較適合每一個服務器的性能差很少的場景,若是有性能存在差別的狀況下,那麼性能較差的服務器可能沒法承擔過大的負載(下圖的 Server 2)。負載均衡
加權輪詢是在輪詢的基礎上,根據服務器的性能差別,爲服務器賦予必定的權值,性能高的服務器分配更高的權值。dom
例以下圖中,服務器 1 被賦予的權值爲 5,服務器 2 被賦予的權值爲 1,那麼 (1, 2, 3, 4, 5) 請求會被髮送到服務器 1,(6) 請求會被髮送到服務器 2。分佈式
因爲每一個請求的鏈接時間不同,使用輪詢或者加權輪詢算法的話,可能會讓一臺服務器當前鏈接數過大,而另外一臺服務器的鏈接太小,形成負載不均衡。ide
例以下圖中,(1, 3, 5) 請求會被髮送到服務器 1,可是 (1, 3) 很快就斷開鏈接,此時只有 (5) 請求鏈接服務器 1;(2, 4, 6) 請求被髮送到服務器 2,只有 (2) 的鏈接斷開,此時 (6, 4) 請求鏈接服務器 2。該系統繼續運行時,服務器 2 會承擔過大的負載。
最少鏈接算法就是將請求發送給當前最少鏈接數的服務器上。
例以下圖中,服務器 1 當前鏈接數最小,那麼新到來的請求 6 就會被髮送到服務器 1 上。
在最少鏈接的基礎上,根據服務器的性能爲每臺服務器分配權重,再根據權重計算出每臺服務器能處理的鏈接數。
把請求隨機發送到服務器上。
和輪詢算法相似,該算法比較適合服務器性能差很少的場景。
源地址哈希經過對客戶端 IP 計算哈希值以後,再對服務器數量取模獲得目標服務器的序號。
能夠保證同一 IP 的客戶端的請求會轉發到同一臺服務器上,用來實現會話粘滯(Sticky Session)
HTTP 重定向負載均衡服務器使用某種負載均衡算法計算獲得服務器的 IP 地址以後,將該地址寫入 HTTP 重定向報文中,狀態碼爲 302。客戶端收到重定向報文以後,須要從新向服務器發起請求。
缺點:
該負載均衡轉發的缺點比較明顯,實際場景中不多使用它。
在 DNS 解析域名的同時使用負載均衡算法計算服務器 IP 地址。
優勢:
缺點:
大型網站基本使用了 DNS 作爲第一級負載均衡手段,而後在內部使用其它方式作第二級負載均衡。也就是說,域名解析的結果爲內部的負載均衡服務器 IP 地址。
反向代理服務器位於源服務器前面,用戶的請求須要先通過反向代理服務器才能到達源服務器。反向代理能夠用來進行緩存、日誌記錄等,同時也能夠用來作爲負載均衡服務器。
在這種負載均衡轉發方式下,客戶端不直接請求源服務器,所以源服務器不須要外部 IP 地址,而反向代理須要配置內部和外部兩套 IP 地址。
優勢:
缺點:
在操做系統內核進程獲取網絡數據包,根據負載均衡算法計算源服務器的 IP 地址,並修改請求數據包的目的 IP 地址,最後進行轉發。
源服務器返回的響應也須要通過負載均衡服務器,一般是讓負載均衡服務器同時做爲集羣的網關服務器來實現。
優勢:
缺點:
在鏈路層根據負載均衡算法計算源服務器的 MAC 地址,並修改請求數據包的目的 MAC 地址,並進行轉發。
經過配置源服務器的虛擬 IP 地址和負載均衡服務器的 IP 地址一致,從而不須要修改 IP 地址就能夠進行轉發。也正由於 IP 地址同樣,因此源服務器的響應不須要轉發回負載均衡服務器,能夠直接轉發給客戶端,避免了負載均衡服務器的成爲瓶頸。
這是一種三角傳輸模式,被稱爲直接路由。對於提供下載和視頻服務的網站來講,直接路由避免了大量的網絡傳輸數據通過負載均衡服務器。
這是目前大型網站使用最廣負載均衡轉發方式,在 Linux 平臺可使用的負載均衡服務器爲 LVS(Linux Virtual Server)。
參考:
一個用戶的 Session 信息若是存儲在一個服務器上,那麼當負載均衡器把用戶的下一個請求轉發到另外一個服務器,因爲服務器沒有用戶的 Session 信息,那麼該用戶就須要從新進行登陸等操做。
須要配置負載均衡器,使得一個用戶的全部請求都路由到同一個服務器,這樣就能夠把用戶的 Session 存放在該服務器中。
缺點:
在服務器之間進行 Session 同步操做,每一個服務器都有全部用戶的 Session 信息,所以用戶能夠向任何一個服務器進行請求。
缺點:
使用一個單獨的服務器存儲 Session 數據,可使用傳統的 MySQL,也使用 Redis 或者 Memcached 這種內存型數據庫。
優勢:
缺點:
本人免費整理了Java高級資料,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分佈式等教程,一共30G,須要本身領取。
傳送門:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q