大家好,我是IT修真院深圳分院第5期學(xué)員,一枚正直善良的JAVA程序員。
今天給大家分享一下,修真院官網(wǎng)JAVA任務(wù)6中,NGINX的負(fù)載均衡
一、背景介紹
什么是ngnix
Nginx是一個http服務(wù)器。是一個使用c語言開發(fā)的高性能的http 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器。由俄羅斯的程序設(shè)計(jì)師IgorSysoev所開發(fā),官方測試nginx能夠支撐5萬并發(fā)鏈接,并且cpu、內(nèi)存等資源消耗卻非常低,運(yùn)行非常穩(wěn)定,中國大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。
我們主要用nginx來做什么
1、反向代理
2、負(fù)載均衡
3、動靜分離
1、反向代理:反向代理(ReverseProxy)方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,簡單來說就是真實(shí)的服務(wù)器不能直接被外部網(wǎng)絡(luò)訪問,想要訪問必須通過代理。
2、動靜分離:運(yùn)用Nginx的反向代理功能分發(fā)請求:所有動態(tài)資源的請求交給應(yīng)用服務(wù)器,而靜態(tài)資源的請求(例如圖片、視頻、CSS、JavaScript文件等)則直接由Nginx返回到瀏覽器,這樣能大大減輕應(yīng)用服務(wù)器的壓力
3、負(fù)載均衡:負(fù)載均衡也是 Nginx常用的一個功能,當(dāng)一臺服務(wù)器的單位時間內(nèi)的訪問量越大時,服務(wù)器壓力就越大,大到超過自身承受能力時,服務(wù)器就會崩潰。為了避免服務(wù)器崩潰,讓用戶有更好的體驗(yàn),我們通過負(fù)載均衡的方式來分擔(dān)服務(wù)器壓力。我們可以建立很多很多服務(wù)器,組成一個服務(wù)器集群,當(dāng)用戶訪問網(wǎng)站時,先訪問一個中間服務(wù)器,在讓這個中間服務(wù)器在服務(wù)器集群中選擇一個壓力較小的服務(wù)器,然后將該訪問請求引入該服務(wù)器。如此以來,用戶的每次訪問,都會保證服務(wù)器集群中的每個服務(wù)器壓力趨于平衡,分擔(dān)了服務(wù)器壓力,避免了服務(wù)器崩潰的情況。負(fù)載均衡配置一般都需要同時配置反向代理,通過反向代理跳轉(zhuǎn)到負(fù)載均衡。
總而言之:負(fù)載均衡不論是各種軟件或硬件上的解決方案,主要還是將大量的并發(fā)請求按照一定的規(guī)律分發(fā)給不同的服務(wù)器處理,從而減少某臺服務(wù)器的瞬時壓力,提高網(wǎng)站的抗并發(fā)能力。nginx在負(fù)載均衡的應(yīng)用之所以廣泛,我認(rèn)為這歸功于它的靈活配置,一個nginx.conf文件解決大部分問題,不論是nignx創(chuàng)建虛擬服務(wù)器、nginx的反向代理服務(wù)器,還是nginx的負(fù)載均衡,幾乎都在這個配置文件中進(jìn)行。服務(wù)器上只負(fù)責(zé)把nginx搭好,跑起來即可。而且它本身輕量級,不需要占用服務(wù)器太多資源就可以達(dá)到較好的效果,是一個非常值得推崇的網(wǎng)頁服務(wù)器。
二、知識剖析
1、nginx負(fù)載均衡是如何實(shí)現(xiàn)的
a.兩臺或以上的應(yīng)用服務(wù)器
b.在nginx.conf中寫入相關(guān)配置,主要是對proxy_pass,upstream的使用
nginx的upstream目前支持這幾種方式的分發(fā)策略
1)、輪詢(默認(rèn))——每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動剔除。
2)、weight ——指定輪詢幾率,weight和訪問比率成正比,用于后端服務(wù)器性能不均的情況。
3)、ip_hash ——每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器。
4)、backup——其它所有的非backup機(jī)器down或者忙的時候,請求backup機(jī)器。所以這臺機(jī)器壓力會最輕。
5)、down——表示單前的server暫時不參與負(fù)載
6)、fair(第三方)——按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。
7)、url_hash(第三方)——按訪問url的hash結(jié)果來分配請求,使每個url定向到同一個后端服務(wù)器,后端服務(wù)器為緩存時比較有效。
三、常見問題
都是http服務(wù)器,nginx和tomcat的區(qū)別是什么?
4.解決方案
答:雖然Tomcat也可以認(rèn)為是HTTP服務(wù)器,內(nèi)部集成了http服務(wù)器的相關(guān)功能,但通常它仍然會和Nginx配合在一起使用。嚴(yán)格的來說,Nginx 應(yīng)該叫做「HTTP Server」;而 Tomcat 則是一個「Application Server」,或者更準(zhǔn)確的來說,是一個「Servlet/JSP」應(yīng)用的容器(Ruby/Python 等其他語言開發(fā)的應(yīng)用也無法直接運(yùn)行在 Tomcat 上),這種特性導(dǎo)致了它們在使用中有明確的分工職責(zé)。
五、編碼實(shí)戰(zhàn)
六、擴(kuò)展思考
負(fù)載均衡下服務(wù)器集群間會話保存的問題
nginx中的ip_hash技術(shù)能夠?qū)⒛硞€ip的請求定向到同一臺后端,這樣一來這個ip下的某個客戶端和某個后端就能建立起穩(wěn)固的session,ip_hash是在upstream配置中定義的
七、參考文獻(xiàn)
1.CSDN博客:http://blog.csdn.net/daybreak1209/article/details/51554045
2.CSDN博客:https://www.cnblogs.com/microtiger/p/7623858.html
八、更多討論
Q1、講了動靜分離沒有?
答:動靜分離:運(yùn)用Nginx的反向代理功能分發(fā)請求:所有動態(tài)資源的請求交給應(yīng)用服務(wù)器,而靜態(tài)資源的請求(例如圖片、視頻、CSS、JavaScript文件等)則直接由Nginx返回到瀏覽器,這樣能大大減輕應(yīng)用服務(wù)器的壓力
Q2、ip_hash既然有根據(jù)客戶端ip默認(rèn)匹配服務(wù)器的優(yōu)點(diǎn),為什么不作為默認(rèn)配置呢,是不是在某些情況下設(shè)置ip_hash會有弊端
答:有限制條件,代理服務(wù)器必須既作為最前端接受客戶端ip的服務(wù)器,又作為直接連接應(yīng)用服務(wù)器的服務(wù)器才能生效
Q3、nginx的功能tomcat可以完成嗎?
答:在一定條件下可以完成,但是術(shù)業(yè)有專攻,還是按照常規(guī)用法比較合適
今天的分享就到這里啦,歡迎大家提問和探討!
PPT:PPT
感謝大家觀看
今天的分享就到這里啦,歡迎大家點(diǎn)贊、轉(zhuǎn)發(fā)、留言、拍磚~
技能樹.IT修真院
“我們相信人人都可以成為一個工程師,現(xiàn)在開始,找個師兄,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷茫”。
這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化,成長可見化,師兄1對1免費(fèi)指導(dǎo)。快來與我一起學(xué)習(xí)吧~
作者:東
鏈接:http://www.lxweimin.com/p/1ebbafa093b6
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。