基于CORBA通信中间件设计

  • 格式:doc
  • 大小:24.50 KB
  • 文档页数:5

基于CORBA的通信中间件设计
摘要:在现代大型软件项目中,往往涉及到多个子系统,且子系统间跨平台、跨语言,数据交互成为瓶颈。

基于corba的通信中间件可以实现安全、高效、无缝的衔接,简化数据互连,降低编程复杂度,避免通信断流,提高通信效率。

关键词:跨平台;跨语言;corba;通信中间件
中图分类号:tn975
在现代大型软件项目中,虽然各系统在设备选型时力争使用相同厂家、相同型号的硬件设备,但仍存在服务器与工作站,unix与windows这样异构平台间的数据互连问题。

为实现异构连接和分布式应用,我们设计了基于corba的通信中间件,实现安全、高效、无缝的衔接,代替传统应用程序的网络开发方式,提高了开发质量和效率,降低了开发成本,并实现了通信一级的透明故障切换。

1 corba技术简介
corba(the common object request broker architecture)通用对象请求代理结构是一个分布式的面向对象应用架构规范,它是由omg研究组在80年代末提出,在90年代逐步完善,形成现在被软件行业普遍认可的标准corba/iiop规范2.3。

在corba分布式应用中,关键是由两个特殊的对象管理组成:存根(stub)和框架(skeleton),如图1.1所示。

从图中我们可以看到,在corba客户端,存根充当某个对象的代理,是通过安装在客户机上的orb软件来发出访问请求的,而orb则通过运行在局域
网某处的智能代理来定位提供对象实现的服务器。

图1.1 corba工作原理
2 基于corba容错技术的研究
2.1 双服务器热备份框架
在以往的研究中,往往利用事件服务机制实现负载均衡的同时,也利用事件服务机制实现了容错,避免了从事件通道的单点故障。

但是它并不是服务本身的容错,只是利用了corba一种服务机制实现了corba的另一种服务,因此本论文提出了基于corba的容错设计——双服务器热备份框架。

该框架中所有的客户端都通过服务器才能获得相应服务器复本应用。

一旦服务器自身发生故障,可能导致整个分布式应用停止工作。

如果采用双服务器热备份框架,实现主服务器与备份服务器之间的同步,则可以解决容错技术的单点故障问题。

在双服务器热备份架构中,有两个对等的服务器:主服务器和备份服务器,主从服务器始终保持同步。

但是备份服务器对客户来说是透明的,或者说是客户并不需知道备份服务器的存在。

客户请求仍旧发送给主服务器,所有的决策仍由主服务器做出,同时备份服务器始终与主服务器保持同步,实际上就是主服务器的热备份。

一旦主服务器发生故障,备份服务器立刻启动成为主服务器。

一旦一方发现另一方超时不再有响应,则需要重新启动发生故障的服务器,并且将正常工作状态服务器的所有信息“倒”给发生故障的服务器。

主服务器通过心跳信号监测备份服务器是否工作,如
果超过timeout 时间间隔未接收到备份服务器的心跳信号,认为备份服务器发生故障,主服务器发出restart操作(出现某些软件故障),重新启动备份服务器,或者由于硬件故障,人为修复、启动备份服务器;若备份服务器超过timeout时间间隔未收到主服务器的心跳信号,则认为主服务器发生故障,备份服务器立即启动,担负服务器的任务,成为新的主服务器。

2.2 合成对象引用
在双服务器热备份框架容错技术的基础上,使用合成对象引用也显示出其独特的魅力。

应用程序在运行过程中,在进入corba环境之前,必须完成如下两个任务:一是被初始化到orb环境;二是获得orb对象的对象引用和其它一些重要的对象的对象引用如rootpoa或其它对象适配器的引用等。

为了完成上述任务,orb核心提供了相应的函数。

poa是在orb和servant之间的媒介,为创建corba对象和对象引用以及为将请求调度到相应的servant上提供服务。

poa提供灵活、可配置的服务对象的管理(包括对象的生命周期,激活和去活方式、引用的生成、服务的注册等等)、对象适配以及对象关键字的分配和生成等。

poa对象引用的接口是由type_id和n个tagged profile组成,type_id为对象类型,tagged profile为它所基于的tcp/ip等协议。

在双服务器热备份框架上合成poa引用可以使系统的容错能力得到很大改善。

合成引用的表示框图如图2.3所示:
图2.3 合成应用框图
将对象引用1和对象引用2合成为一个对象引用,客户端访问时只需面对合成的对象引用,而不必知道它最终访问的时主服务器还是备份服务器。

系统设置客户端访问时先默认访问主服务器,一旦主服务器实效,它会由corba的应用程序控制自动切换到备份服务器。

而对于客户端来说,它内部的切换客户并不关心,因此实现透明故障切换,使系统具有更好的容错性。

大型软件系统可通过合成对象引用来实现透明故障切换,实现容错技术。

对象引用包括主机名、端口号和key。

key又由poa路径、时间戳和id等一系列属性组成。

为了不影响系统,我们设计生成一个和系统中一摸一样的两台服务器的对象引用,分别为iorgen1和iorgen2。

执行iorgen1和iorgen2分别生成data1引用和data2引用,使用ob自带工具iormerge将引用1和引用2合成一个引用data。

这样用户在调用a方法时,通过对象引用中的主机名和端口号先默认找到主服务器,通过解析key找到rootpoa,由于我们在rootpoa 的基础上新建了一个poa,称为persistpoa,因此在找到rootpoa 后接着找到persistpoa,定位对象databackup_impl实现类中a方法,功能得以实现。

通过合成引用,客户端不必知道它访问的时哪台服务器,也不必知道哪台是否出现故障。

ob会自己达到透明故障切换,用户不会知
道,它访问的永远只有一个合成引用。

参考文献:
[1]王珍熙.可靠性·冗余及容错技术[m].航空工业出版社,1991.
[2]仲萃豪.中间件一构筑复杂分布式应用的关键技术.中科院软件所,2001-7.
[3]肖健.2005年中间件市场分析与预测.中国制造业信息化门户,2005-1-18.
[4]omg.corba系统结构、原理与规范[m].电子工业出版社,2003.
[5]r.otte,p.patrick,m.roy.corba教程—公共对象请求代理体系结构[m].清华大学出版社,1999.
作者单位:张雷,苏冉冉 / 北京卫星导航中心,北京 100094 赵玉珍 / 山西广播电视大学信息中心,太原 030027。