歡迎您光臨本站 註冊首頁

用squid來緩衝windows update

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

用squid來緩衝windows update

  有這個需求的同學們蠻看看吧。
 
 默認的,squid是不能緩衝microsoft的windows升級補丁,兩個原因,都是在microsoft的補丁升級客戶端上
 
 [*]為了保證在惡劣的網路環境下都能進行正常的補丁更新,microsoft的補丁升級採用了bits傳輸,是多線程下載、可斷點傳輸的[*]為了防止用戶接收到的補丁文件沒有被惡意更改,microsoft的補丁升級程序默認會對伺服器使用no-cache或者reload的請求
 
 知道原因了就很好解決問題
 
 [*]針對多線程下載,我們可以設置squid的range_offset_limit參數[*]針對客戶端的請求中帶有no-cache或者reload,我們可以設置相關的refresh_pattern
 
 舉例如下:
 refresh_pattern -i windowsupdate.com/.*\.(cab|exe) 4320 100% 43200 reload-into-ims
 refresh_pattern -i download.microsoft.com/.*\.(cab|exe) 4320 100% 43200 reload-into-ims
 refresh_pattern -i au.download.windowsupdate.com/.*\.(cab|exe) 4320 100% 43200 reload-into-ims
 range_offset_limit -1 KB
 
 嗯,到此為止,我們就實現了用squid來緩存windows update的需求了。可是這樣的設置,是不能投入實際的生產環境的,為什麼呢?請同學們先思考一下,答案下回揭曉


  問題出在對range_offset_limit這個參數的調整。range_offset_limit對squid行為的影響,在squid.conf裡面的官方註釋如下:
 
 Sets a upper limit on how far into the the file a Range request may be to cause Squid to prefetch the whole file. If beyond this limit Squid forwards the Range request as it is and the result is NOT cached.
 
 啥意思呢?
 
 兩個關鍵點:
 
 
 [*]prefetch是預取,預先讀取的意思。
 [*]在什麼樣的情況下,squid會預先讀取用戶請求的內容呢?在用戶請求多線程下載的文件的http請求的range大小在range_offset_limit的設定值之內,squid都將預先讀取這個用戶請求的文件。
 
 
 還是不明白?那好,給張圖讓同學們看看
 
 http://blog.akaka.com.cn/wp-content/uploads/2007/09/range_offset_limit.jpg
 
 請注意右上角那塊我用紅圈圈出來的區域----這就是我把squid的range_offset_limit調整成 -1 KB之後的squid的流量示意:圖中藍線畫出來的是用戶的http訪問請求從squid伺服器讀取的流量;綠色區域表示的是squid伺服器為了滿足用戶的http訪問而讀取的外部網站所使用的流量。
 這下看出問題了吧?在range_offset_limit參數調整了之後,squid伺服器有可能使用了大大超過用戶正常訪問需求的流量----本該為我們節省流量的squid反而開始幫我們浪費帶寬了,這個浪費甚至在極端情況下影響到正常的用戶http訪問。
 
 而且,當squid預先讀取的文件大小超過squid的maximum_object_size參數設置的時候會發生什麼樣的事情呢?squid會把這個文件放到它的cache里嗎?不會的,squid是很講規矩的,它會把這個花了不少精力載下來的東西很瀟灑的就扔掉了。然後,再有客戶用多線程工具請求同一個文件時,它又會再把這個無用功再繼續堅持下去......
 
 暈,squid同志這樣搞真的是很浪費帶寬的說。同學們一定這麼想,那我們得根據我們squid的maximum_object_size大小來設置一個合理的range_offset_limit參數,要不然看著squid這樣干傻事,真是讓人心痛。可是這個range_offset_limit大小要怎麼設置?設成maximum_object_size的1/10?這樣就可以讓squid預先抓取的文件肯定在maximum_object_size範圍內,保證預抓取的東西都能放到cache里了??是的,如果你的用戶使用的多線程下載工具最多就是開到10線程的話,一切如你所想;可是萬一有人開了個11線程的下載呢......
 
 沒事,這樣的人畢竟是少數,我們按正常用戶的行為特徵來考慮。是的,這也沒有錯,可是我們調整range_offset_limit這個參數的初衷在哪裡?別人怎麼考慮的我不清楚,我自己就是想用squid來緩衝windows的那些補丁文件,windows最大的補丁文件有多大?我不知道,我只知道一個windows xp sp2就有要300M,難道要我把squid的maximum_object_size開到300M??這麼做的話,我一定是瘋了,只怕squid的cache裡面到時就充滿了大堆大堆的電影之類的東西了。
 
 所以,看來要用squid來緩衝microsoft的patch,看起來還真是麻煩。



[火星人 ] 用squid來緩衝windows update已經有349次圍觀

http://coctec.com/docs/service/show-post-30737.html