- 论坛徽章:
- 1
|
本帖最后由 iakuf 于 2012-04-20 10:40 编辑
目前主流 CDN 公司来讲,都是基于 Squid 来做的开二开发,和开发模型.从功能上来讲 Squid 原生是为 Cache 设计,做了这么多年的开发,是最强大的.
比如,他能给通过 collapsed_forwarding 的参数合并多个回源变成一个,能通过quick_abort_min,range_offset_limit 之类的参数来控制片段的下载.可以通过 url_rewrite ,storeurl_rewrite 来控制不同的地方进行重写.能通过 COSS 提高小文件的读写. Nginx 基本是不会照顾你源站设置的是什么 HTTP 的 Cache 的头,一并强行 Cache.要知道想给 Cache 玩出花,会让整个 Cache 的应用在整个网站的前端应用中无处不在.
目前主流使用的 Squid 2.7 会是最多,基本上 90% 以上的商业 CDN 公司,象国内的 CDN 基本都在用象蓝汛,网宿,帝联. 3.0 由于使用了 C++ 重写后,性能上和 Squid 2.6 和 2.7 还是有些距离的.使用的人并不是很多,性能什么的还有必要在等等看.
很多人可能会讲, Squid 因为是单核,所以性能不好,要知道整个 Cache 的应用中,都是文件类型的,大多的问题都在 IO 上,象我普通的 Cache 视频跑个 1G 是很容易的对 Squid 完全无多少压力.这时 CPU 占用才 60% .象小文件,由于普通硬盘每秒的有效 IOPS 不会高过 50 次. 所以这时也是性能卡在硬盘上面.基本跑个 300M 硬盘都不行了.所以这时不要太在意单核的 CPU 使用. aufs 本身是线程读写所以可以用到多核.象小文件使用 COSS 来读写是非常有效的对于小文件的优化.因为可以一读写取一个块出来,只要块命中比较高就可以了.只是原生的 COSS 启动慢(因为重建文件索引).对块设备支持也不好,也容易锁.所以现在的公司都会选择优化和修复这个.
以下是一个我很久前的对比.不知到现在还可不可行.
squid2.5:太老,不支持epoll,内存管理不完善,常常会引起重起.
squid2.6-2.7:建议使用,性能不错,2.7很建议使用一下.因为基本上有3.0的所有特性,还有2.6的性能和稳定.另外2.6只支持部分http1.1,2.7也有很大的改进.
squid3.0:不建议.因为使用c++全部重写了.不用想现在性能上远不如2.6和2.7.
Varnish:这个基本大家都知道.但我从没用过,我查过资料,有以下几个奇怪的问题.我认为在实用中影响很大.
(1. 它只能响应存在本地的请求.必须在buffer中.这样对miss时极大的影响性能.
(2. 在大量小文件时,mmaped file内存分配有问题.
(3. varnish对CLOSE_WAIT处理上面好象有问题,会比squid多很多..
(4. varnish没有象squid一样的处理不正常cache的机制,squid有stale-if-error 和stale-while-revalidate二个方法.
另外,还得讲一点,根据我在这几家公司的经验,包括土豆,很少有公司能给所有图片存到内存中就行了,无论多小的一家公司图片基本都是上 500G 以上了.所以 Varnish 并不是非常合适这种大点的互联网公司.如果是用到 Varnish 的硬盘 Cache 功能 ,我会选择更加成熟的 Squid.
基本上,对 HTTP 协议支持最好的就是 Squid. Nginx 可以讲基本上所有的 HTTP 有关的 Cache 协议根本不支持. |
评分
-
查看全部评分
|