ASP.NET Core使用Nginx搭建高可用分布式Web集群
一、為什么使用Nginx
互聯(lián)網(wǎng)飛速發(fā)展的今天,大用戶量高并發(fā)已經(jīng)成為互聯(lián)網(wǎng)的主體.怎樣能讓一個(gè)網(wǎng)站能夠承載幾萬個(gè)或幾十萬個(gè)用戶的持續(xù)訪問呢?這是一些中小網(wǎng)站急需解決的問題。為了解決這個(gè)問題引入了負(fù)載均衡方法。負(fù)載均衡就是一個(gè)web服務(wù)器解決不了的問題可以通過多個(gè)web服務(wù)器來平均分擔(dān)壓力來解決,并發(fā)過來的請(qǐng)求被平均分配到多個(gè)后臺(tái)web服務(wù)器來處理,這樣壓力就被分解開來。
負(fù)載均衡服務(wù)器分為兩種一種是通過硬件實(shí)現(xiàn)的負(fù)載均衡服務(wù)器,簡(jiǎn)稱硬負(fù)載例如:f5。另一種是通過軟件來實(shí)現(xiàn)的負(fù)載均衡,簡(jiǎn)稱軟負(fù)載:例如apache和nginx。
硬負(fù)載和軟負(fù)載相比前者作用的網(wǎng)絡(luò)層次比較多可以作用到socket接口的數(shù)據(jù)鏈路層對(duì)發(fā)出的請(qǐng)求進(jìn)行分組轉(zhuǎn)發(fā)但是價(jià)格成本比較貴,而軟負(fù)載作用的層次在http協(xié)議層之上可以對(duì)http請(qǐng)求進(jìn)行分組轉(zhuǎn)發(fā)并且因?yàn)槭情_源的所以幾乎是0成本,并且阿里巴巴,京東等電商網(wǎng)站使用的都是Nginx服務(wù)器。

ASP.NET使用Nginx搭建IIS分布式集群部署實(shí)現(xiàn)負(fù)載均衡
二、什么是Nginx
Nginx(發(fā)音同engine x)
nginx是一款自由的、開源的、高性能的HTTP服務(wù)器和反向代理服務(wù)器;同時(shí)也是一個(gè)IMAP、POP3、SMTP代理服務(wù)器;nginx可以作為一個(gè)HTTP服務(wù)器進(jìn)行網(wǎng)站的發(fā)布處理,另外nginx可以作為反向代理進(jìn)行負(fù)載均衡的實(shí)現(xiàn)。
nginx是一個(gè)強(qiáng)大的web服務(wù)器軟件,用于處理高并發(fā)的http請(qǐng)求和作為反向代理服務(wù)器做負(fù)載均衡。具有高性能、輕量級(jí)、內(nèi)存消耗少,強(qiáng)大的負(fù)載均衡能力等優(yōu)勢(shì)。
由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開發(fā),官方測(cè)試nginx能夠支支撐5萬并發(fā)鏈接,并且cpu、內(nèi)存等資源消耗卻非常低,運(yùn)行非常穩(wěn)定。
三、什么是負(fù)載均衡
如果我們寫好的網(wǎng)站只放在一臺(tái)服務(wù)器上,訪問量一大或者停電了,導(dǎo)致服務(wù)器掛了,我們的網(wǎng)站就訪問不了了!像電商網(wǎng)站要是在電商節(jié)日掛了,那等著玩火自焚。所以一般是把網(wǎng)站放在多臺(tái)服務(wù)器上,只要還有一臺(tái)服務(wù)器沒掛,我們的網(wǎng)站就還能運(yùn)行和訪問。把網(wǎng)站復(fù)制到多臺(tái)服務(wù)器上,這個(gè)時(shí)候就需要Nginx來做代理服務(wù)器,所有的請(qǐng)求都會(huì)經(jīng)過Nginx代理服務(wù)器,由Nginx去轉(zhuǎn)發(fā)請(qǐng)求到空閑的服務(wù)器上,且將獲取到服務(wù)器的資源轉(zhuǎn)發(fā)給客戶端。
“對(duì)客戶端來說,看起來只是發(fā)了個(gè)請(qǐng)求只到一臺(tái)服務(wù)器。
實(shí)際上后端有多個(gè)服務(wù)器,客戶端請(qǐng)求的是Nginx代理服務(wù)器。
Nginx接收到請(qǐng)求,就會(huì)轉(zhuǎn)發(fā)到空閑的后端服務(wù)器上,這就是負(fù)載均衡了。

nginx負(fù)載均衡
四、Nginx在Linux系統(tǒng)安裝方法
Nginx官網(wǎng)提供了三個(gè)類型的版本
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以說是開發(fā)版
Stable version:最新穩(wěn)定版,生產(chǎn)環(huán)境上建議使用的版本
Legacy versions:遺留的老版本的穩(wěn)定版
PS:Windows 安裝Nginx并創(chuàng)建為Windows服務(wù),實(shí)現(xiàn)只要啟動(dòng)服務(wù)器不需要登錄就可以實(shí)現(xiàn)服務(wù)自啟動(dòng)。
五、Nginx實(shí)現(xiàn)Web分布式部署和負(fù)載均衡實(shí)戰(zhàn)演練
虛擬主機(jī),就是將一臺(tái)物理服務(wù)器虛擬為多個(gè)服務(wù)器來使用,從而實(shí)現(xiàn)在一臺(tái)服務(wù)器上配置多個(gè)站點(diǎn),即可以在一臺(tái)物理主機(jī)上配置多個(gè)域名。Nginx中,一個(gè)server標(biāo)簽就是一臺(tái)虛擬主機(jī),配置多個(gè)server標(biāo)簽就虛擬出了多臺(tái)主機(jī)?! ginx虛擬主機(jī)的實(shí)現(xiàn)方式有兩種:域名虛擬方式與端口虛擬方式。域名虛擬方式是指不同的虛擬機(jī)使用不同的域名,通過不同的域名虛擬出不同的主機(jī);端口虛擬方式是指不同的虛擬機(jī)使用相同的域名不同的端口號(hào),通過不同的端口號(hào)虛擬出不同的主機(jī)。基于端口的虛擬方式不常用。
從入門到精通-Nginx,圖文并茂、負(fù)載均衡、動(dòng)靜分離、虛擬主機(jī) 附案例源碼 - 陳彥斌 - 博客園 https://www.cnblogs.com/chenyanbin/p/12521296.html
nginx -V查看安裝的模塊

