蔡俠
(中電福富信息科技有限公司,福建 福州 350003)
傳統的IT系統為了在能夠提供高速數據訪問性能的要求下還兼顧數據持久化的保障,經常采用的“物理數據庫+共享內存”的部署模式來存放需要高頻訪問的數據。這種部署模式的做法是將需要高頻訪問的數據從物理數據庫上載至共享內存中,并對共享內存數據區建立索引來提高讀的性能,對于寫的操作通過先更新內存而后更新數據庫的方式,在數據庫提交失敗的情況下對內存進行回滾。顯而易見,這種實現方式存在著代碼實現邏輯復雜、開發量大、新需求響應慢、系統建設周期長等多種弊端。而最大的問題則是系統在可用性上的不足,當系統的主應用服務器出現故障時,備用應用服務器需要耗費一定的時間才能成將數據從物理數據庫加載到共享內存中,這段時間內系統的業務處理只能中斷。
內存數據庫(MMDB:Main Memory Database)則為以上問題帶來一種新的解決方案,引入內存數據庫協同傳統關系型物理數據庫的系統能夠在一定程度上兼顧數據高效訪問性能與高可用性。
內存數據庫技術對查詢處理和數據結構進行了重新設計,全部數據都在內存中重新設計了體系結構,并且在數據緩存、快速算法、并行操作方面也進行了相應的改進,能夠更加有效地使用主機CPU周期和內存,這種技術近乎把整個數據庫放進內存中,因而內存數據庫能夠確保數據訪問的高性能,其數據處理速度比傳統數據庫的數據處理速度要快很多,一般都在10倍以上。
成熟的內存數據庫產品一般都具備以下重要功能特征:
(1)符合RDBMS標準;
(2)支持SQL訪問,支持ODBC&JDBC;
(3)高可靠性;
(4)支持完整日志;
(5)支持鏡像復制功能;(6)支持索引,具有較高的讀取擴展性和很好的并發性。在與傳統物理數據庫(如oracle等)的互操作方面,不同內存數據庫的支持有所區別,有的需要應用去實現。
以TimesTen內存數據庫為例,其滿足了上文所述的各種特征之外還具備以下幾個重要特點:
(1)可與oracle數據庫無縫集成:支持數據在TimesTen和oracle之間雙向實時自動同步;
(2)系統具備高可靠性與高可擴展性:支持多個節點并行提供服務,數據能自動在多個節點間同步或異步傳輸;
(3)數據持久化有保障:通過物理磁盤上的DataStore文件和Log文件保障數據持久化;
(4)數據安全性高:通過復制服務(Replication),實現數據在多個內存數據庫節點間的自動高效同步。多個TimesTen節點之間可以采用多種部署模式(Active-Standby Pair,Active-Active,Active-Standby-Disaster Recovery等)。
圖1是一個應用了TimesTen內存數據庫搭建的系統數據部署架構。

圖1 應用TimesTen的典型數據部署架構
在圖1中,應用與TimesTen部署在不同應用主機上,應用通過C/S連接方式訪問TimesTen,確保應用與內存數據庫互不干擾。應用更改生產中心的主用TimesTen數據時,數據將自動完全同步復制到備用TimesTen節點,并由其異步復制到災備中心。由于數據在主備節點間是完全同步復制的,所以主備節點的數據完全一致。這樣,當主用TimesTen發生故障時,備用TimesTen節點監控到主用節點故障,就能夠立刻變更為主用TimesTen節點并接管對外的數據訪問服務。當應用對節點中的數據進行更新時,仍然由該節點繼續同步到災備中心(因為原主用TimesTen節點已經發生故障)。當原主用TimesTen節點恢復后,其將自動更改角色為備用節點。
以某省級IT系統為例,其部署和管理了用戶的資料、余額、積量及公用配置等4大類數據,并為多個外圍業務系統提供接口統一的數據訪問服務。系統在對外提供性能高效的業務數據訪問服務的同時,還必須具備高可用性。同時,由于用戶資料、余額、積量為系統核心關鍵業務數據,還必須建設異地容災備份中心以確保數據的安全性。為此,系統可引入TimesTen內存數據庫來搭建數據管理單元。系統部署架構如圖2所示。
在圖2中,應用通過C/S方式連接訪問主用TimesTen節點上的數據,當應用更新用戶的余額、積量數據時,更新內容通過完全同步的方式同步到備用TimesTen節點上,并由其將更新內容異步更新到物理數據庫中。更新內容通過異步模式同步到災備TimesTen節點以及災備物理數據庫中。當主用TimesTen節點發生故障時,由于備用TimesTen節點上的數據與主用TimesTen節點完全一致,所以備用TimesTen節點能立刻接管數據服務,由此與應用節點集群一同保證了系統整體的高可用性。

圖2 某IT系統架構
由于內存數據庫系統提供了內存數據的管理,并支持包括SQL、JDBC和ODBC等在內的開放業界標準,其兼容性好,應用開發的復雜度低,系統的穩定性高。同時,成熟的內存數據庫產品一般提供了標準的應用開發接口,能夠大大縮短開發周期,原先在傳統數據庫下開發的代碼也能夠很容易地進行移植,系統也更易維護。但因受制于內存數據庫主機的內存大小,內存數據庫可部署管理的數據容量遠比物理數據庫要小。從快速恢復的角度來看,內存數據庫的單庫容量也不適宜過大。此外,由于TimesTen的數據文件和日志文件均存儲在物理磁盤上并需要與內存保持同步以確保數據的完整性,如果物理磁盤I/O性能不佳也一樣會限制其性能的發揮。所以,內存數據庫在一段時期內更適合看作是傳統物理數據庫的一種強有力的補充。在實際應用中,我們應當針對系統面臨的各種業務場景進行具體分析,可以考慮采取內存數據庫與物理數據庫配合共用的方式進行數據部署架構的設計。