Java 程序員應掌握的 Nginx 實戰應用(一)

一、常用的 Web 服務器介紹

服務器介紹

Web 服務器分爲靜態服務器和動態服務器,靜態服務器就是處理靜態資源的,比如 HTML、CSS、JS,常用的靜態服務器有 Apache、Nginx;動態服務器就是處理動態請求的,比如 JSP,Servlet 等,常用的有 Tomcat、Weblogic。

Nginx 是一個高性能的 HTTP 服務器和反向代理服務器,能夠支持 5 萬個併發連接,內存、CPU 消耗非常低,是基於七層協議的服務。

反向代理介紹

我們平時說的代理指的是代理客戶端,這個是正向代理,反向代理指的是代理服務端。

我們作爲用戶想訪問一個服務資源 URL,如果我們的瀏覽器直接打不開這個 URL,一般會通過 VPN 或者其他代理服務器中轉,這種情況下的代理就是正向代理,也就是我們通常說的代理的意思。

而反向代理是指,作爲服務資源提供方,內部有很多服務器,這些服務器不能全部暴露給第三方用戶,因此需要在內部服務器的前面加一個代理服務器,用戶訪問的是代理服務的 IP,而不知道具體訪問的是服務端的哪臺機器,這種情況就是反向代理,指的是代理服務端。

二、Nginx 在分佈式架構中的作用

分佈式架構的演進

一個網站的初期,訪問的流量比較小,選用的架構可能就是用戶通過域名訪問,經過域名解析(DNS 服務器),拿到後端服務器的 IP 地址,直接訪問到這個 IP 所對應的 Tomcat 服務器,這是最簡單的一個網站架構。

隨着用戶流量的增大,一臺 Tomcat 服務器無法滿足用戶的請求,因此人們會想到 2 個辦法:

升級這臺服務器更換更強大的硬件,這就是垂直擴展; 增加新的服務器來分擔前端流量,這就是水平擴展。 垂直擴展的方式就是對一臺服務器不斷加強硬件,但是服務器的可擴展內存會有上限,總會達到瓶頸,而且成本比較高,因此人們一般會選擇水平擴展。一臺不夠再加一臺,不行再加一臺......

爲了應對流量的增加,不斷地增加後端服務器的數量,那麼服務器的 IP 會越來越多,通過 DNS 服務器管理這些服務器 IP 帶來了新的問題:

後端的某臺機器宕機後,DNS 服務器不知道該機器宕機,仍然解析到了這個 IP,如果用戶訪問到了這個宕機的 IP,那麼系統無法爲用戶提供服務; DNS 服務器配置新的 IP 後,它不會立即生效,那麼在它生效的這個時間段,新加的服務器不會爲用戶提供服務。 反向代理和負載均衡服務器可以很好地解決上面的問題。

用了反向代理服務器後,網站的架構就進一步演進,變成了用戶通過域名訪問,DNS 服務器返回反向代理服務器的 IP,反向代理服務器根據被代理服務器的 IP 配置和負載均衡的策略,轉發用戶的請求到不同的後端服務器,後端服務器返回響應結果到反向代理服務器,反向代理服務器返回結果給用戶。

反向代理服務器因爲只轉發用戶的請求而不做具體處理,因此它的性能比應用服務器強大。

隨着流量的繼續增大,單臺反向代理服務器成爲了瓶頸,我們就會對其做集羣,解決高性能的問題,對其做主備解決高可用的問題。

至此,一個網站的分佈式架構的演進過程介紹完了。

Nginx 在分佈式架構的作用 通過上面的架構演進介紹,我們知道分佈式架構中最重要的思路就是水平擴展,水平擴展最重要的一個環節就是反向代理和負載均衡。

Nginx 就是一個高性能的反向代理和負載均衡服務器,它可以支持 5 萬的併發訪問,同時它可以做動靜分離,可以解決跨域訪問和防盜鏈的問題。

文章永久鏈接地址:

https://github.com/java-aodeng/hope/tree/master/nginx/nginx1.md

相關文章