对于坊间流传的:
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和内存占用率控制的更好.

======================================================

Squid 2.6 2.7 3.0 3.1 以及 varnish 2.1.5 性能对比测试

http://www.cnblogs.com/littlehb/archive/2012/02/21/2360787.html

说明:

使用压力测试软件siege,http_load对这几个代理软件进行测试,测试了不同大小的文件和各种并发数。

squid的版本选择,考虑到实际使用的一些需求,并参考了其他的一些文章(

比如:http://www.php-oa.com/2009/12/02/cache%e8%bd%af%e4%bb%b6%e7%89%88%e6%9c%ac%e9%80%89%e6%8b%a9.html

),没有选择比较老的squid 2.5。

每次测试前清除文件缓存并重启代理软件。

这个测试仅作为数据参考,并不能完全模拟生产环境那么复杂的网络请求(请求数,各种大小的文件请求)。

一、测试环境:

硬件:Intel Xeon E5410 @ 2.33GHz * 2,16G内存,SATA 500G * 4(RAID 10)

安装squid 2.7

./configure -prefix=/opt/squid2.7 -enable-xmalloc-statistics --enable-async-io=320 --with-maxfd=65536 -enable-useragent-log -enable-referer-log -enable-epoll -disable-poll -enable-large-cache-files -disable-internal-dns -enable-linux-netfilter -enable-truncate -enable-x-accelerator-vary -enable-follow-x-forwarded-for -with-large-files -with-pthreads -enable-storeio="aufs,coss,diskd,ufs" -enable-kill-parent-hack -enable-gnuregex -enable-cache-digests -enable-delay-pools -enable-stacktraces -enable-default-err-language=Simplify_Chinese -enable-err-languages="Simplify_Chinese English" --enable-auth="basic" --enable-basic-auth-helpers="NCSA" --enable-snmp

注意:

1、不要使用-enable-dlmalloc这个编译参数,否则运行一段时间会报错 FATAL: xcalloc: Unable to allocate 1 blocks of 4112 bytes!

参考:

http://www.mail-archive.com/squid-users@squid-cache.org/msg48804.html

http://www.mail-archive.com/squid-users@squid-cache.org/msg40839.html

大致意思是dlmalloc是squid在某些系统本身malloc太烂的情况的代替方案,dlmalloc已经很老,且不支持2G以上内存(比较有意思的是之前使用的squid 3.0也用了这个参数,却正常运行,内存使用有配置超过10G的,可能3.0有特殊处理兼容了这种编译配置)。

Squid 3的编译参数:

www:/srv# /opt/squid3/sbin/squid -v

Squid Cache: Version 3.0.STABLE25

configure options: '--prefix=/opt/squid3' '--enable-dlmalloc' '--enable-gnuregex' '--enable-async-io=160' '--enable-removal-policies=heap,lru' '--enable-delay-pools' '--enable-storeio=ufs,aufs,null' '--disable-wccp' '--enable-kill-parent-hack' '--disable-select' '--enable-auth=basic' '--with-aio' '--disable-ident-lookup' '--with-filedescriptors=65536' '--enable-err-languages=Simplify_Chinese' '--enable-default-err-languages=Simplify_Chinese'

3.1的编译参数基本和3.0一样。

squid几个版本使用的基本是一样的squid.conf,性能相关的几个配置如下:

cache_mem 4000 MB

maximum_object_size_in_memory 512 KB

#cache_dir

cache_dir aufs /srv/squid_cache 20480 16 256

maximum_object_size 4096 KB

Varnish:

tar zxf varnish-2.1.5.tar.gz

cd varnish-2.1.5

./configure --prefix=/opt/varnish

运行参数:

/opt/varnish/sbin/varnishd -u www -g www -f /opt/varnish/etc/varnish/aipai.vcl -a 0.0.0.0:8080 -s file,/srv/varnish_cache/cache/varnish_cache.data,1G -w 1024,51200,10 -t 3600 -T 0.0.0.0:30000

二、测试结果:

每次测试60s

测试命令:siege -b -c 100 -t 60s URL

表中记录的数据是:Transaction rate,单位:请求/s

