992
技術社區[雲棲]
proxy silbing 原理分析
proxy 提供多種代理模式
正向代理
為本地客戶端提供互聯網訪問,並緩存互聯網對象(圖片,HTML, CSS 等 "下簡稱對象"), 加速對互聯網訪問速度
反向代理
為本地網站提供緩存,減輕本地 web server 靜態對象(圖片, FLASH, HTML, CSS 等) 處理壓力
當前環境
(為了清晰拓撲結構,當前隻使用 proxy1, proxy2 作為代理服務器,參見下圖拓撲結構)
squid server ( proxy1, 10.1.1.111, proxy2, 10.1.1.112)
客戶端 (firefox, 10.1.1.25)
web server (www.163.com)
當前以正向代理為環境,(反向代理同理) 主要討論在使用 sibling (鄰居代理,姊妹代理,同級代理) 工作原理
silbing 原理
當前由大於等於 2 台 squid 服務器組成
每台 squid 能夠獨立緩存對象, 當某台(proxy2) squid 服務器在請求訪問某個對象時候
proxy2 會尋找自身緩存哈希表, 假如當前具備緩存對象,則馬上返回緩存對象信息至訪問客戶 (常見為非第一次訪問該對象)
假如 proxy2 自身無法從 hash 表中獲得對象信息, 則請求鄰居代理 proxy1 (常見為第一次訪問該對象)
假如 proxy1 具備當前緩存對象, 則 proxy1 返回對象信息至 proxy2, 再返回到客戶中
假如 proxy1 不具備當前緩存對象,則 proxy2 從宿主主機 (當前環境為
www.163.com ) 中獲得對象信息,並緩存至 hash 表中
目標.
建立 proxy1, proxy2 代理服務器, 啟用 icp 協議,允許 proxy1, proxy2 互相訪問對方緩存對象
參見 proxy1, proxy2, 啟動信息
參見上圖可見,proxy1 (ip 111) proxy2( ip 112 ) 都啟用 3128 緩存訪問端口, 3130 icp 請求端口, 默認最大緩存時間為 259200/60(秒) = 3 天 最大緩存時間
注: 3128 為客戶端 (25, firefox) 訪問 squid 服務器端口, 3130 為 squid 服務器之間互相請求對象緩存端口
討論1
重啟 proxy1, proxy2, 當前 squid 中不具備任何緩存
25 firefox 代理指向 proxy2( ip, 112) 並第一次訪問 163.com
檢驗 squid 代理日誌信息 (日誌量太大,過濾並隻提取某一個對象信息,如下圖)
proxy2 (access.log)
proxy1 (access.log)
參考上述 silbing 原理信息
當 proxy2 要獲得 31685638.jpg 時
proxy2 利用 icp_query 請求訪問 proxy1 服務器
因此, proxy1 服務器日誌中記錄了該對象查詢的信息
由於proxy1, proxy2 第一次訪問該對象,因此 proxy1 無法獲得該信息,並返回記錄至 proxy2
proxy1, proxy2 都具備 UDP_MISS/000 的日誌 (10.1.1.112, UDP/MISS/000 icp_query)
最終,31685638.jpg 由 proxy2 進行宿主訪問,參見 (TCP_MISS/200)
討論2
25 firefox 代理指向 proxy2( ip, 112) 並第二次訪問 163.com
參見下麵日誌信息
proxy2 access.log
proxy1 access.log
分析,
當前客戶(25, firefox) 請求 proxy2 獲得 31685638.jpg 信息
proxy2 因為之前已經在 hash 表中記錄 31685638.jpg 信息,並從內存中進行對象返回, 參見 (tcp_mem_hit/200)
討論3
當前 proxy2 已經具備緩存對象 (參見討論2)
假設當前有其他客戶,訪問 proxy1 並請求 獲得 31685638.jpg 信息
proxy1 先檢測 hash 表, 由於沒有緩存, proxy1 會請求 proxy2 31685638.jpg 信息
proxy2 在討論 2 中已經得到 31685638.jpg 緩存, 因此會回應並返回 31685638.jpg 至 proxy1
proxy1 access.log
proxy2 access.log
參見 proxy2 access.log 信息
10.1.1.111 UDP_HIT/000 ICP_QUERY 請求來之 proxy1 服務器
10.1.1.111 TCP_MEM_HIT/200 對象從 proxy2 服務器中內存獲得並返回至 proxy1
參見 proxy1 access.log 信息
10.1.1.25 TCP/MISS/200 信息成功返回,並把對象緩存至 proxy1 中
當再次在 (25 firefox) 訪問對象時, 參見 proxy1 access.log
確認對象直接來源於 proxy1 內存中
上述為 squid 服務器利用 silbing 架構, 在兩台 squid 間相互複製內存對象原理
最後更新:2017-04-03 14:54:20