《高併發下的Nginx性能優化實戰》CSDN學院 學習筆記

1.背景

nginx和apache都是Web服務器但是都是通過http協議提供各種網絡服務
nginx是輕量級的支持高併發,但是apache服務就不支持。
Rest架構 通過URL來設計系統結構。在REST中,所有的URL都對應着資源,只要URL的設計是良好的,那麼其呈現的系統結構也就是良好的。主要不同 之前訪問 http://ip:port/queryinfo?userid=1 rest 風格是 http://ip:port/queryinfo/1
低層是C編寫,支持IMAP、POP3、ICMP報文,是一個跨平臺服務

2.優勢

佔內存少,高併發能力強,簡單,開源不要錢,支持rewriter,內置健康檢查,節省帶寬,穩定性高,反向代理,很少宕機,BAT都使用。

3.nginx的應用場景

功能 應用場景
web服務器 輕量級 代理服務器
負載 均衡 IP負載 靜態負載
緩存 動靜分離
高併發 限流和健康監控
4.Nginx配置文件詳解
核心模塊:
1.Http模塊(代理,緩存,日誌定義和第三方模塊)
2.Events模塊(網絡連接)
3.全局模塊(全局指令,日誌路徑,PID路徑,用戶信息等)
基礎模塊
1.HTTP全局模塊
2.HTTP FastCGI模塊
3.HTTP Gzip 模塊
4.HTTPserver 模塊(虛擬主機,一個http,可以有多個server)
5.HTTP location 模塊 (請求路徑的路由 各種頁面的處理)
6.HTTP Rewrite 模塊
第三方模塊
1.HTTP UpStream Request Hash 模塊
2.Notice 模塊
3.Http Access key 模塊
下圖爲nginx.conf的文件 來源CSDN學院
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4.Nginx的代理模式:

在這裏插入圖片描述
正向代理:用戶訪問不了某網站,但是我能訪問一個代理服務器,這個代理服務器可以訪問我訪問不到的網站,於是我先連接上代理服務器,告訴他我需要那個我需要的網站的內容,代理服務器去取回來,然後返回給我。在網站的角度,只是代理服務器來取內容的時候有一次記錄,有時候並不知道是用戶的請求也隱藏了用戶的資料,這取決於代理告不告訴網站。一般情況下,如果沒有特別說明,代理技術默認是指正向代理技術。
反向代理:和正向代理正好相反,對於客戶端而言它就像是原始服務器,並且客戶端不需要進行任何特別設置。客戶端向反向代理的命名空間中的內容發送普通請求,接着反向代理將判斷向何處轉交請求,並將獲取的內容返回給客戶端,就像這些內容原本就是它自己的一樣。
透明代理:客戶端根本不知道有代理服務器的存在
正向代理的作用
1.訪問本來無法訪問的資源
2.可以做緩存,加速訪問資源
3.對客戶端訪問授權,上網進行認證
4.代理可以記錄用戶訪問記錄(上網行爲管理)對外隱藏用戶信息
反向代理的作用
1.保證內網安全,可以使用反向代理的WAF功能,阻止web攻擊
2.負載均衡,通過反向代理服務器來優化網站的負載

5.nginx集羣搭建

在配置nginx.conf文件中
HTTP中加入

  upstream   localhost{
          server 192.18.136.133:8081;//目標服務器的地址端口號
          server 192.18.136.134:8081;
          server 192.18.136.135:8081;
          
}

在server中

   location / {
    # root html;
    #index index.html  index.htm;
    proxy_pass  http://localhost;
}

6.Nginx負載均衡

輪訓法(默認):
將請求按順序輪流分配到後端服務器上,它均衡地對待後端的每一臺服務器,而不關心服務器實際的連接數和當前系統負載
upstream tomcat_server{
server ip:prot weight ;
}
加權輪訓法:
不同後端服務器可能機器的配資和當前系統的負載並不相同,因此它們的抗壓能力也不相同,給配置高,負載低的機器配置更高的權重,讓其處理更多的請求;配置低,負載高的機器給其分配較低的權重,降低其系統負載;加權輪詢能很好地將請求順序且按照權重分配到後端。weight的值越大分配到的訪問概率越高。
upstream tomcat server{
server ip:prot weight-1;
server ip:prot weight-2;
}

源地址哈希法:
根據獲取客戶端的IP地址,通過哈希函數計算得到一個數值。
用該數值對服務器列表的大小進行取模運算,得到的結果便是客戶端要訪問服務器的序號。
採用源地址哈希法進行負載均衡,同一IP地址的客戶端,當後端服務器列表不變時,它每次都會映射到同一臺後端服務器進行訪問。
可以保證來自同一IP的請求被打到固定的機器上,可以解決session問題

upstream tomcat_server{
ip_hash;
server IP:prot weight;
}
最小連接數法:
由於後端服務器的配置不盡相同,對於請求的處理有快有慢,最小連接數法根據後端服務器當前的連接情況,動態地選取其中當前積壓連接數最少的一臺服務器來處理當前請求,儘可能地提高後端服務的利用效率,將負責合理地分流到每一臺服務器。
upstream tomcat_server{
least_conn;
server IP:prot weight;
}

