最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

圖解Nginx,系統(tǒng)架構(gòu)演變 + Nginx反向代理與負(fù)載均衡

2023-02-22 11:28 作者:吳小敏63  | 我要投稿

一、系統(tǒng)架構(gòu)演變

最開始接觸Java語言的時候,我寫的第一個項目是圖書管理系統(tǒng),當(dāng)時是用JSP+servlet寫的,感覺很吊的樣子,全班領(lǐng)先水平。

慢慢的變成了JSP+SSM架構(gòu)。

到現(xiàn)在單體架構(gòu)最流行的SpringBoot+Vue。

但是,隨著業(yè)務(wù)量的不斷增大,你會發(fā)現(xiàn),這些單體架構(gòu),已經(jīng)無法滿足數(shù)據(jù)日益膨脹的今天,動不動就幾萬、幾十萬的QPS,我記得當(dāng)初200QPS,我就覺得挺嚇人了。

為了解決性能問題,慢慢的微服務(wù)SpringCloud架構(gòu)浮出水面,微服務(wù)的核心理念是將應(yīng)用細(xì)粒化,將單一應(yīng)用拆分成若干個小應(yīng)用,每個小應(yīng)用提供單一的業(yè)務(wù)功能,獨立部署,服務(wù)之間相互調(diào)用,降低程序耦合度,解決單臺服務(wù)器宕機的問題。

微服務(wù)提供了:

  1. 高可用:當(dāng)某個節(jié)點服務(wù)器宕機后,可以迅速將流量轉(zhuǎn)移到其它節(jié)點;

  2. 高性能:多臺服務(wù)器對外提供相同的服務(wù),提升程序的吞吐量;

  3. 高擴展:當(dāng)業(yè)務(wù)發(fā)生激增時,可以通過增加節(jié)點的方式,解決性能問題;

注:本章的重點是Nginx,微服務(wù)其它組件就不畫了。

二、什么是Nginx?

Nginx是俄羅斯人Igor Sysoev編寫的一款高性能 HTTP 和反向代理服務(wù)器。Nginx選擇了epoll和kqueue作為網(wǎng)絡(luò)I/O 模型,在高連接并發(fā)的情況下,Nginx是Apache服務(wù)器不錯的替代品,它能夠支持高達(dá)50000個并發(fā)連接數(shù)的響應(yīng),運行穩(wěn)定,且內(nèi)存、CPU等系統(tǒng)資源消耗非常低。

三、servername匹配規(guī)則

  1. 完整匹配

  2. 通配符匹配

  3. 正則匹配

正則匹配格式,必須以~開頭,比如server_name ~^www\d+\.nzbc\.com$;。如果沒有~開頭,則Nginx會判定為完整匹配,在邏輯上,需要添加^和$錨定符號。正則匹配格式中.為正則元字符,需要通過反斜線進行轉(zhuǎn)義,如果正在表達(dá)式中包含{},需要用雙引號引用起來,避免報錯。

四、正向代理與反向代理

1、正向代理

正向代理服務(wù)器一般位于用戶和服務(wù)器之間,用戶通過正向代理服務(wù)器訪問應(yīng)用服務(wù)器獲取資源。

最常見的例子就是,我們訪問一個外國網(wǎng)站,該網(wǎng)站無法在國內(nèi)直接訪問,但是可以通過代理服務(wù)器訪問,也就是說,用戶向正向代理服務(wù)器發(fā)送一個請求并指定目標(biāo),然后正向代理服務(wù)器向目標(biāo)服務(wù)器(外國網(wǎng)站)轉(zhuǎn)交請求并將獲得的內(nèi)容返回給用戶。

正向代理服務(wù)器,代理的是客戶端,去和服務(wù)端交互。

2、反向代理

反向代理服務(wù)器一般位于用戶和服務(wù)器之間,用戶訪問反向代理服務(wù)器獲取應(yīng)用服務(wù)器資源,用戶不知道應(yīng)用服務(wù)器的地址,是由代理服務(wù)器轉(zhuǎn)發(fā)的,有降低網(wǎng)絡(luò)和服務(wù)器的負(fù)載,提高訪問效率的作用。

反向代理服務(wù)器,代理的是服務(wù)端,去和客戶端交互。

Nginx就是一款高性能的反向代理服務(wù)器。

3、LVS

先說結(jié)論,LVS解決了Nginx單機性能瓶頸的問題。

LVS主要用于多服務(wù)器負(fù)載均衡,工作在網(wǎng)絡(luò)的第四層,可以實現(xiàn)高性能、高可用的服務(wù)器集群技術(shù),采用同步請求轉(zhuǎn)發(fā)的策略。

LVS支持的并發(fā)量要比Nginx高,可以配合keepalived使用,將Nginx作為LVS的節(jié)點機器,因為Nginx在網(wǎng)絡(luò)的第七層,功能上肯定強于LVS。

用戶通過Nginx訪問應(yīng)用服務(wù)器,應(yīng)用服務(wù)器直接將數(shù)據(jù)返回給機房路由,返回時不走Nginx了,降低了Nginx的性能消耗。

五、負(fù)載均衡策略

