标签:
分布式对象技术是在面向对象技术的基础上发展起来的,它要解决的主要问题是位于不同进程中的对象之间的调用问题。
支持访问异地对象,支持访问异构对象(java平台调用C、vb,C++)。
参考http://kb.cnblogs.com/page/196448/
1.中间件是一种软件,它提供基本的通信模块和其他一些基础服务模块,使得应用程序开发提供平台。
中间件技术提供了一个编程的抽象,来屏蔽上述的异质问题。
通信协议:独立于网络底层的传输协议。
硬件:数据类型在不同的硬件平台上有不同的表示。
操作系统:在操作系统层上提供更高级的抽象API,屏蔽操作系 统的异构。
编程语言:CORBA通过IDL,可以使得不同的语言写的代码互相 调用。
一个模块的接口包含了其他模块可访问的方法 的定义(没有实现)和变量。有些情况,需要调用同一个方法,但是的具体 实现的不同,接口可以做到这一点。分布式系统中的接口,同一个地址空间,模块之间的通信可以通过访 问公共变量,但是远程调用不能直接访问变量,只能通过属土参数和输出参数,指针不能作为参数传递或者作为结果返回。
RPC’s Service interface
对服务器一组过程的说明,定义每个过 程的输入输出参数,供客户端调用。
RMI’s Remote interface
对一个对象的方法的说明。
可以传递一个对象或者远程对象的指针, 也可以返回这两种类型,这是与过程调 用最大的不同。
接口定义语言(IDLs—Interface Definition Languages ),Java RMI中可以直接定义接口,只能 被java语言调用
其它中间件系统提供了IDLs. e.g. CORBA IDL (n1), DCE IDL and DCOM IDL,允许用其它语言实现的对象来调用, 具有跨平台功能。
在谷粉找,就这一个http://www.slideshare.net/chinainvent/totemsrprrp
单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?
1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。
2.多播:“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。 IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自动分配。
3.广播:“广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。
广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,一般进行子网划分,就像将一个大厅用墙壁隔离成许多小厅一样,以达到隔离广播风暴的目的。
在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。
参考文献http://www.cnblogs.com/rogerroddick/archive/2009/08/31/1557228.html
RSS 是一种用于共享新闻和其他Web内容的数据交换 规范,起源于 网景通讯公司 的推"Push"技术,将订 户订阅的内容传送给他们的 通讯协同格式 (Protocol)。
对象相当于server, 调用该对象方法的程序是client.作为 server的对象需要访问其它对象的方法 时,它就是client。
进程中可以包含多个对象,本地的和远程的。调 用其它进程的对象叫远程调用,即使在同一台机 器上,不同的地址空间的调用也叫远程调用.
提供可被远程调用方法的对象叫远程对象。调用远程对象必须先获得远程对象的引用。远程对象通过远程接口定义可被远程访问的方法。
分布对象的远程调用不能保证每次调用都确定被执行。RRP协议通常采用一些措施来保证所要求的消息传递保障。
对于RRP协议,选择不同的策略,以提供不同的提交的保证。
Retry Request message:是否重发请求,直到收到应答或者确信服务器已经不工作了。
Duplicate filtering:当有重复传输的情况下,是否在服务器端过滤掉重复的请求
Retransmission of result:是否保存结果的历 史记录用于重发,以便在结果丢失的情况下不需要重复执行请求
本地调用一定会执行,且只执行一次。exactly once
远程调用不能保证exactly once语义,远程调用使用RRP协议,它有三种语义形式:
Maybe –客户端没有接收到回复,客户端能判 断的结论是:请求可能被执行,返回结果丢 失;也可能没有被执行,请求消息丢失或者远 程对象的机器不宕机。如果在设计上没有考虑重发请求,则是maybe
语义。
存在的问题:不能保证系统正确工作。
At-least-once – 客户端得到一个结果,说明请求 至少被执行了一次,也可能多于一次。在它收到一个异常时,应该重发请求,直到得到结果。(Sun RPC)
存在问题:
任意故障:如果调用请求被重复发送,远程 方法可能被执行一次,多次执行可能引起错误的结果。如果对象提供的操作是幂等操作,就不存在任意故障。
增加消息量:当远程服务器不工作,会导致 不断重发请求,增加消息量。可以采用超时 判断,来结束重发。
At-most-once – 客户端收到一个结果,表明请求被执行了一次,并且只执行一 次;或者收到一个异常,表明方法没有 被执行到(JavaRMI)。
有些应用不允许一次请求被执行多次,需要这种语义。
措施:在服务器端过滤重复请求,或者 在在服务保存结果,可以保证方法不被 重复执行。
存在问题:增加服务器处理的负担。
基于TCP/IP连接的调用语义:当一个进程得知与对方的连接断开了,以下 三种情况是可以推断的:
某个进程退出或关闭了连接
exactly once.
服务器上的进程崩溃了
at most once.
网络拥塞
at least once
根据远程调用的容错手段,决定了调用 语义 ????????
远程过程调用(RPC--Remote Procedure Call ),不同进程之间的过程的调用,但是是相同的语言环境。
RPC的目的是可以像程序调用一样使用远程 服务。RPC 使用的是客户机/服务器模式。
服务程序就是一个服务器(server),server提供一个或多个远程过程;请求程序就是一个客户机(client),client向server发出远程调用。
程序调用:如何使远程的过程调用看起来 和本地的过程调用没有区别的问题
网络通信:调用进程和被调用进程间的网 络比本地计算机有更复杂的特性。例如, 它可能限制消息尺寸,并且有丢失和重排消息的可能,安全问题;
操作系统:运行调用和被调用进程的计算 机可能有明显不同的体系结构和数据表示 格式;
编程语言:跨语言之间的互操作问题;
RPC引入了存根(Stub)的概念,比如服务端有某个函数fn(),它为了能够被远程调 用,需要通过编译器生成两个stub:
客户端的一个stub:c_fn()
服务器端的一个stub:s_fn()
在客户端,一个进程在执行过程中调用到了函数 fn(),此函数的具体实现是在远程的某台机器上,那么此进程实际上是调用了位于当地机器上的另外 一个版本的fn()(即c_fn()),当客户端的消息发送到服务器端时,服务器端 也不是把消息直接就交给真正的fn(),而是同样 先交给一个不同版本的fn()(即s_fn())
Stub的主要功能是对要发送的参数进行 marshal(可理解成一种打包操作)和对接受 到的参数(或返回值)进行unmarshal(解包)。Marshal操作将要发送的数据制成一种标 准的格式(在DCE RPC系统中,此格式 称做Network Data Representation(NDR)格式)unmarshal再从NDR格式数据包中读出所需数据。
Client stub的功能:收集调用远程函数需要的参数,将这些参数marshal成消息,即把消息转化 成标准的网络数据表示(network data representation , NDR) 格式,用于在网络上传递,调用客户端的运行时系统(Client runtime system)将此消息发送给服务器端。当服务器端将结果消息返回后,将结果消息unmarshal,把结果返回给应用进程。
Server stub的功能:对发送给它的参数消息unmarshal,收集 参数调用位于本机上的过程,将此过程执行的结果marshal成消息,然 后调用服务器端的运行时系统将结果消 息发送给客户端。
IDL compiler的功能就是对编辑好的IDL 文件进行编译,编译后生成了下面的三个文件:Header是一个头文件,此头文件包含 了此IDL文件中的全局唯一标示符,数 据类型定义,有关的常量定义,以及 函数原型。客户代码和服务器代码中 包含都要包含header文件,Client stub即客户端的stub程序。Server stub即服务器端的stub程序。
运行时系统:客户端的运行系统将客户端stub产生的消 息可靠的传送给server,运行时系统利用TCP/UDP等协议,将消 息发送到Server,服务端的运行时系统都侦听某个众所周 知的socket端口,接受请求。
远程方法调用(RMI--Remote Method Invocation ),一个进程调用另一个进程中对象的方法,两个进 程可以在同一台主机,也可以在不同的主机。
从RPC到RMI变化:从过程(静态)->面向对象(动态),从函数调用->对实例的操作。
问题:谁来创建实例对象?什么时候创建?如何取得 对象的引用?
RMI系统由以下几个部分组成:
运行远程服务的服务器
需要远程服务的客户端程序
远程服务的接口定义(Remote Interface)
远程服务的实现(Remote Service)
Stub和Skeleton文件
RMI命名服务,使得客户端可以发现远 程服务。
事件驱动(Event-based model),注册一些感兴趣的对象的事件,事件发生时会的到通知。
目的:让一个对象能够对另一个对象发生的变化做出反应
举例:文件被修改了,一个电子书签变化了位置,发布与订阅(Publish/subscribe paradigm),产生事件一方发布事件的类型,接收事件一方订阅感兴趣的事件类型,事件放生时,通知订阅一方。
分布式事件驱动系统的两个特性:
异构性:已有的分布式系统的一些模块原本不是为 了互操作而设计的,现在能够让他们协同工作,通 过接收方公布远程接口。
异步性:不能要求发布程序和订阅程序同步。
这和Java的观察者模型有联系吗?
和进程间消息传递的语义类似,取决于应用 需求和所采用的措施。
对可靠性要求较低的需求,一些网络游戏 了解其它玩家的最新状态,普通IP组播协 议。
对可靠性要求较高的需求,股票交易所系 统。需要采用可靠的组播协议。
实时要求。
分布式编程可提供租用、分布式交易和分布式 事件。
租用租用与租用一套公寓很类似。我们在租用 一套公寓时,一般会商定使用该公寓的时间。 类似地,在Jini中,对象彼此之间商定租期。 例如,当某设备使用Discovery and Join协议发 现网络时,它就注册一段租用时间。在租约到 期之前,该设备必须重新商定租期。这样,如 果租约到期或设备拔下后,该设备在Lookup中 的记录就会被自动删除。这就是分布式垃圾收 集的工作原理。
自己实现计算引擎。
标签:
原文地址:http://www.cnblogs.com/hxsyl/p/4493043.html