多线程大文件断点续传和流媒体的处理方法
2019獨角獸企業重金招聘Python工程師標準>>>
在使用Squid做反向代理的CDN節點時.多線程大文件斷點續傳和流媒體的處理是怎么樣啦.前些日子花了點時間研究了一下.
在Squid做反向代理時.其中有個range_offset_limit的參數,意思是預先讀取.還有一個maximum_object_size的參數控制能緩存的大小.
當了解上面二個參數的意思,我們來講講實際中會怎么樣.當maximum_object_size設置成100M,也就是最大能緩存的大小.另外range_offset_limit最大預先讀取我們也先讓他也為100M.當有個用戶,比如使用迅雷下載squid中一個100M的文件時.照理他是緩存這個100M,然后其它的用戶都是下載的緩存的.理想狀態就是這樣.
但是事實不是這樣處理的,這個和用戶和請求數有關,當用戶開啟了多線程,比如并發10個線程從這個節點下載.預先讀取的參數會同時10個并發來緩存,那這樣,每個10個進程,在第一次,一個100M的文件有可能下載到squid節點中100M*10(并發)=1000M,直到其中最快的一個并發都預先讀取完了所有的要下載的那個文件.才會給文件緩存起來.這樣之后的用戶才會從緩存中得到文件.但這樣下載的量非常大.很多沒有必要的.這樣也就是我們為什么就從Cacti中常常見到很奇怪的流量.
為了防備squid被多線程下載工具沖擊,讓squid用acl來禁止http header中帶range請求.客戶端的表現就是采用多線程下載的請求都會被squid拒絕,也就是多線程下載工具無法下載通過你的squid代理的站點上的東西了.
當然,也可以做業務拆分,讓單個squid來緩沖這些大文件,和有可能出現多并發的文件.然后給內容最好主動推到CDN的節點上面.
近來在研究大文件Cache方面,squid對大文件處理方面的優化.其中發現二個最重要的參數range_offset_limit和quick_abort*.其實從名字中就能看得出來,二個最主要的分別就是一個是對大文件的range(斷點續傳)和abort(中斷)的處理.
1. squid 中的 range_offset_limit
其實在前面幾次提到過這個參數,也會有很多問題,一定要注意就是這個設置的比你的maximum_object_size要小.不然下載完,又放棄.
另外這個參數也會有個問題,就是當十個線程過來,它會同一個文件請求10次,不過總的來講,這個參數少設置為好.
2.squid 中的 quick_abort
quick_abort_min (KB)
quick_abort_max (KB)
quick_abort_pct (percent)
控制squid是否繼續傳輸被用戶中斷的請求.當用戶中斷請求時,squid把檢測 quick_abort 的值.如果剩余部分小于“quick_abort_min”指定的值,squid 把繼續完成剩余部分的傳輸;如果剩余部分大于“quick_abort_max”指定的值,squid 把終止剩余部分的傳輸;如果已完成“quick_abort_pct”指定的百分比,squid把繼續完成剩余部分的傳輸.
比如我們對大量的大文件的cache系統可以這樣處理
quick_abort_min 16 MB
quick_abort_max 16 MB
quick_abort_pct 80
?
3.?squid 中的 collapsed_forwarding
多個回源流量變成一個回源,這個在大文件時,也比較有用,但是如果第一個用戶很慢的話,會嚴重影響速度.
?
range_offset_limit 0
quick_abort_min 4 MB
quick_abort_max 4 MB
quick_abort_pct 90
轉載于:https://my.oschina.net/yonghan/blog/630730
總結
以上是生活随笔為你收集整理的多线程大文件断点续传和流媒体的处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样使用Secure CRT查看vcen
- 下一篇: Axure RP一个专业的快速界面原型设