nginx之負載均衡

1、nginx概述nginx

在不少的大型網站都是用nginx來進行服務代理,那麼nginx到底是什麼,有什麼做用呢?
   在官網上是這樣介紹的:

[HTML] 純文本查看 複製代碼
?
1
nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server.算法

翻譯過來就是:nginx [engine x]是一個HTTP和反向代理服務器、一個郵件代理服務器和一個通用的TCP/UDP代理服務器。其實nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器,也是一個IMAP、POP三、SMTP代理服務器。nginx能夠做爲一個HTTP服務器進行網站的發佈處理,另外nginx能夠做爲反向代理進行負載均衡的實現。

2、nginx的正向和反向代理
1.正向代理後端

所謂的代理,就是所想訪問的目標資源對用戶來講是不可見的,而另外有一個角色擁有對目標資源的訪問權限,進而用戶能夠經過這個代理角色來訪問這個目標資源。例如:當咱們想去訪問國外的某些網站,此時你會發現位於國外的某網站咱們經過瀏覽器是沒有辦法訪問的,此時你們可能都會用一個操做FQ進行訪問,FQ的方式主要是找到一個能夠訪問國外網站的代理服務器,咱們將請求發送給代理服務器,代理服務器去訪問國外的網站,而後將訪問到的數據傳遞給咱們!

2.反向代理瀏覽器

反向代理和正向代理的區別就是:正向代理代理客戶端,反向代理代理服務器。
  反向代理,其實客戶端對代理是無感知的,由於客戶端不須要任何配置就能夠訪問,咱們只須要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取數據後,在返回給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器IP地址。經過下面的圖片咱們能夠看到正向代理和反向代理的不一樣:

 關於反向代理咱們能夠用一個例子來進行闡述,如咱們熟知某寶網站,天天同時鏈接到網站的訪問人數已經爆表,單個服務器遠遠不能知足人民日益增加的購買慾望了,此時就出現了一個你們耳熟能詳的名詞:分佈式部署;也就是經過部署多臺服務器來解決訪問人數限制的問題;某寶網站中大部分功能也是直接使用nginx進行反向代理實現的。

3.反向代理的做用:(1)保證內網的安全,一般將反向代理做爲公網訪問地址,Web服務器是內網
(2)負載均衡,經過反向代理服務器來優化網站的負載緩存

3、nginx負載均衡
1.什麼是負載均衡安全

在互聯網早期,業務流量相對比較小,並且業務邏輯比較簡單,單臺服務器即可以知足基本的需求;可是隨着互聯網的發展,業務流量愈來愈大、業務邏輯也愈來愈複雜,單臺機器的性能問題以及單點問題凸顯了出來,所以須要多臺機器來進行性能的水平擴展以及避免單點故障。可是要如何將不一樣的用戶的流量分發到不一樣的服務器上面呢?
    那麼早期的解決方案是使用DNS作負載,經過給客戶端解析不一樣的IP地址,讓客戶端的流量直接到達各個服務器。可是這種方法有一個很大的缺點就是延時性問題,在作出調度策略改變之後,因爲DNS各級節點的緩存並不會及時的在客戶端生效,並且DNS負載的調度策略比較簡單,沒法知足業務需求,所以就出現了負載均衡。
   客戶端的流量首先會到達負載均衡服務器,由負載均衡服務器經過必定的調度算法將流量分發到不一樣的應用服務器上面,同時負載均衡服務器也會對應用服務器作週期性的健康檢查,當發現故障節點時便動態的將節點從應用服務器集羣中剔除,以此來保證應用的高可用。
  綜上所述,負載均衡,其含義就是指將負載(工做任務)進行平衡、分攤到多個操做單元上進行運行,例如FTP服務器、Web服務器、企業核心應用服務器和其它主要任務服務器等,從而協同完成工做任務。負載均衡構建在原有網絡結構之上,它提供了一種透明且廉價有效的方法擴展服務器和網絡設備的帶寬、增強網絡數據處理能力、增長吞吐量、提升網絡的可用性和靈活性。

2.負載均衡的分類服務器

(1)硬件負載均衡
  硬件負載均衡器的性能穩定,且有生產廠商做爲專業的服務團隊。但其成本很高,一臺硬件負載均衡器的價格通常都在十幾萬到幾十萬,甚至上百萬。知名的負載均衡器有F五、Array、深信服、梭子魚等。
 (2)軟件負載均衡
   軟件負載均衡成本幾乎爲零,基本都是開源軟件。例如,LVS、HAProxy、Nginx等。

3.負載均衡的算法網絡

(1) 加權輪詢(weight Round Robbin,默認,經常使用):
  接收到的請求按照權重分配到不一樣的後端服務器,即便在使用過程當中,某一臺後端服務器宕機,Nginx會自動將該服務器剔除出隊列,請求受理狀況不會受到任何影響。 這種方式下,能夠給不一樣的後端服務器設置一個權重值(weight),用於調整不一樣的服務器上請求的分配率;權重數據越大,被分配到請求的概率越大;該權重值,主要是針對實際工做環境中不一樣的後端服務器硬件配置進行調整的。
(2)輪詢(Round Robbin)
   當服務器羣中各服務器的處理能力相同時,且每筆業務處理量差別不大時,最適合使用這種算法。 輪循,按公約後的權重設置輪循比率。存在慢的提供者累積請求問題,好比:第二臺機器很慢,但沒掛,當請求調到第二臺時就卡在那,長此以往,全部請求都卡在調到第二臺上。
 (3)Random隨機算法
   按權重設置隨機機率,在一個截面上碰撞的機率高,但調用量越大分佈越均勻,並且按機率使用權重後也比較均勻,有利於動態調整提供者權重。
 (4)最小鏈接(Least Connections)及加權最小鏈接(Weighted Least Connection)
   有點相似輪詢與加權輪詢,最少鏈接是在多個服務器中,與處理鏈接數(會話數)最少的服務器進行通訊的算法。即便在每臺服務器處理能力各不相同,每筆業務處理量也不相同的狀況下,也可以在必定程度上下降服務器的負載。
   加權最少鏈接爲最少鏈接算法中的每臺服務器附加權重的算法,該算法事先爲每臺服務器分配處理鏈接的數量,並將客戶端請求轉至鏈接數最少的服務器上。
  (5)哈希算法
    分爲普通哈希和一致性哈希,相同參數的請求老是發到同一提供者。當某一臺提供者掛時,本來發往該提供者的請求,基於虛擬節點,平攤到其它提供者,不會引發劇烈變更。
   (6)IP地址散列
     經過管理髮送方IP和目的地IP地址的散列,未來自同一發送方的分組(或發送至同一目的地的分組)統一轉發到相同服務器的算法。當客戶端有一系列業務須要處理而必須和一個服務器反覆通訊時,該算法可以以流(會話)爲單位,保證來自相同客戶端的通訊可以一直在同一服務器中進行處理。

4.負載均衡的做用併發

(1)解決併發壓力,提升應用處理性能(增長吞吐量,增強網絡處理能力);
(2)提供故障轉移,實現高可用;
(3)經過添加或減小服務器數量,提供網站伸縮性(擴展性);
(4)安全防禦;(負載均衡設備上作一些過濾,黑白名單等處理)

5.負載均衡的應用場景負載均衡

應用於高訪問量的業務,橫向擴張系統,消除單點故障等
相關文章
相關標籤/搜索