| Subcribe via RSS

IT流言终结者1:Varnish vs Squid

六月 10th, 2008 Posted in Squid, Varnish < by Johnny Woo >

UPDATE:
2008-06-11 加入了squid 2.7的测试

对于坊间流传的:
1.varnish的性能比squid高10~20倍
2.squid 3.0的性能比2.6有提高
本次测试将会揭示结果,
是否varnish的架构真的能提升那么多的性能
是否squid的新版本在性能上有所提升
测试中将不对平台.软件.等等进行优化
由于优化水平的关系将极大的影响结果.
此次测试中的数据可以作为基准数据.
可以由其中个别软件的优化与非优化结果比例系数
自行计算得出比较结果.所以个别软件的优化或者系统优化后对整体的影响
可以由读者自行对特定软件进行,并使用此基准数据进行推算.
WEB站点的页面
我将淘宝的首页获取到本地
作为测试对象
测试页面下载
index_files

平台:
PROXY:
CentOS 5.1 最小化安装
浪潮NF190
Xeon 2.8
1G RAM
73G SCSI
Squid 2.6,Squid 3.0,Varnish 1.1.2

WEB:
CentOS 5.1 最小化安装
浪潮NF180
Xeon 2.8
1G RAM
73G SCSI
Nginx 0.6.31

CLIENT:
CentOS 5.1 最小化安装
浪潮NF260
Xeon 2.4
512M RAM
36G SCSI
http_load-12mar2006

SWITCH:
DLINK DES 1024R+

1.Squid 2.6
编译参数

./configure --prefix=/usr/local/squid26

配置文件

visible_hostname test2.hiadmin.com
http_port 80 accel vhost vport
cache_peer 192.168.210.111 parent 80 0 no-query originserver name=test1
acl all src 0.0.0.0/0.0.0.0
http_access allow all
cache_log /var/log/squid26/cache.log

2.Squid 3.0
编译参数

./configure --prefix=/usr/local/squid30

配置文件

visible_hostname test2.hiadmin.com
http_port 80 accel vhost vport
cache_peer 192.168.210.111 parent 80 0 no-query originserver name=test1
acl all src 0.0.0.0/0.0.0.0
http_access allow all
cache_log /var/log/squid30/cache.log

3.Varnish 1.1.2
编译参数

./configure --prefix=/usr/local/varnish

配置文件

backend default {
        
set backend.host = "192.168.210.111";
        
set backend.port = "80";
}

运行参数

varnishd  -f /usr/local/varnish/default.vcl -a 0.0.0.0:80

4.Nginx 0.6.31
编译参数

./configure --prefix=/usr/local/nginx

配置文件

worker_processes  10;
events {
    
worker_connections  1024;
}
http {
    
include       mime.types;
    
default_type  application/octet-stream;
    
sendfile        on;
    
keepalive_timeout  65;
    
server {
        
listen       80;
        
server_name  localhost;
        
location / {
            
root   html;
            
index  index.html index.htm;
        
}
        
error_page   500 502 503 504  /50x.html;
        
location = /50x.html {
            
root   html;
        
}
    
}
}

5.http_load
运行参数

./http_load -parallel 1000 -seconds 10 urls.txt
urls.txt
http://192.168.210.222/index.html

6.squid 2.7
编译参数

./configure --prefix=/usr/local/squid27

配置文件

visible_hostname test2.hiadmin.com
http_port 80 accel vhost vport
cache_peer 192.168.210.111 parent 80 0 no-query originserver name=test1
acl all src 0.0.0.0/0.0.0.0
http_access allow all
cache_log /var/log/squid27/cache.log

测试结果

点图放大
图标中标注浅黄色的为客户端在抓取过程中只出现一次或几次的500
橙色的为出现500抓取错误的频率较多
红色的为几乎每次都会出现500抓取错误
值得注意的是squid 3.0
在500并发连接数时500出现的次数很多
但是在1000的时候反而抓取失败率下降了.

CPU和内存占用率

