蔡俠
(中電福富信息科技有限公司,福建 福州 350003)
傳統(tǒng)的IT系統(tǒng)為了在能夠提供高速數(shù)據(jù)訪問性能的要求下還兼顧數(shù)據(jù)持久化的保障,經(jīng)常采用的“物理數(shù)據(jù)庫+共享內(nèi)存”的部署模式來存放需要高頻訪問的數(shù)據(jù)。這種部署模式的做法是將需要高頻訪問的數(shù)據(jù)從物理數(shù)據(jù)庫上載至共享內(nèi)存中,并對共享內(nèi)存數(shù)據(jù)區(qū)建立索引來提高讀的性能,對于寫的操作通過先更新內(nèi)存而后更新數(shù)據(jù)庫的方式,在數(shù)據(jù)庫提交失敗的情況下對內(nèi)存進行回滾。顯而易見,這種實現(xiàn)方式存在著代碼實現(xiàn)邏輯復(fù)雜、開發(fā)量大、新需求響應(yīng)慢、系統(tǒng)建設(shè)周期長等多種弊端。而最大的問題則是系統(tǒng)在可用性上的不足,當系統(tǒng)的主應(yīng)用服務(wù)器出現(xiàn)故障時,備用應(yīng)用服務(wù)器需要耗費一定的時間才能成將數(shù)據(jù)從物理數(shù)據(jù)庫加載到共享內(nèi)存中,這段時間內(nèi)系統(tǒng)的業(yè)務(wù)處理只能中斷。
內(nèi)存數(shù)據(jù)庫(MMDB:Main Memory Database)則為以上問題帶來一種新的解決方案,引入內(nèi)存數(shù)據(jù)庫協(xié)同傳統(tǒng)關(guān)系型物理數(shù)據(jù)庫的系統(tǒng)能夠在一定程度上兼顧數(shù)據(jù)高效訪問性能與高可用性。
內(nèi)存數(shù)據(jù)庫技術(shù)對查詢處理和數(shù)據(jù)結(jié)構(gòu)進行了重新設(shè)計,全部數(shù)據(jù)都在內(nèi)存中重新設(shè)計了體系結(jié)構(gòu),并且在數(shù)據(jù)緩存、快速算法、并行操作方面也進行了相應(yīng)的改進,能夠更加有效地使用主機CPU周期和內(nèi)存,這種技術(shù)近乎把整個數(shù)據(jù)庫放進內(nèi)存中,因而內(nèi)存數(shù)據(jù)庫能夠確保數(shù)據(jù)訪問的高性能,其數(shù)據(jù)處理速度比傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)處理速度要快很多,一般都在10倍以上。
成熟的內(nèi)存數(shù)據(jù)庫產(chǎn)品一般都具備以下重要功能特征:
(1)符合RDBMS標準;
(2)支持SQL訪問,支持ODBC&JDBC;
(3)高可靠性;
(4)支持完整日志;
(5)支持鏡像復(fù)制功能;(6)支持索引,具有較高的讀取擴展性和很好的并發(fā)性。在與傳統(tǒng)物理數(shù)據(jù)庫(如oracle等)的互操作方面,不同內(nèi)存數(shù)據(jù)庫的支持有所區(qū)別,有的需要應(yīng)用去實現(xiàn)。
以TimesTen內(nèi)存數(shù)據(jù)庫為例,其滿足了上文所述的各種特征之外還具備以下幾個重要特點:
(1)可與oracle數(shù)據(jù)庫無縫集成:支持數(shù)據(jù)在TimesTen和oracle之間雙向?qū)崟r自動同步;
(2)系統(tǒng)具備高可靠性與高可擴展性:支持多個節(jié)點并行提供服務(wù),數(shù)據(jù)能自動在多個節(jié)點間同步或異步傳輸;
(3)數(shù)據(jù)持久化有保障:通過物理磁盤上的DataStore文件和Log文件保障數(shù)據(jù)持久化;
(4)數(shù)據(jù)安全性高:通過復(fù)制服務(wù)(Replication),實現(xiàn)數(shù)據(jù)在多個內(nèi)存數(shù)據(jù)庫節(jié)點間的自動高效同步。多個TimesTen節(jié)點之間可以采用多種部署模式(Active-Standby Pair,Active-Active,Active-Standby-Disaster Recovery等)。
圖1是一個應(yīng)用了TimesTen內(nèi)存數(shù)據(jù)庫搭建的系統(tǒng)數(shù)據(jù)部署架構(gòu)。
圖1 應(yīng)用TimesTen的典型數(shù)據(jù)部署架構(gòu)
在圖1中,應(yīng)用與TimesTen部署在不同應(yīng)用主機上,應(yīng)用通過C/S連接方式訪問TimesTen,確保應(yīng)用與內(nèi)存數(shù)據(jù)庫互不干擾。應(yīng)用更改生產(chǎn)中心的主用TimesTen數(shù)據(jù)時,數(shù)據(jù)將自動完全同步復(fù)制到備用TimesTen節(jié)點,并由其異步復(fù)制到災(zāi)備中心。由于數(shù)據(jù)在主備節(jié)點間是完全同步復(fù)制的,所以主備節(jié)點的數(shù)據(jù)完全一致。這樣,當主用TimesTen發(fā)生故障時,備用TimesTen節(jié)點監(jiān)控到主用節(jié)點故障,就能夠立刻變更為主用TimesTen節(jié)點并接管對外的數(shù)據(jù)訪問服務(wù)。當應(yīng)用對節(jié)點中的數(shù)據(jù)進行更新時,仍然由該節(jié)點繼續(xù)同步到災(zāi)備中心(因為原主用TimesTen節(jié)點已經(jīng)發(fā)生故障)。當原主用TimesTen節(jié)點恢復(fù)后,其將自動更改角色為備用節(jié)點。
以某省級IT系統(tǒng)為例,其部署和管理了用戶的資料、余額、積量及公用配置等4大類數(shù)據(jù),并為多個外圍業(yè)務(wù)系統(tǒng)提供接口統(tǒng)一的數(shù)據(jù)訪問服務(wù)。系統(tǒng)在對外提供性能高效的業(yè)務(wù)數(shù)據(jù)訪問服務(wù)的同時,還必須具備高可用性。同時,由于用戶資料、余額、積量為系統(tǒng)核心關(guān)鍵業(yè)務(wù)數(shù)據(jù),還必須建設(shè)異地容災(zāi)備份中心以確保數(shù)據(jù)的安全性。為此,系統(tǒng)可引入TimesTen內(nèi)存數(shù)據(jù)庫來搭建數(shù)據(jù)管理單元。系統(tǒng)部署架構(gòu)如圖2所示。
在圖2中,應(yīng)用通過C/S方式連接訪問主用TimesTen節(jié)點上的數(shù)據(jù),當應(yīng)用更新用戶的余額、積量數(shù)據(jù)時,更新內(nèi)容通過完全同步的方式同步到備用TimesTen節(jié)點上,并由其將更新內(nèi)容異步更新到物理數(shù)據(jù)庫中。更新內(nèi)容通過異步模式同步到災(zāi)備TimesTen節(jié)點以及災(zāi)備物理數(shù)據(jù)庫中。當主用TimesTen節(jié)點發(fā)生故障時,由于備用TimesTen節(jié)點上的數(shù)據(jù)與主用TimesTen節(jié)點完全一致,所以備用TimesTen節(jié)點能立刻接管數(shù)據(jù)服務(wù),由此與應(yīng)用節(jié)點集群一同保證了系統(tǒng)整體的高可用性。
圖2 某IT系統(tǒng)架構(gòu)
由于內(nèi)存數(shù)據(jù)庫系統(tǒng)提供了內(nèi)存數(shù)據(jù)的管理,并支持包括SQL、JDBC和ODBC等在內(nèi)的開放業(yè)界標準,其兼容性好,應(yīng)用開發(fā)的復(fù)雜度低,系統(tǒng)的穩(wěn)定性高。同時,成熟的內(nèi)存數(shù)據(jù)庫產(chǎn)品一般提供了標準的應(yīng)用開發(fā)接口,能夠大大縮短開發(fā)周期,原先在傳統(tǒng)數(shù)據(jù)庫下開發(fā)的代碼也能夠很容易地進行移植,系統(tǒng)也更易維護。但因受制于內(nèi)存數(shù)據(jù)庫主機的內(nèi)存大小,內(nèi)存數(shù)據(jù)庫可部署管理的數(shù)據(jù)容量遠比物理數(shù)據(jù)庫要小。從快速恢復(fù)的角度來看,內(nèi)存數(shù)據(jù)庫的單庫容量也不適宜過大。此外,由于TimesTen的數(shù)據(jù)文件和日志文件均存儲在物理磁盤上并需要與內(nèi)存保持同步以確保數(shù)據(jù)的完整性,如果物理磁盤I/O性能不佳也一樣會限制其性能的發(fā)揮。所以,內(nèi)存數(shù)據(jù)庫在一段時期內(nèi)更適合看作是傳統(tǒng)物理數(shù)據(jù)庫的一種強有力的補充。在實際應(yīng)用中,我們應(yīng)當針對系統(tǒng)面臨的各種業(yè)務(wù)場景進行具體分析,可以考慮采取內(nèi)存數(shù)據(jù)庫與物理數(shù)據(jù)庫配合共用的方式進行數(shù)據(jù)部署架構(gòu)的設(shè)計。