1. 程式人生 > >Nginx如何實現負載均衡,Nginx負載均衡的幾種方式。

Nginx如何實現負載均衡,Nginx負載均衡的幾種方式。

大家好,我是IT修真院武漢分院第15期學員,一枚正直善良的JAVA程式設計師。

今天給大家分享一下,修真院官網JAVA任務6中需要使用的Nginx負載均衡

1.背景介紹

在網站創立初期,我們一般都使用單臺機器對臺提供集中式服務,但是隨著業務量越來越大,無論是效能上還是穩定性上都有了更大的挑戰。這時候我們就會想到通過擴容的方式來提供更好的服務。我們一般會把多臺機器組成一個叢集對外提供服務。然而,我們的網站對外提供的訪問入口都是一個的,比如www.taobao.com。那麼當用戶在瀏覽器輸入www.taobao.com的時候如何將使用者的請求分發到叢集中不同的機器上呢,這就是負載均衡在做的事情。

2.知識剖析

什麼是ngnix

Nginx是一個http伺服器。是一個使用c語言開發的高效能的http 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。nginx能夠支撐5萬併發連結,並且cpu、記憶體等資源消耗卻非常低,執行非常穩定,中國大陸使用nginx網站使用者有:百度、京東、新浪、網易、騰訊、淘寶等。

NGINX可以用來做什麼

1、反向代理:反向代理(ReverseProxy)方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,簡單來說就是真實的伺服器不能直接被外部網路訪問,想要訪問必須通過代理。

2、動靜分離:運用Nginx的反向代理功能分發請求:所有動態資源的請求交給應用伺服器,而靜態資源的請求(例如圖片、視訊、CSS、JavaScript檔案等)則直接由Nginx返回到瀏覽器,這樣能大大減輕應用伺服器的壓力

3、負載均衡:負載均衡也是 Nginx常用的一個功能,當一臺伺服器的單位時間內的訪問量越大時,伺服器壓力就越大,大到超過自身承受能力時,伺服器就會崩潰。為了避免伺服器崩潰,讓使用者有更好的體驗,我們通過負載均衡的方式來分擔伺服器壓力。我們可以建立很多很多伺服器,組成一個伺服器叢集,當用戶訪問網站時,先訪問一箇中間伺服器,在讓這個中間伺服器在伺服器叢集中選擇一個壓力較小的伺服器,然後將該訪問請求引入該伺服器。如此以來,使用者的每次訪問,都會保證伺服器叢集中的每個伺服器壓力趨於平衡,分擔了伺服器壓力,避免了伺服器崩潰的情況。負載均衡配置一般都需要同時配置反向代理,通過反向代理跳轉到負載均衡。

3.常見問題

1.nginx負載均衡是如何實現的

2.nginx的upstream常見的幾種方式的分發策略

4.解決方案

回答一:nginx負載均衡要兩臺或以上的應用伺服器 , 並且在nginx.conf中寫入相關配置,主要是對proxy_pass,upstream的使用

回答二:常見的幾種負載均衡方式


1.輪詢(預設)——每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

2.weight ——指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。

3. ip_hash ——每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器。

4.backup——其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。

5.down——表示單前的server暫時不參與負載

6.fair(第三方)按後端伺服器的響應時間來分配請求,響應時間短的優先分配。與weight分配策略類似。

5.編碼實戰


6.擴充套件思考

nginx和tomcat的區別是什麼?

雖然Tomcat也可以認為是HTTP伺服器,內部集成了http伺服器的相關功能,但通常它仍然會和Nginx配合在一起使用。nginx常用做靜態內容服務和反向代理伺服器,以及頁面前端高併發伺服器。嚴格的來說,Nginx 應該叫做「HTTP Server」;而 Tomcat 則是一個「Application Server」,或者更準確的來說,是一個「Servlet/JSP」應用的容器(Ruby/Python 等其他語言開發的應用也無法直接執行在 Tomcat 上),這種特性導致了它們在使用中有明確的分工職責。tomcat更多用來做做一個應用容器,讓java web app跑在裡面的東西。大部分適用於靜態資原始檔的訪問(圖片,檔案)

7.參考文獻

參考一:https://ketao1989.github.io/2015/08/30/nginx-proxy-configure-and-sduty

8.更多討論