基于 ORBIX 的分布式数据库系统的设计与实现
摘 要:本文给出了基于 CORBA 的 ORBIX 分布式数据库系统结构。在此基础上,就使用
ORBIX 实现分布式数据库系统的几个关键技术即分布式事务处理、交易服务、会话管理等
进行了 研究
关键词:CORBA;ORBIX;分布式数据库;资源管理器;XA 接
ABSTRACT: The ORBIX distributed database system architecture is given in this thesis.
On this basis, Several key technology such as distributed transaction processing、trader
service and session management etc. in the development of distributed database system
are researched
Key Words:CORBA;ORBIX;Distributed Database System ;Resource manager ;XA
Interfac
物理上分散而逻辑上有集中是分布式数据库系统(DDBS)的最显著的特点。DDBS 的实现实
际上就是将分布在不同地理位置上的集中式数据库系统通过相应的软件连接起来构成逻辑
上统一的数据库系统。而对于任何节点用户来说使用 DDBS 就好象在使用一个集中式数据
库。CORBA 规范是 目前 最为流行的 应用 最广的分布式对象技术。CORBA 的目的是定义
一套协议,符合这个协议的对象可以互相交互,不论它们是用什么样的语言写的,不论它
们运行于什么样的机器和操作系统。从而简化了简化本地与远地对象间的通信,使之以透
明的方式实现互连、互通与互操作,免去繁琐易于出错的底层工作,使大型分布软件开发
工作相对地提高速度并增加其可靠性[1]
2 相关技
在分布式数据库应用的设计过程中需要解决分布存储、分布式查询处理、逻辑互联、 网
络 信息传输等 问题 ,其复杂性导致软件开发成本高、开发周期长。所以在开发过程中若
能充分利用现有的分布式 计算 技术,将极大提高分布式数据库的开发效率[5]
(1)CORBA 的主要 内容 包括:IDL 接口定义语言、ORB 核心、OA 对象适配器、IDL 桩
、IDL 构架、DII 动态调用接口、DSI 动态程序构架接口、GIOP 协议[1]
(2)Orbix 是 IONA 公司研制的基于库的 CORBA 规范实现,支持 Windows、OS/2、各种
UNIX 等 20 余种操作平台。Orbix 是建立在 IONA 的 ART(Adaptive Runtime Technology)技
术之上的。ART 高效的模块化结构允许在运行过程中添加新的功能模块,只是通过改变配
置的设置就可以完成。这样大大的缩减了开发时间[2]
3 基于 ORBIX 分布式数据库系统结构
如图 1 为基于 Orbix 的分布是系统结构。其中每个客户端 Orbix 对一个客户应用程序,每
个服务器端 Orbix 对应一个服务器应用程序。使用 XA 接口,使全局事务的提交是由交易
服务控制,应用程序只需通知交易服务提交或回滚事务,就可以控制整个事务(可能涉及
多个异地的数据库)的全部提交或回滚,应用程序完全不用考虑冲正逻辑。XA 协议属于
X/OPEN DTP(Distributed Transaction Processing) 模型中的一部分,是中间件产品与数
据库之间的标准协议。采用 ADO 作为数据库连接工具,从而简化了数据库访问的开发过
程,数据访问更快捷,支持当前流行的各种数据库格式,有利于使用当前已有的数据资源
4 ORBIX 分布式数据库系统实
分布式事务处
事务指一个程序或程序段,在一个或多个资源如数据库或文件上为完成某些功能的执行过
程的集合。为了支持面向对象、分布式、事务处理应用,实现了(1)对象事务管理器。
(2)X/Open XA 接口。(3)两阶段提交(2PC)[4]协议
分布事务管理
数据库,支持本地事务。当一个应用需要两个或多个资源管理器参与同一事务时,某第三
方必须提供必要的协调以保证分布式事务的 ACID 属性
应用程序使用事务管理器创建事务。处理期间访问的每个资源管理器都是一个事务的参
与者。因而,当应用程序完成事务时,要么一个提交请求,要么一个回滚请求,事务管理
器与每个资源管理器联络
OTS 和 X/Open XA 接
接口功能: 提供管理事务划分(创建和完成)的接口,将事务信息传播给事务参与者和接
口,允许应用参与事务。X/Open XA 接口用于数据库的集成,以形成数据库的逻辑连接
如图 2 所示为客户、应用、OTS 及资源管理之间互操作获得 ACID 属性的过程
包括以下步骤:(1)客户与 OTS 链接并创建一个事务。(2) 客户在事务环境中对应
用作出调用并更新一些数据。(3) 应用程序检测到数据正在被更新并创建一个资源对象
,向事务注册资源对象。 (4)客户通过与 OTS 实现联系,试图提交事务。 (5)事务
开始提交协议。选择哪种协议(1PC 或 2PC),依据向事务注册资源对象数量及 OTS 是
否支持 1PC 优化而定。 (6)假定使用了 2PC 协议,OTS 发送一个准备信息到资源。资
源存贮足够的信息以防万一失败(例如,通过将改变写入一个日志文件)。资源对象表决
提交事务。 (7)OTS 收集所有资源对象的表决并决定事务的结果。将决定发送到所有的
注册资源对象。 (8)资源对象根据收到的提交或回滚消息作出必要的改变并将决定保存
到日志中。 (9)OTS 返回结果给客户
交易服
交易服务提供对象的位置和发现的设施。与 CORBA 命名服务按名字定位对象不同,对象
在交易服务中是没有名字的。服务器根据对象所提供的服务类型在交易服务中广告该对象
。客户通过查问交易服务定位感兴趣的对象,以查找所有提供特殊服务的对象。客户能够
进一步限制只搜索那些具有特殊特性的对象。 CORBA 交易服务是允许注册具有功能性描
述对象的一个交易服务。该服务通过使服务更易定位极大地增加了分布式系统的可伸缩性
一个交易包含许多描述服务的服务类型。 服务器输出一个提议给交易服务,包括其中
一个对象对象引用和由服务类型定义的属性值。 客户就能按照这些属性使用称为约束(
constraint)的过滤器查询交易服务。交易者为客户返回一个服务提议。客户就能使用提
议中的对象引用在服务器上调用
交易服务是构造有效分布式应用的工具。用属性注释服务提议和允许根据这些属性使用
约束过滤提议的优点使客户可以选择提议而不会导致每个对象上调用操作的管理费用。
服务类
(1)服务类型定
服务类型是交易服务的一般性描述。包括: ①类型名:唯一地标识服务类型 。②接
口类型:定义 IDL 接口,必须与广告的对象类型相一致。 接口类型描述广告的服务
IDL 签名。接口类型是一个字符串其格式因该是全局名或是一个如上所述服务类型名的接
口仓库标示符。当输出一个新的服务时,交易器可使用接口仓库确定广告的对象与接口类
型定义的接口一致。一个对象与一个接口一致如果他实现该接口,或它实现该接口的子类
。③属性类型:属性类型的集合定义服务提供者的属性。 属性类型的定义由名字,值类
型和方式组成。值类型是 CORBA::TypeCode, 模式表示属性是强制的,还是只读的。 强
制属性不能删除 ,只读属性能被删除。 ④超类型 能够从其它服务类型继承过来,封
装服务类型共有的行为和特性。
(2)服务提供
服务提供者是服务类型的实例。 服务提供者特性: ①服务类型名使提供者和某一服务
类型关联。 ②对象引用是一个指向为客户提供服务的对象指针。 ③属性集合描述该服务
提供者,并且属性与服务类型定义的属性类型一致。
交易器使用指定的服务类型定义在新的提供者上执行几个确认步骤
①输出者为所有的 mandatory property 提供值(包括所有从其超类型继承过来的服务类
型) ②对象必须与服务类型定义的接口类型一致。③所有属性的值类型必须与服务类型
定义的值类型匹配
(4)交易服务组
交易器依据它所支持的接口具有不同的功能。 其接口有 Lookup、 Register 、Admin、
Link、 Proxy
①最简单的交易器是 Query trader, 只支持 Lookup 接口。 ②简单的交易器不仅支持
Lookup 接口,而且支持具有 Register 接口的提供者的输出。 ③独立的交易者支持简单交
易器接口,又支持使用 Admin 接口的交易器的配置管理。 ④代理交易器支持独立交易器
接口也支持 proxy 接口。代理交易器本质上为延迟的提供者赋值输出 lookup 接口,可用于
封装遗留系统或作为一种服务提供者工厂。 ⑤连接交易器支持独立交易器,使用 Link 接
口支持交易器同盟。 ⑥full-service 交易器组合所有的功能接口
配置和运行交易服务
(1)配
配置和运行交易服务有几个必须的预备步骤 。操作的一般次序如下
①确定在那台主机上运行主交易服务,那台主机运行从交易服务。 ②确定主,次端口号
,复制器将侦听。 ③将主机和端口号信息输入到配置中。 ④配置交易服务以复制或非复
制的方式运行。 ⑤在“预备”模式运行交易服务以获得使客户能够与服务交互的初始引用。
⑥将第 4 步获得的每个引用加到配置数据库中。 ⑦启动主交易服务及从交易服
(2)运行交易服
如图 3 所示为典型的客户与服务器使用交易器相互交互过程
①一个提供者服务器为交易器增加一个服务类型(Printer)。Printer 类型描述办公室打印
机具有的属性。服务类型名与 IDL 接口名不同。 ②打印机服务器创建一个 printer_if 对象
。它输出该对象的对象引用到交易服务作为类型 Printer 的一个提供者。正常情况下,等
待请求到来。 ③客户过程为一个 Printer 提供者查询交易服务。 ④然后客户过程使用在
提供者中获得的对象引用调用打印机服务器。
(3)交易服务编
与交易器交互的三个主要步骤: ①使用提供者服务器增加一个服务类型。 如果交易服
务内相应的服务提供者类型不存在,则创建它 ②使用打印机服务器注册一个服务提供者
: 例如,创建一个对象,一个 IDL 接口 PrintServer 的实例 在类型 Printer 的服务提供者
内,向交易服务登记对象引用。服务器就可正常接受对象调用。 ③ 使用客户获得一个服
务提供者。 查询交易服务恢复一个服务提供者 ;使用在服务提供者中指定的对象引用调
用服务器上的对象
交易服务实
从图 3 交易器包含的提供者集合能够获得多么大量的数据。此外,交易器能够连接起来
(联合)为服务提供者相互搜索。这意味着,一个查询需要控制在合理的时间内完成搜索
。查询也需要控制返回的数据量
查询以服务类型名开始。通过使用在一个或多个服务属性上使用一个约束限制搜索
适当提供者。也可以指定一些限制因素,包括返回的提供者数量,优先排序,实际返回的
属性值。 交易服务如何使用这些因素处理一个查询,产生一序列所要的服务提供者
当交易服务处理一个查询时,缩小在所有相关连的交易器中所有的潜在提供者集合,通
过它收集一序列提供者在一起。交易服务使用查询输入确定如下:
①服务名确定一个提供者是否是适当的服务类型。 ②使用属性约束确定提供着是否与客
户指定的标准匹配。 ③优先顺序确定提供者在序列中的位置。 ④使用所要的属性确定返
回哪个提供者的属性值。
会话管
为了清除只有那个客户使用的资源,分布式系统需要是知道客户过程何时结束。在服务器
方,基于会话的 应用 分配资源满足客户请求。为了防止服务器膨胀,必须探测与服务器
有关的客户何时完成
(1)租赁框架: 租赁插件是 Orbix 的一个扩展特色,通过探测使用服务器的客户何时
停止管理服务器端。使用租赁框架来完成。当一个客户启动时,它能获得某一个服务器的
一个租约,周期性的更新。当客户结束,它自动释放租约。如果客户崩溃,服务器稍后会
检测到租约过期。在这种方式中,得体的和不得体的客户过程结束都能被检测到。
(2)服务器端,租赁框架操作: (1) 当一个服务器启动,它自动装载租赁插
件。 (2) 初始化期间,服务器通告租赁,在命名服务中导致一个 LeaseCallback 对象
。 (3) 每当服务器输出对象引用(IORs),插件自动地以 CORBA 方式在 IOR 中增加
租赁信息
(3)客户端,租赁框架操作: (1) 当客户端启动时,它自动装载租赁插件。(
2) 插件根据包含租赁细节的 IOR 检测客户将要调用的对象。插件发起与目标服务器会话
获得一个租赁。( 3) 插件自动地更新需要的租赁。(4) 有关客户端关闭: 如果客
户端正常关闭 ,插件自动地释放租赁。 如果客端崩溃,服务器端插件稍后就知道客户最
近没有更新的租赁。租赁过期,允许服务器适当地清除
(4)客户端使用租赁插
客户插件在其生命周期中定期调用命名服务。因此,在运行租赁客户之前,Orbix 域应
具有一个适当配置的定位器,激活程序,及命名服务准备。 使用租赁框架的客户部署需
要改变所要做的事情只是它的配置。特别是,插件必须在 ORB 插件列表中增加插件,并
被配置参与绑定
(3)在服务器端使用租赁插
服务器象租赁服务器那样与插件相互通告租赁。 实现服务器 为了在服务器端使用插
件,执行下列步骤: (1) 实现 LeaseCallback 接口 (2) 使用 IT_Leasing::Current
跟踪客户会话 (3) 通告租赁 (4) 配置 服务器端插件
5 结束
本文就利用基于 CORBA 标准的 ORBIX 设计和实现分布式数据库系统进行论述。Orbix 是
IONA 公司为实现 CORBA 规范技术而开发的系列软件。是世界上用于分布式应用最流行的
平台。ART 高效的模块化结构允许在运行过程中添加新的功能模块,只是通过改变配置的
设置就可以完成。这样大大的缩减了开发时间
参考 文献
[1] OMG﹒ The Common Object Request Broker: Architecture and Specification,
Revision , September 2002
[2] , December 200
[3]郑振楣等﹒分布式数据库[M]﹒北京: 科技 出版社,1998 年 7
[4]周龙驤等﹒分布式数据库管理系统实现技术[M]﹒北京:科技出版社,1998 年 7
[5]张 强等. 基于 CORBA 的分布式数据库系统的设计与实现. 计算 机工程,2004 年 10