决定squid反向代理的性能要素

发布时间:2019-10-14编辑:脚本学堂
介绍squid反向代理的基本概念、性能要素、磁盘IO瓶颈与优化等
决定squid反向代理的性能要素
 
一、基本概念
squid反向代理作web加速是大型网站的常用模式。
1. squid来自于1990的cache harvest项目。
这个项目一个分支形成squid,另一个形成netapp的netcache产品(netapp的netcache是固化在其硬件产品中的,整体价格很贵)
2.squid是硬盘缓存,其使用内存作缓存内容的索引
(一个索引在32位系统中大小是75bytes,在64位系统中是112bytes)。
可以把squid想象成数据库,硬盘上是数据,内存中是索引:查询内存索引,发现内存位置,发出去。
3.产品下载及说明(http://download.opensuse.org/repositories/server:/proxy/)
a)Squid:不用说了,就是squid的主程序
b)SARG的全称是:Squid Analysis Report Generator,SARG作为一款Squid日志分析工具,它采用html格式,详细列出了每一位用户访问internet的站点信息,时间占用信息,排
名,连接次数,访问量,访问量等。
如果做反向代理,sarg可以不安装。这个工具对正向代理更有价值。
c)SquidGuard:重定向器,可以重写用户的uri,类似apache的mod_rewrite。关于重定向器,我建议少用,可能会降低性能。

二、性能要素
squid反向代理作web加速器时需要关注的系统性能因素主要是:
1 硬件:
i.大内存(最重要,影响最大);快速大硬盘(第二要素,更多缓存,看网站实际数据量了,要快速的,
  最好是1万转以上的,如sas10K或西部数据的猛禽系列);CPU(较为次要,影响不大,特别是多核处理器基本没用)。
ii.建议匹配配置:每G磁盘空间需要32M内存。这样,512M内存的系统,能支持16G的磁盘缓存。你的情况当然会不同。
内存需求依赖于如下事实:缓存目标大小,CPU体系(32位或64位),同时在线的用户数量,和你使用的特殊功能。
估算:建立一个有足够磁盘空间,可存储 3-7天web流量数据的系统。如带宽1M,则需要约3600*1M的数据缓存(3.5G),
如果一天提供8小时有效访问,则需要缓存10-28G(看重复情况了)。
但Squid官方网站说法:squid使用内存表索引硬盘缓存内容,硬盘内容/内存索引=177,但要同时考虑到squid程序内存,cache_mem,硬盘缓冲cache等占用的内存。
因此,我的估算:2G内存的系统,使用1.5G内存作squid索引,对应硬盘150G。
iii.关于硬盘说明:requests per second = 1000/seek time/硬盘数,一块硬盘是比较准确的,多块硬盘就不好说了。一定要用random-seek time小的盘,而随机寻道时间短意味
着转速要快,越快其随机寻道时间越短!
iv.关于Swap:
毫不犹豫地关闭swap,squid是个大进程,使用swap只能使性能下降
2 适合的操作系统:
能够支持posix线程实现异步io的操作系统,如:linux2.6内核的系统
3 适合的文件系统:
reisfer文件系统,处理大量小文件(一般的网页缓存都是小文件),性能最佳
4 每个squid对应专门应用,写明httpd_accel_host避免dns查询,dns查询很消耗时间
5 配置尽量使用IP,不用域名,加快访问速度(如多台缓存服务器/后台服务器等)

三、磁盘IO瓶颈与优化
squid的磁盘IO瓶颈与优化:
A.现象:不使用cache时,平均响应时间明显更好,那么可以确认磁盘I/O是该水平吞吐量的瓶颈
B.硬件:不用raid(并不能带来明显性能提升,而且大大增加系统的风险),最好是独立文件系统+独立硬盘
C.在/etc/fstab中使用使用挂载参数:noatime(不记录文件访问时间),async(异步IO)
D.使用超过你需要的更大磁盘,并且仅仅使用空间的一半,空间越多写性能越好;不行就减少cachedir的大小
E.文件系统方式:
1)UFS(squid默认的文件系统方式)性能较好,实时读写。
2)aufs使用异步多线程方式管理缓存读写,在多CPU系统上优势更明显,一个cachedir默认16个线程,需要posix线程系统,稳定性不如ufs,使用Aufs命令:
cache_dir aufs /cache0 4096 16 256
运行tail -f store.log看是否有文件写入磁盘,监控之。
注意:aufs要使用大量文件描述符,注意系统设置(用ulimit命令查看修改,对于suse10一般不用修改系统文件句柄数,仅需要修改进程文件句柄数量)
3)Diskd 使用消息队列实现异步io,还要修改内核参数,不如aufs稳定
4)Coss 用一个大文件存储全部cache,小型squid系统,试验性的
5)null 用于测试squid性能使用,必须指定cache_dir /tmp null
总结:
如果并发不高( 6),使用ufs就ok;
高并发,可以使用aufs(aufs在Linux和Solaris上运行良好)。
而且,同一服务器不要使用不同的缓存机制,cache的大小最好相同。
F.使用reisfer文件系统