1、輪詢

默認(rèn)使用輪詢方式,逐一轉(zhuǎn)發(fā)訪問,這種情況適合無狀態(tài)請求,會話無法保持,可以通過基于客戶端實現(xiàn)會話保持。

會話保持方式:

(1)基于session實現(xiàn):

session用于存儲客戶端用戶信息,一般不在服務(wù)器存儲session,可以通過SpringSession將session存儲到一個Redis服務(wù)器中,再次訪問時,可以到Redis服務(wù)器中獲取session,實現(xiàn)session共享。

(2)基于cookie實現(xiàn),無狀態(tài)的會話保持方式

客戶端訪問時,先到權(quán)限校驗服務(wù)器校驗權(quán)限,生成一個cookie,并進行加密,只有服務(wù)器能解密,客戶端沒密碼無法解密,客戶端攜帶此cookie再次訪問應(yīng)用服務(wù)器,應(yīng)用服務(wù)器進行解密校驗,完成無狀態(tài)的會話保持。

2、權(quán)重

通過upstream進行權(quán)重的定義。

  1. weight:權(quán)重

  2. down:下線不用了

  3. backup:備用服務(wù)器

修改配置文件后,需要通過systemctl reload nginx命令重啟Nginx。

nginx.conf配置如下

http{ upstream httpnz { server 192.168.66.1 weight=1 down; server 192.168.66.2 weight=5 backup; server 192.168.66.3 weight=10; } server{ listen 80; server_name nzbc; location / { proxy_pass http://httpnz; } error_page 500.html; location = /500.html{ root html; } }}

3、ip_hash

每個請求按訪問ip的hash結(jié)果分配,映射到固定某一臺的服務(wù)器,會導(dǎo)致負(fù)載均衡不平衡。

當(dāng)此應(yīng)用服務(wù)器宕機后,session會丟失,再次發(fā)起請求時,會重新固定訪問另一臺正常的應(yīng)用服務(wù)器,并實現(xiàn)會話保持。

4、least_conn

最少連接訪問。

5、url_hash

根據(jù)訪問的url轉(zhuǎn)發(fā)請求,定向流量轉(zhuǎn)發(fā)。

每個請求按訪問url的hash結(jié)果分配,映射到固定的某一臺服務(wù)器,會話無法保持。

一般在獲取本地資源時使用(且本地資源不在同一臺服務(wù)器上),比如通過地址1獲取圖片資源、通過地址2獲取pdf協(xié)議資源。

6、fair

根據(jù)服務(wù)器響應(yīng)時間轉(zhuǎn)發(fā)請求。

7、小結(jié)

最常用的負(fù)載均衡策略是配置權(quán)重,其它的形式,不是很常用。

ip_hash、least_conn、url_hash、fair,這幾種形式無法實現(xiàn)動態(tài)Nginx上下線(新增或減少Nginx服務(wù)器),而且還會造成流量傾斜的問題,如果瞬時流量比較爆炸的時候,會將某個服務(wù)器直接干蹦。

六、動靜分離

動靜分離的最終目的是將獲取靜態(tài)資源和動態(tài)資源分離開,提升服務(wù)器性能和高可用性。

配置靜態(tài)資源,nginx.conf配置如下

http{ upstream httpnz { server 192.168.66.1 weight=1 down; server 192.168.66.2 weight=5 backup; server 192.168.66.3 weight=10; } server{ listen 80; server_name nzbc; location / { proxy_pass http://httpnz; } location ~*/(js/img/css) { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html{ root html; } }}

七、URLRewrite

URLRewrite是實現(xiàn)URL重寫的關(guān)鍵指令,根據(jù)regex (正則表達(dá)式)部分內(nèi)容,進行重定向。

flag標(biāo)記說明:

  1. break,本條匹配完成后即終止;

  2. last,本條匹配完成后,繼續(xù)向下匹配;

  3. redirect,返回302臨時重定向;

  4. permanent,返回301永久重定向;

配置URLRewrite,nginx.conf配置如下

http{ upstream httpnz { server 192.168.66.1 weight=1 down; server 192.168.66.2 weight=5 backup; server 192.168.66.3 weight=10; } server{ listen 80; server_name nzbc; location / { rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 break; proxy_pass http://httpnz; } location ~*/(js/img/css) { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html{ root html; } }}


圖解Nginx,系統(tǒng)架構(gòu)演變 + Nginx反向代理與負(fù)載均衡的評論 (共 條)

分享到微博請遵守國家法律
渑池县| 盐津县| 宝兴县| 阿拉善左旗| 奉新县| 湄潭县| 慈利县| 永泰县| 新巴尔虎右旗| 沂南县| 泰顺县| 凤城市| 辛集市| 呼图壁县| 同德县| 博罗县| 大石桥市| 渭源县| 秭归县| 庄河市| 金昌市| 汝州市| 长治县| 长顺县| 南京市| 宜宾县| 兴山县| 梁平县| 新兴县| 肥乡县| 三台县| 东乡| 崇义县| 瑞丽市| 介休市| 上饶市| 理塘县| 中西区| 西乌珠穆沁旗| 济阳县| 会东县|