nginx proxy_cache、varnish&squid命中率测试汇总
时间:2010-09-14 来源:skybin090804
经过断断续续的测试,从对nginx proxy_cache和varnish不了解,到了解其缓存管理原理和缓存
清理原则,再到现在得出第一阶段结论,总算告一个小段落。(nginx proxy_cache的一些规则和varnish安装配置在以前的文章都提过,这里就不重复)
以下是各cache命令率的图片数据:
Nginx proxy_cache:
用随机函数模拟用户访问,并把数据分别热点和非热点(热点图片占100张,非热点图片
293张,随机访问100-130张),总数据为692M;访问方式大概为热点访问5次,非热点访
问1次,访问对象连点是随机生成;proxy_cache mem为100m,disk 为200m;命中率的
计算方式,当前数据总数中HIT数/当前数据总数。DISK使用空间为201M
Squid cache:
用随机函数模拟用户访问,并把数据分别热点和非热点(热点图片占100张,非热点图片293张,随机访问
100-130张),总数据为692M;访问方式大概为热点访问5次,非热点访问1次,访问对象连点是随机生
成;squid_cache mem为100m,disk 为200m;命中率的结果由SQUID squid client工具查出。
DISK使用空间为196M
<
Varnish cache:
用随机函数模拟用户访问,并把数据分别热点和非热点(热点图片占100张,非热点图片293张,随机访问
100-130张),总数据为692M;访问方式大概为热点访问5次,非热点访问1次,访问对象连点是随机生
成;squid_cache mem为100m,disk 为200m;命中率的结果由Varnish varnishstat工具查出。
DISK使用空间为292M
<
后端机器的流量图:1:nginx 2:squid 3:varnish
从命中率/访问量图中发现命令率情况为:varnish > nginx proxy_cache > squid;
对后端影响的集中程度的情况为: nginx proxy_cache > squid > varnish;
对系统负载的影响基本相同,这个情况因为压的数据量不大所以应该明显不大;
综合几个数据,从可用性来说nginx proxy_cache比现在使用的squid要稳定,长时间来看
对后端机器影响nginx proxy_cache会不太大。具体情况要在大压力情况下或线上环境上
才能进一步说明。测试的过程中还了解了nginx proxy_cache、varnish缓存管理规则,缓存
替换规则。
模拟的测试脚本如下:
#!/bin/bash
function siege(){
/usr/local/bin/siege -c 1 -r 232 -f cache_test.list > /dev/null 2> test.log.1 &
}
function wgetRANDOM(){
number=$(($RANDOM%100))
#echo $number
[[ $number -eq 0 ]] && number=1
url=`head -$number cache_test.list | tail -1`
wget $url -O /dev/null 2> /dev/null
}
function wgetRANDOM_80(){
number=$(($RANDOM%100))
#echo $number
[[ $number -eq 0 ]] && number=1
url=`tail -$number cache_test.list | head -1`
wget $url -O /dev/null 2> /dev/null
}
function main(){
for (( i=0;i<100;i++ ))
do
wgetRANDOM
sleep 1
done
}
function main_two(){
for (( i=0;i<130;i++ ))
do
wgetRANDOM_80
sleep 5
done
}
main &
main_two &
main &
main &
main &
main
清理原则,再到现在得出第一阶段结论,总算告一个小段落。(nginx proxy_cache的一些规则和varnish安装配置在以前的文章都提过,这里就不重复)
以下是各cache命令率的图片数据:
Nginx proxy_cache:
用随机函数模拟用户访问,并把数据分别热点和非热点(热点图片占100张,非热点图片
293张,随机访问100-130张),总数据为692M;访问方式大概为热点访问5次,非热点访
问1次,访问对象连点是随机生成;proxy_cache mem为100m,disk 为200m;命中率的
计算方式,当前数据总数中HIT数/当前数据总数。DISK使用空间为201M
| 访问数 | 全部命中率 |
| 446 | 0.71 |
| 899 | 0.82 |
| 1411 | 0.83 |
| 1891 | 0.84 |
| 2369 | 0.85 |
| 2908 | 0.85 |
| 3487 | 0.84 |
| 4025 | 0.83 |
| 4652 | 0.84 |
| 5268 | 0.84 |
| 5862 | 0.85 |
| 6546 | 0.85 |
| 7183 | 0.85 |
| 7871 | 0.84 |
| 8452 | 0.84 |
| 8590 | 0.84 |
Squid cache:
用随机函数模拟用户访问,并把数据分别热点和非热点(热点图片占100张,非热点图片293张,随机访问
100-130张),总数据为692M;访问方式大概为热点访问5次,非热点访问1次,访问对象连点是随机生
成;squid_cache mem为100m,disk 为200m;命中率的结果由SQUID squid client工具查出。
DISK使用空间为196M
<
| 访问数 | 全部命中率 |
| 557 | 0.72 |
| 1166 | 0.55 |
| 1648 | 0.72 |
| 2163 | 0.69 |
| 2728 | 0.76 |
| 3230 | 0.55 |
| 3713 | 0.76 |
| 4329 | 0.69 |
| 4940 | 0.69 |
| 5536 | 0.62 |
| 6167 | 0.69 |
| 6799 | 0.65 |
| 7473 | 0.58 |
| 8074 | 0.69 |
| 8577 | 0.71 |
| 9149 | 0.72 |
Varnish cache:
用随机函数模拟用户访问,并把数据分别热点和非热点(热点图片占100张,非热点图片293张,随机访问
100-130张),总数据为692M;访问方式大概为热点访问5次,非热点访问1次,访问对象连点是随机生
成;squid_cache mem为100m,disk 为200m;命中率的结果由Varnish varnishstat工具查出。
DISK使用空间为292M
<
| 访问数 | 全部命中率 |
| 557 | 0.51 |
| 1114 | 0.71 |
| 1450 | 0.84 |
| 2007 | 0.87 |
| 2564 | 0.84 |
| 3121 | 0.83 |
| 3678 | 0.85 |
| 4135 | 0.87 |
| 4585 | 0.89 |
| 5042 | 0.91 |
| 5522 | 0.92 |
| 6133 | 0.92 |
| 6758 | 0.9 |
| 7386 | 0.87 |
| 8016 | 0.89 |
| 8746 | 0.87 |
后端机器的流量图:1:nginx 2:squid 3:varnish
从命中率/访问量图中发现命令率情况为:varnish > nginx proxy_cache > squid;
对后端影响的集中程度的情况为: nginx proxy_cache > squid > varnish;
对系统负载的影响基本相同,这个情况因为压的数据量不大所以应该明显不大;
综合几个数据,从可用性来说nginx proxy_cache比现在使用的squid要稳定,长时间来看
对后端机器影响nginx proxy_cache会不太大。具体情况要在大压力情况下或线上环境上
才能进一步说明。测试的过程中还了解了nginx proxy_cache、varnish缓存管理规则,缓存
替换规则。
模拟的测试脚本如下:
#!/bin/bash
function siege(){
/usr/local/bin/siege -c 1 -r 232 -f cache_test.list > /dev/null 2> test.log.1 &
}
function wgetRANDOM(){
number=$(($RANDOM%100))
#echo $number
[[ $number -eq 0 ]] && number=1
url=`head -$number cache_test.list | tail -1`
wget $url -O /dev/null 2> /dev/null
}
function wgetRANDOM_80(){
number=$(($RANDOM%100))
#echo $number
[[ $number -eq 0 ]] && number=1
url=`tail -$number cache_test.list | head -1`
wget $url -O /dev/null 2> /dev/null
}
function main(){
for (( i=0;i<100;i++ ))
do
wgetRANDOM
sleep 1
done
}
function main_two(){
for (( i=0;i<130;i++ ))
do
wgetRANDOM_80
sleep 5
done
}
main &
main_two &
main &
main &
main &
main
相关阅读 更多 +










