李軍丹,馮學(xué)曉
(鄭州工業(yè)應(yīng)用技術(shù)學(xué)院,河南 鄭州 451150)
隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,數(shù)據(jù)量呈爆發(fā)式增長,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已經(jīng)不能滿足大規(guī)模數(shù)據(jù)存儲和處理的需求[1,2]。云計(jì)算技術(shù)的出現(xiàn)為企業(yè)提供了靈活、高效、低成本的互聯(lián)網(wǎng)基礎(chǔ)設(shè)施,使得分布式數(shù)據(jù)庫得以大規(guī)模應(yīng)用。分布式數(shù)據(jù)庫具有高可用、可擴(kuò)展、負(fù)載均衡等特性,能夠?yàn)槠髽I(yè)提供高效的數(shù)據(jù)存儲和處理服務(wù)[3,4]。因此,研究基于云計(jì)算的分布式數(shù)據(jù)庫技術(shù)具有重要的實(shí)際意義。
目前,分布式數(shù)據(jù)庫技術(shù)已經(jīng)廣泛應(yīng)用于云計(jì)算平臺。在分布式數(shù)據(jù)庫領(lǐng)域已經(jīng)涌現(xiàn)出了許多成熟的解決方案,如Google 的Spanner、阿里巴巴的OceanBase、騰訊的TDSQL 等[5-7]。這些分布式數(shù)據(jù)庫系統(tǒng)在分布式事務(wù)、數(shù)據(jù)一致性、負(fù)載均衡等方面都具有出色的表現(xiàn),但是它們都是封閉的商業(yè)系統(tǒng),缺乏可移植性和靈活性。因此,研究基于開源技術(shù)的分布式數(shù)據(jù)庫系統(tǒng)具有重要的意義。
本文旨在基于KVM 云計(jì)算平臺設(shè)計(jì)一種分布式關(guān)系型數(shù)據(jù)庫,實(shí)現(xiàn)數(shù)據(jù)的高可用、可擴(kuò)展、負(fù)載均衡等特性。具體研究內(nèi)容包括MON 節(jié)點(diǎn)、GUEST 節(jié)點(diǎn)和底層數(shù)據(jù)庫節(jié)點(diǎn)組成的系統(tǒng)設(shè)計(jì),一致性哈希算法實(shí)現(xiàn)數(shù)據(jù)的分布式存儲和分配,構(gòu)建針對客戶端、管理端以及底層計(jì)算存儲節(jié)點(diǎn)的觀察者模式通信架構(gòu)。
KVM 是一種開源的虛擬化技術(shù),可以將一臺物理服務(wù)器分割成多個(gè)虛擬機(jī),并且每個(gè)虛擬機(jī)可以獨(dú)立運(yùn)行自己的操作系統(tǒng)和應(yīng)用程序[8]。KVM 虛擬化技術(shù)可以幫助企業(yè)更好地利用服務(wù)器資源,提高資源利用率和靈活性,同時(shí)降低成本。
如圖1 所示,本文設(shè)計(jì)的基于云計(jì)算的分布式系統(tǒng)數(shù)據(jù)庫技術(shù)分為3 個(gè)模塊,分別是MON、GUEST以及Cloud Pool。系統(tǒng)運(yùn)行時(shí),GUEST 模塊接收到用戶發(fā)送的結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)請求后,根據(jù)請求中指定的數(shù)據(jù)存儲節(jié)點(diǎn)的信息,將請求轉(zhuǎn)發(fā)給相應(yīng)的數(shù)據(jù)庫節(jié)點(diǎn)進(jìn)行處理。數(shù)據(jù)庫節(jié)點(diǎn)從Cloud Pool 模塊中獲取數(shù)據(jù)并進(jìn)行相應(yīng)的處理,并將處理結(jié)果返回給GUEST 模塊,GUEST 模塊再將結(jié)果返回給用戶。MON 模塊可以實(shí)時(shí)監(jiān)測每個(gè)數(shù)據(jù)庫節(jié)點(diǎn)的運(yùn)行狀態(tài)和通信情況,并及時(shí)發(fā)出警報(bào)。當(dāng)數(shù)據(jù)庫節(jié)點(diǎn)出現(xiàn)異常情況時(shí),MON 模塊可以進(jìn)行自動化處理,如自動進(jìn)行故障轉(zhuǎn)移或數(shù)據(jù)恢復(fù)等。3個(gè)模塊協(xié)同工作共同實(shí)現(xiàn)了基于云計(jì)算的分布式系統(tǒng)數(shù)據(jù)庫技術(shù)。

