DCOM实现分布式应用(二)

功能的发展:版本化

除了随着用户的数量以及事务的数量而扩展规模外,当新的特性加入时应用系统也需要扩展规模。随着时间的推移,新的任务被添加进来,原有的任务被更新。传统的做法是或者客户进程和组件都需要同时被更新,或者旧的组件必须被保留直到所有的客户进程被更新,当大量的地理上分布的站点和用户在使用系统时,这就成为一个非常费力的管理问题。

DCOM为组件和客户进程提供了灵活的扩展机制。使用COM和DCOM,客户进程能够动态地查询组件的机能。一个COM组件不是将其机能表现为一个简单、统一的方法和属性组,而是对于不同的客户进程表现为不同的形式。使用特定特性的客户进程只需要访问它所需要使用的方法和属性。客户进程也能够同时使用一个组件的多个特性。当新的特性加入组件时,它不会影响不涉及这些特性的老的客户进程。

用这种方法来组织组件,使得我们能够有一种新的方法来发展组件功能:最初的组件表现为诸如COM界面的一套核心特性,这些特性是每个客户进程都需要使用的。当组件需要新的特性时,大多数(甚至是全部)的界面仍然是必须的,我们根本无须更改原来的界面就可以将新的功能和属性放到附加的界面中去。老的用户进程就好象什么事也没发生似的继续访问核心界面。新的客户进程既可以测试新的界面是否存在以便能使用它,也可以仍然只使用原来的界面。

图8 健壮的版本发展

因为在DCOM编程模型中机能被分组放入界面中,你可以设计使用老的服务器程序的新的客户程序,也可以设计使用老的客户程序的新的服务器程序,或者将这些混合起来以便能够适合你的需求和编程资源。使用传统的对象模型时,那怕是对一个方法的细微改动都可能在根本上改变客户和组件之间的协议。在一些模型中,可以将方法加到方法队列的队尾,但是却不能在老的组件上测试新的方法。从网络发展的前景看来,这些事情将会变得越来越复杂:编码以及其它的一些功能典型地依赖于方法和参数的顺序。增加或改动方法和参数也会显著地改变网络协议。DCOM为对象模式和网络协议设计了一个简单、优雅和统一的方法来解决这些问题。

执行性能

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

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

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

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

  • 一个“空”方法调用有多快?
  • “真正的”需要发送和接收数据的方法调用有多快?
  • 在网络上转一圈有多快?

下表显示了COM和DCOM的一些真实的执行性能参数,使我们能够对DCOM和其它的协议的相关的执行性能有一定的了解。

 calls / secms / callcalls / secms / call
"Pentium?,,” in-process3,224,8160.000313,277,9730.00031
"Alpha?," in-process2,801,630 0.000362,834,2690.00035
"Pentium," cross-process2,377 0.42 2,0230.49
"Alpha," cross-process1,925 0.5216340.61
"Alpha," to Pentium remote376 2.73063.27

开始两列表示一个“空”方法调用(发送和接收一个4字节长的整数)。最后两列可以认为是一个“真正的”COM方法调用(50字节长的参数)。 此表显示了进程中组件是怎样得到零开支的执行性能的(第一排和第二排)。 进程之间的方法调用(第三排和第四排)需要将参数存入缓冲器并将其发送给其它的进程。在一个标准的桌面办公系统硬件中,每秒钟大约可以执行2000个方法调用,这可以满足大多数的执行性能需求。所有的本地调用是完全由处理器速度(一定程度上由存储器容量)决定的,并且能够很好地适用于多处理器型机器。 远程调用(第五排和第六排)主要受限于网络速度,同时可以看出DCOM的开支大约比TCP/IP多了35%(TCP/IP的循环时间是两秒)。 微软很快会提供许多平台上的正式的DCOM性能参数,它将显示出DCOM与客户数量以及服务器中处理器数量相关的扩展能力。

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
程序员的必经之路! 【限时优惠】 现在下单,还享四重好礼: 1、教学课件免费下载 2、课程案例代码免费下载 3、专属VIP学员群免费答疑 4、下单还送800元编程大礼包 【超实用课程内容】  根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!   套餐中一共包含2门MySQL数据库必学的核心课程共98课时   课程1:《MySQL数据库从入门到实战应用》   课程2:《高性能MySQL实战课》   【哪些人适合学习这门课程?】  1平时只接触了语言基础,并未学习任何数据库知识的人;  2对MySQL掌握程度薄弱的人,课程可以让你更好发挥MySQL最佳性能; 3想修炼更好的MySQL内功,工作中遇到高并发场景可以游刃有余; 4被面试官打破沙锅问到底的问题问到怀疑人生的应聘者。 【课程主要讲哪些内容?】 课程一:《MySQL数据库从入门到实战应用》 主要从基础篇,SQL语言篇、MySQL进阶篇三个角度展开讲解,帮助大家更加高效的管理MySQL数据库。 课程:《高性能MySQL实战课》主要从高可用篇、MySQL8.0新特性篇,性能优化篇,面试篇四个角度展开讲解,帮助大家发挥MySQL的最佳性能的优化方法,掌握如何处理海量业务数据和高并发请求 【你能收获到什么?】  1.基础再提高,针对MySQL核心知识点学透,用对; 2.能力再提高,日常工作中的代码换新貌,不怕问题; 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力MAX。 【课程如何观看?】  1、登录CSDN学院 APP 在我的课程中进行学习; 2、移动端:CSDN 学院APP注意不是CSDN APP哦  本课程为录播课,课程永久有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化。  下载方式:电脑登录课程观看页面,点击右侧课件,可进行课程资料的打包下载。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值