第37卷第9A期2010年9月计算机科学ComputerScienceV01.37No.9ASep2010缓存技术在基于Web架构信息系统中的应用高勃北京100044)(北京交通大学信息中心摘要随着互联网规模快速增大,对于Web服务高性能要求也不断提高。介绍Web应用中常用的缓存技术(Squid,Memcaehed),并应用缓存技术对原有系统架构进行改造,以提高Web请求处理能力.关键词缓存技术,高性能,网站榘构中图法分类号TP368.5文献标识码CApplicationofCachingTechnologyinInformationSystemBasedGA0130(InformationCenter,BeijingJiaotongUniversity,BeijiIng100044,China)onWebAbstractThefastgrowthoftheInternetdemandsWebserviceswitllbetterperformance.ThisarticleintroducedandWeb∞chingtechniques(SquidMemcached)。whichhavebeenwidelyadoptedtoinWebcachh嚷intotheoriginalarchitectureofthesystemrequeSts.Keyworflsimprovethesystem’sperto粼eWebapplications.Wemtegratedinprocessing靶删ioeCachingtechnology,Highperformance,Architectureofwebsite1前言如今,互联网规模不断扩大,应用不断增多,网存。Html页面缓存:一般可采用静态页面生成技术或建设Squid服务器,两种方式均可有效提高Web服务器并发处理能力。新浪、搜狐等大型门户网站即采用Squid缓存类似架构。Web程序开发方面的缓存、Linux上提供的Memeaehed是常用的缓存方案,包括python,php,perl,C和java在内的多种Web开发语言均提供Memcached访问接口,可以实时将数据、对象等内络已经深入到我们生活的各方面,给我们日常生活带来极大的方便。随着信息系统的业务扩展,系统用户增加,历史数据不断积累,系统响应速度、请求处理能力开始下降,CPU、I/O处理能力成为瓶颈,用户批评逐渐增多。如何在有限的硬件投入前提下,提高系统性能就成为我们研究的问题。为提供高性能Web服务,可采用包括负载均衡、数据库集群、HTML页面静态化、缓存等多方面技术方案。通过统计发现,很多特定信息系统的请求都是重复冗余的。这也就意味着我们的系统在重复计算、传输着相同的内容。采用缓存技术,可提高Web请求并发处理能力及处理速度。容进行缓存,非常灵活。Live]ournal等大型社区使用了这样的架构。2.1Squid反向代理反向代理就是通常所说的Web服务器加速,它通过在繁忙的Web服务器和Internet之间增加一个高速的Web缓冲服务器(即:Web反向代理服务器)来降低实际的Web服务器的负载。代理Cac-hing,针对一台或多台特定Web服务器。具体实施反向代理时,将Squid服务器放置在一台或多台Web服务器前端。当互联网用户访问某个Web服务器时,通过DNS服务器解析后的lP地址是Squid反向代理服务器的IP地址,而非原始2缓存技术缓存技术在计算机科学中应用非常广泛。对于Web缓存来说,就是将通过相对高负荷计算的结果保存下来,以备下次需要时取用,从而节省了计算时间;其主要包括Html页面缓存与Web程序开发缓膏勃(1980一),男,硕士.工程师,主要研究方向为信息化技术,E-mail:gaobo@bjtu.edu.∞.・78・Web服务器的IP地址,此时Squid充当Web服务器,浏览器可以与它连接,无需再直接与Web服务器相连。因此,大量Web服务工作量被卸载到反向代理服务上,不但能够防止外部网主机直接和Web服务器通信带来的安全隐患,而且能够很大程度上减轻Web服务器的负担,提高访问速度。Squid默认通过检测HTTP协议头的某些字段来决定缓存行为,Last—Modified:告诉反向代理页面什么时间被修改;Expires:告诉反向代理页面什么时间应该从缓冲区中删除;Cache-Control:告诉反向代理页面是否应该被缓冲。在实际应用中,通过配置apache的mod—expires模块,让apache自动地给每一个网页加上过期时间;或显式地在服务器端脚本中输出HTTP头,Python/Django框架中具有专门的Cache插件用于设置缓存参数;对于静态内容,如图片、视频文件、供下载的软件等,可针对文件类型(扩展名),用Squid的refresh—pattern来指定缓存时间。Squid运行的时候,默认会在硬盘上建两层hash目录,用来存储缓存的Object。它还会在内存中建立一个HashTable,用来记录硬盘中Object分布的情况。如果Squid配置成为一个Squid集群中的一个的话,它还会建立一个DigestTable(摘要表),用来存储其它Squid上的Object摘要。当本地硬盘上没有用户端想要的资料时,可以很快地知道应该去集群中的哪一台机器获得。在硬盘空间快要达到配置限额的时候,可以配置使用某种策略(默认使用LRU:LeastRecentlyUsed,最近最少用)删除一些Object,从而腾出空间。默认配置的Squid,没有经过任何优化的时候,一般可以达到50%的命中率。如果需要,还可以通过参数优化、拆分业务、优化文件系统等办法,使得Squid达到90%以上的缓存命中率。Squid处理TCP连接消耗的服务器资源比真正的H1vrP服务器要小得多,若Squid分担了大部分连接,网站的承压能力就大大增强了。2.2Memcached内存对象缓存Memcached是danga.com(运营LiveJournal的技术团队)开发的一套优秀的分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。和Squid的前端缓存加速不同,它通过基于内存的对象缓存来减少数据库查询,改善网站的性能,而其中最吸引入的一个特性就是支持分布式部署;也就是说可以在一群机器上建立一堆Memcached服务,每个服务可以根据具体服务器的硬件配置使用不同大小的内存块,这样,理论上可以建立一个无限大的基于内存的缓存系统。Memcached是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,py—thon,php,perl,C和java在内的多种Web开发语言均有Memcached访问接口。每个被存取的对象都有一个唯一的标识符key,存取操作均通过这个key进行。Memcached将对象保存在一个巨大的Hash表中,它还使用NewHash算法来管理Hash表,从而获得进一步的性能提升。客户端在与Memcached服务建立连接之后,存取对象。保存到Memcached中的对象实际上是放置在内存中的,并不是保存在cache文件中的。所以当分配给Mem-cached的内存足够大时,Memcached的时间消耗基本上只是网络Socket连接了。正因如此,Mem-cached能够高效快速地存取对象,但这些对象并不是持久的,服务停止之后,里边的数据就会丢失。3系统部署3.1系统架构某内容发布系统(CMS),采用Python编写,后台数据库为MySQL,Nginx作为Web服务器,均部署在Linux系统下。原系统架构如图1所示:分为数据库层、应用服务器层和Web服务器层,属于传统的三层架构。困咽咽图1原系统架构图随着系统涵盖的业务不断扩大,后台数据量不断增加,用户访问量逐渐增多。为保证系统在高峰时段正常工作,应用缓存技术,修改系统架构,如图2所示:在原NginxWeb服务器层前加入Squid缓存服务器,数据库层与应用服务器层间加入Mem-cached缓存服务器。Squid服务器提供Web反向代理服务,Memcached提供数据缓存服务。{觥H勰器}一溜搿H黼l图2加入缓存技术的系统架构图内容发布系统中存在大量可缓存的图片、CsS文件、页面内容。针对同一URL请求,Squid缓存服务器会首先检查是否已经存在于缓存中,若不存在或缓存过期,Squid将请求转发至NginxWeb服・79・务器。对于常用的数据字典、用户信息、热门信息公告等字段内容,存人Memcached内存,应用系统首先检查数据缓存中是否存有数据,若不存在或缓存过期,应用系统将到数据库中查询。通过加入缓存技术,可减少对Web服务器的访问和对数据库的操作,提高系统整体性能。3.2能,安全性不足。我们可以将Memcached服务绑定在内网IP上,通过Linux防火墙进行防护。4测试结果及分析内容发布系统加入缓存技术后,网站可提供正常Web服务。用siege软件进行压力测试,与原系Squid反向代理配置Squid统进行比较,在并发200下,请求处理速度变化不大,均保持在300ms左右。分析原因如下:1)缓存系统在中、小负荷的Web应用下效果不明显,甚至可能会降低原应用程序的运行效率;2)原应用程序对于数据库操作计算量要求不cII2.6版本,squid.conI中与反向代理相关的配置如下:http_port80vhostcache—peer127.0.0.1parent80810no-queryongm一跎rverweight----1name-----caeheOcache_peer_domaincacheOsqunnjtu.edu大,计算结果缓存后收效不明显;3)MySQL数据库本身已经做过较好的优化,数据库缓存已经较好地发挥了作用;4)测试地址中,含有的静态元素(包括jS,CSS文件等)较多,对于静态文件的处理,Web服务器的处由Squid反向代理服务器程序监听80端口,Nginx作为Web服务器监听8081端口,当访问应用系统的请求发送到80端121时,Squid检查缓存数据,若没有对应数据就将请求转发到本机8081端口,由Nginx处理。3.3理相对Squid会更具优势。在并发1000情况下,原系统已经有60%左右的请求无法处理,新系统可提供正常服务。Memcached部署、使用应用系统操作环境是DebianLinux,安装、运行Memcached服务均通过Debian软件管理,操作简便。所有的数据基本上都是保存在数据库当中的,每次频繁的存取数据库,导致数据库性能急剧下降,无法同时服务更多的用户,比如MySQL,特别频繁结束语Web高性能服务是一个涉及面广泛的研究课题,涵盖网络架构、系统架构、应用程序开发、数据库优化等多方面技术。本文仅从缓存方面对应用程序、架构进行改进。下一步可结合集群技术(Web集群、Squid集群、Memeached集群、数据库集群等)对系统进行改造,使其实现高性能、高可靠性。参考文献E13Memcached的使用和协议分析详解[EB/OL3.http://blog.cs-drLnet/heiyeshuwu/archive/2006/11/13/1380838.aspx的锁表。Memeached可用来分担数据库的压力。我们需要对web程序进行的改动比较小,且不会以大规模改变前端的方式来改变目前的架构。Python/Django框架中的Cache、Session框架,可以灵活配置,控制到单个View,决定其是否缓存至Memcached中。其Session也可以使用Mem-cached服务,从而实现多台Web服务器共享Ses-sion,方便实现Web的集群,解决多Web服务器间数据共享问题。需要注意的是,Memcaehed以root权限运行,而且Memeached本身没有任何权限管理和认证功Ez]Squid中文权威指南[EB/OL].http://biog.s135.o==I/book/squid/[3]Django官方站点[EIVOL].http://们哪:djangoproject.00m/[43Squid官方站点[EB/0L].http://w帆squid-cache.org/mcached/[5]Memeaehed官方站点[EB/oL].http://www.d锄弘oo州r/1e-(上接第74页)最后用cron工具每5分钟执行一次生成一次统计页面。crontab添加以下条目:*/S****perl/var/www/dhcpperl/dhcp—stats.pl>/var/www/dhcpperl/index.html最终实现的部分查询界面如图3所示。结束语下一步我们计划把DHCP和mac认外计划开展基于IPv6的DHCP分配的研究。我们相信,随着对DHCP研究的深入,会给管理者提供更多更好的工具以把DHCPserver管理得更好。参考文献[1]R.FC2131.D帅amicHostConfigurationProtocol[2]Linux下帮助文档.marlDHCP&eonf;manDHCP.1ease[3]H3C公司.H3C¥5500-EI系列以太网交换机操作手册-Re.1ease2202(VI.03):02证结合起来,逐步做到基于认证用户的地址分配,另・80・IP业务分册-03DHCP配置缓存技术在基于Web架构信息系统中的应用
作者:作者单位:
高勃
北京交通大学信息中心 北京 100044
本文链接:http://d.g.wanfangdata.com.cn/Conference_7403291.aspx