nginx的概念與幾種負載均衡算法


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),用於調整不同的服務器上請求的分配率。權重的數值越大,被分配到請求的幾率越大。權重值可以根據不同的后端服務器的硬件配置進行調整,在配置的server后面加上weight=number修改權重值,這種方式叫做加權輪詢。

IP綁定(ip_hash):每個請求按照發起客戶端的IP的hash結果進行匹配,同樣IP地址的客戶端總是會訪問同一個后端服務器,在一定程度上解決了集群部署環境下Session共享的問題。

最快響應時間(fair):智能調度算法,動態地根據后端服務器的處理處理效率和響應時間對請求進行均衡分配,響應時間短、處理效率高的服務器分配到請求的概率高,響應時間長、處理效率低的服務器分配到請求的概率低。使用這種算法需要安裝upstream_fair模塊。

URL綁定(url_hash):按照訪問的URL的hash結果分配請求,相同的URL會訪問同一個后端服務器,在一定程度上可以提高緩存的效率。使用這種算法需要安裝Nginx的hash軟件包。

最小連接數(least_conn):優先將請求分配給壓力較小的后端服務器,這樣可以平衡每個后端服務器下等待隊列的長度,並避免向壓力大的服務器添加更多的請求。

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM