周政尹
摘 要 隨著信息技術的飛速發展,信息系統中的數據庫越來越龐大,這就迫切需要采取良好的緩存模式來解決由頻繁存取數據造成的性能瓶頸。本文基于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