首页 > 范文大全 > 正文

普招网报系统中服务器集群与缓存的研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇普招网报系统中服务器集群与缓存的研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:该文对河南普招招生志愿填报系统服务器集群的部署与缓存的使用进行了研究,提出了服务器集群与缓存技术相结合来提高网站的性能的方案,该方案制采用了一种新的基于地址表的服务器集群部署方法。同时对服务器集群下Memcached的使用进行说明,并对其存在的缺陷提出了解决方法。该方案适合于类似大型网站的部署具有很强的推广价值。

关键词:服务器集群 Memcached;分布式部署;负载均衡

中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)34-9631-03

The Research of Server Cluster and the Cache in the System of Applying for Preferred Universities

CONG Qing, SHENG Xia-jiong

(College of Computer and Information Engineering, Henan University, Kaifeng 475004, China)

Abstract: This article creatively discussed the deployment of server cluster and the cache under the cluster in the system of applying for preferred Universities of Henan. A new method ofmaking server clustering and caching technology combine to improve the performance of the program Web site was proposed.This method proposes a new method of cluster deployment based on the address table. Meanwhile this paper descripts how to use the memcached of the server cluster, and proposes the solution to the shortcomings of the memcached. The program is suitable for the deployment of large sites and has a strong value of promotion.

Key words: server cluster memcached; server load; balancing clusters; load balancing

河南普招招生志愿填报系统它把专升本志愿填报,对口生志愿填报和普通高招志愿填报基于一体,每年的用户达到百万,有时甚至每秒钟的同时登陆用户数都可以达到数十万,大量的用户同时访问必然给服务器带来较高负载,如何解决服务器的高负载问题成为提高网站性能系统开发过程中首先要解决的问题。利用服务器集群[1]与集群下的缓存技术[2]相结合是提高网站性能的最佳方案。

服务器集群系统是指由多台同构或异构的服务器组成的服务器组,对外提供透明的服务,从而协同地完成特定的任务。集群就是一种并行或分布式处理的系统。但是我们如果仅采用集群的服务器部署方法,虽然网站性能有较大的提高,但是依然无法避开与慢速存储介质(硬盘、磁带)的数据交换,一旦涉及到了存储介质的io操作,存取性能就会急剧下降,所以我们要结合缓存技术把全部操作都放到内存中进行,即在web/app层与db层之间加一层cache层,主要目的:1) 减少数据库读取负担;2) 提高数据读取速度;3) 提高系统的并发能力。通过把cache层与他们的web架构集成,在提高的应用程序性能的同时,还大大降低了数据库的负载。

1 服务器集群分布式环境的部署

所以服务器集群分布式环境[3]的部署方式是我们提高网站性能的关键所在,普招网报系统中架构前台操作:采取B/S结构,面向考生的服务用web形式实现;后台维护:采用B/S架构+WinForm的形式,实现业务、数据和显示的分离。所以服务器的部署分为web服务器的部署[4-6]和数据库的部署。

在web服务器的部署方面我们采用硬件负载均衡技术[7],这样的优点是专门的设备完成专门的任务,独立于操作系统,整体性能得到较大提高,加上多样化的负载均衡策略,智能化的流量管理,可实现最佳的负载均衡目的。硬件负载均衡技术的缺点是硬件设备比较昂贵、成本投入大,但是硬件负载均衡在功能和性能上优于软件方式,所以成本的提高也是可以接受的。

数据库服务器采用集群模式,根据数据库所在地报考人数的多少给集群中的服务器制定不同的region范围限制,将全省所有考生的数据分散存放于不同的服务器中,在web服务器中程序的部署时在制作维护一个地址表,记录所有分布式数据库的地址和存放数据的region范围,当用户在业务系统登录时,先调用本系统提供的接口进行用户验证,验证成功后,将用户的唯一性标识写入cookie,然后根据用户的唯一性标识与web服务器中的地址表现对照,根据标识所属的region范围找出数据存放地址,进而采用动态改变连接字符串的方法从相应服务器中提取出用户数据,这样就可以从服务器中直接提取出用户信息,而不用根据用户标识对数据库服务器集群的所有服务器进行逐一查询,从而缩短数据的存取时间,提高数据查询效率(见图1)。

优点:实现起来非常简单只需要在web服务器中程序的部署时制作维护一个地址表,成本非常小不需要任何中间件产品,实现起来非常灵活可以跟据不同服务器所在市区报考人数多少来改变region的范围,并且实现起来性能较高,不受网络状况的影响。

2 服务器集群下缓存系统的选择

如何解决数据的缓存问题成为网站性能再次提高的关键,对数据进行缓存最简单的办法就是直接利用.NET Framework提供的缓存功能,虽然系统默认的实现比较简单,但是有一定的不足:

1) 不能限制缓存的数据个数或者占用的内存大小,对于普通高招这样的应用,用户高达百万,如果不加限制的使用缓存,可能服务器的内存将会被耗尽。

2) 不能对达到限制条目数的缓存进行清除。

3) SQL Dependency技术对原始SQL语句求过严,不利于实际过程中的使用。

