请输入您要查询的百科知识:

 

词条 DCOM
释义

DCOM(分布式组件对象模型)是一系列微软的概念和程序接口,利用这个接口,客户端程序对象能够请求来自网络中另一台计算机上的服务器程序对象。DCOM基于组件对象模型(COM),COM提供了一套允许同一台计算机上的客户端和服务器之间进行通信的接口(运行在Windows95或者其后的版本上)。

§ 使用

Microsoft Distributed Component Object Model(DCOM)是Component Object Model(COM)的扩展,它支持不同的两台机器上的组件间的通信,而且不论它们是运行在局域网、广域网、还是Internet上。借助DCOM你的应用程序将能够任意进行空间分布。

由于DCOM是COM这个组件技术的无缝升级,所以你能够从你现有的有关COM得知识中获益,你的以前在COM中开发的应用程序、组件、工具都可以移入分布式的环境中。DCOM将为你屏蔽底层网络协议的细节,你只需要集中精力于你的应用。

例如,你可以为一个网站创建应该页面,其中包括了一段能够在网络中另一台更加专业的服务器电脑上处理(在将它们发送到发出请求的用户之前)的脚本或者程序。使用DCOM接口,网络服务器站点程序(现在以客户端对象方式发出动作)就能够将一个远程程序调用(RPC)发送到一个专门的服务器对象,它可以通过必要的处理,并给站点返回一个结果。结果将发送到网页浏览器上。

DCOM还可以工作在位于企业内部或者除了公共因特网之外的其他网络中。它使用TC/IP和超文本传输协议。DCOM是作为Windows操作系统中的一部分集成的。DCOM将很快在所有的主流UNIX平台和IBM的大型服务器产品中出现。DCOM替代了OLE远程自动控制。

在提供一系列分布式范围方面,DCOM通常与通用对象请求代理体系结构(CORBA)相提并论。DCOM是微软给程序和数据对象传输的网络范围的环境。CORBA则是在对象管理组织(OMG)的帮助下,由信息技术行业的其他商家提供赞助的。

§ DCOM概述

Microsoft的分布式COM(DCOM)扩展了组件对象模型技术(COM),使其能够支持在局域网、广域网甚至Internet上不同计算机的对象之间的通讯。使用DCOM,你的应用程序就可以在位置上达到分布性,从而满足你的客户和应用的需求。

因为DCOM是世界上领先的组件技术COM的无缝扩展,所以你可以将你现在对基于COM的应用、组件、工具以及知识转移到标准化的分布式计算领域中来。当你在做分布式计算时,DCOM处理网络协议的低层次的细节问题,从而使你能够集中精力解决用户所要求的问题。

§ 为什么要做分布式应用

将应用分布化并不是问题的结束。分布式应用引入了一个全新的设计和扩展概念,它增加了软件产品的复杂性,但是带来了可观的回报。某些应用本身就带有分布性,例如多人对战游戏、聊天程序以及远程会议系统等等。因此,一种健壮的分布式计算框架所带来的好处是不言自明的。很多其它的应用也是分布式的,即它至少有两个组件运行在不同的计算机上,但是因为它不是为分布性应用而设计的,所以它们的规模和可扩展性就有很大的局限性。任何的工作流或群件应用程序,大多数的客户机/服务器应用程序一些桌面办公系统本质上都控制着它们的用户的通讯和协作。将这些系统作为分布式系统并能够在正确的地方运行正确的组件会给用户带来好处,并且使人们对网络和计算机资源的运用更加充满信心。设计应用程序时考虑到分布性,能通过在客户端运行组件使应用适用于具有不同性能的不同的客户。

设计应用时考虑分布性能够使系统在扩展上具有很高的灵活性。

分布式应用与它们的非分布式版本比起来具有更大的可扩展性。如果整个复杂应用的逻辑结构可以用一个简单的模型来表示,那么仅仅只有一种方法来增加系统的工作效率:用更快的机器,而无需的应用本身进行调整。虽然现在的服务器和操作系统升级很快,但是买一个同样性能的机器还是比将服务器的速度升级为原来的两倍所花的钱少。有了一个设计适当的分布式应用系统,一台功能不怎么强大的服务器就能够运行所有的组件。当负载增加时,可以将一些组件扩展到价格便宜的附加的机器上。

