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