首页 理论教育DCOM:分布式数据库技术

DCOM:分布式数据库技术

【摘要】:图12.7同一进程中的COM组件在目前的常规操作系统中,各进程之间是相互屏蔽的。图12.8表明了COM/DCOM运行库是怎样提供客户进程和组件之间的联系的。图12.8不同进程中的COM组件当客户进程和组件位于不同的机器时,DCOM只是用网络协议来代替本地进程之间的通信。图12.9DCOM不同机器上的COM组件要注意的是,在设计一个分布式应用时,往往需要考虑以下几个相互冲突的问题。

DCOM是由Microsoft公司推出的对象构件模型,最初用于集成Microsoft公司的办公软件,目前已发展成为世界的应用系统集成标准,并集中反映在其产品ActiveX中。从策略考虑,Microsoft公司决定支持OMG提出的OLE/COM与CORBA的互操作标准,从而使COM的对象能够与CORBA的对象进行通信。OMG和Microsoft公司的分布式对象技术将共存,并在许多方面相互渗透。

CORBA的一个主要对手是Microsoft公司的DCOM[3](分布式组件对象模型)技术。DCOM是Microsoft公司原组件对象模型(COM)技术的扩展,它能够支持局域网、广域网,甚至支持Internet上不同计算机对象之间的通信和互操作。

COM可以定义组件及其客户之间的相互关系。COM可以让组件和客户端无需任何中介就能相互联系。客户进程可以直接调用组件中的方法(见图12.7)。

图12.7 同一进程中的COM组件

在目前的常规操作系统中,各进程之间是相互屏蔽的。当一个客户进程需要和另一个客户进程中的组件通信时,COM不能直接调用该进程,而必须遵循操作系统对进程间通信所做的规定。COM让这种通信能够以一种完全透明的方式进行:截取来自客户进程的调用,并将其传送到另一个进程中的组件。图12.8表明了COM/DCOM运行库是怎样提供客户进程和组件之间的联系的。

图12.8 不同进程中的COM组件

当客户进程和组件位于不同的机器时,DCOM只是用网络协议来代替本地进程之间的通信。无论是客户端还是组件,都不会知道连接它们的线路比以前长了许多。

图12.9是DCOM的整体结构:COM运行库向客户和组件提供了面向对象的服务,并且使用RPC和安全机制产生符合DCOM网络协议标准的网络包。

任何分布式应用开发的组件都有可能在将来被复用。使用组件模式来组织开发软件系统能够在原工作基础上不断地提高新系统的功能,并缩短它的开发时间。基于COM和DCOM的设计能使现有的组件无论在现在或将来都能被很好地使用。

图12.9 DCOM不同机器上的COM组件

要注意的是,在设计一个分布式应用时,往往需要考虑以下几个相互冲突的问题。

●相互作用频繁的组件,彼此间应该靠得更近些。(https://www.chuimin.cn)

●某些组件只能在特定的机器或位置上运行。

●小组件增加了配置的灵活性,但它同时也增加了网络的拥塞。

●大组件减少了网络的拥塞,但它同时也减少了配置的灵活性。

使用DCOM时,由于配置的细节并不是在源码中说明的,所以比较容易解决这些设计上受限的问题。对用户来说,DCOM让组件的位置完全透明,无论用户是位于客户的同一进程中或是在地球的另一端。在任何情况下,客户连接组件和调用组件的方式都是相同的。DCOM不仅无需改变源码,而且无需重新编译程序。实际上,一个简单的再配置动作就改变了组件之间相互连接的方式,这一性质称为位置独立性。

位置独立性简化了将应用组件分布化的任务,使其能够达到最合适的执行效果。

图12.10显示了在两种不同的情况下,相同的“有效性检查组件”是如何分别配置的。一种情况是当“客户”机和“中间层”机器之间的带宽足够大时;另一种情况是当客户进程通过比较慢的网络连接来访问组件时,是怎样配置到服务器上的。实线表示第一种情况,虚线表示第二种情况。

图12.10 位置独立性

由于位置独立性,所以应用系统可以将互相关联的组件放于靠得较近的机器上,甚至可以将它们放到同一台机器上或同一个进程中。好处是,即使是由大量的小组件来完成具有复杂逻辑结构的功能,它们之间仍然能够有效地相互作用。当组件在客户机上运行时,将用户界面和有效性检查放在客户端或离客户端比较近的机器上会更有意义,考虑集中的数据库事务时应该将服务器靠近数据库。

在设计和实现分布式应用系统时,最普遍的问题是,为开发一个特定的组件所选择的语言及工具。作为COM的扩展,DCOM具有语言独立性。可以用任何语言来创建COM组件,这些组件可以使用多种语言和工具。Java、Microsoft Visual C++、Microsoft Visual Basic、Delphi和PowerBuilder都能够与DCOM很好地相互操作。因为具有语言独立性,所以应用系统开发人员可以选择他们最熟悉的语言和工具来进行开发。语言独立性还可以让一些原型组件在前期先用诸如Visual Basic这样的高级语言来开发,而在后期使用另一种语言,如Visual C++和Java来重新开发。

当客户不再有效时,特别是当出现网络或硬件错误时,需要关注分布式应用中的组件。可以通过给每个DCOM保持一个索引计数来管理对组件的连接问题,这些组件有可能只连到一个客户上,也有可能被多个客户所共享。当一个客户和一个组件建立连接时,DCOM就增加此组件的索引计数。当客户释放连接时,DCOM就减少此组件的索引计数。如果索引计数为零,组件就可以被释放了。

DCOM使用有效的地址合法性检查(ping)协议来检查客户进程是否仍然活跃。ping是大家都熟悉的、互联网中常用的地址合法性检查协议。在DCOM中,客户机周期性地发送消息,当大于等于三次的ping周期组件没有收到ping消息回音时,DCOM就认为这个连接中断了。一旦连接中断,DCOM就减少索引计数,当索引计数为零时,就释放组件。

大多数情况下,组件和它的客户进程之间的信息流是无方向性的。使用DCOM,任何组件既可以是功能的提供者,也可以是功能的使用者。通信的两个方向都用同一种机制来管理,使得完成对等通信和客户机/服务器之间的相互作用同样容易。

由于组件间的通信会中断,一个组件死亡了,与它连接的那个组件如果无其他组件与之相连,此组件就成了“孤子”,可以说成了“垃圾”。DCOM提供了一种对应用完全透明的分布式垃圾收集机制。