摘 要: 云數據庫是把各種關系型數據庫看成一系列簡單的二維表,并基于簡化版本的SQL或訪問對象進行操作的數據庫。云數據庫能夠為多個用戶同時提供類似于單節點數據庫的服務。在當前云計算技術不斷發展中,數據庫不斷發展進化,從原始的單節點數據庫逐漸發展成為云數據庫,數據存儲能力相對于過去提高了數倍。目前云數據庫服務不斷增多,在此背景下,討論了一種云數據庫的設計與核心子系統的實現。
關鍵詞: 云數據庫;云計算;數據分布;高可用;一致性hash
隨著計算機網絡的飛速發展以及網絡帶寬的不斷增長,利用網絡技術來建立云數據庫中心已經成為可能。近年來,云數據庫已經成為數據庫發展的新趨勢。云數據庫可以將分散在各個數據中心的數據庫資源有效地組織利用起來,構成海量數據存儲中心。云數據庫能夠更快地、更好地解決各個客戶海量數據的存儲問題,能夠打破傳統的單節點數據庫的網絡帶寬和磁盤I/O的限制,為客戶提供高帶寬、高I/O、高并發的數據連接服務。同時,云數據庫中心具有系統設備利用率高、數據節點擴容方便、數據的多備份、數據高可用等特點。本文對云數據庫的各功能模塊進行研究,并分析了各功能模塊的實現方式。
1 云數據庫的設計
云數據庫建立在互聯網上的數據庫中心,能夠同時為多個客戶提供數據庫服務,并且其互相之間不影響。系統整體框圖如圖1所示。
云數據庫對外提供統一的API,統一的API能夠屏蔽云數據庫內部實現的細節。對外提供一種統一的數據庫連接協議,使用戶能夠通過不同的編程語言、不同的連接工具進行連接使用。
云數據庫的核心服務是為用戶提供數據庫服務,其主要功能有:
?。?)用戶檢測。引進用戶認證系統檢測多用戶狀態,認證系統在用戶登錄、退出時進行狀態記錄,在用戶每次進行數據操作時,必須確定該操作是否安全。
(2)安全檢測。安全系統全程監控用戶的操作,以確認用戶的操作對數據庫中其他用戶和數據庫整體安全沒有影響,以及檢測來自網絡上的各種數據庫的攻擊。
?。?)多租戶。云數據庫多租戶服務是為解決多個用戶同時接入云數據庫系統而設計實現的。多個用戶同時接入云數據庫,不僅要求各個用戶之間互相隔離,而且要求各個用戶之間的數據互不影響,各個用戶只能訪問自己的數據庫。
?。?)數據分布。為了存儲用戶的海量數據,將用戶的數據分布在數據庫集群中不同的節點上,這樣不僅方便系統的擴容,而且數據I/O操作被分配到多個節點上。數據的分布使用一致性hash[1]算法,保證在加入節點時,數據庫中的數據以最小的代價擴展到新節點中。
?。?)數據高可用。云數據庫中的數據每份至少需要存在于3個副本中,3個副本進行實時同步,當某一數據節點宕機出現故障時,數據能夠在其他節點正常讀取。多副本的存在,還可以使用負載均衡算法,把數據I/O操作分散到負載低的數據節點[2]。
?。?)緩存?;诖髷祿呢撦d特性,以內存作為存儲介質,用以解決數據查詢性能延遲的問題[3]。使用Memcached或者Redis緩存系統[4],將數據放入內存,讀寫時若能命中,系統的I/O能力至少能夠提高8~10個數量級。
(7)數據快照。數據快照功能能夠在某個時間點給用戶數據生成快照,該快照能夠供用戶下載保存,同時用戶能夠把數據回滾至該快照。
數據庫節點集群提供用戶數據實際的保存位置,該集群一般由多個數據庫中心組成,各個數據庫中心的數據互相備份,以保證在一個或多個數據庫中心遭到災難性損壞時,云數據庫依然能夠正常運行。當各個數據庫中心的節點無法提供足夠容量時,可以動態地、無需關機地添加數據節點至云數據庫中心。
2 云數據庫的實現
云數據庫為了實現高擴展性,所有子系統均由單獨模塊構成,所有模塊均可由新的相關功能模塊代替。云數據庫核心模塊包括:安全審計模塊、通信模塊、SQL解析模塊、路由管理模塊、消息分發模塊、策略管理模塊、緩存模塊、消息處理、結果集處理模塊、數據快照模塊。
2.1 系統核心流程
應用系統發送數據庫請求,云數據庫通過通信管理模塊接收到請求,調用安全審計模塊進行安全審計[5]。安全審計模塊負責所有云數據庫連接的安全管理。通信管理模塊管理內部消息的編碼解碼工作,管理著內部所有的連接對象。
連接對象將消息轉發給消息轉換模塊;消息轉換模塊將發送過來的消息進行包協議處理,然后發送給SQL解析模塊;SQL解析模塊生成相應的SQL對象。SQL解析模塊有SQL解析和SQL過濾功能,能夠過濾掉SQL中非法的字符串等。
SQL對象將數據流交給路由管理模塊。路由管理模塊進行SQL路由解析、SQL分發等SQL操作。同時,路由管理模塊監控數據庫節點池中的數據庫節點和數據節點的心跳信息。路由管理模塊的配置只能由云數據庫管理員進行操作,其中配置規則包括:路由規則、虛擬節點規則、物理數據庫節點規則和數據快照規則。同時,數據快照功能直接作用于路由管理模塊,通過路由管理模塊的消息分發功能把快照命令發送到物理數據庫節點中。
策略管理模塊管理物理數據庫節點中的數據切分規則。數據切分規則使用一致性hash算法進行數據切分,當添加新的數據庫節點到數據節點池中時,能夠以最小的代價把數據遷移至新節點中。同時,云數據庫服務能夠保證在不影響用戶使用的情況下能夠完成節點的加入以及數據的遷移。
消息分發模塊接收來自路由管理模塊發送的消息隊列,把消息隊列中的消息按照規則發送至相應的數據庫節點中,進行相應的數據節點操作。把數據庫操作完成返回的信息通過結果集返回給結果集合并器,結果集合并器將合并的結果返回給通信管理模塊,最終響應應用系統的請求。當然,如果云數據庫接入緩存系統,消息分發器首先會從緩存中查詢是否有需要的數據信息。如果有,直接操作緩存中的數據并返回給應用系統;如果沒有,則從數據節點中查詢出需要的數據,并保存至緩存系統中,以備下次使用。
云數據庫核心數據流圖如圖2所示。
2.2 核心子系統的實現
本文所描述的云數據庫多租戶技術采用共享數據、隔離數據庫的架構。物理數據庫使用數據庫集群中的數據庫。當初始化一個用戶時,默認會創建一個新的數據庫實例分配給該用戶使用,該用戶所有數據操作都在此數據庫中進行。用戶可以創建新的數據庫實例,為了確保系統資源的合理使用,用戶創建的數據庫實例數量是一定的。如果兩個用戶創建的數據庫實例名稱相同,云數據庫可以根據用戶的信息和用戶輸入的信息進行md5值計算,使用md5值作為創建數據庫實例的名稱。云數據庫把用戶信息、用戶輸入的信息和生成的md5值進行對應保存,每次訪問時進行相應的轉換。
云數據庫中數據的存放方式是根據數據不同的存放方式進行設置的。本文在此提出一種經過大量實踐總結而得出的切分方式,該切分方式可以保證云數據庫在不減少性能損失的情況下,高效、快捷地切分數據。同時,在增加新的數據庫節點時,能夠使數據的遷移代價降到最低。
一致性hash算法的出現就是為了解決分布式系統中數據分布的問題。要使用一致性hash算法,首先,將需要映射的數據節點通過hash算法計算出其hash值,并分布在hash環上;其次,將需要存儲的數據經過hash算法,獲得其hash值,并映射到hash環上;最后,從數據映射到的位置順時針開始查找,將數據保存在找到的第一個數據庫節點中。232與0重合,超過232則從0位置開始尋找數據庫節點,如圖3所示。
例如,存放數據的物理數據節點數為4個,則計算這4個數據節點的hash值,并分布在hash環上。一條數據寫入后,系統首先生成其唯一的ID,并計算該ID值對應的hash值,根據hash值映射到hash環上,順時針尋找第一個遇到的數據庫節點,將數據保存至該節點中。假設該hash值落在數據庫節點1與數據庫節點2之間,則順時針找到的第一個數據庫節點為2,數據最終會被保存在節點2中。
如果,在數據庫節點2和數據庫節點3中增加一個數據庫節點5,則數據庫節點2到數據庫節點5中間的數據需要重新映射到數據庫節點5中。數據庫節點3刪除數據庫節點2到數據庫節點5之間的數據,如圖4所示。
數據庫節點保存的數據都有多個備份,以防止單點的出現。同時,在數據庫節點增加或刪除時,可以使用備份節點提供服務,從而使得整個云數據庫系統無需停機就能夠完成節點的擴展、移除。
云數據庫中的通信管理系統負責整個云數據庫中應用系統到云數據庫之間通信過程的檢測。安全審計檢測系統使用了防火墻技術,同時結合了數據過濾、包過濾技術。其核心是安全審計規則,規則配置得是否合理是安全審計系統能否正常、高效運行的基礎。
為了兼容多種應用使用不同的連接方式連接至云數據庫,云數據庫中通信管理系統配置了多種消息編碼、解碼規則。當使用不同數據庫協議進行連接時,通信管理系統調用不同的規則進行編碼、解碼后,數據信息存放到數據節點中。例如,當使用MySQL協議連接云數據庫時,云數據庫系統通信管理模塊使用MySQL協議解碼連接,當需要發送給應用系統結果時,通信管理模塊使用MySQL協議進行編碼。使用其他協議連接時,其過程相同。為了使云數據庫兼容更多的協議,不能使用某個數據庫的方言,應該使用基于標準的SQL語言。
云數據庫中存放數據的物理節點可以使用多種不同的數據庫系統。當不同的數據庫系統接入云數據庫時,云數據庫使用后端中對應的連接協議連接數據庫。使用該方法能夠使云數據庫兼容多種數據庫系統,提高系統的可用性。
路由管理模塊是云數據庫核心模塊之一。數據節點分為虛擬節點、物理節點。物理數據庫節點組成虛擬節點,多個虛擬節點組成更大的虛擬節點。每個虛擬節點對云數據庫來說就是一個數據存儲點,云數據庫對數據的存取就是對虛擬節點的操作。虛擬節點中一般有多個物理數據庫節點,并且數據互為備份。當其中某個物理數據庫節點宕機,路由管理模塊中的心跳檢測機制能夠立即獲得節點掉線信息,并且把該物理數據庫節點操作分散到備份節點中。
路由管理模塊能夠把SQL解析器解析的SQL對象分發到不同的數據節點中。路由管理模塊的核心是路由規則,在該規則中,記錄該管理器下所有的節點配置信息,包括連接數、連接時長、超時時長等所有基本信息。同時,路由管理器還提供用戶虛擬數據節點、物理節點及用戶數據庫容量使用接口API查詢的功能。
3 性能測試
測試環境為:(1)云數據庫服務平臺:IBM高性能服務器,磁盤≥100 GB,內存≥16 GB,網絡≥100 Mb/s,數量1臺;運行環境:Linux。(2)數據庫節點:IBM刀片機,磁盤空間≥1T,內存≥4 GB,網絡≥100 Mb/s,數量4臺,運行環境:Linux。
測試環境架構圖如圖5所示。
測試采用4臺數據庫節點服務器,兩兩備份,云數據庫數據按照數據生成ID切分,分別寫入節點數據庫1和節點數據庫3。節點數據庫2和節點數據庫4作為讀數據庫。表1是100線程并發數測試結果,表2是500線程并發數測試結果。
從測試結果可以總結出,云數據庫中單個用戶的并發數在500以下,不存在性能瓶頸問題;云數據庫的性能與服務器的配置存在很大的關系;云數據庫節點的增加對于服務的讀性能有很大提高,基本成水平增長;數據庫節點的寫性能在不開通事務的情況下也隨著節點數量的增加而增加,在開通事務時,對寫性能的影響很大。
參考文獻
[1] DARGER D, LEHMAN E, LEIGHTON T, et al. Consistent hashing and random trees: distributed caching protocols for relieving hot spots on the world wide Web[C]. ACM Symposium on Theory of Computing, 1997. 1997:654-663.
[2] 張青鳳, 張鳳琴, 王磊. 多數據中心的數據同步模型研究與設計[J].微型機與應用,2013,32(12):60-62.
[3] Jia Zhen, Wang Lei ,Zhan Jianfeng, et al. Characterizing data analysis workloads in data centers[C]. In Workload Characterization(IISWC), 2013 IEEE International Symposium on. IEEE, 2013.
[4] 曾超宇,李金香.Redis在高速緩存系統中的應用[J].微型機與應用,2013,32(12):11-13.
[5] 梁鋼,茅秋吟.云計算IaaS平臺的信息安全和運維服務設計[J].電子技術應用,2013,39(7):68-70.