周政尹
摘 要 随着信息技术的飞速发展,信息系统中的数据库越来越庞大,这就迫切需要采取良好的缓存模式来解决由频繁存取数据造成的性能瓶颈。本文基于WCF系统架构,研究讨论了一种分布式的缓存系统,既能高效的构建和利用缓存,又能规避由于缓存设计不合理造成的信息滞后、数据不一致等问题,可广泛应用于基于WCF技术的C/S或B/S架构的信息系统中。
【关键词】WCF技术 系统设计
1 WCF技术
WCF全称Windows Communication Foundation,是微软.net framework 3.5的一个组成部分,主要用于远程数据传输。WCF本质上是整合了windows通讯的.net remoting,WebService和Socket等机制,并融合了HTTP和FTP的相关技术,是目前windows平台上开发分布式应用的最佳实践方式。
缓存技术:
本文讨论的缓存是软件层面的系统缓存,而并非机器硬件芯片级的缓存。这里我们基于Windows .Net平台,介绍一下缓存的分类情况如图1。
如图1,不考虑第三方缓存的话,一般分为服务器缓存和客户端缓存两种。实际上,现实中大多数系统要么采用服务器缓存,要么采用客户端缓存。一般来说,B/S架构的web系统由于程序主要运行在服务器端,相应的缓存也设计在服务端,而C/S架构的桌面应用程序由于主要程序运行在客户端,相应的缓存也就设计在客户端。
2 系统设计
本文要讨论的系统客户端是桌面应用程序,服务端是WCF应用,因此具备B/S和C/S的双重特征。
借助WCF+Client的这种特殊架构,我们可以很方便的实现双重缓存:即在客户端程序和WCF服务端都设计缓存,当客户端需要访问特定数据的时候,首先匹配本地的缓存,假如本地尚没有缓存数据的话,先从服务器端获取,然后再缓存到本地。服务器上类似,当客户端请求特定数据的时候,先匹配是否已经有緩存数据,假如没有,则先(从数据库或文件等)获取。
图3展示了客户端访问基础数据的流程。假设系统总共有100个客户端,系统涉及到的基础数据有100个,那么系统运行起来之后,正真访问实际数据库(或文件系统)的次数只有100次。假如没有服务器缓存,那么系统实际访问数据库(或文件系统)的次数是100×100=10000次。假如没有客户端缓存,虽然访问数据库(或文件系统)的次数也是100次,但是客户端和服务器端之间会频繁传输数据,占用大量带宽,从而影响系统整体性能。
然而,使用缓存数据的同时,我们需要解决缓存带来的另外一个问题:数据同步问题。一般来说,我们不能缓存业务数据,而是缓存变换频率非常低的基础数据,否则数据频繁变化的话,会给系统带来诸多问题甚至是灾难。即是是变换频率非常低的基础数据,我们依然需要考虑其变化给系统带来的影响。
解决缓存数据同步问题最常见的办法是定时刷新,也就是说给缓存数据设定一个定时器,每隔一定时间(比如5分钟),就重新计算一次缓存数据(重新从数据库或文件获取)。显然,这种方法没有解决根本问题,数据很有可能在缓存刚刚刷新之后发生变化。为此,我们设计了一种“主动触发刷新”机制,使得缓存数据可以及时得到刷新。
如图4所示,系统的缓存分为服务端和客户端两级,其访问顺序上面已经介绍过。这里介绍缓存的更新问题:当客户端业务处理涉及到修改基础数据(或是缓存对应的原始数据)时,会调用响应的程序进行清理对应的服务端和客户端缓存数据。
3 实现与测试
我们基于Visual Studio 2010+.Net framework 4.0+SQL 2008 R2开发环境进行模拟测试。根据上述原理,进行一系列编码,其中最核心的过程如下,此过程实现了获取缓存的方法,如图5所示。
其中GetRemoteCache方法调用了服务器端的WCF方法,并且在WCF端,我们也采用了缓存方法。为了对比这种缓存设计与传统缓存方法在性能上的差异,我们另外编写了传统的缓存方法,并基于同样的数据、同样的数据处理过程进行模拟对比。
图6中左侧是本文设计的缓存运行效果,右图是传统缓存方式的运行效果,显然左图所占用的CPU和内存资源都要小于右图。实际上,通过本文的设计原理也不难发现,本文设计的缓存模式不只体现在效率方面,还解决了缓存数据更新同步的问题。
4 结论
缓存在计算机软件系统中有着非常重要的重要,尤其是在数据爆炸的当今,好的缓存模式可以大幅提高计算效率,有效降低网络带宽消耗。本文介绍了缓存的基本原理以及传统缓存的优缺点,结合WCF技术,设计出一种新的缓存模式,并编写了具体的软件代码进行测试验证。实施证明这种缓存模式高效、可靠,可以在大数据处理系统及实时软件系统中推广应用。
作者单位
无锡市第五人民医院 江苏省无锡市 214005