nginx / squid

分布式缓存清除系统2.0[原创]

在2010年的最后一天,蚊子我为这最后一天画上了一个圆满的句号。发布了这套《分布式缓存清除系统2.0》版,他的前身是《web版清除squid缓存》,从1.0到1.2.3共有6个版本。在这6个版本中只是实现了多台squid,nginx的完整url缓存清除功能。

而今天发布的分布式缓存清除系统2.0,蚊子采用了C/S架构模式,由于squid和nginx的缓存文件内容结构不同,所以此版本在前身版本功能的基础上,实现了对squid指定内容进行批量缓存清除的功能,不过遗憾的是暂时还不能支持nginx的指定内容的批量清除。后续的开发中,会增加对nginx的支持。

下面就来详细介绍一下这个系统,及使用中和开发中遇到的问题。

首先这是一台C/S架构的分布式缓存清除系统,包含了server端和client端。

一、开发工具

  • Server端:perl
  • Client端:php

二、功能描述

功能结构分为客户端和服务端,客户端用于SA提交需要清除的url或制定内容和目录,服务端监听9999端口(默认,可在程序中更改),用于接收客户端发送过来的请求。 此系统分为两种清除模式:

  • 普通模式

在普通模式下,SA必须输入完整的url地址,每个地址占一行,client端会把所有url推送给选定的cache组,进行清除,同时返回清除的结果消息。

对于普通模式的功能原理请参考《web版清除squid缓存V1.0》等前几篇文章

  • 高级模式

在高级模式下,SA可以任意输入想要清除的内容。
比如:

swf$   所有以swf为结尾的url
jpg$   所有以jpg为结尾的url
http://www.wenzizone.cn/images/ 所有包含http://www.wenzizone.cn/images/的url
/upload/    所有包含/upload/目录的url

client端会把这些内容通过服务器端的9999端口推送给选定的cache组进行批量清除。此模式下暂时还不支持返回结果,而且目前只能支持squid缓存的批量清除。

三、系统架构图

四、平台截图

五、下载地址

http://code.google.com/p/purgesystem/

六、安装使用说明

1、client端

安装非常容易,只需要将下载下来的包中的client-side放到指定目录,并能通过web访问到就行。

2、server端,在squid服务器上使用的程序。

因使用perl开发,开发过程中使用了POSIX,IO::Socket,File::Find,Net::HTTP这几个模块,所以需要保证系统中包含这几个模块即可。

服务端启动方法:

在squid服务器上执行下面的命令:
perl purge_cache_server.pl,这将以daemon的模式启动。

支持参数:-d,不做为daemon启动,以debug方式启动,所有清除结果输出到控制台,便于调试
以daemon的方式启动后,所有清除结果输出到日志,日志位置/var/log/pcs_err.log

可以通过修改purge_cache_server.pl中的our $LOCAL_PORT = 9999;来修改监听端口,如果服务器端修改了,client端的程序也需要修改,文件purge_cache.php中的define(“REMOTE_SERVER_PORT”,    “9999”)部分。

另外,关于squid缓存的存放地址也需要自行修改,同样是修改purge_cache_server.pl文件,our @src_file_dir = (“/usr/local/squid/cache”); 当前版本还不支持多个缓存路径。

关于squid,nginx的部分需要调整的配置,请参考我以前的文章,谢谢。

七、目前可能存在的问题

经我实际测试,使用高级模式清除squid缓存的时,如果squid缓存数据量很大,perl进程占用cpu偏高,我这边基本在14%左右。

另外,高级模式不支持组合方式,即清除某一域名下的图片或者html页面,也就是http://www.domain.com/*.jpg这种模式暂时还不能支持。

欢迎有兴趣的朋友下载测试并提出你们宝贵的已经,供我修正,以完善这套系统。饭要吃,工作要做,但步子不能迈的太大,不然容易扯到蛋。所以蚊子会一点点的实现更多的功能,支持更多的cache程序。

Related Post

14 Comments

  1. squid的缓存可以清除,但nginx的不能。但nginx用人工可以清除,清问nginx的用这个系统怎么清不了呢

  2. 我的是用nginx做反向代理加速,那在配置squid里设置cache组的Ip应当怎么设置呢?是不是http://IP:80端口?是不是这里设置错了?

  3. 设置好清缓存站点以后,把Nginx的缓存路径一些相关的设置修改了,再进入清缓存页面,把要清缓存的链接输进去,点确定,再看换的图片链接打开以后还是旧的图片

Leave a Reply

Your email address will not be published. Required fields are marked *