§ 组件和复用

大多数分布式应用都不是凭空产生的。现存的硬件结构、软件、组件以及工具需要集成起来,以便减少开发和扩展时间以及费用。DCOM能够直接且透明地改进现存的对COM组件和工具的投资。对各种各样组件需求的巨大市场使得将标准化的解决方案集成到一个普通的应用系统中成为可能。许多熟悉COM的开发者能够很轻易地将他们在COM方面的经验运用到基于DCOM的分布式应用中去。

任何为分布式应用开发的组件都有可能在将来被复用。围绕组件模式来组织开发过程使得你能够在原有工作的基础上不断的提高新系统的功能并减少开发时间。基于COM和DCOM的设计能使你的组件在现在和将来都能被很好到使用。

§ 位置独立性

当你开始在一个真正的网络上设计一个分布式应用时,以下几个相互冲突的设计问题会很清楚地反映出来:

相互作用频繁的组件彼此间应该靠得更近些。

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

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

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

当你使用DCOM时,这些设计上的限制将很容易解决,因为配置的细节并不是在源码中说明的。DCOM使得组件的位置对你来说完全透明,无论它是位于客户的同一进程中或是在地球的另一端。在任何情况下,客户连接组件和调用组件的方法的方式都是一样的。DCOM不仅无需改变源码,而且无需重新编译程序。一个简单的再配置动作就改变了组件组件之间相互连接的方式。

DCOM的位置独立性极大地简化了将应用组件分布化的任务,使其能够达到最合适的执行效果。例如,设想某个组件必需位于某台特定的机器上或某个特定的位置,并且此应用有许多小组件,你可以通过将这些组件配置在同一个LAN上,或者同一台机器上,甚至同一个进程中来减少网络的负载。当应用是由比较少的大组件构成时,网络负载并不是问题,此时你可以将组件放在速度快的机器上,而不用去管这些机器到底在哪儿。

一种情况是当“客户”机和“中间层”机器之间的带宽足够大时,它是怎样配置在客户机上的;另一种情况是当客户进程通过比较慢的网络连接来访问组件时,它又是怎样配置在服务器上的。

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

§ 语言无关性

在设计和实现分布式应用系统时,一个普遍的问题就是为开发一个特定的组件而选择语言以及工具的问题。语言选择是一个典型的在开发费用、可得到的技术支持以及执行性能之间的折衷。作为COM的扩展,DCOM DCO具有语言独立性。任何语言都可以用来创建COM组件,并且这些组件可以使用更多的语言和工具。Java,Microsoft Visual C++,Microsoft Visual Basic,Delphi,PowerBuilder和Micro Focus COBOL都能够和DCOM很好地相互作用。

因为DCOM具有语言独立性,应用系统开发人员可以选择他们最熟悉的语言和工具来进行开发。语言独立性还使得一些原型组件开始时可以用诸如Visual Basic这样的高级语言来开发,而在以后用一种不同的语言,例如Visual C++和Java来重新实现,而这种语言能够更好地支持诸如DCOM的自由线程/多线程以及线程共用这些先进特性。

§ 连接管理

网络连接本身就比同一台机器中的连接更脆弱。当一个客户不再有效,特别是当出现网络或硬件错误时,分布式应用中的组件需要被加以注意。

DCOM通过给每个组件保持一个索引计数来管理对组件的连接问题,这些组件有可能是仅仅只连到一个客户上,也有可能被多个客户所共享。当一个客户和一个组件建立连接时,DCOM就增加此组件的索引计数。同理,当客户释放连接时,DCOM就减少此组件的索引计数。如果索引计数为零,组件就可以被释放了。

DCOM使用有效的地址合法性检查(pinging)协议来检查客户进程是否仍然是活跃的。客户机周期性地发送消息,当经过大于等于三次ping周期而组件没有收到ping消息时,DCOM就认为这个连接中断了。一旦连接中断,DCOM就减少索引计数,当索引计数为零时就释放组件。从组件的这一点看来,无论是客户进程自己中断连接这种良性情况,还是网络或者客户机崩溃这种致命情况,都被同一种索引计数机制处理。