圖1 系統(tǒng)總體設(shè)計(jì)
在KVM 中,本系統(tǒng)使用虛擬機(jī)監(jiān)控器(Virtual Machine Monitor,VMM)來實(shí)現(xiàn)MON 節(jié)點(diǎn)的功能。VMM 是KVM 虛擬化技術(shù)的核心組件之一,負(fù)責(zé)協(xié)調(diào)和管理各個(gè)虛擬機(jī)實(shí)例的運(yùn)行。具體來說,VMM 可以通過對虛擬機(jī)實(shí)例的資源分配和監(jiān)控,實(shí)現(xiàn)對整個(gè)分布式系統(tǒng)的監(jiān)控和管理。
本系統(tǒng)使用虛擬機(jī)(Virtual Machine,VM)實(shí)現(xiàn)GUEST 節(jié)點(diǎn)的功能。每個(gè)GUEST 節(jié)點(diǎn)對應(yīng)一個(gè)虛擬機(jī)實(shí)例。該虛擬機(jī)實(shí)例可以運(yùn)行關(guān)系型數(shù)據(jù)庫管理系統(tǒng),并提供對外的數(shù)據(jù)服務(wù)。當(dāng)用戶發(fā)送SQL 請求時(shí),GUEST 節(jié)點(diǎn)會根據(jù)請求內(nèi)容,將請求轉(zhuǎn)發(fā)給相應(yīng)的底層數(shù)據(jù)庫節(jié)點(diǎn)進(jìn)行處理。
本系統(tǒng)使用虛擬化存儲技術(shù)實(shí)現(xiàn)底層數(shù)據(jù)庫節(jié)點(diǎn)的功能。具體來說,可以使用分布式存儲系統(tǒng)(如Ceph、GlusterFS 等)存儲數(shù)據(jù)庫的數(shù)據(jù)文件,并通過KVM 虛擬化技術(shù)將其掛載到虛擬機(jī)實(shí)例上。當(dāng)GUEST 節(jié)點(diǎn)接收到SQL 請求時(shí),它會將請求轉(zhuǎn)發(fā)給相應(yīng)的底層數(shù)據(jù)庫節(jié)點(diǎn)進(jìn)行處理底層數(shù)據(jù)庫節(jié)點(diǎn)處理完畢后,將執(zhí)行結(jié)果返回給GUEST 節(jié)點(diǎn),最終由GUEST 節(jié)點(diǎn)將結(jié)果返回給用戶。
哈希算法是一種將任意長度數(shù)據(jù)映射為固定長度數(shù)據(jù)的算法[9]。其核心思想是將數(shù)據(jù)通過哈希函數(shù)計(jì)算后得到一個(gè)哈希值,可以唯一地表示原始數(shù)據(jù)。哈希函數(shù)通常具有以下特點(diǎn):對于相同的輸入數(shù)據(jù),哈希函數(shù)總是返回相同的輸出;對于不同的輸入數(shù)據(jù),哈希函數(shù)返回不同的輸出;計(jì)算速度快。
一致性哈希算法是一種分布式哈希算法,將哈希值映射到一個(gè)環(huán)上,將數(shù)據(jù)存儲在離該哈希值最近的節(jié)點(diǎn)上。在這個(gè)環(huán)上,每個(gè)節(jié)點(diǎn)都被賦予一個(gè)唯一的標(biāo)識符,通常是一個(gè)哈希值。當(dāng)新的數(shù)據(jù)到達(dá)時(shí),先通過哈希函數(shù)計(jì)算出一個(gè)哈希值,然后在環(huán)上順時(shí)針找到離該哈希值最近的節(jié)點(diǎn),并將數(shù)據(jù)存儲在該節(jié)點(diǎn)上。當(dāng)節(jié)點(diǎn)出現(xiàn)故障時(shí),該節(jié)點(diǎn)上存儲的數(shù)據(jù)會自動轉(zhuǎn)移到下一個(gè)節(jié)點(diǎn)上,從而實(shí)現(xiàn)數(shù)據(jù)的高可用性和負(fù)載均衡。
在本系統(tǒng)中,一致性哈希算法可以實(shí)現(xiàn)數(shù)據(jù)的分布式存儲和分配。具體來說,系統(tǒng)中的每個(gè)節(jié)點(diǎn)都被賦予一個(gè)唯一的標(biāo)識符,該標(biāo)識符可以通過哈希函數(shù)計(jì)算得出。當(dāng)新的數(shù)據(jù)到達(dá)時(shí),先通過哈希函數(shù)計(jì)算出一個(gè)哈希值,然后在節(jié)點(diǎn)標(biāo)識符的環(huán)上順時(shí)針找到離該哈希值最近的節(jié)點(diǎn),并將數(shù)據(jù)存儲在該節(jié)點(diǎn)上。這樣系統(tǒng)中的數(shù)據(jù)就可以分布式地存儲在不同的節(jié)點(diǎn)上,從而提高了系統(tǒng)的可擴(kuò)展性和可靠性。同時(shí),由于一致性哈希算法可以實(shí)現(xiàn)節(jié)點(diǎn)的動態(tài)加入和退出,因此可以很好地適應(yīng)系統(tǒng)的擴(kuò)展和縮減。
如圖2 所示,本文的通信架構(gòu)由客戶端、管理端、底層計(jì)算存儲節(jié)點(diǎn)3 部分組成,采用觀察者模式[10]。

