趙紅巖
摘 要:文章介紹了低成本數(shù)據(jù)庫冗余陣列的基本模型和體系結(jié)構(gòu),并重點(diǎn)分析了使用低成本數(shù)據(jù)庫冗余陣列實(shí)現(xiàn)Clustered JDBC的基本原理。
關(guān)鍵詞:數(shù)據(jù)庫;集群;JDBC
1 引言
通過高速網(wǎng)絡(luò)連接起來的工作站集群系統(tǒng)為用戶提供了積累的處理能力和巨大的數(shù)據(jù)存儲空間,并且以其高性價(jià)比和良好的可擴(kuò)展性越來越多的應(yīng)用于高性能科學(xué)計(jì)算和事務(wù)處理中,但目前只有web服務(wù)和應(yīng)用服務(wù)應(yīng)用于集群,而數(shù)據(jù)庫仍然被保留在大型的專用對稱多處理機(jī)上,因此其應(yīng)用程序的性能往往被數(shù)據(jù)庫的性能所限制。因此,如何在低成本的情況下提高性能,實(shí)現(xiàn)數(shù)據(jù)庫的可擴(kuò)展性和高實(shí)用性,從而適用于各種事務(wù)處理是一個(gè)有待解決的問題。RAIDb的目標(biāo)就是提供比單一數(shù)據(jù)庫更好的性能和容錯(cuò),并且可以將不同的數(shù)據(jù)庫融合到一個(gè)數(shù)據(jù)庫隊(duì)列中去,它的主要目標(biāo)是低成本的軟件和硬件。
2 低成本數(shù)據(jù)庫冗余陣列(RAIDb)體系結(jié)構(gòu)
低成本數(shù)據(jù)庫冗余陣列體系結(jié)構(gòu)如圖1所示??蛻舳税l(fā)送請求到RAIDb控制器端,RAIDb控制器端再將這些請求分發(fā)在一批關(guān)系類型數(shù)據(jù)庫管理系統(tǒng)后端,對于客戶端來說就類似于操作一個(gè)單一的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)一樣。
RAIDb控制器能夠提供不同程度的服務(wù),控制器必須確定數(shù)據(jù)庫表在每個(gè)關(guān)系類型數(shù)據(jù)庫的后節(jié)點(diǎn)上是可用的,以至于所有的請求通過分析SQL的聲明能夠被發(fā)送到正確的節(jié)點(diǎn)上。
3 實(shí)現(xiàn)Clustered JDBC的基本原理
3.1 基本RAIDb分級
3.1.1 RAIDb-0完全分割
RAIDb-0與RAID-0相似,RAIDb-0將所有的數(shù)據(jù)庫表分割到所有節(jié)點(diǎn)之中。如圖2所示,給出了一個(gè)將N個(gè)數(shù)據(jù)庫表分割到5個(gè)節(jié)點(diǎn)上的例子。RAIDb-0要使用至少2個(gè)數(shù)據(jù)庫后節(jié)點(diǎn),但由于它沒有表的副本,因此導(dǎo)致其沒有容錯(cuò)的功能。
3.1.2 RAIDb-1完全復(fù)制
RAIDb-1和RAID-1相似,RAIDb-1將數(shù)據(jù)庫完全復(fù)制到每個(gè)節(jié)點(diǎn)上,RAIDb-1需要每個(gè)后節(jié)點(diǎn)都有足夠大的存儲空間以用來保存所有的數(shù)據(jù)庫數(shù)據(jù),基本結(jié)構(gòu)如圖3所示。RAIDb-1最少的節(jié)點(diǎn)數(shù)量為2個(gè)節(jié)點(diǎn),當(dāng)一個(gè)數(shù)據(jù)庫出現(xiàn)故障時(shí)其它的節(jié)點(diǎn)依然能夠正常工作,因此RAIDb-1提供了更好的容錯(cuò)能力。
3.1.3 RAIDb-2部分復(fù)制
RAIDb-2是在綜合了RAIDb-0和RAIDb-1兩者的優(yōu)點(diǎn)的基礎(chǔ)上提出的一種新的解決方案,RAIDb-2不需要每個(gè)節(jié)點(diǎn)都存放一個(gè)完整的數(shù)據(jù)庫備份。RAIDb-2至少需要提供3個(gè)節(jié)點(diǎn),一個(gè)是數(shù)據(jù)庫的完全備份,其它的節(jié)點(diǎn)對應(yīng)一個(gè)或多個(gè)數(shù)據(jù)表的備份,工作原理如圖4所示。例如一個(gè)數(shù)據(jù)庫文件包含3張數(shù)據(jù)表:tablex,tabley,tablez;第一個(gè)數(shù)據(jù)庫后的節(jié)點(diǎn)包含了完整數(shù)據(jù)庫的備份,其它的節(jié)點(diǎn)上包含一個(gè)兩個(gè)數(shù)據(jù)表,對于tablex和tabley共有3個(gè)備份,tablez有2個(gè)備份,無論那個(gè)節(jié)點(diǎn)出現(xiàn)故障,都能從別的節(jié)點(diǎn)上成功找到數(shù)據(jù)。
3.2 RAIDb基本級別的組合
由于一個(gè)RAIDb控制器的數(shù)據(jù)庫后端的連接節(jié)點(diǎn)的數(shù)量是有限的,因此將多個(gè)RAIDb控制器組合在一起就可以建立更多數(shù)據(jù)量的數(shù)據(jù)庫管理系統(tǒng)。如圖5所示,顯示了兩個(gè)RAIDb級別的組合情況,第一個(gè)等級是RAIDb-1控制器,它被當(dāng)作3個(gè)完整數(shù)據(jù)庫的后端,在第2個(gè)等級中,每個(gè)完整的數(shù)據(jù)庫由一個(gè)包含不同配置的RAIDb-0來實(shí)現(xiàn),這種組合可以被表示為RAIDb-1-0。
如圖6所示,給出了一個(gè)RAIDb-0-1的組合,利用RAIDb-1控制器將數(shù)據(jù)庫分割成3個(gè)部分,在上端的RAIDb-0中平衡3個(gè)下端的RAIDb-1控制器上的請求。
理論上來講,對于RAIDb組合的深度沒有限制,也可以用相同的RAIDb控制器等級來進(jìn)行組合。例如,一個(gè)RAIDb-1-1組合可以被看作一個(gè)大數(shù)量的鏡像數(shù)據(jù)庫的解決方案,這種樹型的體系結(jié)構(gòu)通常是大型數(shù)據(jù)庫集群的解決方案。
4 Clustered JDBC的實(shí)現(xiàn)
Clustered是緊密連接的一組計(jì)算機(jī),用來持續(xù)性地提供高性能的計(jì)算服務(wù),把一組計(jì)算機(jī)連在一起并非難事,但要讓他們獲得很高的性能就不那么容易了。Cluster的初衷在于以沒有單點(diǎn)故障的體系結(jié)構(gòu)來達(dá)到系統(tǒng)的高可用性和可伸縮性,而且要求采用通用標(biāo)準(zhǔn)的計(jì)算機(jī),而不是特殊專用的計(jì)算機(jī)部件,從而能以較低的成本獲得較好的可伸縮性。Cluster中的計(jì)算機(jī)應(yīng)當(dāng)具有非常好的協(xié)同性。如果一臺計(jì)算機(jī)的性能不足以完成某項(xiàng)任務(wù),其它的系統(tǒng)成員就會加入進(jìn)來,共同執(zhí)行這項(xiàng)任務(wù)。應(yīng)用實(shí)踐證明,由通用的計(jì)算機(jī)部件協(xié)同工作,完全可能使其運(yùn)算能力超過大型主機(jī)、超級計(jì)算機(jī)和容錯(cuò)系統(tǒng),而且具有更低的成本。
JDBC(Java DataBase Connectivity)是Java與數(shù)據(jù)庫的接口規(guī)范,JDBC定義了一個(gè)支持標(biāo)準(zhǔn)SQL功能的通用低層的API,它由Java語言編寫的類和接口組成,旨在讓各數(shù)據(jù)庫開發(fā)商為Java程序員提供標(biāo)準(zhǔn)的數(shù)據(jù)庫API。
本文設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)RAIDb的應(yīng)用,該應(yīng)用是一個(gè)以JDBC為基礎(chǔ)的JAVA中間件,它能夠建立所有的RAIDb配置,該軟件提供了一個(gè)JDBC驅(qū)動(dòng)器,并可以工作在任何現(xiàn)有的商業(yè)的或開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)上。
5 結(jié)語
文章先對低成本數(shù)據(jù)庫冗余陣列(RAIDb)進(jìn)行了簡單介紹,然后通過對基本模型、體系結(jié)構(gòu)以及實(shí)現(xiàn)方法的討論分析了Clustered JDBC的原理。
[參考文獻(xiàn)]
[1]Christiana Amaz,Alan L.Cox.Willy zwaenepoel-conflict-aware scheduling for dynamic content applications[C]. Proceedings of USITS 2003,March 2003.
[2]Enhydra octopus[EB/OL].http://octopus.enhydra.org.
[3]Bettina Kemme.Database replication for clusters of workstations[D].ph.D.thesis nr.13864,Swiss Federal Institute of Technology Zurich.2000.