A-A+

Squid中有关多线程大文件断点续传和流媒体的处理方法

2008年11月25日 编程开发 暂无评论 阅读 1 次

在使用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的节点上面.
 

给我留言

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录