一种实现低成本数据库冗余阵列的ClusteredJDBC方法
赵红岩
摘 要:文章介绍了低成本数据库冗余阵列的基本模型和体系结构,并重点分析了使用低成本数据库冗余阵列实现Clustered JDBC的基本原理。
关键词:数据库;集群;JDBC
1 引言
通过高速网络连接起来的工作站集群系统为用户提供了积累的处理能力和巨大的数据存储空间,并且以其高性价比和良好的可扩展性越来越多的应用于高性能科学计算和事务处理中,但目前只有web服务和应用服务应用于集群,而数据库仍然被保留在大型的专用对称多处理机上,因此其应用程序的性能往往被数据库的性能所限制。因此,如何在低成本的情况下提高性能,实现数据库的可扩展性和高实用性,从而适用于各种事务处理是一个有待解决的问题。RAIDb的目标就是提供比单一数据库更好的性能和容错,并且可以将不同的数据库融合到一个数据库队列中去,它的主要目标是低成本的软件和硬件。
2 低成本数据库冗余阵列(RAIDb)体系结构
低成本数据库冗余阵列体系结构如图1所示。客户端发送请求到RAIDb控制器端,RAIDb控制器端再将这些请求分发在一批关系类型数据库管理系统后端,对于客户端来说就类似于操作一个单一的关系型数据库管理系统一样。
RAIDb控制器能够提供不同程度的服务,控制器必须确定数据库表在每个关系类型数据库的后节点上是可用的,以至于所有的请求通过分析SQL的声明能够被发送到正确的节点上。
3 实现Clustered JDBC的基本原理
3.1 基本RAIDb分级
3.1.1 RAIDb-0完全分割
RAIDb-0与RAID-0相似,RAIDb-0将所有的数据库表分割到所有节点之中。如图2所示,给出了一个将N个数据库表分割到5个节点上的例子。RAIDb-0要使用至少2个数据库后节点,但由于它没有表的副本,因此导致其没有容错的功能。
3.1.2 RAIDb-1完全复制
RAIDb-1和RAID-1相似,RAIDb-1将数据库完全复制到每个节点上,RAIDb-1需要每个后节点都有足够大的存储空间以用来保存所有的数据库数据,基本结构如图3所示。RAIDb-1最少的节点数量为2个节点,当一个数据库出现故障时其它的节点依然能够正常工作,因此RAIDb-1提供了更好的容错能力。
3.1.3 RAIDb-2部分复制
RAIDb-2是在综合了RAIDb-0和RAIDb-1两者的优点的基础上提出的一种新的解决方案,RAIDb-2不需要每个节点都存放一个完整的数据库备份。RAIDb-2至少需要提供3个节点,一个是数据库的完全备份,其它的节点对应一个或多个数据表的备份,工作原理如图4所示。例如一个数据库文件包含3张数据表:tablex,tabley,tablez;第一个数据库后的节点包含了完整数据库的备份,其它的节点上包含一个两个数据表,对于tablex和tabley共有3个备份,tablez有2个备份,无论那个节点出现故障,都能从别的节点上成功找到数据。
3.2 RAIDb基本级别的组合
由于一个RAIDb控制器的数据库后端的连接节点的数量是有限的,因此将多个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是紧密连接的一组计算机,用来持续性地提供高性能的计算服务,把一组计算机连在一起并非难事,但要让他们获得很高的性能就不那么容易了。Cluster的初衷在于以没有单点故障的体系结构来达到系统的高可用性和可伸缩性,而且要求采用通用标准的计算机,而不是特殊专用的计算机部件,从而能以较低的成本获得较好的可伸缩性。Cluster中的计算机应当具有非常好的协同性。如果一台计算机的性能不足以完成某项任务,其它的系统成员就会加入进来,共同执行这项任务。应用实践证明,由通用的计算机部件协同工作,完全可能使其运算能力超过大型主机、超级计算机和容错系统,而且具有更低的成本。
JDBC(Java DataBase Connectivity)是Java与数据库的接口规范,JDBC定义了一个支持标准SQL功能的通用低层的API,它由Java语言编写的类和接口组成,旨在让各数据库开发商为Java程序员提供标准的数据库API。
本文设计和实现了一个RAIDb的应用,该应用是一个以JDBC为基础的JAVA中间件,它能够建立所有的RAIDb配置,该软件提供了一个JDBC驱动器,并可以工作在任何现有的商业的或开源的关系型数据库管理系统上。
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.