張良, 王純, 李煒
(1 北京郵電大學網(wǎng)絡與交換技術國家重點實驗室,北京 100876;2 東信北郵信息技術有限公司,北京 100191)
基于內(nèi)存數(shù)據(jù)庫的存儲集群的關鍵技術研究*
張良1,2, 王純1,2, 李煒1,2
(1 北京郵電大學網(wǎng)絡與交換技術國家重點實驗室,北京 100876;2 東信北郵信息技術有限公司,北京 100191)
基于磁盤數(shù)據(jù)庫的存儲集群由于內(nèi)外存交換開銷過大,無法支撐數(shù)據(jù)的實時存儲與處理,因此使用基于內(nèi)存數(shù)據(jù)庫的存儲集群成為目前很多業(yè)務數(shù)據(jù)存儲的設計方案。本文主要研究了基于內(nèi)存數(shù)據(jù)庫的存儲集群中的數(shù)據(jù)庫代理、單點故障恢復等關鍵技術。
內(nèi)存數(shù)據(jù)庫;存儲集群;數(shù)據(jù)庫代理;單點故障恢復
隨著Internet 技術的快速發(fā)展,接入網(wǎng)速度不斷提高,主干帶寬不斷擴容,用戶規(guī)模不斷擴大,傳統(tǒng)影響網(wǎng)絡速度的因素不斷減少,目前影響網(wǎng)絡速度的主要瓶頸集中在訪問距離和服務器承載負荷能力方面。同時,隨著網(wǎng)站訪問量日漸增大、內(nèi)容不斷豐富和用戶期望值不斷提高,用戶應用需要提供更快的訪問速度和承受更大的負荷量,所有這些都依賴于網(wǎng)站服務器的基礎設施。目前,最常用的解決方案是采用像MySQL的磁盤數(shù)據(jù)存儲集群來處理海量數(shù)據(jù)的存儲和訪問,但這種解決方案存在的最大問題是訪問的效率不高,也成為服務器端的處理性能上的最大瓶頸,而目前常用的優(yōu)化方案是采用基于內(nèi)存數(shù)據(jù)庫的存儲集群架構。
基于內(nèi)存數(shù)據(jù)庫的存儲集群既在數(shù)據(jù)存儲量上能滿足現(xiàn)有互聯(lián)網(wǎng)業(yè)務的需求,同時,在訪問性能上相較于磁盤數(shù)據(jù)庫有了很大提高。因此,采用基于內(nèi)存數(shù)據(jù)庫的存儲集群架構基本滿足現(xiàn)有的海量數(shù)據(jù)、高并發(fā)系統(tǒng)的需要,也在互聯(lián)網(wǎng)業(yè)務中得到了廣泛的應用。
存儲集群是指由若干個“通用存儲設備”組成的用于存儲的集群,組成集群存儲的每個存儲系統(tǒng)的性能和容量均可通過“集群”的方式得以疊加和擴展。傳統(tǒng)的存儲系統(tǒng)由于受到諸如控制器性能,總線性能,磁盤驅(qū)動器的數(shù)量,所連接服務器的數(shù)量,內(nèi)存大小,NAS(Network Attached Storage)頭的性能等物理組成的限制,以及諸如支持文件系統(tǒng)的容量,元數(shù)據(jù)和數(shù)據(jù)處理通路的耦合,快照或復制的數(shù)量等功能上的局限,造成了存儲系統(tǒng)瓶頸的出現(xiàn)。一旦遇到存儲系統(tǒng)的瓶頸,就會有兩種選擇:一是采用硬件更加強大的單個存儲系統(tǒng);二是采用若干個普通性能的存儲系統(tǒng)來組成“存儲的集群”?!凹骸弊鳛橐豁椧驯粡V泛使用的體系結構,如果采用到存儲上組成“集群存儲”,就可提供按比例增加的存儲資源的性能、容量、可靠性及可用性,突破了單機設備的種種限制。
目前業(yè)內(nèi)常用的存儲集群基于的是諸如MySQL這樣的磁盤數(shù)據(jù)庫,它的整體設計架構相對簡單,如圖1所示。
圖1 基于磁盤數(shù)據(jù)庫的存儲集群架構
對于應用程序來說,整個存儲集群架構是透明的,應用程序在查詢數(shù)據(jù)和更新數(shù)據(jù)時,只需向數(shù)據(jù)庫代理發(fā)送請求,由數(shù)據(jù)庫代理向各個數(shù)據(jù)片執(zhí)行查詢和更新操作。當然,各個分區(qū)片的分片規(guī)則和分片標識等都是由數(shù)據(jù)庫代理決定。對于以MySQL作為數(shù)據(jù)存儲的數(shù)據(jù)庫分片,其代理最常用的就是Amoeba(變形蟲),Amoeba是一款開源軟件,是MySQL的分布式數(shù)據(jù)庫的前端代理,主要在應用層訪問MySQL時充當SQL路由,能實現(xiàn)負載均衡、高可用性、SQL過濾、讀寫分離、可路由相關請求到目標數(shù)據(jù)庫、可并發(fā)請求多臺數(shù)據(jù)庫并合并結果等功能。
這種框架雖然能夠解決大數(shù)據(jù)量存儲問題,但是并發(fā)訪問的性能并不高。因此,可以對此框架做修改,使用內(nèi)存數(shù)據(jù)庫來替代磁盤數(shù)據(jù)庫。當然,對于復雜的業(yè)務邏輯數(shù)據(jù),使用key-value內(nèi)存數(shù)據(jù)庫不能滿足需求,在這種框架下,可以使用關系型的內(nèi)存數(shù)據(jù)庫。但是,因為內(nèi)存數(shù)據(jù)庫的數(shù)據(jù)的易失性,在發(fā)生單點故障時需要做數(shù)據(jù)的恢復,因此內(nèi)存數(shù)據(jù)庫需要持久化和備份功能,具體的架構如圖2所示。
圖2 基于內(nèi)存數(shù)據(jù)庫的存儲集群架構
此框架是基于圖1框架的基礎上,添加了內(nèi)存數(shù)據(jù)庫層,從而解決了數(shù)據(jù)訪問的性能問題。同時,對內(nèi)存數(shù)據(jù)庫定時的持久化,能確保在內(nèi)存數(shù)據(jù)庫故障時,成功恢復內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)。同時,內(nèi)存數(shù)據(jù)庫作為全量數(shù)據(jù)緩存與磁盤數(shù)據(jù)庫之間必須同步,保持兩者之間的數(shù)據(jù)一致性。
基于內(nèi)存數(shù)據(jù)庫的集群存儲的架構,是現(xiàn)有具有大量業(yè)務數(shù)據(jù)存儲和訪問的系統(tǒng)的比較理想的解決方案。本文主要研究此架構中的關鍵技術包括分布式數(shù)據(jù)庫代理和單點故障恢復。
在基于內(nèi)存數(shù)據(jù)庫的存儲集群中,數(shù)據(jù)庫代理通常分為兩類,一類是內(nèi)存數(shù)據(jù)庫自帶的,這種內(nèi)存數(shù)據(jù)庫本身就具有集群功能,例如Mongodb,它的分片集群就是很好的存儲集群架構,只需要做相應的配置即可;另一類就如MySQL集群一樣,使用的是獨立的分布式數(shù)據(jù)庫代理。不管使用哪類數(shù)據(jù)庫代理,都必須具有前端路由、數(shù)據(jù)分片、負載均衡等功能。前端路由功能是指當應用程序向存儲集群發(fā)起數(shù)據(jù)更新或者查詢操作時,數(shù)據(jù)庫代理會接收請求,并向相應的分片節(jié)點中發(fā)送相應的操作;而數(shù)據(jù)分片是在應用程序向存儲集群插入數(shù)據(jù)時,數(shù)據(jù)庫代理通過散列或者其它策略,指定到某個分片節(jié)點上存儲數(shù)據(jù);負載均衡是指數(shù)據(jù)庫代理要做到各個分片節(jié)點被訪問的次數(shù)以及占據(jù)的數(shù)據(jù)量達到一個平衡狀態(tài)。分布式數(shù)據(jù)庫代理的內(nèi)部模型如圖3所示。
分布式數(shù)據(jù)庫代理主要分并發(fā)訪問控制、數(shù)據(jù)分片和路由等3個模塊,當應用程序向存儲集群發(fā)送請求,并發(fā)訪問控制模塊接收請求,并對請求排序,按照時間點的順序處理請求,并向其它模塊發(fā)送處理命令。數(shù)據(jù)分片模塊,在對存儲的數(shù)據(jù)分片后,并在索引系統(tǒng)中記錄。路由模塊接到數(shù)據(jù)查詢或者更新命令時,查詢索引系統(tǒng),查找到要查詢和更新的節(jié)點編號,進而查詢和更新數(shù)據(jù)。
圖3 分布式數(shù)據(jù)庫代理模型
內(nèi)存數(shù)據(jù)庫雖然在訪問性能上相比磁盤數(shù)據(jù)庫有很大提升,但由于主存中信息的易失性, 在系統(tǒng)出現(xiàn)故障時, 內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)將丟失, 為此, 內(nèi)存數(shù)據(jù)庫必須提供高效、可靠的恢復機制以使在發(fā)生系統(tǒng)故障的時候能將數(shù)據(jù)庫恢復, 通常內(nèi)存數(shù)據(jù)庫采用檢查點和日志的方法來實現(xiàn)系統(tǒng)恢復。檢查點和日志的方法一般都是內(nèi)存數(shù)據(jù)庫自帶的,內(nèi)存數(shù)據(jù)庫的持久化的數(shù)據(jù)文件和日志文件與內(nèi)存數(shù)據(jù)庫服務處在同一臺服務器上,因此,在發(fā)生較大的毀滅性故障時,數(shù)據(jù)是無法恢復的。因此本文在原有的基礎上,添加磁盤數(shù)據(jù)庫層,用于內(nèi)存數(shù)據(jù)庫的另一個拷貝,并與內(nèi)存數(shù)據(jù)庫服務節(jié)點分離,處于單獨的節(jié)點。同時,考慮單點故障時,數(shù)據(jù)訪問服務會中斷,因此對內(nèi)存數(shù)據(jù)庫采用主從機制,在主節(jié)點出現(xiàn)故障時,能切換到從節(jié)點上,使數(shù)據(jù)訪問得以繼續(xù)。添加從節(jié)點和磁盤數(shù)據(jù)庫層的設計框架如圖4所示。
MP是內(nèi)存數(shù)據(jù)庫的主節(jié)點,MS是從節(jié)點,H是磁盤數(shù)據(jù)庫節(jié)點。當數(shù)據(jù)庫代理發(fā)送數(shù)據(jù)更新和插入操作時,由主節(jié)點負責,而數(shù)據(jù)的查詢由從節(jié)點執(zhí)行,這樣讀寫分離可以提高訪問性能。同時,在MP節(jié)點出現(xiàn)故障,數(shù)據(jù)庫代理可以把對主節(jié)點的操作平滑轉(zhuǎn)移到從節(jié)點。另外主從節(jié)點上都會有數(shù)據(jù)的全持久化和日志增量備份,當節(jié)點上內(nèi)存數(shù)據(jù)庫服務出現(xiàn)故障,可以從節(jié)點的數(shù)據(jù)文件或者日志中恢復。但如果是整個節(jié)點被破壞,那么就需要從磁盤數(shù)據(jù)庫節(jié)點上來恢復數(shù)據(jù)。
圖4 單點故障恢復功能模型
此方法確保了在發(fā)生單點故障時,數(shù)據(jù)能夠快速的恢復,并且服務不被中斷。
本文主要研究了基于內(nèi)存數(shù)據(jù)庫的存儲集群的分布式數(shù)據(jù)庫代理和單點故障恢復等關鍵技術的實現(xiàn)原理,從而說明了基于內(nèi)存數(shù)據(jù)庫的存儲集群架構在技術上的可行性,闡明了基于內(nèi)存數(shù)據(jù)庫的存儲集群能夠解決海量高并發(fā)系統(tǒng)的高性能數(shù)據(jù)存儲和訪問問題,其核心優(yōu)勢在于:
(1)高性能:是通過內(nèi)存數(shù)據(jù)庫提供高性能關系數(shù)據(jù)庫存取服務;
(2)持久化:通過兩級數(shù)據(jù)庫及異步寫日志或者磁盤文件完成持久化;
(3) 高可用性:通過主備節(jié)點實現(xiàn)MDB的高可用性;二級磁盤數(shù)據(jù)庫以及持久化日志文件和磁盤文件可以實現(xiàn)數(shù)據(jù)的快速恢復。
[1] 周游弋,董道國,金城. 高并發(fā)集群監(jiān)控系統(tǒng)中內(nèi)存數(shù)據(jù)庫的設計與應用[J]. 計算機應用與軟件,2011,28(6):128-130.
[2] 肖迎元,劉云生,鄧華鋒,劉小峰. 適合分布式實時內(nèi)存數(shù)據(jù)庫的全局一致性模糊備份策略[J]. 計算機科學,2006,33(8):151-154.
[3] 章宏燦,薛巍,舒繼武. 一種可擴展分布式RAID存儲集群系統(tǒng)[J]. 計算機研究與發(fā)展,2008,45(4):741-746.
[4] 林春. 分布式內(nèi)存數(shù)據(jù)庫的恢復[J]. 航空計算技術, 2003,33(2):90-92.
[5] 王文林,廖建新,朱曉民. 基于VoiceXML的語音平臺緩存一致性控制算法[J] .電子學報,2007,4(4):1-3.
[6] 許貴平,蔡博克. 支持實時內(nèi)存數(shù)據(jù)庫不間斷服務的恢復技術[J]. 計算機工程,2008.3,34(6):70-71.
[7] 姚恒,薛質(zhì). 基于增量日志的數(shù)據(jù)復制[J]. 信息安全與通信保密,2007.6.
Key technology research of storage cluster based on memory database
ZHANG Liang1,2, WANG Chun1,2, LI Wei1,2
(1 State Key Laboratory of Networking and Switching Technology, Beijing University of Posts and Telecommunications, Beijing 100876, China; 2 EBUPT Information Technology Co., Ltd., Beijing 100191, China)
Storage cluster which based on disk resident database are unable to store and process data in real time due to considerable overheads caused by I/O swapping operations. Therefore storage cluster which based on memory database are a better design proposal. This paper mainly studies the key technologies of the storage cluster which based on memory database including database proxy, the single node recovery.
memory database; storage cluster; database proxy; single node recovery
TN915
A
1008-5599(2012)10-0081-04
2012-09-16
國家自然科學基金(No. 61072057,61101119,61121001,60902051);長江學者和創(chuàng)新團隊發(fā)展計劃資助(No. IRT1049);國家科技重大專項(No. 2011ZX03002-001-01,移動互聯(lián)網(wǎng)總體架構研究)。