在很多种情况下,组件和它的客户进程之间的信息流是没有方向性的:组件需要在客户端进行某些初始化操作,例如一个长进程的结束,用户所观看数据的更新,或者诸如电视以及多用户游戏这些协作环境中的下一条信息等。许多协议使得完成这种对称性的通讯十分困难。使用DCOM,任何组件都既可以是功能的提供者,又能是功能的使用者。通讯的两个方向都用同一种机制来管理使得完成对等通讯和客户机/服务器之间的相互作用一样容易。

DCOM提供了一个对应用完全透明的分布式垃圾收集机制。DCOM是一个天生的对称性网络协议和编程模型。它不仅提供传统的单向的客户机-服务器之间的相互作用方式,还提供了客户机和服务器以及对等进程之间的丰富的交谈式的通讯方式。

§ 可扩展性

分布式应用的一个重要因素是它的处理能力能够随着用户的数量、数据量所需性能的提高而增加。当需求比较小时,应用系统就比较小而速度快,并且它要能够在不牺牲性能和可靠性的前提下处理附加的需求。DCOM提供了许多特性来增强你的应用的可扩展性。

对称的多进程处理(SMP)

DCOM提高了Windows NT对于多进程处理的支持。对于使用自由线程模式的应用,DCOM使用一个线程队列来处理新来的请求。在多处理器机上,线程队列是由可利用的处理器的数量来决定的:太多的线程会导致经常性的上下文切换,而太少的线程又会使处理器处于空闲状态。DCOM只提供一个手工编码的线程管理器,从而使开发者从线程的细节中解脱出来并获得最好的性能。

DCOM通过使用Windows NT对于对称性多进程处理的高级支持功能就能轻易地将应用从一个单处理机扩展到庞大的多处理机系统上去。

§ 执行性能

如果最初的执行性能不能让人满意的话,可扩展性就不会带来太多好处了。经常考虑到更多更好的硬件会使得应用向下发展是非常有益的,但是这些需求是怎样的呢?这些尖端扩展特性是否有用呢?是否对从COBOL到汇编这每一种语言的支持会危害到系统的执行性能呢?使组件能够在地球的另一面运行的能力是否妨碍了当它和客户在同一个进程中时的执行性能呢?

在COM和DCOM中,客户并不能自己看到服务器,但是除非是在必要的情况下,否则客户进程决不会被系统组件将自己同服务器分开。这种透明性是通过一个简单的思想来实现的:客户进程同组件交互的唯一方式就是通过方法调用。客户进程从一个简单的方法地址表(一个“vtable”)中得到这些方法的地址。当客户进程想要调用一个组件中的某个方法时,它先得到方法的地址,然后调用它。在COM和DCOM模型中调用一个传统的C或汇编函数的唯一开支就是对方法地址的简单查询。如果组件是和客户运行在同一个线程中的过程中组件,那么无需调用任何COM或系统代码就可以直接找到方法的地址,COM仅仅只定义了找到方法地址表的标准。

当用户和组件不是那么靠近──在另一个线程中,在另一个程序中或者在地球另一面的一台机器中时情况又是怎样的呢?COM将它的远程过程调用(RPC)框架代码放到vtable中,然后将每个方法调用打包放到一个标准的缓冲器结构中,这个缓冲器结构将被发送给组件,组件打开包并且重新运行最初的方法调用。从这方面来说,COM提供了一个面向对象的RPC机制。

这种RPC机制的速度有多快呢?下面是需要考虑的不同的性能尺度:

一个“空”方法调用有多快?

“真正的”需要发送和接收数据的方法调用有多快?

在网络上转一圈有多快?

开始两列表示一个“空”方法调用(发送和接收一个4字节长的整数)。最后两列可以认为是一个“真正的”COM方法调用(50字节长的参数)。

此表显示了进程中组件是怎样得到零开支的执行性能的(第一排和第二排)。

进程之间的方法调用(第三排和第四排)需要将参数存入缓冲器并将其发送给其它的进程。在一个标准的桌面办公系统硬件中,每秒钟大约可以执行2000个方法调用,这可以满足大多数的执行性能需求。所有的本地调用是完全由处理器速度(一定程度上由存储器容量)决定的,并且能够很好地适用于多处理器型机器。

远程调用(第五排和第六排)主要受限于网络速度,同时可以看出DCOM的开支大约比TCP/IP多了35%(TCP/IP的循环时间是两秒)。