Fair
比weight,ip_hash更智能的負載均衡算法,
可以根據頁面大小 和加載時間長短智能地進行負載均衡,也就是根據後端服務器的響應時間來分配請求,響應時間的優先分配
Nginx本身不支持fair,如果需要這種調度算法,則必須安裝upStream_fair模塊
upstream tomcat_server{
fair;
server IP:prot weight;

}

url_hash
按照訪問的URL的哈希結果來分配請求,使每個URL定向到一臺後端服務器
可以進一步提高後端緩存服務器的效率
Nginx本身不支持url_hash,如果需要這種調度算法,則必須安裝Nginx的hash軟件包
upstream tomcat_server{
hash $request uri;
server ip:prot weight;

}

在這裏插入圖片描述

7.nginx配置日誌

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

8.動靜分離(將靜態頁面放到nginx中,這樣不會再次請求tomcat服務器,造成不必要的麻煩)

在這裏插入圖片描述

9.高併發架構分析

什麼是高併發?
通常是指,通過設計保證系統能夠同時並行處理很多請求,高併發相關常用的一些指標有響應時間,吞吐量,每秒查詢率QPS(Querry per Second)併發用戶數
如何提升系統的併發能力?
互聯網分佈式架構設計,提高系統併發能力的方式,主要有垂直擴展,水平擴展
垂直擴展:提升單機處理能力,方式有 增強單機硬件性能和提升單機架構性能
若預算不是問題 建議“增強單機硬件性能”提升系統併發能力,因爲該階段公司戰略往往是發展業務搶時間,此法最快。
但增強單機硬件性能和提升單機架構性能都有致命的不足:單機性能總是有極限的,所以互聯網分佈式架構設計高併發終極解決方案還是水平擴展。
水平擴展:只要增加服務器數量,就能線性擴充系統性能
互聯網分層架構中,各層次水平擴展的實踐又有所不同:
反向代理層可以通過“NDS”輪詢的方式來進行水平擴展
站點層可以通過nginx來進行水平擴展
服務層可以通過服務連接池來進行水平擴展
數據庫可以按照數據範圍,或者數據哈希的方式來進行水平擴展

10.高併發下Nginx配置限流

對客戶端的(即單一ip限流)

limit_conn_zone

//其中limit_conn one 10 既可以放在server層對整個server有效,也可以放在location中只對單獨的location有效
//該配置客戶端的併發連接數只能是10個
http{
limit_conn_zone $binary_remote_addr zone=one:10m;
server{

limit_conn one10;

}
}
壓力測試工具Ab工具
在這裏插入圖片描述
limit_req_zone

http{
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
server{
limit_req zone = req_one burst=120;
}
}

其中“limit_req zone = req_one burst = 120”既可以放在server層對整個server有效,也可以放在location中只對單獨的location有效。
rate=1r/s表示每個地址每秒只能請求一次,也就是說令牌桶burst=120一共有120塊令牌,並且每秒鐘只新增1塊令牌,120塊令牌發完後,多出來的請求就會返回503.
ngx_http_upstream_module
該模塊是提供了我們需要的後端限流功能的
該模塊有一個參數:max_conns可以對服務端進行限流,但在商業版本中才可使用
在nginx1.11.5版本以後,官方已經將該參數從商業版中脫離出來了,也就是說只要我們升級自己的nginx版本就ok了。
upstream xxx{
server 127.0.0.1:8080 max_conns=10;
server 127.0.0.1:8080 max_conns=10;
}
在這裏插入圖片描述

11.高併發下Nginx安全配置

在這裏插入圖片描述
注意在IP安全配置時location後的名字 / 寫重複會報底下的錯誤
在這裏插入圖片描述
不報錯寫法 直接寫到現有的location中
在這裏插入圖片描述

12.Nginx配置進程數,併發數,系統優化

在這裏插入圖片描述

13.高併發下nginx長鏈接

nginx長連接短鏈接,可以增強服務器的容災能力
http1.1之後,HTTP協議支持持久連接,也就是長連接,優點在於在一個TCP連接上可以傳多個HTTP請求響應,減少建立和關閉連接的消耗和延遲,如果我們使用了nginx去作爲反向代理或者負載均衡,從客戶端過來的長連接請求就會被轉換成短鏈接發送給服務器端,爲了支持長連接,我們需要在nginx服務器上做一些配置
要求:
使用nginx時,想要做到長連接,我們必須做到以下兩點:
從client到nginx是長連接
從nginx到server是長連接
對於客戶端而言,nginx扮演着sever的角色,反之之於server,nginx就是一個client
配置:
我們想要做到client與nginx之間保持長連接,需要:
client發送過來的請求攜帶keep-alive header (默認似乎都有)
nginx設置支持keep-alive
13.Nginx壓縮
gzip壓縮作用:將響應報文發送至客戶端之前可以啓用壓縮功能,這能夠有效節約帶寬,並提高響應至客戶端的速度,壓縮會消耗nginx的cpu性能
gzip壓縮可以配置http,server和location模塊下
在這裏插入圖片描述
在這裏插入圖片描述

14.高併發下Nginx狀態監控

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章