圖2 總體通信架構(gòu)
觀察者模式是一種設(shè)計(jì)模式,定義了對象之間的一種一對多的依賴關(guān)系。當(dāng)一個(gè)對象狀態(tài)發(fā)生改變時(shí),它的所有依賴者都會收到通知并自動更新。在本文的通信架構(gòu)中,客戶端、管理端和底層計(jì)算存儲節(jié)點(diǎn)之間的通信正是采用了觀察者模式。
在該架構(gòu)中,每個(gè)節(jié)點(diǎn)都可以充當(dāng)觀察者或者被觀察者。當(dāng)一個(gè)節(jié)點(diǎn)作為觀察者時(shí),它會觀察其他節(jié)點(diǎn)的狀態(tài)。當(dāng)狀態(tài)發(fā)生改變時(shí),它會自動更新自己的狀態(tài)。當(dāng)一個(gè)節(jié)點(diǎn)作為被觀察者時(shí),它會定期向其他節(jié)點(diǎn)發(fā)送狀態(tài)信息。當(dāng)其他節(jié)點(diǎn)接收到該信息時(shí),會更新自己的狀態(tài)。
具體來說,當(dāng)客戶端作為觀察者時(shí),會觀察管理端和底層計(jì)算存儲節(jié)點(diǎn)的狀態(tài)。當(dāng)客戶端發(fā)起請求時(shí),它會向管理端發(fā)送請求信息。管理端接收到請求信息后,會向底層計(jì)算存儲節(jié)點(diǎn)發(fā)送相應(yīng)的命令。底層計(jì)算存儲節(jié)點(diǎn)收到命令后,會執(zhí)行相應(yīng)的操作,并將執(zhí)行結(jié)果返回給管理端。管理端收到執(zhí)行結(jié)果后,會將結(jié)果返回給客戶端。在這個(gè)過程中,客戶端、管理端和底層計(jì)算存儲節(jié)點(diǎn)之間形成了一個(gè)松耦合的通信架構(gòu),各個(gè)節(jié)點(diǎn)之間可以獨(dú)立地進(jìn)行狀態(tài)的維護(hù)和更新。同時(shí),由于采用了觀察者模式,當(dāng)系統(tǒng)中的某個(gè)節(jié)點(diǎn)狀態(tài)發(fā)生改變時(shí),其他節(jié)點(diǎn)會自動收到通知并進(jìn)行相應(yīng)的更新,從而實(shí)現(xiàn)信息的實(shí)時(shí)同步和系統(tǒng)的高效運(yùn)行。
該系統(tǒng)采用了一些先進(jìn)的技術(shù)和方案,以達(dá)到更好的性能和可擴(kuò)展性。具體來說,該系統(tǒng)采用了KVM 虛擬化技術(shù)作為底層支持,采用一致性哈希算法進(jìn)行數(shù)據(jù)的分布式存儲和分配,并采用了觀察者模式作為通信架構(gòu),使得系統(tǒng)具有較好的可靠性和可擴(kuò)展性。
從性能分析的角度看,該系統(tǒng)具有以下幾個(gè)優(yōu)點(diǎn)。(1)可伸縮性強(qiáng)。該系統(tǒng)采用云計(jì)算平臺和分布式技術(shù),使得系統(tǒng)可以根據(jù)業(yè)務(wù)需求動態(tài)擴(kuò)容和縮容,從而提高系統(tǒng)的性能和可擴(kuò)展性。(2)可用性高。該系統(tǒng)采用觀察者模式作為通信架構(gòu),保證了系統(tǒng)在節(jié)點(diǎn)故障時(shí)的可用性,并通過MON 節(jié)點(diǎn)進(jìn)行整體監(jiān)控和管理,從而提高了系統(tǒng)的可靠性。(3)分布式存儲和分配。該系統(tǒng)采用一致性哈希算法進(jìn)行數(shù)據(jù)的分布式存儲和分配,使得系統(tǒng)可以實(shí)現(xiàn)數(shù)據(jù)的負(fù)載均衡和高效的數(shù)據(jù)訪問。但是,該系統(tǒng)也存在以下一些缺點(diǎn)。(1)資源占用較高。該系統(tǒng)采用了虛擬化技術(shù)和分布式存儲系統(tǒng),因此需要較高的資源占用,包括中央處理器(Central Processing Unit,CPU)、內(nèi)存和磁盤等。(2)系統(tǒng)復(fù)雜度較高。該系統(tǒng)采用多個(gè)技術(shù)和方案,使得系統(tǒng)的復(fù)雜度較高,需要較高的技術(shù)和人力投入進(jìn)行維護(hù)與管理。(3)系統(tǒng)響應(yīng)時(shí)間較長。系統(tǒng)采用虛擬化技術(shù)和分布式存儲系統(tǒng),使得系統(tǒng)響應(yīng)時(shí)間較長,可能會影響用戶體驗(yàn)。因此,在實(shí)際應(yīng)用中,需要根據(jù)具體業(yè)務(wù)需求和技術(shù)條件進(jìn)行選擇與權(quán)衡。
本文介紹了一種基于云計(jì)算的分布式系統(tǒng)數(shù)據(jù)庫技術(shù),旨在解決傳統(tǒng)單機(jī)關(guān)系型數(shù)據(jù)庫在大規(guī)模數(shù)據(jù)處理和高并發(fā)請求下的性能瓶頸。本系統(tǒng)主要包括MON 節(jié)點(diǎn)、GUEST 節(jié)點(diǎn)和底層數(shù)據(jù)庫節(jié)點(diǎn)3 個(gè)模塊。其中,MON 節(jié)點(diǎn)負(fù)責(zé)監(jiān)控集群整體運(yùn)行狀況;GUEST 節(jié)點(diǎn)作為SQL 接收和處理端,負(fù)責(zé)接收用戶發(fā)送的SQL 請求并進(jìn)行數(shù)據(jù)存儲節(jié)點(diǎn)的定位;底層數(shù)據(jù)庫節(jié)點(diǎn)則是運(yùn)行在KVM 云計(jì)算平臺的虛擬機(jī)實(shí)例,用于存儲和處理數(shù)據(jù)。為了實(shí)現(xiàn)數(shù)據(jù)的分布式存儲和分配,本系統(tǒng)采用了一致性哈希算法。該算法通過將數(shù)據(jù)映射到哈希環(huán)上,然后將數(shù)據(jù)存儲到離其最近的節(jié)點(diǎn)上,從而實(shí)現(xiàn)數(shù)據(jù)的負(fù)載均衡和動態(tài)擴(kuò)展。在通信架構(gòu)方面,本文采用觀察者模式實(shí)現(xiàn)了高效的數(shù)據(jù)傳輸和響應(yīng)速度。
總的來說,本文的研究成果在分布式數(shù)據(jù)庫技術(shù)方面有較大的創(chuàng)新和應(yīng)用價(jià)值。該系統(tǒng)采用云計(jì)算平臺作為基礎(chǔ),實(shí)現(xiàn)了數(shù)據(jù)的分布式存儲和處理。但是,該系統(tǒng)還存在一些缺點(diǎn),如數(shù)據(jù)一致性問題、分片過程中的數(shù)據(jù)遷移問題等,需要在后續(xù)的研究中加以解決。另外,本文著重研究了理論框架,具體實(shí)現(xiàn)方案還有待進(jìn)一步完善。