微软很快会提供许多平台上的正式的DCOM性能参数,它将显示出DCOM与客户数量以及服务器中处理器数量相关的扩展能力。

§ 带宽及潜在问题

分布式应用利用了网络的优点将组件结合到一起。理论上来说,DCOM将组件在不同的机器上运行这一事实隐藏起来。实际上,应用必须考虑到网络连接带来的两个主要限制:

带宽:传递给方法调用的参数的大小直接影响着完成方法调用的时间。

潜在问题:物理距离以及相关的网络器件(例如路由器合传输线)甚至能使最小的数据包都被显著地延迟。

DCOM怎样帮助应用解决这些局限呢?DCOM自己将网络循环时间最小化,使得避免网络中潜在的拥塞成为可能。DCOM选择了TCP/IP协议套件中的无连接UDP协议作为自己的传输协议。协议的无连接特性使得DCOM能够将许多低级别的确认包和实际的数据以及地址合法性检查(pinging)信息混合起来从而改善了性能。即使是运行在面向连接的协议上,DCOM也优于传统的面向特殊应用的协议。

§ 静态负载平衡

解决负载平衡的一个方法是不断地将某些用户分配到运行同一应用的某些服务器上。因为这种分配不随网络状况以及其它因素的变化而变化,所以这种方法称为静态负载平衡。

基于DCOM的应用可以很容易地通过改变登记入口将其配置到某些特定的服务器上运行。顾客登记工具可以使用Win32的远程登记函数来改变每一个客户的设置。在Windows NT 5.0中,DCOM可以使用扩展的目录服务来完成对分布的类的储存,这使得将这些配置改变集中化成为可能。

在Windows NT 4.0中,应用系统可以使用一些简单的技术达到同样的效果。一个基本的方法是将服务器的名字存到诸如数据库和一个小文件这样的众所周知的集中环境中。当组件想要和服务器相连接时,它就能很轻易地获得服务器的名字。对数据库或文件内容的改动也就同时改变了所有的用户以及有关的用户组。

一个灵活得多的方法使用了一个精致复杂的指示组件。这个组件驻留在一台为大家所共知的服务器中。客户组件首先和此组件连接,请求一个指向它所需服务的索引。指示组件能够使用DCOM的安全性机制来对发出请求的用户进行确认,并根据发出请求者的身份选择服务器。指示组件并不直接返回服务器名,它实际上建立了一个到服务器的连接并将此连接直接传递给客户。然后DCOM透明地将服务器和客户连接起来,这时指示组件的工作就完成了。我们还可以通过在指示组件上建立一个顾客类代理店之类的东西而将以上机制对客户完全屏蔽起来。

当用户需求增加时,管理员可以通过改变组件而为不同的用户透明地选择不同的服务器。此时客户组件没有做任何改动,而应用可以从一个非集中式管理的模式变为一个集中式管理的模式。DCOM的位置独立性以及它对有效的指示的支持使得这种设计的灵活性成为可能。

§ 动态负载平衡

静态负载平衡方法是解决不断增长的用户需求的一个好方法,但它需要管理员的介入,并且只有在负载可预测时才能很好地工作。

指示组件的思想能够提供更加巧妙的负载平衡方法。指示组件不仅可以基于用户ID来选择服务器,它还可以利用有关服务器负载、客户和可用服务器之间的网络拓朴结构以及某个给定用户过去需求量的统计数字来选择服务器。每当一个客户连接一个组件时,指示组件将其分配给当时最合适的可用的服务器。当然,从客户的观点看来,这一切都是透明发生的。这种方法叫做动态负载平衡法。

对某些应用来说,连接时的动态负载平衡法可能仍然是不充分的。客户不能被长时间中断,或者用户之间的负载分布不均衡。DCOM本身并没有提供对这种动态重连接以及动态的方法分布化的支持,因为这样做需要对客户进程和组件之间相互作用的情况非常熟悉才行,此时组件在方法激活过程中保留了一些客户的特殊的状态信息。如果此时DCOM突然将客户和在另一台机器上的另一个不同的组件再连接,那么这些信息就丢失了。

