分类: LINUX
2008-07-19 02:56:12
高性能双向透明高速缓存技术与评价研究 |
发布时间:2007-06-26 15:37:23 来源:-- |
关键词 高速缓存、代理、FreeBSD、squid
1. 引言
高速缓存技术可减少带宽浪费;降低网页服务器的负担;高速缓存相对位置、扮演的角色以及设置上的差异,众多的高速缓存技术中,免费的开放原始码 squid代理高速缓存技术支持了全功能的网页代理高速缓存(包括HTTP、FTP及其它URL),且可以代理SSL的网页及本身高速缓存DNS查询,联 合数台squid高速缓存服务器可建构出高速缓存架构,支持了ICP、HTCP、CARP、WCCP数种高速缓存通讯协议[1], 也可用cachemgr.cgi透过网页或利用SNMP做实时高速缓存状况查询。
2. 基于squid的高速缓存技术架构
2.1 squid支持的通讯协议
squid高速缓存程
序除了支持HTTP、FTP、gopher、WAIS通讯协议的代理高速缓存之外,本身还做网域名称的高速缓存用以加快网址及其IP地址的转换,此外,也支持SSL网页的代理功能。在代理服务器相互之间沟通的协议中,支持ICP、HTCP、CARP、WCCP。
2.1 squid使用的数据结构
从cachemgr.cgi管理程序,我们可以发觉squid在内存中大约有62种数据结构:主要包括2K、4K、8K、Socket的缓冲、 存取控制表(ACL)、高速缓存摘要表(Cache Digest)、客户端网页请求、连结状况、网页表头信息、相邻高速缓存信息、网域名称高速缓存等,以及最重要的网页高速缓存存放信息与内容[2]。图1 为高速缓存数据在内存与硬盘中的存放相关位置,每一笔高速缓存数据主要是由StoreEntry这个数据结构负责记录,当一开始使用时,在内存的数据由 MemObject负责,但如果符合被取代条件,这个数据结构则会被释放掉,因此在图中以虚线表示。
图1.高速缓存数据结构
2.2 程序流程
程序一开始执行一连串的启动、设定文件分析、配置、测试动作后,使用daemon模式,当父进程产生(fork)另一子进程后,父进程进入无穷 循环,主要在维护子进程能持续执行下去;而子进程也进入一无穷循环,等待处理连结请求(可使用pool或select方式)、高速缓存空间取代、事件处理 等动作,在程序执行期间还可直接接受更改设定,也可接受关闭(shutdown)指令,正常终止程序。图2为处理连结请求的流程,图3则为接受HTTP协 议后的详细处理流程。[3]
图2. squid接受网页请求的处理流程
图3. 处理HTTP请求的模型
3. 测试评估squid的效能
3.1 高速缓存技术的主要评价体系指标
3.1.1协议体系支持
一般通讯协议支持:HTTP 1.0/1.1 SSL/DNS
高速缓存通讯协议支持:ICP/WCCP/MHSRP/WPAD/CARP
管理支持:SNMP/Web/telnet/ssh
认证机制:LDAP/RADIUS
影音数据流流:MMS/RTP/RDP/MP3/FLASH
3.1.2 评估项目
1.尖峰处理能力:测验高速缓存服务器可处理每秒网页请求数的极限值。
2.网页响应时间:包括命中(所要求的网页在高速缓存空间内)、未命中(所要求的网页不在高速缓存空间内,而要透过网络连结至网页服务器读取)以及平均响应(指所有网页请求)的时间 。
3.节省比率(命中率及时间):命中率是指所有网页请求可直接在高速缓存空间取得的比率;时间节省比率是指使用高速缓存比不使用高速缓存的响应时间的比率。
4.第一次命中/未命中需要几分钟 :比较服务器的稳定性及容错恢复能力。
6.高速缓存内容的保存时间:测试使用尖峰流量填满高速缓存空间的时间。
3.2 评估测试方法
一是模拟网页服务器,使用工具polysrv;二是模拟使用者端浏览网页的动作使用工具polyclt。因此至少需要三台计算机,分别仿真服务 器、客户端、架设高速缓存服务器,以确保不会互相干扰,或造成系统资源不足,而且此种架构也是最接近一般实际上使用的状况。测试相关设置:
polygraph使用polymix-1做为工作量文件,仅修改每秒请求数,每个硬盘的快取空间仅使用500MB,两个共1GB,才能在一小 时内填满快取空间,如此获得的测试值才有意义。我们在PC Server的三个硬盘分别安装三套目前最常用操作系统的最新版本:FreeBSD 4.3-STABEL、RedHat Linux 7.0(kernel 2.4.8)、Solaris 8 for x86(2001/4/1版本),也调整使用系统最佳化参数、加大可用文件描述词(FD)以及扩大网卡的缓冲区,并且停止了系统上一些不必要的进程。剩下 的两个硬盘则当高速缓存硬盘。每项测试进行前皆重新格式化高速缓存硬盘,再重新建立新的高速缓存目录,以确保每次测试的独立性。测试流程如图4。
图4. 测试流程
3.3 效能评估测试结果与讨论
根据squid程序设定的测试项目进行效能评估,结果整理分析如表1。
表1 squid高速缓存评估分析结果
种类测试项目测试方法测试结果
硬盘高速缓存空间分配相关的测试吞吐量与高速缓存空间大小的关系将高速缓存空间1024,2048..每次增加1024MB当cache的空间愈大时,虽然命中率会些微升高,但是传输率变小,且响应的时间增长
高速缓存空间占高速缓存硬盘比率低时的效能设定高速缓存空间为原本的25%当累积的请求数多时,每秒请求数传输量升高,并且有爬升的趋势
多个与单个高速缓存硬盘的差异总高速缓存空间分配到六个硬盘使用六个硬盘时的每秒请求数传输量皆比使用一个时略高
使用函数或算法相关的测试使用不同内存配置的函数FreeBSD的malloc与dlmalloc的比较使用两种配置函数,squid程序所占内存空间差异度不大
使用不同的高速缓存文件清除函数使用unlink函数取代truncate函数当累积的请求数多时,使用unlink函数的每秒请求数传输量略微降低
不同的高速缓存文件取代算法使用堆积(heap)算法的GDSF/LFUDA与LRUGDSF/LFUDA保留较热门的对象所以命中率较高,但CPU的使用率也较高
我们的测试目标是要测量出在同样的硬件条件下,squid高速缓存程序在三种常用的操作系统的效能及稳定度。而影响高速缓存系统效能主要是局限 在其硬盘存取的动作,因此我们分别使用squid支持的ufs、aufs(进行异步存取,避免存取冻结)、diskd(执行额外独立的进程进行存取,避免 存取冻结)三种硬盘存取模式,调整每秒的网页请求数,测量其命中、未命中及其平均响应时间、以及高速缓存的命中率。
在命中响应时间里,我们发现在每秒网页请求数少于60时,使用Linux+ufs的时间是最短的,FreeBSD+ufs则稍逊,但值得注意一 点的是Linux在aufs及diskd两种存取模式的表现却相差较大。此外,在每秒请求数大于90甚至到达180时,反应时间落差极大,此时则以 FreeBSD+diskd的反应时间最短。
未命中反应时间与平均反应时间在较低请求数时Linux与FreeBSD在各种存取模式是很接近的,而Solaris+ufs在到达每秒90个 请求时,出现了极大的差距,经反复测试仍旧如此,可以推测其ufs文件系统的存取极限在 60-90之间。此外,也可以发现Linux的表现是较平稳的。
在命中率测试结果中,在请求数小于60时,皆有54%以上的水准,表现很相近,但到了每秒请求数90、180时,就出现比较混乱的局面,Linux表现依旧较为平稳,但在FreeBSD+ufs每秒请求数180时响应时间极差,但却出现54.28%的高水平。
为了更清楚看出三种操作系统的差异,图5特别选择每种操作系统最佳的存取方式,分别为FreeBSD+diskd, Linux+ufs, Solaris+aufs加以比较,发现低请求量结果是很相似的。