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