免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7268 | 回复: 7
打印 上一主题 下一主题

[proxy] [原创]用squid来缓冲windows update [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-19 00:31 |只看该作者 |倒序浏览
有这个需求的同学们蛮看看吧。

默认的,squid是不能缓冲microsoft的windows升级补丁,两个原因,都是在microsoft的补丁升级客户端上

  • 为了保证在恶劣的网络环境下都能进行正常的补丁更新,microsoft的补丁升级采用了bits传输,是多线程下载、可断点传输的
  • 为了防止用户接收到的补丁文件没有被恶意更改,microsoft的补丁升级程序默认会对服务器使用no-cache或者reload的请求


知道原因了就很好解决问题

  • 针对多线程下载,我们可以设置squid的range_offset_limit参数
  • 针对客户端的请求中带有no-cache或者reload,我们可以设置相关的refresh_pattern


举例如下:
  1. refresh_pattern -i windowsupdate.com/.*\.(cab|exe) 4320 100% 43200 reload-into-ims
  2. refresh_pattern -i download.microsoft.com/.*\.(cab|exe) 4320 100% 43200 reload-into-ims
  3. refresh_pattern -i au.download.windowsupdate.com/.*\.(cab|exe) 4320 100% 43200 reload-into-ims
  4. range_offset_limit -1 KB
复制代码


嗯,到此为止,我们就实现了用squid来缓存windows update的需求了。可是这样的设置,是不能投入实际的生产环境的,为什么呢?请同学们先思考一下,答案下回揭晓

论坛徽章:
0
2 [报告]
发表于 2007-09-19 00:32 |只看该作者

继续

问题出在对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都将预先读取这个用户请求的文件。


还是不明白?那好,给张图让同学们看看



请注意右上角那块我用红圈圈出来的区域----这就是我把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,看起来还真是麻烦。

[ 本帖最后由 coolzsb 于 2007-9-20 22:42 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-09-19 00:33 |只看该作者

预占楼层

预占楼层

论坛徽章:
0
4 [报告]
发表于 2007-09-19 10:26 |只看该作者
企业的话,干脆搞个wus或sms算了,管理灵活、方便

论坛徽章:
0
5 [报告]
发表于 2007-09-20 22:36 |只看该作者
原帖由 suek 于 2007-9-19 10:26 发表
企业的话,干脆搞个wus或sms算了,管理灵活、方便


嗯,这当然是最好的解决方案了,可是有些兄弟是无法使用wus或者sms来管理客户机的......

论坛徽章:
0
6 [报告]
发表于 2007-09-24 21:10 |只看该作者
我记得windows update貌似已经是p2p的了

论坛徽章:
0
7 [报告]
发表于 2007-09-26 13:59 |只看该作者
据我所知,我的squid是可以缓存windows update的大多数补丁
"为了防止用户接收到的补丁文件没有被恶意更改"这个是通过checksum来校验的吧?

论坛徽章:
0
8 [报告]
发表于 2008-05-05 16:24 |只看该作者
谢谢楼主了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP