文|張元胄
內存數據庫技術在金融信息服務平臺關鍵項目建設中的應用及未來項目應用研究
文|張元胄
金融信息服務平臺(“新華08”)2006年上半年正式啟動以來,在各級領導的重視和指導下,經過新華社多個部門同志們的協調和共同努力下,已經走過了8年的時間,目前仍然為超過17000用戶服務。在技術項目建設過程中,隨著服務內容不斷豐富,用戶規模成幾十倍的滾動式擴大,很快就遠超過平臺系統原設計服務能力,系統運行緩慢等性能問題逐漸顯現,服務質量不能滿足用戶快速高效獲取信息的要求,需要尋找新的技術解決方案在不增加額外硬件投入的情況下,調整自身資源配置、優化服務。
經過探索研究,合理采用新的內存數據庫技術,解決了在不增加現有硬件投入的情況下,顯著提高服務的響應速度,增大并發服務能力,從技術上改善和提升了服務質量。
內存數據庫是有別于傳統數據庫處理數據方式的新技術。其工作原理是將所有基礎數據存于物理內存,當需要大量提取數據時,可以不用訪問磁盤而直接訪問存于物理內存的數據,從而獲得極高的存取速度和極強的并發訪問能力。它是基于內存技術,通過改變數據在運行時駐留位置的假設來提供實時性能。內存數據庫系統針對內存而不是磁盤進行設計和優化,沒有緩沖管理、日志管理等額外開銷,優化數據結構和訪問算法,數據庫操作能夠以最大效率執行,減少對于CPU和磁盤I/O等系統資源的需求,從而大大提高響應速度和數據吞吐量,甚至能夠與完全使用緩存磁盤的關系型數據庫管理系統相媲美。
目前的內存數據庫產品仍然是關系型數據庫,支持傳統數據庫的開發和使用方式。內存數據庫與傳統數據庫的區別對于上層應用來講近乎透明,提供很多標準開發接口,開發過程中不需要額外知識。
內存數據庫提供閃電般的處理速度,具備極強的數據處理能力。
可以嵌入式開發。在特定場合的高速應用中,可以將內存數據庫集成在應用中,減少進程間通信等技術開銷。
在應用目標上,傳統關系型數據庫是針對關鍵業務應用,內存數據庫更偏向實時性要求很高的業務應用。傳統數據庫是以磁盤作為數據庫系統優化的中心,而內存數據庫是以內存為中心。
在部署方式上,傳統數據庫通常部署在數據庫層,而內存數據庫相對更多的部署在應用層,以發揮更高的效率。
在查詢優化方面,傳統數據庫通過復雜的查詢優化算法減少磁盤I/O性能瓶頸以提高速度,有較高的CPU使用率。而內存數據庫使用簡單的查詢優化算法,不存在磁盤I/O瓶頸,CPU使用量較小。
在響應時間方面,傳統數據庫一般是毫秒到秒級響應,而內存數據庫的響應范圍在微秒到毫秒級響應。
在數據存儲容量方面,傳統數據庫主要受磁盤存儲容量的限制,可以達到TB或PB級,而內存數據庫受到內存容量的限制,一般只能達到GB級。
1.常用數據緩存
緩存經常被訪問的數據,提高應用的處理能力及反應速度,減少網絡和后臺數據庫的負載。
2.“熱數據”緩存
緩存當前正在使用的數據或者重要客戶的數據,以提高反應速度優化服務,提高用戶的忠誠度。
3.實時的交易處理
內存數據庫是可對消息隊列和事務進行處理的實時數據庫,并且可以把處理結果推送到后臺數據庫。
內存數據庫應用最為廣泛的是電信領域,在網絡、金融、教育、企業管理、客戶服務等諸多領域也有應用。例如電信企業的實時計費、增值服務、收入保障,金融企業的訂單匹配、風險管理和實時分析等。在華爾街和世界知名電信企業均有成功應用案例。
根據金融信息服務平臺建設過程中的了解,目前內存數據庫軟件廠商主要有以下3家產品:Oracle TimesTen,Altibase內存數據庫和eXtremeDB。
Oracle TimesTen是Oracle從TimesTen公司收購的一個內存數據庫產品,經過近幾年與Oracle自身產品線的融合,在與Oracle產品相容性方面較之其他產品有較大提高。
Altibase內存數據庫以處理復雜數據庫查詢語言見長,針對傳統的商業關系型數據庫領域,能夠提供較高的性能、通用性以及穩定性。
eXtremeDB在項目建設過程中因為各種原因沒有實際應用過。根據了解它是一款為實時嵌入式系統數據管理而設計的數據庫,開銷僅有幾十K字節,處理速度很高,專業性較強。
金融信息服務平臺用戶身份驗證子系統,2007年11月正式上線服務,已經穩定可靠運行6年半,為“新華08”客戶端主界面、資訊系統、結構化系統、債券系統、產權系統和部分行情數據的客戶端發布展示提供實時、可靠的用戶身份合法性驗證服務。用戶身份合法性驗證系統好比是“新華08”大門上一把堅固的安全鎖,而正是由于所有的數據進出首先都要經過這道大門,大門安全鎖的開啟速度和大門的用戶通過能力就顯得格外重要。用戶身份合法性驗證是用戶認證系統的后續延伸,它的設計不能脫離原有認證系統的存儲方式和業務流程。因此在該系統設計中,我們把內存數據庫作為磁盤數據庫的數據緩沖,在應用層的程序里巧妙地處理了有關異構平臺銜接的問題。根據實際運行日志分析,最高日處理請求40萬次,原先需要幾十毫秒完成的檢索操作,現在大部分可以在1毫秒內完成。用戶身份合法性驗證系統這把安全鎖和鑰匙完全是由新華社自主開發、研制,鎖鑰的秘密及全部知識產權均掌握在新華社的手中,不會受外來因素的干擾與制約。
金融信息服務平臺資訊授權子系統,2008年1月正式上線服務。該系統為“新華08”資訊系統提供授權控制、授權驗證和授權管理功能,相當于資訊系統的大門,保護重要的資訊資源,可以為業務部門采購的第三方有用戶數量限制的資訊信息提供授權保護。資訊授權子系統建設中面臨與用戶驗證子系統類似的情況,系統處于核心位置,一旦出現意外將直接影響用戶使用。經過反復對比測試,選擇內存數據庫作為資訊授權子系統的核心數據存儲運行方案,傳統的關系型數據庫作為內存數據庫的數據備份和第二應急方案。在這個系統建設中,我們沒有使用業界慣用的三層服務結構,而采用“客戶端-中間件-內存數據庫-磁盤數據庫”的四層服務結構。實踐證明,通過增加內存數據庫層,顯著提高了系統的數據檢索速度,增強了多用戶多線路的同時處理能力,授權控制平均時延小于1毫秒,最高時延不超過十幾毫秒。如果采用傳統的關系性數據庫進行這項控制,依據現有硬件資源,大約需要幾十到上百毫秒完成。該系統也是由新華社自主設計和開發,而且值得一提的是,“客戶端-中間件-內存數據庫-磁盤數據庫”四層服務結構概念的應用,這項技術在當時處于領先水平。
用戶行為收集模塊,針對用戶對特定資源的訪問進行記錄,將記錄收集起來以供事后分析使用。由于需要收集大量用戶請求,我們在設計中使用內存數據庫作為存儲緩沖,以降低對用戶使用的影響,同時可以保證數據被完整保存下來。根據統計最高峰時儲存記錄超過146萬條。
內存數據庫技術從金融信息服務平臺項目建設到服務于用戶認證系統和資訊系統,已經安全可靠運行6年。根據日志分析,在核心系統運行的情況達到了設計之初的預期,完全滿足業務要求。通過與傳統關系型數據庫的優勢互補,可以實現強大、高效、靈活、可靠的數據存儲和運行支撐。在項目建設中,沒有額外增加硬件設備投入,僅僅通過軟件技術改造,充分利用現有硬件資源,就實現了顯著提高相關服務的響應速度和并發服務能力的目的。
設計上大膽嘗試國際新技術,在社內項目建設中首次嘗試使用內存數據庫。并且基于內存數據庫技術,大膽提出并且在生產系統中實際使用客戶端-中間件-內存數據庫-磁盤數據庫的四層服務結構。這個結構在用戶身份驗證和資訊授權等系統中已經運行一年后, 世界知名的Oracle數據庫廠商在技術交流中,才提出了未來的四層服務結構方案設想。
金融信息服務平臺內存數據庫的技術方案設計和開發工作完全由新華社自主進行,實際使用的核心代碼不受外來因素干擾和制約。
內存數據庫技術是實時數據庫模型,提供了較為完備的數據庫服務保障機制,具有較好的容錯性和災難恢復能力,具備一定的數據庫安全能力,擁有訪問準入機制,數據安全性在實時產品中更有保障。
部分內存數據庫產品具有MVCC多版本并發控制機制,可以提高多個并發環境下的高性能。當數據更新過程中,數據更改還未提交的時候,被鎖定的記錄可以對外提供查詢。
內存數據庫部署簡便,沒有傳統關系型數據庫的復雜部署工作和調試。
內存數據庫技術的采用,減少應用層實現對實時數據存儲和維護所帶來的麻煩。同時,降低編碼復雜程度,加快了項目建設進度,有利于產品的快速成型和快速投入生產。
內存數據庫軟件產品價格較高,技術具有很強的專業性,只有恰當的領域或場景下才能起到關鍵作用。在不需要該項技術的環節濫用該技術,會增加不必要的經濟成本和技術復雜度。在一些技術實現細節中不如傳統關系型數據庫完備,需要應用層進行一些額外開發。如果在結構設計中巧妙回避這些問題,可以得到事半功倍的效果。
由于應用場景不同,業務要求不同,使用內存數據庫技術帶來的效率提升會有很大區別。在適合的應用條件下,內存數據庫的采用可以顯著提高響應速度和并發處理能力。如果對傳統數據庫進行調優和額外配置,有時內存數據庫的使用并不能凸顯其作用。
伴隨內存價格的降低和容量的不斷提高,內存數據庫技術在項目建設中的作用將會進一步顯現。
結合內存數據庫技術正在進行的探索和研究方向還有:
在實時行情數據發布領域中,主要存在兩種技術,一種是共享內存技術,另外一種是內存數據庫技術。經過檢索,兩項技術在全球相關領域中均有實現。
共享內存技術是相對最快的實時行情接收和發布技術,可以最大限度的充分利用硬件資源以最快的速度向用戶播發行情數據。但是由于共享內存技術是一種專業性高、定制性強的技術,在保證高效率的同時,通用性較差,數據的維護以及與其他系統的交互能力相對較弱。
內存數據庫技術,是從電信領域業務需求發展起來的專用型數據庫技術,目前處于發展上升階段,正在朝通用型數據庫方向發展。但是,內存數據庫技術也遇到了管理需求和性能需求的取舍矛盾。根據實際測試和使用比較,不同公司的產品取舍策略不同。有的產品與其他產品或者應用結合得更好,但是在服務性能上略有損失。有的產品在性能上給我們留下深刻印象,但是管理與應用開發有需要注意和特殊處理的內容。
在我社金融信息服務平臺項目中,高性能的獲得與可擴展性和易維護性的實現之間,內存數據庫技術取得了比較合適的平衡。對于實時行情數據的發布,可采用以下技術方案:
對于實時性要求很高的業務需求,采用共享內存技術,是最佳選擇。在這樣的需求中,業務管理的便捷性、可擴展性和通用性要求相對較低,一切為速度服務。
對于實時性要求不高的業務需求,例如歷史數據、低速率變動的數據或者一些發布獲取渠道本身就存在較明顯延遲的數據,傳統關系型數據庫是最佳選擇。通過對傳統關系型數據庫的性能調優,可以在一定程度上獲得比較滿意的準實時性要求。
對于有很高實時性要求而可維護性、可擴展性和通用性要求也很高的業務需求,如果可以舍棄一部分實時性要求,這部分性能差異約在毫秒級,值得考慮應用內存數據庫技術。
實時行情數據的準實時分析是一項復雜耗時又耗費服務資源的工作。現階段對于基于共享內存技術的實時行情系統,在實現準實時數據分析的時候,受到應用實現本身的制約,需要大量的額外開發工作,很難理想的處理大量實時數據。在不同服務器之間進行數據同步也非常困難。如果使用傳統關系型數據庫進行這項工作,由于產生大量磁盤I/O操作,會使得這項工作變得更加難以實現。
采用內存數據庫技術,可以在一定程度上結合上述二者的優勢,彌補相互不足。服務器間有比較完備和標準的數據同步方式,僅需要少量開發就可以實現服務器間的數據同步,也可以單獨部署行情分析應用,以不干擾實時行情發布服務。行情數據的準實時分析和跟蹤,從技術上為“新華08”取得強于其他軟件產品的服務優勢。由于內存數據庫軟件產品本身的價格因素,中小規模軟件產品難以應用該項技術。該項技術在復雜環境和龐大的數據規模中更能顯示其優勢,因此內存數據庫技術的采用可以擴大在相關領域的技術優勢。例如自動分析和跟蹤特定業務需求的金融產品,查找當前市場中的不同指標的熱點。這些功能將顯著優于現有國內同類軟件產品。一些軟件僅能根據少量指標進行分析,而內存數據庫技術的引入可以實現所有數據的單一分析和組合分析。準實時分析與數據倉庫技術相比較,其最大的優勢就是:極快、準實時。與共享內存技術相比較其特點是:便捷與全面。
風險控制和監管,在項目建設中還相對比較滯后。但作為系統中必不可少的重要環節,在未來的發展中這部分功能一定會得到顯著強化。在這個過程中,將面對系統結構復雜、數據量龐大的問題。如何面對開放的系統服務帶來的安全隱患,如何監管系統運行狀態和用戶的行為,特別是實時獲取這些信息而不是在出現問題很久之后才發現,這些課題將會呈現在決策者和技術結構設計人員的面前。
數據庫技術、審計技術等一系列手段都將會得到廣泛應用。適當的引入內存數據庫技術,將可以實現對于風險控制和監管的實時處理。借鑒網絡安全中入侵防護體系的一些經驗,可以制定一些自動處理策略,讓系統按照事先規定的策略和預案進行預處理,在需要人為干預的時候盡早通知有關人員。類似功能的實現離不開實時數據的收集和處理。
目前已經嘗試對一些頻繁發生寫入操作的日志處理采用結合內存數據庫的技術實時方案。在這樣的應用場景中,可以最快速地將需要記錄的信息寫入系統,降低對外服務延遲,提升服務能力。這些被記錄的日志信息再由其他處理邏輯進行分類與存檔,供其他需要使用。例如,將日志信息轉存到傳統關系型數據庫中,以便更加長期的保留和進行分析。
“新華08”系統采用“統一認證、分布授權”的指導思想,考慮業務的靈活性和松耦合的技術要求,各個子系統具有獨立授權模塊。資訊授權子系統的實施已經證明,在各個子系統的授權邏輯中,恰當引入內存數據庫技術是可以顯著提高服務性能和授權速度,對于整體服務水平的提高是有幫助的。
長達6年半的實踐檢驗證明,內存數據庫技術在金融信息服務平臺項目建設中的應用是成功的。它將原來的處理效率提高了4倍以上。對于檢索等特定邏輯的應用,效率提升達10倍。根據觀察還發現了整體性能提高幾十倍的特定情況。內存數據庫技術在子系統關鍵業務的應用,改善了“新華08”技術服務狀況,顯著增強系統的安全性,對于重要稀有資源的保護起到了很好的作用。此外,在性能方面的提升非常明顯,可用較少的硬件資源提供較強的并發服務能力和更快的響應速度。
在今后的金融信息服務平臺項目和其他新華社項目中,適當的因地制宜的采用內存數據庫技術,將會使“新華08”項目和其他項目技術服務水平的提升更容易。新技術還在不斷涌現和發展,伴隨科技的進步,不斷開拓創新,努力把“新華08”項目建設的更好,將是技術工作者的奮斗目標。
新華社技術局工程師)