点图放大
varnish一直保持良好的CPU和内存使用率
但是到了1000并发数的时候
你会发现CPU使用率到了103%
没错.我并没有打错.在5次测试中,VARNISH的1000并发数测试其CPU占用率一直徘徊在101~103之间
可能是varnish的连接池写的不是特别好.当大于varnish处理量时,会使用更多的CPU资源去处理
squid 3.0似乎是个CPU和内存的占用大户
可能和版本比较新以及特性比较多有关(虽然这次什么特性都没用上)
squid 2.6保持了良好的姿态,稳定的CPU占用率和内存占用率.表明了为何市面上使用最多是它的原因.

更详细的内容可以下载此表格
varnish-vs-squid3

虽然varnish有着令人吃惊的CPU占用率(超过处理能力时也很令人吃惊)
但是其处理超大量的链接时内存和CPU使用率的暴涨并不令人满意
不过其表现出的在最大负荷时的fetchs/second
确实比squid 2.6要高出大约8%
实验表明.在需要更加稳定的生产环境中,varnish还不能替代老一代的squid 2.6
但是其对squid 3.0已经产生了很明显的挑战.
如果squid 3.0不能比他的上代产品提供更好的性能和稳定性的话
很有可能最佳反向代理的宝座会被varnish夺走
不论如何
这次测试的主题.varnish比squid有着10倍或者20倍的性能
被证实是不可能实现的.
虽然测试数据量充满100M带宽可能影响到测试的准确度.
但是更高的带宽所带来的同时连接数,很可能会撑爆varnish主机的CPU和内存.

结论
1.varnish在高负载下以CPU和内存为代价,比squid 2.6提高8%,但是绝非10倍~20倍.
2.squid 3.0的性能比2.6更低.而非更高.相反,3.0是最不稳定以及性能最差的.
3.squid 2.7的性能比2.6低,但是CPU和内存占用率控制的更好.

6 Responses to “IT流言终结者1:Varnish vs Squid”

  1. 阿福 Says:

    占座!
    强!
    细!
    简结明了!


  2. jake Says:

    VARNISH的1000并发数测试其CPU占用率一直徘徊在101~103之间..
    我测试了,没有这么高。。


  3. world77 Says:

    呵呵 好东西 ,学习了 这些天一直想做个用SQUID做的透明代理,一直无法成功,找了好多资料 ,好烦。我的配置是Ubuntu8.04,Squid2.6.18,我的配置文件比较简单,
    visible_hostname kkkkk
    acl lan src 192.168.1.2-192.168.1.254/32
    http_access allow lan
    acl wan src 123.456.789.000
    http_access allow wan
    我的而配置文件就这些,我在客户端搞好后,可以上网浏览,但是过段时间后,会无法上网,我要重启下squid,比较烦,接着我想做透明代理,网上好多都是squid2.5的 ,还说squid2.6的话只要一句话http_port 192.168.1.2:3128 transparent 这样就可以了,但是我试了下 ,不可以啊 ,找了好多资料,准备去官网看下,搜索的时候,看到大侠的文章,请教下,我的博客的地址写有我的关于透明代理的问题,如果大侠有空的话,请指点下 ,谢谢 我的qq:384343423 http://world77.blog.163.com/blog/static/571534112008555056327/edit/


  4. Johnny Woo Says:

    透明代理的话要看是哪种模式的.但是两种模式,都是需要你在编译的时候加上参数才行的.否则你会在日志里面看到dosn’t support transparent的报错.
    这边有一篇文章是讲解在ubuntu下面是用squid作为透明代理的
    http://www.ubuntugeek.com/how-to-setup-transparent-squid-proxy-server-in-ubuntu.html


  5. Johnny Woo Says:

    to jake:
    测试数据是会因为硬件条件或者网络条件等等出现不同结果的.
    103的CPU负载率我测试了好几遍,因为不太相信这么高的CPU负载率,但是我确实眼见到他从100慢慢降下来的这条轨迹.
    如果你也有测试数据,很希望能一起共享出来.


  6. sigma Says:

    建议换64位的系统再测试一下


Leave a Reply