marty001 发表于 2017-1-10 09:06:38

squid 与 apache针对不同数据缓存情况的差异

对于Web应用,我们通常采用数据压缩和数据缓存等不同方式对Web应用进行性能优化,web 缓存数据的命中率至关重要,如何提高命中率是我
们对于Web应用性能优化的一个重要手段。
下面我们做一个实验,针对一个url (静态页面文件) 不同请求方式。
我们采用的版本:
Server: Apache/2.2.4 (Unix)
Squid Cache: Version 2.6.STABLE9

以一个静态页面为例.
http://172.17.12.101/docs/toc.html
apache 未配置压缩方式
1.apache 未配置压缩方式,非支持压缩方式请求:
curl   http://172.17.12.101/docs/toc.html

缓存目录:
find -type f | xargs file
./_/f/U/4/i/Kql5DT29yMyNzOm2w.header:                                       DBase 3 data file (500937590 records)
./_/f/U/4/i/Kql5DT29yMyNzOm2w.data:                                           HTML document text

2.apache 配置支持压缩方式,非压缩方式请求:
curl   http://172.17.12.101/docs/toc.html

缓存目录:

find . -type f| xargs file
./_/f/U/4/i/Kql5DT29yMyNzOm2w.header:                                       DBase 3 data file (500937590 records)
./_/f/U/4/i/Kql5DT29yMyNzOm2w.data:                                           HTML document text
./_/f/U/4/i/Kql5DT29yMyNzOm2w.header.vary/9/r/d/u/o/qtsQ0rRCylw13nsjQ.header: X11 SNF font data, LSB first
./_/f/U/4/i/Kql5DT29yMyNzOm2w.header.vary/9/r/d/u/o/qtsQ0rRCylw13nsjQ.data:   HTML document text

3.apache 配置支持压缩方式,压缩方式请求:

curl-H 'Accept-Encoding: gzip, deflate' http://172.17.12.101/docs/toc.html

我们再看一下缓存目录:
find . -type f| xargs file
./_/f/U/4/i/Kql5DT29yMyNzOm2w.header:                                       DBase 3 data file (500937590 records)
./_/f/U/4/i/Kql5DT29yMyNzOm2w.data:                                           HTML document text
./_/f/U/4/i/Kql5DT29yMyNzOm2w.header.vary/9/r/d/u/o/qtsQ0rRCylw13nsjQ.header: X11 SNF font data, LSB first
./_/f/U/4/i/Kql5DT29yMyNzOm2w.header.vary/9/r/d/u/o/qtsQ0rRCylw13nsjQ.data:   HTML document text
./_/f/U/4/i/Kql5DT29yMyNzOm2w.header.vary/l/6/8/t/1/CX1DLP7MQGK6qVYgw.header: X11 SNF font data, LSB first
./_/f/U/4/i/Kql5DT29yMyNzOm2w.header.vary/l/6/8/t/1/CX1DLP7MQGK6qVYgw.data:   gzip compressed data, from Unix
是不是很神奇,赫赫对于同一个URL的get请求,不同情况下会产生多份不同的Cache数据,html格式,gzip格式的。
Vary header的存在会产生不同的缓存数据。再根据Content-Encoding的差异,生成不同的cache数据。为什么产生同一个多个Cache的多个备份情况呢?主要是为了使用不同browser的各自的情况,针对是否支持压缩数据请求,可以有选择性的返回压缩数据或非压缩数据。

下面我们在比较一下Squid缓存的试验。
1.非支持压缩请求
curlhttp://172.17.12.114:81/docs/toc.html

缓存目录
find -type f | xargs ls -l
-rw-r-----1 nobody nobody4545月5 13:13 ./00/00/0000000B
-rw-r-----1 nobody nobody 79705月5 13:13 ./00/00/0000000C
-rw-r-----1 nobody nobody 15085月5 13:13 ./swap.state
2.支持压缩请求
curl-H 'Accept-Encoding: gzip, deflate' http://172.17.12.114:81/docs/toc.html
缓存目录
find -type f | xargs ls -l
-rw-r-----1 nobody nobody4545月5 13:16 ./00/00/0000000D
-rw-r-----1 nobody nobody 26565月5 13:16 ./00/00/0000000E
-rw-r-----1 nobody nobody 17165月5 13:16 ./swap.state


采用squid作为前端缓存服务器,对同一个URL只保留一份缓存。对于如果不同browser(是否支持压缩)如果频繁交替访问,那么squid缓存数据就要频繁更新,也就无法有效提高自身缓存数据的命中率,当然,现实环境中不支持压缩的browser毕竟是很少的情况,所以对于缓存命中率的降低很有限.

squid 的缓存机制在这方面就没有apache的缓存机制的健壮。但是apache 的缓存方式会占用较多磁盘空间。squid所提供的功能远强大于apache的缓存功能.
无论采用何种方式的缓存,结合大家应用的差异各自的特点.选择合适自己的缓存方案方式就好.
页: [1]
查看完整版本: squid 与 apache针对不同数据缓存情况的差异