本文共 2651 字,大约阅读时间需要 8 分钟。
squid反向代理基本概述及性能事项
[b]一、基本概念[/b] squid反向代理作web加速是大型网站的常用模式。 [color=Blue]1. squid来自于1990的cache harvest项目。[/color] 这个项目一个分支形成squid,另一个形成netapp的netcache产品(netapp的netcache是固化在其硬件产品中的,整体价格很贵) [color=Blue]2.squid是硬盘缓存,其使用内存作缓存内容的索引[/color] (一个索引在32位系统中大小是75bytes,在64位系统中是112bytes)。 可以把squid想象成数据库,硬盘上是数据,内存中是索引:查询内存索引,发现内存位置,发出去。 [color=Blue]3.产品下载及说明([/color][url=http://download.opensuse.org/repositories/server:/proxy/]http://download.opensuse.org/repositories/server:/proxy/[/url][color=Blue])[/color] a)Squid:不用说了,就是squid的主程序 b)SARG的全称是:Squid Analysis Report Generator,SARG作为一款Squid日志分析工具,它采用html格式,详细列出了每一位用户访问internet的站点信息,时间占用信息,排名,连接次数,访问量,访问量等。 如果做反向代理,sarg可以不安装。这个工具对正向代理更有价值。 c)SquidGuard:重定向器,可以重写用户的uri,类似apache的mod_rewrite。关于重定向器,我建议少用,可能会降低性能。 [b]二、性能要素[/b] squid反向代理作web加速器时需要关注的系统性能因素主要是: [color=Blue]1 硬件:[/color] 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只能使性能下降 [color=Blue]2 适合的操作系统:[/color] 能够支持posix线程实现异步io的操作系统,如:linux2.6内核的系统 [color=Blue]3 适合的文件系统:[/color] reisfer文件系统,处理大量小文件(一般的网页缓存都是小文件),性能最佳 [color=Blue]4 每个squid对应专门应用[/color],写明httpd_accel_host避免dns查询,dns查询很消耗时间 [color=Blue]5 配置尽量使用IP[/color],不用域名,加快访问速度(如多台缓存服务器/后台服务器等) [b]三、磁盘IO瓶颈与优化[/b] squid的磁盘IO瓶颈与优化: [color=Blue]A.现象[/color]:不使用cache时,平均响应时间明显更好,那么可以确认磁盘I/O是该水平吞吐量的瓶颈 [color=Blue]B.硬件[/color]:不用raid(并不能带来明显性能提升,而且大大增加系统的风险),最好是独立文件系统+独立硬盘 [color=Blue]C.在/etc/fstab中使用使用挂载参数[/color]:noatime(不记录文件访问时间),async(异步IO) [color=Blue]D.使用超过你需要的更大磁盘[/color],并且仅仅使用空间的一半,空间越多写性能越好;不行就减少cachedir的大小 [color=Blue]E.文件系统方式[/color]: 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文件系统 本文转自 jxwpx 51CTO博客,原文链接:http://blog.51cto.com/jxwpx/216871,如需转载请自行联系原作者