提高squid命中率和使用效率是每个系统管理员都希望的一件事,毕竟在现有资源中榨干每一份的资源是必须滴,使用nginx的按url做定向投递,自然能提高squid的命中和效率,但毕竟公司目前没有这个条件,这个自然没法子实施,我就想到了另外的一个方法,就是今天的主角,cache_peer中的sibling。


先说说我的思路 


如果有5台squid,每台的缓存空间是10G,估计每台能缓存静态文件110W个,如果前端放置f5或其他负载均衡设备,把所有请求的url都采用轮询的方式投递给squid,那最终每台squid上缓存住的静态文件几乎都是相同的,对于一个中小型的网站来说110W量的静态文件已经几乎是所有的静态文件了,但对于以在线漫画,或者图片为服务的网站来讲,静态文件将远远不止这个数量。 


如果能让每台squid上缓存的都是独立的静态文件,那这组服务器所能缓存的文件将是原来能力的5倍,当然,前面提到了nginx的按url做定向投递可以解决这个问题,但这不是我要说的重点,其实用squid自己的堆叠就可以实现了,即cache_peer里的sibling

sibling是通过icq向同伴squid发送请求,一旦在同伴squid中发现了缓存命中,则由这个缓存命中返回给客户端,如果没有发现则到parent的squid去拿或者到realserver去拿 


有了这个概念那就是说如果http://www.aaa.ccc/a.jpg发送过来了,如果a上没有,就会到b上找,如果有就反给客户端,如果没有会再去c上找如果最后都没有由a到后端parent或者realserver上取

下面看一个例子,我用vmware模拟了两个linux,上面分别跑了一个squid,


a上的配置,a的ip:192.168.220.128

icp_port 3130
icp_access allow all
cache_peer 61.152.242.1 parent 80 0 no -query originserver name=www2 
cache_peer_domain www2 www.tgbus.com

b上的配置,b的ip:192.168.220.130

icp_port 3130
icp_access allow all
cache_peer 192.168.220.128 sibling 80 3130 proxy -only name=cache 
cache_peer 61.152.242.1 parent 80 0 no -query originserver name=www2 
cache_peer_domain cache www.tgbus.com 
cache_peer_domain www2 www.tgbus.com

测试


修改本机本机hosts,先把www.tgbus.com指向到192.168.220.128上访问一遍,让220.128上有一份静态的缓存

然后把www.tgbus.com指向到192.168.220.130上,然后访问,可以看下两台机器上的日志

a的

1233463229.874 0 192.168.220.130 UDP_MISS/000 42 ICP_QUERY http: / /www.tgbus.com/ - NONE / - - 
1233463231.555 0 192.168.220.130 UDP_HIT/000 51 ICP_QUERY http: / /www.tgbus.com/style.css - NONE / - - 
1233463231.557 0 192.168.220.130 TCP_IMS_HIT/304 210 GET http: / /www.tgbus.com/style.css - NONE / - text /css 
1233463231.596 0 192.168.220.130 UDP_MISS/000 67 ICP_QUERY http: / /www.tgbus.com/index/domain/Images/3.jpg - NONE / - - 
1233463231.602 0 192.168.220.130 UDP_HIT/000 59 ICP_QUERY http: / /www.tgbus.com/p_w_picpaths/v3/lqs.jpg - NONE / - - 
1233463231.603 0 192.168.220.130 UDP_MISS/000 67 ICP_QUERY http: / /www.tgbus.com/index/domain/Images/4.jpg - NONE / - - 
1233463231.605 0 192.168.220.130 TCP_IMS_HIT/304 212 GET http: / /www.tgbus.com/p_w_picpaths/v3/lqs.jpg - NONE / - p_w_picpath/jpeg 
1233463231.609 0 192.168.220.130 UDP_HIT/000 67 ICP_QUERY http: / /www.tgbus.com/index/tvgame/p_w_picpaths/1.jpg - NONE / - - 
1233463231.612 0 192.168.220.130 TCP_IMS_HIT/304 212 GET http: / /www.tgbus.com/index/tvgame/p_w_picpaths/1.jpg - NONE / - p_w_picpath/jpeg 
1233463231.615 0 192.168.220.130 UDP_HIT/000 67 ICP_QUERY http: / /www.tgbus.com/index/tvgame/p_w_picpaths/2.jpg - NONE / - - 
1233463231.618 0 192.168.220.130 TCP_IMS_HIT/304 212 GET http: / /www.tgbus.com/index/tvgame/p_w_picpaths/2.jpg - NONE / - p_w_picpath/jpeg 
1233463231.619 0 192.168.220.130 UDP_HIT/000 67 ICP_QUERY http: / /www.tgbus.com/index/tvgame/p_w_picpaths/4.jpg - NONE / - - 
1233463231.619 0 192.168.220.130 UDP_HIT/000 58 ICP_QUERY http: / /www.tgbus.com/p_w_picpaths/v3/mc.jpg - NONE / - - 
1233463231.623 1 192.168.220.130 TCP_IMS_HIT/304 212 GET http: / /www.tgbus.com/index/tvgame/p_w_picpaths/4.jpg - NONE / - p_w_picpath/jpeg 
1233463231.623 1 192.168.220.130 TCP_IMS_HIT/304 212 GET http: / /www.tgbus.com/p_w_picpaths/v3/mc.jpg - NONE / - p_w_picpath/jpeg

