? ? ? ?大家好,我是IT修真院成都分院第8期的JAVA學(xué)員鄒蘇,一枚正直純潔善良的java程序員。 今天給大家分享一下,修真院官網(wǎng)Java任務(wù)2,深度思考中的知識(shí)點(diǎn)————nginx服務(wù)器有什么作用?什么叫反向代理?為什么要使用反向代理?
1.背景介紹
nginx是什么?
Nginx是一款輕量級(jí)的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,
其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類(lèi)型的網(wǎng)頁(yè)服務(wù)器中表現(xiàn)較好,
中國(guó)大陸使用nginx網(wǎng)站用戶(hù)有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等
2.知識(shí)剖析
nginx服務(wù)器有什么作用?
1、反向代理:反向代理(Reverse Proxy)方式是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,
然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶(hù)端,
簡(jiǎn)單來(lái)說(shuō)就是真實(shí)的服務(wù)器不能直接被外部網(wǎng)絡(luò)訪(fǎng)問(wèn),想要訪(fǎng)問(wèn)必須通過(guò)代理。
2、負(fù)載均衡:負(fù)載均衡也是 Nginx 常用的一個(gè)功能,當(dāng)有2臺(tái)或以上服務(wù)器時(shí),根據(jù)規(guī)則隨機(jī)的將請(qǐng)求分發(fā)到指定的服務(wù)器上處理,
負(fù)載均衡配置一般都需要同時(shí)配置反向代理,通過(guò)反向代理跳轉(zhuǎn)到負(fù)載均衡。而Nginx目前支持自帶3種負(fù)載均衡策略,
還有2種常用的第三方策略。
3、HTTP服務(wù)器:Nginx本身也是一個(gè)靜態(tài)資源的服務(wù)器,當(dāng)只有靜態(tài)資源的時(shí)候,就可以使用Nginx來(lái)做服務(wù)器,同時(shí)現(xiàn)在也很流行動(dòng)靜分離,就可以通過(guò)Nginx來(lái)實(shí)現(xiàn)
4、正向代理:意思是一個(gè)位于客戶(hù)端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶(hù)端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(原始服務(wù)器),
然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶(hù)端。
為什么要使用反向代理?
反向代理的主要作用是分發(fā)請(qǐng)求。
假定一個(gè)接口請(qǐng)求返回?cái)?shù)據(jù)100k,10個(gè)并發(fā)請(qǐng)求就是1M,那么千兆網(wǎng)卡,可以支撐并發(fā)10000個(gè)請(qǐng)求
,假設(shè)我們收到請(qǐng)求馬上就返回,那么最高并發(fā)數(shù)就是我們上面計(jì)算的結(jié)果,但是,問(wèn)題在于,
應(yīng)用服務(wù)器做不到馬上返回,因?yàn)樗泻芏鄻I(yè)務(wù)邏輯需要執(zhí)行處理,
比如給用戶(hù)發(fā)推送發(fā)短信發(fā)郵件,本地磁盤(pán)寫(xiě)日志,請(qǐng)求數(shù)據(jù)庫(kù)增刪改查,調(diào)用微信的登錄接口等等等等。
木桶理論取最短板,假如拖后腿的這個(gè),最佳狀態(tài)也只能優(yōu)化到支持1000個(gè)并發(fā),
那就尷尬了,本來(lái)能支持10000個(gè)請(qǐng)求的系統(tǒng),只能用到1/10性能。
單個(gè)公網(wǎng)ip算一個(gè)節(jié)點(diǎn)的話(huà),這個(gè)節(jié)點(diǎn)本來(lái)的潛力是響應(yīng)10000個(gè)并發(fā)請(qǐng)求,實(shí)際在應(yīng)用層面只能到1000并發(fā),
潛力還未發(fā)掘。這個(gè)時(shí)候,就是反向代理起到用武之地的時(shí)候了。
首先一個(gè)反向代理的服務(wù)器拋開(kāi)所有業(yè)務(wù)層的東西,只單純的接下請(qǐng)求再返回,那么可以支持到10000并發(fā)了。
接下來(lái)應(yīng)用層面誰(shuí)來(lái)處理?找來(lái)10個(gè)小弟,轉(zhuǎn)發(fā)給他們,每人1000正好。
這樣這個(gè)節(jié)點(diǎn)系統(tǒng)就用到了10/11的性能了。
3.常見(jiàn)問(wèn)題
4.解決方案
5.編碼實(shí)戰(zhàn)
6.擴(kuò)展思考
幾種負(fù)載均衡策略:
1、RR(默認(rèn)):
每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。
2、權(quán)重:
指定輪詢(xún)幾率,weight和訪(fǎng)問(wèn)比率成正比,用于后端服務(wù)器性能不均的情況。
3、ip_hash
前面2種方式,在下一個(gè)請(qǐng)求來(lái)的時(shí)候請(qǐng)求可能分發(fā)到另外一個(gè)服務(wù)器,當(dāng)我們的程序不是無(wú)狀態(tài)的時(shí)候(采用了session保存數(shù)據(jù)),
這時(shí)候就有一個(gè)很大的很問(wèn)題了,比如把登錄信息保存到了session中,那么跳轉(zhuǎn)到另外一臺(tái)服務(wù)器的時(shí)候就需要重新登錄了,
所以很多時(shí)候我們需要一個(gè)客戶(hù)只訪(fǎng)問(wèn)一個(gè)服務(wù)器,那么就需要用iphash了,
iphash的每個(gè)請(qǐng)求按訪(fǎng)問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪(fǎng)客固定訪(fǎng)問(wèn)一個(gè)后端服務(wù)器,可以解決session的問(wèn)題。
4、fair(第三方)
按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。
下載地址:https://github.com/gnosek/nginx-upstream-fair?spm=5176.100239.blogcont73621.10.7QrfAw
5、url_hash(第三方)
按訪(fǎng)問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效。
7.參考文獻(xiàn)
https://www.zhihu.com/question/19761434
http://www.linuxidc.com/Linux/2017-04/142962.htm
PPT :PPT
騰訊視頻:
問(wèn)題:
ip_hash 的弊端是什么?
一句話(huà),造成負(fù)載不均。
你用的那個(gè)工具是什么呀?看起來(lái)比xshell好點(diǎn)?
mobaxterm.
除了nginx還有別的做負(fù)載均衡的方法嗎?
tengine、dubbo
能不能說(shuō)一下反向代理和正向代理區(qū)別?
從用途上來(lái)講:
正向代理的典型用途是為在防火墻內(nèi)的局域網(wǎng)客戶(hù)端提供訪(fǎng)問(wèn)Internet的途徑。正向代理還可以使用緩沖特性減少網(wǎng)絡(luò)使用率。反向代理的典型用途是將 防火墻后面的服務(wù)器提供給Internet用戶(hù)訪(fǎng)問(wèn)。反向代理還可以為后端的多臺(tái)服務(wù)器提供負(fù)載平衡,或?yàn)楹蠖溯^慢的服務(wù)器提供緩沖服務(wù)。
另外,反向代理還可以啟用高級(jí)URL策略和管理技術(shù),從而使處于不同web服務(wù)器系統(tǒng)的web頁(yè)面同時(shí)存在于同一個(gè)URL空間下。
從安全性來(lái)講:
正向代理允許客戶(hù)端通過(guò)它訪(fǎng)問(wèn)任意網(wǎng)站并且隱藏客戶(hù)端自身,因此你必須采取安全措施以確保僅為經(jīng)過(guò)授權(quán)的客戶(hù)端提供服務(wù)。
反向代理對(duì)外都是透明的,訪(fǎng)問(wèn)者并不知道自己訪(fǎng)問(wèn)的是一個(gè)代理。
感謝大家觀看!
今天的分享就到這里啦,歡迎大家點(diǎn)贊、轉(zhuǎn)發(fā)、留言、拍磚~
技能樹(shù).IT修真院
“我們相信人人都可以成為一個(gè)工程師,現(xiàn)在開(kāi)始,找個(gè)師兄,帶你入門(mén),掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷?!薄?/p>
這里是技能樹(shù).IT修真院,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線(xiàn),學(xué)習(xí)透明化,成長(zhǎng)可見(jiàn)化,師兄1對(duì)1免費(fèi)指導(dǎo)??靵?lái)與我一起學(xué)習(xí)吧~
我的邀請(qǐng)碼:17701057,或者你可以直接點(diǎn)擊此鏈接:http://www.jnshu.com/login/1/17701057