面試題
Nginx負載均衡的算法怎么實現的?Nginx 有哪些負載均衡策略?Nginx為什么要做動靜分離?
面試官心理剖析
主要是看應聘人員對Nginx的基本原理是否熟悉,需要應聘人員能夠根據實際業務場景選擇合適的負載均衡(轉發)策略。其次,在網站建設上,了解 Nginx 的優劣勢,能夠找到彌補其不足的方法,使得企業的業務達到***訪問狀態。
問題剖析
1. Nginx負載均衡的算法怎么實現的?策略有哪些?
負載均衡是 Nginx常用的一個功能,當一台服務器在單位時間內的訪問量越大時,服務器壓力就越大,大到超過自身承受能力時,服務器就會崩潰。
為了避免服務器崩潰,大家會通過負載均衡的方式來分擔服務器壓力。將對台服務器組成一個集群,當用戶訪問時,先訪問到一個轉發服務器,再由轉發服務器將訪問分發到壓力更小的服務器。
Nginx負載均衡實現的策略有以下五種:
(1) 輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端某個服務器宕機,能自動剔除故障系統。
- upstream backserver {
- server 192.168.0.12;
- server 192.168.0.13;
- }
(2) 權重 weight
weight的值越大分配到的訪問概率越高,主要用於后端每台服務器性能不均衡的情況下。其次是為在主從的情況下設置不同的權值,達到合理有效的地利用主機資源。
- upstream backserver {
- server 192.168.0.12 weight=2;
- server 192.168.0.13 weight=8;
- }
權重越高,在被訪問的概率越大,如上例,分別是20%,80%。
(3) ip_hash( IP綁定)
每個請求按訪問IP的哈希結果分配,使來自同一個IP的訪客固定訪問一台后端服務器,並且可以有效解決動態網頁存在的session共享問題
- upstream backserver {
- ip_hash;
- server 192.168.0.12:88;
- server 192.168.0.13:80;
- }
(4) fair(第三方插件)
必須安裝upstream_fair模塊。
對比 weight、ip_hash更加智能的負載均衡算法,fair算法可以根據頁面大小和加載時間長短智能地進行負載均衡,響應時間短的優先分配。
- upstream backserver {
- server server1;
- server server2;
- fair;
- }
哪個服務器的響應速度快,就將請求分配到那個服務器上。
(5) url_hash(第三方插件)
必須安裝Nginx的hash軟件包
按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,可以進一步提高后端緩存服務器的效率。
- upstream backserver {
- server squid1:3128;
- server squid2:3128;
- hash $request_uri;
- hash_method crc32;
- }
2. 為什么要做動靜分離?
Nginx是當下最熱的Web容器,網站優化的重要點在於靜態化網站,網站靜態化的關鍵點則是是動靜分離,動靜分離是讓動態網站里的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以后,我們則根據靜態資源的特點將其做緩存操作。
讓靜態的資源只走靜態資源服務器,動態的走動態的服務器
Nginx的靜態處理能力很強,但是動態處理能力不足,因此,在企業中常用動靜分離技術。
- 對於靜態資源比如圖片,js,css等文件,我們則在反向代理服務器nginx中進行緩存。這樣瀏覽器在請求一個靜態資源時,代理服務器nginx就可以直接處理,無需將請求轉發給后端服務器tomcat。
- 若用戶請求的動態文件,比如servlet,jsp則轉發給Tomcat服務器處理,從而實現動靜分離。這也是反向代理服務器的一個重要的作用。