b的

1233490583.540 269 192.168.220.1 TCP_MISS/200 57811 GET http: / /www.tgbus.com/ - FIRST_UP_PARENT/www2 text /html 
1233490585.753 3 192.168.220.1 TCP_MISS/304 271 GET http: / /www.tgbus.com/style.css - SIBLING_HIT/cache text /css 
1233490585.845 5 192.168.220.1 TCP_MISS/304 273 GET http: / /www.tgbus.com/p_w_picpaths/v3/lqs.jpg - SIBLING_HIT/cache p_w_picpath/jpeg 
1233490585.857 5 192.168.220.1 TCP_MISS/304 273 GET http: / /www.tgbus.com/index/tvgame/p_w_picpaths/1.jpg - SIBLING_HIT/cache p_w_picpath/jpeg 
1233490585.862 4 192.168.220.1 TCP_MISS/304 273 GET http: / /www.tgbus.com/index/tvgame/p_w_picpaths/2.jpg - SIBLING_HIT/cache p_w_picpath/jpeg 
1233490585.868 5 192.168.220.1 TCP_MISS/304 273 GET http: / /www.tgbus.com/index/tvgame/p_w_picpaths/4.jpg - SIBLING_HIT/cache p_w_picpath/jpeg 
1233490585.868 5 192.168.220.1 TCP_MISS/304 273 GET http: / /www.tgbus.com/p_w_picpaths/v3/mc.jpg - SIBLING_HIT/cache p_w_picpath/jpeg 
1233490585.871 4 192.168.220.1 TCP_MISS/304 273 GET http: / /www.tgbus.com/index/tvgame/p_w_picpaths/3.jpg - SIBLING_HIT/cache p_w_picpath/jpeg 
1233490585.873 3 192.168.220.1 TCP_MISS/304 273 GET http: / /www.tgbus.com/index/tvgame/p_w_picpaths/5.jpg - SIBLING_HIT/cache p_w_picpath/jpeg 
1233490585.885 4 192.168.220.1 TCP_MISS/304 272 GET http: / /www.tgbus.com/Images/v3/hot.gif - SIBLING_HIT/cache p_w_picpath/gif 
1233490585.907 3 192.168.220.1 TCP_MISS/304 272 GET http: / /www.tgbus.com/Images/v3/tvgame.gif - SIBLING_HIT/cache p_w_picpath/gif 
1233490585.943 3 192.168.220.1 TCP_MISS/304 272 GET http: / /www.tgbus.com/Images/v3/league.gif - SIBLING_HIT/cache p_w_picpath/gif 
1233490586.382 555 192.168.220.1 TCP_MISS/304 292 GET http: / /www.tgbus.com/index/domain/Images/3.jpg - FIRST_UP_PARENT/www2 - 
1233490586.477 11 192.168.220.1 TCP_MISS/304 273 GET http: / /www.tgbus.com/index/comic/p_w_picpaths/manhua01.jpg - SIBLING_HIT/cache p_w_picpath/jpeg 
1233490586.479 11 192.168.220.1 TCP_MISS/304 273 GET http: / /www.tgbus.com/index/comic/p_w_picpaths/manhua02.jpg - SIBLING_HIT/cache p_w_picpath/jpeg 
1233490586.479 11 192.168.220.1 TCP_MISS/304 273 GET http: / /www.tgbus.com/index/comic/p_w_picpaths/manhua03.jpg - SIBLING_HIT/cache p_w_picpath/jpeg

由上面可以看到,在b上tcp_miss的大部分在a上都是sibling_hit的,这样说来,我的想法还是成立的,可以达到提高squid命中与效率,增大缓存容量的作用