典型测试结果:

da01:~/siege-2.69# siege -b -c 500 -t 60s http://www.aipai.com:8080/about/map.html

** SIEGE 2.69

** Preparing 500 concurrent users for battle.

The server is now under siege...

Lifting the server siege...      done.

Transactions:                 653211 hits

Availability:                 100.00 %

Elapsed time:                  59.35 secs

Data transferred:            1238.43 MB

Response time:                  0.05 secs               //平均相应时间

Transaction rate:           11006.08 trans/sec   //平均每秒处理速度,请求/s

Throughput:                    20.87 MB/sec          //网络吞吐量

Concurrency:                  498.86                         //最高并发数

Successful transactions:      653212                         //成功处理数

Failed transactions:               0                         //失败处理数

Longest transaction:            3.01                         //最长的请求处理时间

Shortest transaction:           0.00

对于测试结果详细的说明,有兴趣的朋友请查阅siege的文档,比较关键的几个数据上面已经标注了。

测试1:

目标URL:http://www.aipai.com:8080/about/map.html,测试小文件请求,文件大小:6221 byte

并发 10

并发 100

并发 500

并发 1000

squid 2.6 STABLE23

8207

11211

11016

10451

squid 2.7 STABLE9

8261

11409

11006

10002

squid 3.0 STABLE25

8524

9762

8138

8768

squid 3.1.11

6421

6832

5990

5834

varnish 2.1.5

10875

10251

11459

11412

PS:siege使用超过1000个并发会报错。

测试2:

目标URL:http://www.aipai.com:8080/c7/Pjg_KScqImgnaiYs.html,测试我们网站典型的播放页请求,文件大小:75356 byte

并发 10

并发 100

并发 500

并发 1000

squid 2.6 STABLE23

4554

6382

6625

6696(4 failed )

squid 2.7 STABLE9

4164

6234

6565

6588

squid 3.0 STABLE25

4366

5315

5190

5153

squid 3.1.11

3697

4217

4357

4075

varnish 2.1.5

6618

6781

6775

5714

测试1,测试2总结:

测试1,测试2都是对一个URL进行强压,主要测试MEM_HIT时候软件的处理能力。

1、squid 2.6在squid组中基本是最快的,在测试2并发1000的时候开始不太稳定,有4个Connection timed out。

2、squid 2.7的成绩和2.6在一个水平线,略逊一点。

3、squid 从3.0开始用c++全部重写,目前看来与2.7/2.6性能差距还很明显,3.1从性能上来看比3.0还差(squid哥,不能为了功能损失太多的性能啊)。

4、varnish在大多数测试上处于领先,有些项目差一些(varnish的测试结果不是很稳定,有一些摆幅)。varnish性能比squid强一些,不过远没有达到某些文章宣称的是squid的10倍。

测试3:

进一步模拟生产环境,从实际运行的squid access log中截取了5万个url来测试。

每次测试延长到2分钟。

并发 10

并发 100

并发 500

并发 1000

squid 2.6 STABLE23

2839

5485

6722

6604

squid 2.7 STABLE9

2981

5215

6789

6742

squid 3.0 STABLE25

2863

4294

4345

3859

squid 3.1.11

2682

3763

3402

3262

varnish 2.1.5

NA

NA

NA

NA

4934

注:varnish的测试有一点问题,siege会很快报出结果(并没有到设定的2分钟),查看varnish的log还在不断的有请求进来,这个测试中siege的结果不能使用。

报错:

** SIEGE 2.69

** Preparing 100 concurrent users for battle.

The server is now under siege...    done.

siege aborted due to excessive socket failure; you

can change the failure threshold in $HOME/.siegerc

Transactions:                 181336 hits

Availability:                  99.43 %

测试3总结:

1、由于varnish的成绩有问题,这里就只是squid各版本的比拼了。这个测试比之前的测试1,2更有意义一点,因为能更真实的模拟生产环境(url列表就是从生产环境中截取了一段)。

2、在这个测试中squid 2.7表现的很出色,有3个环节的分数都比之前测试1,测试2中表现更好的squid 2.6高。