Nginx實(shí)現(xiàn)IIS分布式部署和負(fù)載均衡實(shí)戰(zhàn)演練
六、Nginx反向代理需要注意的幾個(gè)問題
1)、Nginx在Windows系統(tǒng)上的性能問題
Nginx服務(wù)器知名度很高,高性能,高可擴(kuò)展,的確是這樣。但并非指你隨便下載一款事先編譯好的,就能滿足你的要求,尤其是Windows版本的。Nginx軟件在linux上跑性能比在windows上跑要好!Nginx在Windows只使用select作為通知方法,所以不要期待它有很高的性能和擴(kuò)展性。所以只是建議在開發(fā)測(cè)試上使用,這里阿笨也不能隨便瞎說,大家還是一定要根據(jù)自己實(shí)際情況去做性能測(cè)試然后再去考慮是否將Nginx部署在Windows服務(wù)器上??梢酝ㄟ^簡(jiǎn)單最粗暴的方案NginxVS IIS對(duì)比性能測(cè)試。
個(gè)人建議:
畢竟nginx我們一般還是用來做反向代理HTTP請(qǐng)求轉(zhuǎn)發(fā),幾乎不涉及到IO的讀寫操作,其實(shí)可以弄一臺(tái)低配置的linux系統(tǒng)在上面部署nginx,然后負(fù)載均衡我們下游的windows集群服務(wù)。如果你對(duì)系統(tǒng)要求比較嚴(yán)格的話,那只能用微軟給我們推薦的自己家的NLB高可用方案了。IIS 做負(fù)載均衡最好是用Windows Server 自帶的組件NLB 。特點(diǎn):配置繁瑣且麻煩。
2)、多臺(tái)機(jī)器間session的共享問題
如果站點(diǎn)使用了session,請(qǐng)求平均分配到兩個(gè)站點(diǎn),那么必然存在session共享問題,該如何解決?
配置負(fù)載均衡比較簡(jiǎn)單,但是最關(guān)鍵的一個(gè)問題是怎么實(shí)現(xiàn)多臺(tái)服務(wù)器之間session的共享,雖然可以通過nginx的負(fù)載均衡算法ip_hash來解決,實(shí)際上我們并不推薦這種方式,我們應(yīng)用采用的是Web應(yīng)用程序?qū)ession存儲(chǔ)在分布式緩存Redis中。
Nginx對(duì)簡(jiǎn)單會(huì)話保持的支持:ip_hash
每個(gè)請(qǐng)求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決session 的問題。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
七、思考與總結(jié)
1)、總結(jié)
隨著互聯(lián)網(wǎng)井噴式發(fā)展,單節(jié)點(diǎn)服務(wù)已經(jīng)不能滿足并發(fā)需求,通常利用nginx反向代理來實(shí)現(xiàn)集群部署以此解決并發(fā)需求;在現(xiàn)在階段,負(fù)載均衡是一個(gè)被普遍應(yīng)用的技術(shù)。Nginx作為http的負(fù)載均衡服務(wù)器,被應(yīng)用的越來越廣泛。
本課程并不是講解關(guān)于nginx方面的知識(shí),而且基于nginx反向代理服務(wù)來搭建我們的風(fēng)不是集群Web應(yīng)用實(shí)現(xiàn)負(fù)載均衡的一個(gè)基礎(chǔ)課程,課程難免很多關(guān)于nginx方面的知識(shí)并沒有進(jìn)行詳細(xì)的講解,所以需要大家進(jìn)一步的去加深和了解Nginx的知識(shí)。
如果你所在公司沒有專職的運(yùn)維人員,而且你的應(yīng)用程序能接收一定的延遲和宕機(jī)風(fēng)險(xiǎn),但是你又想保證提供服務(wù)是高可用的,那么你可以像阿笨這樣基于Nginx搭建一個(gè)簡(jiǎn)單的IIS分布式集群應(yīng)用同是實(shí)現(xiàn)了WEB負(fù)載均衡!
2)、思考
通過Nginx我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的負(fù)載均衡,實(shí)際情況比這復(fù)雜很多。比如nginx服務(wù)器掛了,那我們的站點(diǎn)就直接掛了,正確的通過keepalived組件來搭建多臺(tái)nginx反向代理服務(wù)器來提供服務(wù)。
Nginx在不同平臺(tái)下如何實(shí)現(xiàn)高可用(HA)?
Linux平臺(tái):Keepalived+Nginx實(shí)現(xiàn)高可用;Windows平臺(tái):HAProxy+Nginx實(shí)現(xiàn)高可用。

騰訊課堂
網(wǎng)易云課堂

