
文章插圖
前面我們講了 Nginx 的 11 個階段以及各個模塊的用法,現(xiàn)在終于到了最重要也是最常用的一部分了,那就是反向代理和負載均衡,今天這篇文章介紹了負載均衡的原理以及對應(yīng)的四種負載均衡算法,當(dāng)然還有對應(yīng)的指令及實戰(zhàn),歡迎品嘗 。
負載均衡所謂負載均衡,就是 Nginx 把請求均勻的分攤給上游的應(yīng)用服務(wù)器,這樣即使某一個服務(wù)器宕機也不會影響請求的處理,或者當(dāng)應(yīng)用服務(wù)器扛不住了,可以隨時進行擴容 。
Nginx 在 AKF 可擴展立方體上的應(yīng)用在 x 軸上,可以通過橫向擴展應(yīng)用服務(wù)器集群,Nginx 基于 Round-Robin 或者 Least-Connected 算法分發(fā)請求 。但是橫向擴展并不能解決所有問題,當(dāng)數(shù)據(jù)量大的情況下,無論擴展多少臺服務(wù),單臺服務(wù)器數(shù)據(jù)量依然很大 。在 y 軸上,可以基于 URL 進行不同功能的分發(fā) 。需要對 Nginx 基于 URL 進行 location 的配置,成本較高 。在 z 軸上可以基于用戶信息進行擴展 。例如將用戶 IP 地址或者其他信息映射到某個特定的服務(wù)或者集群上去 。這就是 Nginx 的負載均衡功能,它的主要目的就是為了增強服務(wù)的處理能力和容災(zāi)能力 。
反向代理反向代理和負載均衡在某種程度上是密不可分的 。
Nginx 支持多種協(xié)議的反向代理 。四層的反向代理比較簡單,無論是 UDP 還是 TCP 的流量過來,轉(zhuǎn)發(fā)到上游的依然是 UDP 或 TCP 的流量 。
而到了應(yīng)用層時,就不太相同了,因為 HTTP 的 Header 中包含了大量的業(yè)務(wù)信息,需要根據(jù) HTTP 的頭部轉(zhuǎn)換成不同的協(xié)議 。
反向代理與緩存緩存這個問題分為兩類,一類是時間緩存,一類是空間緩存 。
時間緩存是指,當(dāng)用戶請求一個頁面的時候,Nginx 發(fā)現(xiàn)沒有緩存,就會到后端服務(wù)器去取,在返回給用戶響應(yīng)的同時還會緩存一份,這樣當(dāng)下一個用戶去請求的時候就會直接用緩存作為響應(yīng)而不會再去請求上游的服務(wù)器 。空間緩存這種用的比較少,主要是指當(dāng)用戶發(fā)來請求的時候,Nginx 可以提前去上游服務(wù)器獲取一些響應(yīng)的內(nèi)容,這個后面可以看到是怎么用的 。upstream 與 server 指令指令name 表示負載均衡集群的名字,而 {} 內(nèi)指定了一系列的服務(wù)器server 后跟服務(wù)器地址,地址后還可以加一些參數(shù) parametersSyntax: upstream name { ... }Default: —Context: httpSyntax: server address [parameters];Default: —Context: upstream功能:指定一組上游服務(wù)器地址,地址可以是域名、IP 地址或者 Unix Socket 地址 。可以在域名或者 IP 地址后加端口,如果不加端口,那么默認使用 80 端口 。通用參數(shù):server 后可以添加的參數(shù)backup:指定當(dāng)前 server 為備份服務(wù),僅當(dāng)非備份 server 不可用時,請求才會轉(zhuǎn)發(fā)到該 server表示某臺服務(wù)已經(jīng)下線,不再服務(wù)負載均衡算法加權(quán) Round-Robin 負載均衡算法Round-Robin(rr) 負載均衡算法發(fā)給上游服務(wù)器的請求是輪詢發(fā)送的,相當(dāng)于所有上游服務(wù)器根據(jù)順序依次處理發(fā)來的請求 。
有些情況下上游服務(wù)器性能不同,比如 4C8G 和 8C16G 的服務(wù)器都有,那么這時候就可以對服務(wù)器設(shè)置一些權(quán)重,讓性能好的承擔(dān)更多的請求 。
功能在加權(quán)輪詢的方式訪問 server 指令指定的上游服務(wù)集成在 Nginx 的 upstream 框架中,無法移除指令weight:服務(wù)訪問的權(quán)重,默認是 1max_conns:server 的最大并發(fā)連接數(shù),僅作用于單 worker 進程 。默認是 0,表示沒有限制max_fails:在 fail_timeout 時間段內(nèi),最大的失敗次數(shù) 。當(dāng)達到最大失敗時,會在 fail_timeout 秒內(nèi)這臺 server 不允許再次被選擇fail_timeout:單位是秒,默認 10 秒,可以指定一段時間內(nèi)最大失敗次數(shù) max_fails 以及到達 max_fails 之后該 server 不能訪問的時間對上游服務(wù)使用 keepalive 長連接Nginx 與上游服務(wù)一般是在內(nèi)網(wǎng)中的,所以開啟 keepalive 后效果后更明顯 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 交互過程及區(qū)別介紹 socket服務(wù)端和客戶端的區(qū)別
- 簡介后備式ups工作原理和優(yōu)勢 后備式ups的性能特點有哪些
- 分析這4個本質(zhì)區(qū)別 筆記本睡眠和休眠的區(qū)別
- 網(wǎng)絡(luò)協(xié)議基礎(chǔ)知識應(yīng)用 常見的網(wǎng)絡(luò)協(xié)議有哪三種
- mysql數(shù)據(jù)庫特點和優(yōu)勢介紹 mysql特點有哪些
- 十二星座中和這些星座異地戀成功率高
- 金牛男巨蟹女誰主動
- 天絲麻面料的優(yōu)缺點及洗滌方法 天絲麻面料的優(yōu)缺點和洗滌方法
- 巨蟹座男和射手座女相配嗎
- 雙子男和雙魚女誰虐誰