为了解决上述不足,采用了分布式的内存对象缓存系统,微软自己的分布式内存缓存系统Velocity才发展到CTP2,目前直接用到系统中不可靠,所以就采用开源的分布式cache系统memcached[8-11],memcached是高性能的分布式内存缓存服务器,最大的优点是可以分布式的部署,这对于普招这样大规模应用来说也是必不可少的要求。

Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached通过在内存里维护一个统一的巨大的hash表,可用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问,因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。

但是memcached使用内存管理数据,所以数据是易失的,当服务器重启,或者memcached进程中止时,数据便会丢失,不能用来持久保存数据。但是像普招数据是不允许有任何差错的,所以我们必须找出一种办法是memcached里面的数据能够像数据库一样稳定,并能叫用户通过标准的SQL查询语句进行访问。

我们采用memcachedb和memcache_engine来解决这个问题,memcachedb给memcached分布式缓存服务器添加了Berkeley DB的持久化存储机制和异步主辅复制机制,使其具备了事务恢复能力、持久化能力和分布式复制能力,非常适合于需要超高性能读写速度。但是memcached只能支持根据已知的key去查询对应的value,不支持内存对象的遍历操作,更不能支持复杂的查询操作。memcache_engine恰好能解决这一问题,memcache_engine是一个MySQL数据库的存储引擎,目前只支持MySQL5.1数据库。他通过把memcachedb作为MySQL数据库的一个存储引擎和MySQL集成起来, 让用户通过标准的SQL查询语句访问memcachedb中存放的数据, 所以memcachedb和memcache_engine可以使memcached真正成为了一个高性能的分布式数据库系统。

3 服务器集群下Memcached的部署和测试

1) 解压memcached压缩包,需要注意该程序运行需要VC7.0运行库msvcr71.dll和msvcp71.dll。

2) 使用sc命令创建服务,下面的例子创建占用128M内存(默认64M),最大2048个连接(默认1024),监听端口11211(默认)的服务。

sc create memcached binpath="C:\memcached\memcached.exe-d runservice-m128-c2048-p11211"start=auto displayname="memcached"

3) 客户端访问

第一步:修改App.config或者Web.config

type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />

connectionTimeout="00:10:00" deadTimeout="00:02:00" />

第二步:引用Enyim.Caching.DLL和log4net.DLL

第三步:简单的访问代码:

using Enyim.Caching;

using Enyim.Caching.Memcached;

// Memcached计时

DateTime dtC = DateTime.Now;

//创建一个MemcachedClient

MemcachedClient mc = new MemcachedClient();

//在缓存中存储字符串

mc.Store(StoreMode.Set, "DREGION", tempData);

//从缓存中检索该字符串

DataSet tt = (DataSet) mc.Get("DREGION");

DateTime dtD = DateTime.Now;

第四步:测试

我们对数据的读取操作进行了六次试验并记录每次所花费时间,每次运行后均重新运行测试系统,使其运行环境相同不受其它因素干扰,前一组是在3台服务器集群下采用memcached进行缓存时候写入和读取的时间,后一组是在另一台计算机上单纯读取的时间:

00:00:00.1690000 00:00:00.1650000 00:00:00.1630000

00:00:00.1680000 00:00:00.1690000 00:00:00.1660000

00:00:00.1600000 00:00:00.1590000 00:00:00.1650000

00:00:00.1640000 00:00:00.1690000 00:00:00.1610000

从六组数据可以看出,在服务器集群下采用memcached进行缓存时候写入和读取的时间与在一台计算机上单纯读取的时间相差非常小,从而证明了memcached缓存系统的高效性。

4 结束语

通过基于地址表的服务器集群部署与集群下memcached缓存技术使用,减少了网站的数据库连接、查询等操作,降低了服务器的负载,提高了脚本运行数度,从而把志愿填报网站的性能提高数倍而无需牺牲准确性。该方案经过09年网上志愿填报的使用,证明了该方案的高效性和可行性,该方案可以应用到其它大型网站的部署中具有很强的推广价值。

参考文献:

[1] 戴刚.服务器集群关键技术的研究与实现[D].北京:国防科学技术大学图书馆,2002.

[2] 叶萃,张松.一种终端服务器内存优化方法[J].微电子学与计算,2007(3):16-17.

[3] 王柏,王红慢,邹华.分布计算环境[M].北京:北京邮电大学出版社,2000.

[4] 丁鹏,刘方,邵志峰,等.Struts技术揭密及Web开发实例[M].北京:清华大学出版社,2004:30-46.

[5] Schroeder T,Goddard S,Ramamurthy B.Scalable Web Server Clustering Technologies[J]wort,2000(56):0890-8044.

[6] Iyengar A,Challenger J,Diasetal D.High-Performance Web Site Design Techniqu[J].IEEE.Internet Computing,2000(34):1089-7801.

[7] 刘振英,张毅.多机系统的动态负载平衡[J].计算机科学,1999(26):38-40.

[8] Memcached[EB/OL]./memcached.

[9] Jellycan Code | memcached[EB/OL]./memcached.

[10] Memcached Client[EB/OL]./EnyimMemcached.

[11] Lerner R M.Memcached Integration In Rails[J].Linux Journal,2009(177).