天天看點

【抗擊高并發】分布式系統架構 之 Nginx部署及應用

Nginx概念

Nginx是一款輕量級的Web伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,并在一個BSD-like 協定下發行。其特點是占有記憶體少,并發能力強,事實上Nginx的并發能力确實在同類型的網頁伺服器中表現較好,中國大陸使用Nginx網站使用者有:百度、京東、新浪、網易、騰訊、淘寶等。

輕量級:

  • 從代碼角度看:實作代碼時,代碼設計耦合性低;
  • 輕量化:spring-core核心包不到1M,Nginx不到4M;
  • 占用記憶體:占用記憶體特别少,可運作在小型機。

Nginx反向代理

Nginx反向代理技術:能夠實作路徑的自動切換,将用戶端請求的虛拟路徑轉發到服務端本地磁盤路徑,并相應相應内容。

【抗擊高并發】分布式系統架構 之 Nginx部署及應用

說明:

  1. 當使用者發出image.jt.com/2018/1.jpg時,首先将請求發往Nginx;
  2. 經過Nginx内部配置自動進行路徑的切換為E:jt-upload/2018/1.jpg并且通路切換後的路徑;
  3. 将傳回的結果再次傳回給浏覽器,這時浏覽器可以進行正常的展現。

Nginx部署、常用指令及多執行個體化

  • Nginx部署:解壓即可用,注意:
  1. 不要有中文路徑;
  2. 不要放到系統盤(windows下)。
  • 常用指令:在nginx的根目錄中,執行cmd指令到指令提示框;
  1. 啟動:start nginx
  2. 重新開機:nginx -s reload
  3. 停止:nginx -s stop

注意:若nginx伺服器未正常啟動,可通過reload進行檢查問題

【抗擊高并發】分布式系統架構 之 Nginx部署及應用
  • Nginx多執行個體:

當啟動Nginx時,一次啟動會有2個Nginx程序.一個是主程序,一個是守護程序。當主程序意外停止時,這時守護程序會自動的啟動一個主程序,保證服務正常啟動。是以在任務管理器中關閉Nginx時,先關閉守護程序之後再關閉主程序。注意,占用較小的為守護線程。

【抗擊高并發】分布式系統架構 之 Nginx部署及應用

Nginx配置

通過配置conf/nginx.conf檔案實作反向代理和負載均衡;

【抗擊高并發】分布式系統架構 之 Nginx部署及應用
Nginx反向代理實作
【抗擊高并發】分布式系統架構 之 Nginx部署及應用
【抗擊高并發】分布式系統架構 之 Nginx部署及應用

server:在server中配置反向代理伺服器參數

listen:監聽的端口号為80,為了讓nginx生效,原因是使用者請求的路徑一般都不加端口号,隻有80端口為可預設的;

server_name:用戶端浏覽器輸入的虛拟路徑;

location:表示攔截後的處理;

root:若通路的是一個檔案夾,則需要使用root字段;

proxy_pass:若通路的是個路徑,則需要使用proxy_pass字段;若轉發網絡路徑,轉發是需要協定的,在路徑前需要加上協定:http://

注意:若本機測試,需要修改hosts檔案,添加需要代理的虛拟路徑,推薦使用SwitchHosts;

【抗擊高并發】分布式系統架構 之 Nginx部署及應用

Nginx負載均衡實作

負載均衡的三種常見政策:

  • 輪詢(預設):依次通路每台伺服器,不常用,原因在于一般公司中考慮經濟因素,每台伺服器性能不一緻,有好有壞;
【抗擊高并發】分布式系統架構 之 Nginx部署及應用
  • 權重(推薦):添加weight屬性,屬性值越大,通路的幾率越大,但通路順序固定;
【抗擊高并發】分布式系統架構 之 Nginx部署及應用
  • ip-hash:根據使用者通路的ip位址進行hash計算,指定一台伺服器綁定,每次該使用者通路時,都通路綁定的伺服器;問題在于容易産生session黏着問題,有嚴重的安全問題,不常用;若配置了ip_hash,其餘均不生效;
【抗擊高并發】分布式系統架構 之 Nginx部署及應用

備用機機制:添加backup屬性,作用在于其他伺服器響應響應不過來的時候,可以分擔一部分壓力,當其餘伺服器響應壓力不大時,則不工作;

【抗擊高并發】分布式系統架構 之 Nginx部署及應用

上線部署:将需要上線的伺服器添加down屬性,重新開機nginx;上線部署完成後,删除down屬性,重新開機nginx即可;

【抗擊高并發】分布式系統架構 之 Nginx部署及應用

步驟:

  1. 先修改Nginx配置檔案,為上線的伺服器添加down屬性,讓需要上線的伺服器down掉;
  2. 應該将需要上線的服務停止;
  3. 之後将war包釋出;
  4. 啟動伺服器;
  5. 将伺服器還原回Nginx中:删掉down屬性,nginx –s reload重新開機Nginx伺服器。

繼續閱讀