3、再验证测试的时候发现,这组测试结果变化较大。拿并发100时squid 2.7的数据来说,结果从3800到5600都有。分析原因可能是因为这里访问的是生产环境URL列表,需要去后端拿各种页面,有不少页面还需要请求数据库(后端和数据库这个时候都还在跑生产环境,并不是空闲的,当跑测试的时候数据库load明显升高),后端和数据库的繁忙程度会导致测试结果有一定偏差。

4、有偏差也能看出一个大致趋势,和测试1,2的结论其实差不多:2.6/2.7的性能接近,3.0差一些,3.1最差。

增加的http_load测试:

“测试3”对3万个url列表进行测试时,varnish的结果无效,考虑使用另外的压力测试工具来对比一下squid和varnish。

这里使用http_load对“测试3”使用的url list进行测试(http_load 支持url 列表)。

并发 10

并发 100

并发 500

并发 1000

squid 2.6 STABLE23

4113(264 bad)

5612(415 bad)

5922(370 bad)

5768(354 bad)

squid 2.7 STABLE9

4253(277 bad)

5723(384 bad)

5600(341 bad)

5768(399 bad)

squid 3.0 STABLE25

4121(259 bad)

4786(350 bad)

3958(255 bad)

3868(228 bad)

squid 3.1.11

3405(206 bad)

3817(247 bad)

3384(183 bad)

3310(230 bad)

varnish 2.1.5

4985

6519(34 bad )

6268(1191 bad)

6410(1065 bad)

测试结果抽选:

574373 fetches, 100 max parallel, 8.57065e+09 bytes, in 120 seconds

14921.7 mean bytes/connection

4786.44 fetches/sec, 7.14221e+07 bytes/sec

msecs/connect: 0.398121 mean, 3.682 max, 0.039 min

msecs/first-response: 9.73295 mean, 4198.23 max, 4.263 min

350 bad byte counts

HTTP response codes:

code 200 -- 542073

code 302 -- 26308

code 404 -- 5992

注:

1、varnish随着并发数的增多,有越来越多的 byte count wrong。

http_load测试总结:

1、从性能上来看,基本来之前的测试结论差不多:varnish > squid 2.6 > squid 2.7 > squid 3.0 > squid 3.1

2、squid 2.6,2.7成绩很接近。

3、需要留意的是随着并发数的增加,varnish出现的 bad byte counts比squid更多。

三、测试总结:

1、性能:varnish > squid 2.6 > squid 2.7 > squid 3.0 > squid 3.1

2、squid 2.6和squid 2.7的成绩相差不大,大多数情况是2.6高一些,少数情况2.7高一些。

3、squid 3.0,squid 3.1用c++重写之后目前性能上还比较尴尬。

5、varnish的性能比squid好,不过远没有达到一些文章宣称的10倍,对varnish选择保持关注。原来使用的是squid,可以沿用不少的squid.conf配置,暂时先不换软件了,因为更换之后的配置熟悉以及正式上线的运行不确定性可能会有比较高的成本。

4、最后选用squid 2.7。它有着和2.6相近的性能,更好的支持http 1.1,也有3.0支持的不少特性。

