標籤:linux 營運 面試題
一、Varnish、Nginx、Squid各自緩衝的優缺點
要做cache服務的話,我們肯定是要選擇專業的cache服務,優先選擇Squid和Varnish。
|
Varnish |
Nginx |
Squid |
| 優點 |
1. 高效能; 2. 多核支援; 3. 支援0-60秒的精確緩衝時間。 |
跨平台
非阻塞、高並發串連(得益於使用了最新的epoll模型)
事件驅動(通過非同步非阻塞的事件處理機制,Nginx實現由進程迴圈處理多個準備好的事件,從而實現高並發和輕量級)
Master/Worker結構
記憶體消耗小
內建健全狀態檢查功能
節省寬頻(支援Gzip壓縮)
穩定性高
|
提供緩衝加速、應用程式層過濾控制功能
完整的龐大的cache技術資料
很多的應用生產環境
|
| 缺點 |
1. 不具備自動容錯和恢複功能,重啟後資料丟失; 2. 線上擴容比較難。 3. 32位機器上快取檔案大小為最大2GB; 4. 不支援叢集。
|
1.不支援帶參數的動態連結 2.Nginx緩衝內部沒有緩衝到期和清理的任何機制,這些緩衝的檔案會永久性地儲存在機器上,如果要緩衝的東西非常多,那就會撐暴整個硬碟空間。 3.只能緩衝200狀態代碼,因此後端返回301/302/404等狀態代碼都不會緩衝,假如恰好有一個訪問量很大的偽靜態連結被刪除,那就會不停穿透導致後端承載不小壓力 4.Nginx不會自動選擇記憶體或硬碟作為儲存介質,一切由配置決定,當然在當前的作業系統裡都會有作業系統級的檔案快取機制,所以存在硬碟上也不需要過分擔心大並發讀取造成的io效能問題。 |
1.配置複雜 |
| 應用情境 |
並發要求不是很大的小型系統和應用 |
大量提供社交網路、新聞資訊、電子商務、虛擬機器主機等web服務的企業 |
工作於各大古老的cdn上 |
總結:緩衝加速(靜態加速、節省寬頻、邊緣推送):Varnish>Squid>Nginx
反向 Proxy(路有加速、隱藏主節點):Nginx>Varnish>Squid
二、CDN的內部業務
答:CDN根據使用者的地理位置、頻寬、網路流量將使用者請求到想到離使用者最近的CDN緩衝節點來響應使用者請求。從而達到解決Internet網路擁擠的狀況,提高使用者訪問網站的響應速度的目的。
三、查詢DNS的深層結構
1.在瀏覽器輸入www.qq.com訪問網域名稱時,作業系統會先檢查自己本地的hosts檔案是否有這個網址映射關係,如果有,就先調用這個IP地址映射,完成網域名稱解析。
2.如果hosts裡沒有這個網域名稱的映射,則尋找本地DNS解析器緩衝,是否有這個網址映射關係,如果有,直接返回,完成網域名稱解析。
3.如果hosts與本地DNS解析器緩衝都沒有相應的網址映射關係,首先會找TCP/ip參數中設定的首選DNS伺服器(本地DNS伺服器),此伺服器收到查詢時,如果要查詢的網域名稱,包含在本地配置地區資源中,則返回解析結果給客戶機,完成網域名稱解析,此解析具有權威性。
4.如果要查詢的網域名稱,不由本地DNS伺服器地區解析,但該伺服器已緩衝了此網址映射關係,則調用這個IP地址映射,完成網域名稱解析,此解析不具有權威性。
5.如果本地DNS伺服器本地地區檔案與緩衝解析都失效,則根據本地DNS伺服器的設定(是否設定轉寄站)進行查詢,如果未用轉寄模式,本地DNS就把請求發至13台根DNS,根DNS伺服器收到請求後會判斷這個網域名稱(.com)是誰來授權管理,並會返回一個負責該頂級網域名稱伺服器的一個IP。本地DNS伺服器收到IP資訊後,將會聯絡負責.com域的這台伺服器。這台負責.com域的伺服器收到請求後,如果自己無法解析,它就會找一個管理.com域的下一級DNS伺服器位址(qq.com)給本地DNS伺服器。當本地DNS伺服器收到這個地址後,就會找qq.com網域服務器,重複上面的動作,進行查詢,直至找到www.qq.com主機。
6.如果用的是轉寄模式,此DNS伺服器就會把請求轉寄至上一級DNS伺服器,由上一級伺服器進行解析,上一級伺服器如果不能解析,或找根DNS或把轉請求轉至上上級,以此迴圈。不管是本地DNS伺服器還是用轉寄,還是根提示,最後都是把結果返回給本地DNS伺服器,由此DNS伺服器再返回給客戶機。
註:從用戶端到本地DNS伺服器是屬於遞迴查詢,而DNS伺服器之間就是的互動查詢就是迭代查詢。
四、LVS的三種模式
關於群集的負載平衡調度技術,可以基於IP、連接埠、內容等進行分發,其中基於IP的負載調度是效率最高的。基於IP的負載平衡模式中,常見的有地址轉換、IP隧道和直接路由三種工作模式,
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M00/90/EB/wKiom1jzM_iQLjRGAADS_tfDcqo842.png-wh_500x0-wm_3-wmp_4-s_553566918.png" title="LVS.png" alt="wKiom1jzM_iQLjRGAADS_tfDcqo842.png-wh_50" />
1.地址轉換(Network Address Translation):簡稱NAT模式,類似於防火牆的私人網路結構,負載調度器作為所有伺服器節點的網關,即作為客戶機的訪問入口,也是各節點回應客戶機的訪問出口。伺服器節點使用私人IP地址,與負載調度器位於同一個物理網路,安全性要優於其他兩種方式。
2.IP隧道(IP Tunnel):簡稱TUN模式,採用開放式的網路結構,負載調度器僅作為客戶機的訪問入口,各節點通過各自的Internet串連直接回應客戶機,而不再經過負載調度器。伺服器節點分散在互連網中的不同位置,具有獨立的公網IP地址,通過專用IP隧道與負載調度器相互連信。
3.直接路由(Direct Routing):簡稱DR模式,採用半開放式的網路結構,與TUN模式的結構類似,但各節點並不是分散在各地,而是與調度器位於同一個物理網路。負載調度器與各節點伺服器通過本網串連,不需要建立專用的IP隧道。
總結:以上三種工作模式中,NAT方式只需要一個公網IP地址,從而成為最易用的的一種負載平衡模式,安全性也比較好,許多硬體負載平衡裝置就是採用這種方式;相比較而言,DR模式和TUN模式的負載能力更強大,適用範圍更廣,但節點的安全性要稍微差一些。
五、LVS、Nginx、Haproxy優缺點
|
Nginx |
LVS
|
Haproxy |
優
點 |
1、工作在網路的7層之上,可以針對http應用做一些分流的策略,比如針對網域名稱、目錄結構,它的正則規則比HAProxy更為強大和靈活,這也是它目前廣泛流行的主要原因之一,Nginx單憑這點可利用的場合就遠多於LVS了。 2、Nginx對網路穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢之一;相反LVS對網路穩定性依賴比較大,這點本人深有體會; 3、Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌列印出來。LVS的配置、測試就要花比較長的時間了,LVS對網路依賴比較大。 3、可以承擔高負載壓力且穩定,在硬體不差的情況下一般能支撐幾萬次的並發量,負載度比LVS相對小些。 4、Nginx可以通過連接埠檢測到伺服器內部的故障,比如根據伺服器處理網頁返回的狀態代碼、逾時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支援url來檢測。比如使用者正在上傳一個檔案,而處理該上傳的節點剛好在上傳過程中出現故障,Nginx會把上傳切到另一台伺服器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的檔案或者很重要的檔案的話,使用者可能會因此而不滿。 5、Nginx不僅僅是一款優秀的負載平衡器/反向 Proxy軟體,它同時也是功能強大的Web應用伺服器。LNMP也是近幾年非常流行的web架構,在高流量的環境中穩定性也很好。 6、Nginx現在作為Web反向加速緩衝越來越成熟了,速度比傳統的Squid伺服器更快,可以考慮用其作為反向 Proxy加速器。 7、Nginx可作為中層反向 Proxy使用,這一層面Nginx基本上無對手,唯一可以對比Nginx的就只有lighttpd了,不過lighttpd目前還沒有做到Nginx完全的功能,配置也不那麼清晰易讀,社區資料也遠遠沒Nginx活躍。 8、Nginx也可作為靜態網頁和圖片伺服器,這方面的效能也無對手。還有Nginx社區非常活躍,第三方模組也很多。 |
1、抗負載能力強、是工作在網路4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載平衡軟體裡的效能最強的,對記憶體和cpu資源消耗比較低。 2、配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以並不需要太多接觸,大大減少了人為出錯的幾率。 3、工作穩定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived。 4、無流量,LVS只分發請求,而流量並不從它本身出去,這點保證了均衡器IO的效能不會收到大流量的影響。 5、應用範圍比較廣,因為LVS工作在4層,所以它幾乎可以對所有應用做負載平衡,包括http、資料庫、線上聊天室等等。 |
1、HAProxy也是支援虛擬機器主機的。 2、HAProxy的優點能夠補充Nginx的一些缺點,比如支援Session的保持,Cookie的引導;同時支援通過擷取指定的url來檢測後端伺服器的狀態。 3、HAProxy跟LVS類似,本身就只是一款負載平衡軟體;單純從效率上來講HAProxy會比Nginx有更出色的負載平衡速度,在並發處理上也是優於Nginx的。 4、HAProxy支援TCP協議的負載平衡轉寄,可以對MySQL讀進行負載平衡,對後端的MySQL節點進行檢測和負載平衡,大家可以用LVS+Keepalived對MySQL主從做負載平衡。 5、HAProxy負載平衡策略非常多,HAProxy的負載平衡演算法現在具體有如下8種: ①roundrobin,表示簡單的輪詢,這個不多說,這個是負載平衡基本都具備的; ② static-rr,表示根據權重,建議關注; ③leastconn,表示最少串連者先處理,建議關注; ④ source,表示根據請求源IP,這個跟Nginx的IP_hash機制類似,我們用其作為解決session問題的一種方法,建議關注; ⑤ri,表示根據請求的URI; ⑥rl_param,表示根據請求的URl參數’balance url_param’ requires an URLparameter name; ⑦hdr(name),表示根據HTTP要求標頭來鎖定每一次HTTP請求; ⑧rdp-cookie(name),表示根據據cookie(name)來鎖定並雜湊每一次TCP請求。 |
缺
點 |
1、Nginx僅能支援http、https和Email協議,這樣就在適用範圍上面小些,這個是它的缺點。 2、對後端伺服器的健全狀態檢查,只支援通過連接埠來檢測,不支援通過url來檢測。不支援Session的直接保持,但能通過ip_hash來解決。 |
1、軟體本身不支援Regex處理,不能做動靜分離;而現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在。 2、如果是網站應用程式比較龐大的話,LVS/DR+Keepalived實施起來就比較複雜了,特別後面有WindowsServer的機器的話,如果實施及配置還有維護過程就比較複雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。 |
1.擴充性差
|
本文出自 “你好陽光” 部落格,請務必保留此出處http://hexiaoshuai.blog.51cto.com/12156333/1916464
Linux營運必會的面試題(一)