来学一学分布式系统核心:面向对象的分布式架构,分布式对象系统

面向对象的分布式架构

面向对象编程是非常流行的编程模式,因此,在分布式系统中,基于对象来设计分布式架构是自然而然的。

本章介绍面向对象的分布式架构。

基于对象的分布式架构

在基于对象的分布式系统中,对象的概念在分布式实现中起着极其关键的作用。从原理上来讲,一切都可以被作为对象抽象出来,而客户端将以调用对象的方式来获得服务和资源。

分布式对象之所以成为重要的范型,是因为它相对比较容易地把分布的特性隐藏在对象接口后面。此外,因为对象实际上可以是任何事务,所以它也是构建系统的强大范型。

面向对象技术于20世纪80年代开始用于开发分布式系统。同样,在达到高度分布式透明性的同时,通过远程计算机宿主独立对象的理念构成了开发新一代分布式系统的稳固的基础。在本节中,我们将看到基于对象的分布式系统的常用体系结构。

软件世界中的对象和现实世界中的对象类似,对象存储状态在字段(Field)里,而通过方法(Method)来暴露其行为。方法对对象的内部状态进行操作,并作为对象与对象之间通信的主要机制。隐藏对象内部状态,通过方法进行所有的交互操作,这是面向对象编程的一个基本原则——数据封装(Data Encapsulation),可以通过接口(Interface)来使用方法。一个对象可能实现多个接口,而给定的一个接口定义可能有多个对象为其提供实现。

把接口与实现这些接口的对象进行分隔,对于分布式系统是至关重要的。严格的隔离允许我们把接口放在一台机器上,而使对象本身驻留在另外一台机器上。这种组织通常称为分布式对象(DistributedObject),如下图所示。

来学一学分布式系统核心:面向对象的分布式架构,分布式对象系统图5-1 带有客户端代理的远程对象的常见组织

当客户绑定(Bind)到一个分布式对象时,就会把这个对象的接口的实现(称为代理(Proxy))加载进客户的地址空间。代理类似于RPC系统中的客户存根(Client Stub)。它所做的事是把方法调用编组进消息中,以及对应答消息进行解组,把方法调用的结果返回给客户。

实际的对象驻留在服务器计算机上,它在这里提供了与它在客户端上提供的相同的接口。进入的调用请求首先被传递给服务器存根,服务器存根对它们进行解码,在服务器中的对象接口上进行方法的调用。服务器存根还负责对响应进行编码,并把响应消息转发给客户端代理。

服务器存根通常被称为骨架(Skeleton),因为它提供了明确的方式,允许服务器中间件来访问用户定义的对象。实际上,它通常以特定语言的类的形式包含不完整的代码,需要开发人员来进一步对其进行特殊化处理。

大多数分布式对象的一个特性是它们的状态不是分布式的。状态驻留在单台机器上,在其他机器上,智能地使用被对象实现的接口,这样的对象也被称为远程对象(Remote Object)。分布式对象的状态本身可以物理地分布在多台机器上,但是这种分布对于对象接口背后的客户端来说是透明的。

常用的分布式对象系统

就目前而言,常用的分布式对象系统主要有微软DCOM(COM+)、CORBA及Java RMI。

微软DCOM

1992年4月,微软发布Windows 3.1,包括了一种称为OLE(ObjectLinking and Embedding)的机制。这个机制允许一个程序动态链接其他库来支持其他功能,例如将一个电子表格嵌入Word文档。后来,OLE演变成了COM(Component Object Model)。一个COM对象是一个二进制文件。使用COM服务的程序访问的是标准化接口的COM对象而不是其内部结构。COM对象用全局唯一标识符(GUID)来命名,用类的ID识别对象的类。可以有多种方法来创建一个COM对象,例如CoGetInstanceFromFile。COM库在系统注册表中查找相应的二进制代码(一个DLL或可执行文件)来创建对象,并给调用者返回一个接口指针。COM的着眼点在于同一台计算机上不同应用程序之间的通信需求。

DCOM(Distributed Component Object Model)是对COM的扩展,它支持不同的两台机器上的组件之间的通信,而且不论它们运行在局域网、广域网还是Internet上。借助DCOM,应用程序能够进行任意的空间分布。DCOM于1996年在Windows NT 4.0中被引入,后来更名为COM+。为了支持访问远程COM对象,DCOM需要创建一个对象的过程,此时需要提供服务器的网络名以及类ID,微软提供了一些机制来实现这一点。最透明的方式是远程计算机的名称固定在注册表(或DCOM类存储)里,与特定类ID相关联。以此方式,应用程序不知道它正在访问一个远程对象,并且可以使用与访问本地COM对象相同的接口指针。同时,应用程序也可指定一个机器名来作为参数。

如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
[Java架构群]
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图灵课堂诸葛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值