1. 程式人生 > >nginx的幾種負載均衡算法

nginx的幾種負載均衡算法

穩定 com 進程 apach 調度算法 默認 規模 eas round

Nginx的背景

Nginx和Apache一樣都是一種WEB服務器。基於REST架構風格,以URI(Uniform Resources Identifier,統一資源描述符)或URL(Uniform Resources Locator,統一資源定位符)作為溝通依據,通過HTTP協議提供各種網絡服務。WEB服務器的設計受網絡規模、網絡帶寬、產品特點等因素局限,且各自的定位和發展不同,因此各種WEB服務器有著各自的鮮明特點。

Apache的發展時期很長,而且是毫無爭議的世界第一大服務器。它有著很多特點:穩定、開源、跨平臺等。它出現的時間太長了,它興起的年代,互聯網產業遠遠比不上現在,所以它被設計為一個重量級的WEB服務器,不支持高並發。在Apache上運行數以萬計的並發訪問,會導致服務器消耗大量內存。操作系統對其進行進程或線程間的切換也消耗了大量的CPU資源,導致HTTP請求的平均響應速度降低。這些因素都決定了Apache不可能稱為高性能的WEB服務器,因此輕量級的高並發服務器Nginx就登上了舞臺。

Nginx的反向代理與負載均衡

Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP3、SMTP代理服務器;Nginx可以作為一個HTTP服務器進行網站的發布處理,另外Nginx可以作為反向代理服務器進行負載均衡的實現。

反向代理服務器指的是服務端做代理,客戶端要訪問服務端就要通過反向代理服務器,訪問的時候客戶端並不知道自己訪問的是代理(無感知代理存在),因此實際訪問的服務端對客戶端來說是隱藏的。有反向代理自然就有正向代理,正向代理則是代理客戶端去訪問不能直接訪問的服務端。

實際的項目場景通常會同時應用到正向代理和反向代理:正向代理服務器代理客戶端的請求去訪問目標服務器,目標服務器是一個反向代理服務器,方向代理了多個真正的業務處理服務器。

技術分享圖片

明白了反向代理服務器的概念,就知道反向代理服務器會將來自客戶端的請求轉發給實際的業務處理服務器進行業務處理和返回響應。那麽,如果有多個處理相同業務的業務處理服務器的話,Nginx會按照一定的規則將請求分發到每一個業務處理服務器,保證每一個請求都能夠及時被處理和響應,這就是負載均衡。

負載均衡分為其實硬件負載均衡和軟件負載均衡兩種。硬件負載均衡也稱為硬負載,如F5負載均衡,相對造價昂貴成本較高,但是數據的穩定性安全性等等有非常好的保障,如中國移動、中國聯通這樣財大氣粗的公司就會選擇硬負載進行操作。然而,更多的公司因為成本因素,會選擇軟件負載均衡,軟件負載均衡是使用軟件來進行負載均衡,是一種利用現有的技術結合主機硬件實現的消息隊列分發機制。Nginx就是一款實現軟件負載均衡的應用。

Nginx支持的負載均衡調度算法

輪詢(weight,默認):接收到的請求按照順序逐一分配到不同的後端服務器,即使在使用過程種,某一臺後端服務器宕機,Nginx會自動將該服務器剔除出隊列,請求受理情況不會受到任何影響。這種方式下,可以個不同的後端服務器設置一個權重值(weight),用於調整不同的服務器上請求的分配率。權重的數值越大,被分配到請求的幾率越大。權重值可以根據不同的後端服務器的硬件配置進行調整。

IP綁定(ip_hash )

最快響應時間(fair)

URL綁定(url_hash)

最小連接數(least_conn)

"凡世的喧囂與明亮,世俗的快樂和幸福,如同清亮的溪澗,在風裏,在我眼前,汨(mi)汨而過,溫暖如同泉水一樣湧出來。我沒有奢望,我只要你快樂,不要悲傷。"

nginx的幾種負載均衡算法