然而,DCOM使得应用系统的设计者能够很容易地将这种逻辑结构清楚地引入到客户和组件之间的协议中来。客户和组件能够使用特殊的界面来决定什么时候一个连接可以被安全地经过再寻径接到另一台服务器上而不丢失任何重要的状态信息。从这一点看来,无论是客户还是组件都可以在下一个方法激活前初始化一个到另一台机器上的另一个组件的再连接。DCOM提供了用来完成这些附加的面向特殊应用的协议的所有的丰富的协议扩展机制。

DCOM结构也允许将面向特殊组件的代码放到客户进程中。无论什么时候客户进程要激活一个方法时,由真实组件组件所提供的代理组件在客户进程中截取这一调用,并能够将其再寻径到另一台服务器上。而客户根本无需了解这一过程,DCOM提供了灵活的机制来透明的建立这些“分布式组件”。

有了以上独特的特性,DCOM使得开发用来处理负载平衡和动态方法寻径的一般底层结构成为可能。这种底层结构能够定义一套标准界面,它可以用来在客户进程和组件之间传递状态信息的出现和消失情况。一旦组件位于客户端的部分发现状态信息消失,它就能动态地将客户重连接到另一台服务器上。

例子:微软的事务服务器(以前叫做“Viper”)使用这一机制来扩展了DCOM编程模型。通过一套简单的标准状态信息管理界面,事务服务器能够获得必要的信息来提供高级别的负载平衡。在这种新的编程模型中,客户和组件之间的相互作用被捆绑到事务中,它能够指出什么时候一系列的方法调用所涉及的组件的状态信息都是清楚的。

DCOM提供了一个用来完成动态负载平衡的强大的底层结构。简单的指示组件在连接时可以用来透明地完成动态服务器分配工作。用来将单一的方法调用再寻径到不同的服务器的更尖端的机制也能够轻易地完成,但是它需要对客户进程和组件之间的相互作用过程有更为深入的了解。微软的完全基于DCOM建立的事务服务器(“Viper”)提供了一个标准的编程模型用来向事务服务器的底层结构传递面向这一附加的特殊应用的有关细节问题,它可以用来执行非常高级的静态和动态的重配置与负载平衡。

§ 容错性

容错性对于需要高可靠性的面向关键任务的应用系统来说是非常重要的。对于错误的恢复能立通常是是通过一定量的硬件、操作系统以及应用系统的软件机制来实现的。

DCOM在协议级提供了对容错性的一般支持。前面的“应用系统间的共享式连接管理”部分所描叙的一种高级pinging机制能够发现网络以及客户端的硬件错误。如果网络能够在要求的时间间隔内恢复,DCOM就能自动地重新建立连接。

DCOM使实现容错性变得容易起来。一种技术就是上一部分所说的指示组件的技术。当客户进程发现一个组件出错时,它重新连接到建立第一个连接的那个指示组件。指示组件内有哪些服务器不再有效的消息,并能提供在另一台机器上运行的这一组件的一个新的实例。当然,在这种情况下应用系统仍然需要在高级别上(一致性以及消息丢失问题等)处理错误的恢复问题。

因为DCOM可以将一个组件分别放到服务器方和客户方,所以可以对用户完全透明地实现组件的连接和重连接以及一致性问题。

例子:微软的事务服务器(“Viper”)提供了一个在应用级处理一致性问题的一般性机制。将多个方法调用组合到一个原子事务中就能够保证一致性,并使应用能够很容易地避免信息的丢失。

另一技术经常被称为“热备份”。同一服务器组件的两个复本并行地在不同的机器上运行,它们处理相同的信息。客户进程能够明确地同时连接这两台机器。DCOM的“分布式组件”通过将处理容错性的服务代码放到客户端使得以上过程对用户应用完全透明。另一种方法是使用另一台机器上运行的一个协作组件,由它代表客户将客户请求发送给那两个服务器组件。

当错误发生时试图将一个服务器组件转移到另一台机器上经事实证明是失败的。Windows NT组的最初版本使用了这一方法,当然它可以在应用级完成。DCOM的“分布式组件”使得完成这一机能更容易了,并且它对用户隐蔽了实现细节。

DCOM使得完成高级的容错技术变得更为容易。使用DCOM提供的部分在客户进程中运行的分布式组件技术能够使解决问题的细节对用户透明。开发者无需改动客户组件,甚至客户机进行重新配置就能够增强分布式应用系统的容错性。

随便看

 

百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/19 12:12:46