Chinaunix首页 | 论坛 | 博客
  • 博客访问: 544899
  • 博文数量: 114
  • 博客积分: 5611
  • 博客等级: 大校
  • 技术积分: 1027
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-19 08:55
文章分类

全部博文(114)

文章存档

2011年(29)

2010年(20)

2009年(1)

2008年(11)

2007年(53)

分类: LINUX

2007-12-25 11:03:50

调整了range_offset_limit参数之后,会对squid的行为有什么影响呢?

在squid.conf.default里面,range_offset_limit参数下面的注释是这样的:
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.

This is to stop a far ahead range request (lets say start at 17MB)from making Squid fetch the whole object up to that point before sending anything to the client.

A value of -1 causes Squid to always fetch the object from the beginning so it may cache the result. (2.0 style)

A value of 0 causes Squid to never fetch more than the client requested. (default)
基本上看懂了是不?不就是控制多线程下载的http请求目标是否会进入squid的cache嘛。上次不是为了用squid缓冲windows update ,折腾了半天,在以为搞明白了range_offset_limit的意义之后,我将手头上的squid服务器的range_offset_limit调整为20480 KB。可是这样的调整,是会带来很大的麻烦的......

请同学们仔细看看下面的这张图
range_offset_limit
请注意右上角那块我用红圈圈出来的区域----这就是我把squid的range_offset_limit调整成20480 KB之后的squid的流量示意:图中蓝线画出来的是用户的http访问请求从squid服务器读取的流量;绿色区域表示的是squid服务器为了满足用户的http访问而读取的外部网站所使用的流量。

看出门道了吧?在range_offset_limit参数调整了之后,squid服务器使用了大大超过用户正常访问需求的流量,这个不正常的流量甚至会影响到正常的用户http访问。原因在哪里?请同学们再仔细看squid.conf.default里面有关于range_offset_limit的这段注释的第一句话:

Sets a upper limit on how far into the the file a Range request may be to cause Squid to prefetch the whole file.

两个关键点:

  • prefetch是预取,预先读取的意思。
    那么,对于这块红色区域的流量我们就很容易解释了:squid在预先读取某部分用户的http请求的内容,于是squid服务器使用的流量就超过了给用户的流量。
  • 在什么样的情况下,squid会预先读取用户请求的内容呢?在用户请求多线程下载的文件的http请求的range大小在range_offset_limit的设定值之内,squid都将预先读取这个用户请求的文件。

那么,当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,让它比较合理的满足我们用squid来缓冲windows update的补丁呢?请听下文分解

阅读(1603) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~