Varnish 和 Squid比较到底强多少相关推荐

  1. 谈谈varnish、squid、apache、nginx缓存的对比

    1.Squid,很古老的反向代理软件,拥有传统代理.身份验证.流量管理等高级功能,但是配置太复杂.它算是目前互联网应用得最多的反向缓存代理服务器,工作于各大古老的cdn上. 2.Varnish是新兴的 ...

  2. 专访阿里巴巴量子实验室:最强量子电路模拟器“太章”到底强在哪?

    摘要: 刷爆朋友圈的最强量子电路模拟器到底强在哪呢?云栖社区采访了阿里巴巴量子实验室团队的施尧耘博士和陈建鑫博士来位大家一一解读. 本月早些时候,阿里巴巴量子实验室成功研制当前世界最强的量子电路模拟器 ...

  3. varnish与squid比较

    1.Varnish概述及工作流程 1.1 Varnish概述 Varnish是高性能开源的反向代理服务器和HTTP缓存服务器 Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存 Sq ...

  4. 使用Varnish代替Squid做网站缓存加速器的详细解决方案

    我曾经写过一篇文章──<初步试用Squid的替代产品──Varnish Cache网站加速器>,但当时仅仅是用着玩,没做深入研究. 今天写的这篇关于Varnish的文章,已经是一篇可以完全 ...

  5. varnish与squid的比较

    生产环境中尝试使用varnish替代squid的主要原因: 1. squid不支持多核cpu, 生产环境中大多使用Dell R610系列,这种类型机器配置为2个4核双线程cpu, 操作系统识别为16个 ...

  6. 专访阿里巴巴量子实验室:最强量子电路模拟器“太章”到底强在哪? 1

    摘要: 刷爆朋友圈的最强量子电路模拟器到底强在哪呢?云栖社区采访了阿里巴巴量子实验室团队的施尧耘博士和陈建鑫博士来位大家一一解读. 本月早些时候,阿里巴巴量子实验室成功研制当前世界最强的量子电路模拟器 ...

  7. 软件测试岗月薪3w+的测试,到底强在哪里?测试开发真的就是天花板了吗?

    小编热衷于收集整理资源,记录踩坑到爬坑的过程.希望能把自己所学,实际工作中使用的技术.学习方法.心得及踩过的一些坑,记录下来.也希望想做软件测试的你一样,通过我的分享可以少走一些弯路,可以形成一套自己 ...

  8. XERO到底强在哪里?

    XERO到底强在哪里? 做为前资深SAP财务顾问,现XERO小鲜肉ADVISOR 不得以把两款不在一个市场不是一个体量且不是一个功能级别的软件做了以下比较. 结果画风是这样的(参见第一图.)谁比谁更美 ...

  9. 月薪2w+的测试,到底强在哪里?

    众所周知,软件测试岗位前期门槛低,但想要拿到高薪就没那么简单了. 小编在和很多学员聊天中得知,工作 2-3 年薪资还在原地打转的同学,大有人在.不知道精进技能,哪怕工作5年,涨薪也很慢. 那么那些月薪 ...

最新文章

  1. 使用tcpwrapper实现访问控制功能
  2. 域、代理服务、防病毒服务器、WEB/FTP、打印服务器、路由交换、文件服务器
  3. 【C 语言】数组 ( 指针退化验证 | 计算数组大小 | #define LENGTH(array) (sizeof(array) / sizeof(*array)) )
  4. sizeof()浅解
  5. C++中overload,override,overwrite的区别?
  6. 人际交往的“三有三避”
  7. laravel框架中引入Workerman
  8. 打开pjsip2.1版本的视频支持
  9. LeetCode 359. 日志速率限制器(哈希map)
  10. 《HTML5+CSS3网页设计入门必读》——2.8 转变(CH-CH变化)
  11. 如何防止mysql数据库被勒索
  12. Android Studio查看aar文件内容
  13. 多线程socket编程示例
  14. 在VFP里玩SQL查询
  15. ASCLL码对照表01(控制字符)
  16. 程序使用微软雅黑作为默认字体在xp下的问题
  17. Java中如何不用中间变量来使两个变量交换值
  18. php发邮件附件,PHP使用PHPMailer发送邮件和附件的方法
  19. int a是神么意思
  20. 1-10 Java 继承、protected和abstract抽象类

热门文章

  1. python画指数函数图像_python实现画出e指数函数的图像
  2. oracle无法登录em,oracle em登陆不了,账户密码过期
  3. 属于窄带噪声的是热噪声_时钟201系列: 非相位噪声的情况 (第一篇)
  4. 使用Python,OpenCV缩放照片(忽略宽高比,保持宽高比)
  5. (一)神经网络训练不起来怎么办:局部最小值(local minia)与鞍点(saddle point)
  6. C++:rand()函数和srand()函数解读
  7. Python Qt GUI设计:QLabel标签类(基础篇—11)
  8. CV算法复现(分类算法5/6):ResNet(2015年 微软亚洲研究院)
  9. 2021 年高教社杯全国大学生数学建模竞赛A题分析
  10. 点云python-pcl