掌握高併發、高可用架構
第三章 分佈式
本章介紹分佈式架構的底層技術。主要說明面試過程中可能被問到的技術點。
第五節 NGINX
nginx
反向代理
1. 正向代理和反向代理的區別
正向代理,指在客戶端,代替客戶端收發請求,使得真實客戶端對服務器不可見。
反向代理,指在服務器端,代替服務器收發請求,使得真實服務器對客戶端不可見
2. nginx是什麼
nginx是一個高性能的HTT服務器、電子郵件(IMAP/POP3)代理服務器、非常高效的反向代理服務器
3. nginx的特性
- 異步、事件驅動、非阻塞
- 併發請求處理,通過epoll/select
- 文件IO
- 高度模塊化
4. 支持的併發數
每秒十萬級別
5. nginx的使用場景
- 靜態資源服務器,例如圖片、網站靜態資源(css、js等)
- 反向代理服務器,實現負載均衡
6. 支持的負載均衡策略(upstream)
-
輪詢(默認),每個請求按時間順序逐一分配到不同的後端服務器
-
權重(weight),指定服務器的權重,數值越大的訪問機率越多,用於服務器性能不均衡的情況
upstream domain { server 127.0.0.1:8080 weight=5; server 127.0.0.1:8040 weight=1; }
-
ip_hash,每個請求按照訪問IP的hash值進行分配,這樣每個客戶端IP就會固定訪問一臺服務器
upstream domain { ip_hash; server 127.0.0.1:8080; server 127.0.0.1:8040; }
-
fair(第三方提供),按照服務器的響應時間來分配請求,響應時間短的優先分配
- url_hash(第三方提供),按照每個請求的URL的hash值進行分配,每個URL固定訪問一臺服務器
upstream還支持以下的狀態值:
-
down,表示當前的server不參與負載
-
max_fails,允許請求失敗的次數
-
fail_timeout,max_fails後,暫停負載的時間
-
backup,備用,當其他非backup的server處於down或忙的時候,啓用該server
upstream domain { server 127.0.0.1:8080 down; server 127.0.0.1:8080 max_fails=3; server 127.0.0.1:8080 fail_timeout=10; server 127.0.0.1:8080 backup; }