一.引言

1.1 分布式对象技术要解决的基本问题

  分布式对象技术是在面向对象技术的基础上发展起来的,它要解决的主要问题是位于不同进程中的对象之间的调用问题。

支持访问异地对象,支持访问异构对象(java平台调用C、vb,C++)。

1.2 中间件

  参考http://kb.cnblogs.com/page/196448/

  1.中间件是一种软件,它提供基本的通信模块和其他一些基础服务模块,使得应用程序开发提供平台。

  中间件技术提供了一个编程的抽象,来屏蔽上述的异质问题。

  通信协议:独立于网络底层的传输协议。

  硬件:数据类型在不同的硬件平台上有不同的表示。

  操作系统:在操作系统层上提供更高级的抽象API,屏蔽操作系 统的异构。

  编程语言:CORBA通过IDL,可以使得不同的语言写的代码互相 调用。

1.3 接口

  一个模块的接口包含了其他模块可访问的方法 的定义(没有实现)和变量。有些情况,需要调用同一个方法,但是的具体 实现的不同,接口可以做到这一点。分布式系统中的接口,同一个地址空间,模块之间的通信可以通过访 问公共变量,但是远程调用不能直接访问变量,只能通过属土参数和输出参数,指针不能作为参数传递或者作为结果返回。

  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,允许用其它语言实现的对象来调用, 具有跨平台功能。

1.4 RRP协议

  在谷粉找,就这一个http://www.slideshare.net/chinainvent/totemsrprrp

1.5 单播 组播 广播  多播 泛洪区别

  单播、多播和广播单播”(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

1.6 RSS

  RSS 是一种用于共享新闻和其他Web内容的数据交换 规范,起源于 网景通讯公司 的推"Push"技术,将订 户订阅的内容传送给他们的 通讯协同格式 (Protocol)。

二.分布式对象之间的通信

2.1对象模型(The object model)

  对象相当于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

  根据远程调用的容错手段,决定了调用 语义 ????????

三.分布式程序设计的模型

3.1.RPC

  远程过程调用(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端口,接受请求。

3.2RMI

  远程方法调用(RMI--Remote Method Invocation ),一个进程调用另一个进程中对象的方法,两个进 程可以在同一台主机,也可以在不同的主机。

  从RPC到RMI变化:从过程(静态)->面向对象(动态),从函数调用->对实例的操作。
  问题:谁来创建实例对象?什么时候创建?如何取得 对象的引用?

  RMI系统由以下几个部分组成:
  运行远程服务的服务器
  需要远程服务的客户端程序
  远程服务的接口定义(Remote Interface)
  远程服务的实现(Remote Service)
  Stub和Skeleton文件
  RMI命名服务,使得客户端可以发现远 程服务。

3.3 事件驱动

  事件驱动(Event-based model),注册一些感兴趣的对象的事件,事件发生时会的到通知。

  目的:让一个对象能够对另一个对象发生的变化做出反应
  举例:文件被修改了,一个电子书签变化了位置,发布与订阅(Publish/subscribe paradigm),产生事件一方发布事件的类型,接收事件一方订阅感兴趣的事件类型,事件放生时,通知订阅一方。
  分布式事件驱动系统的两个特性:
  异构性:已有的分布式系统的一些模块原本不是为 了互操作而设计的,现在能够让他们协同工作,通 过接收方公布远程接口。
  异步性:不能要求发布程序和订阅程序同步。

  这和Java的观察者模型有联系吗?

  和进程间消息传递的语义类似,取决于应用 需求和所采用的措施。
  对可靠性要求较低的需求,一些网络游戏 了解其它玩家的最新状态,普通IP组播协 议。
  对可靠性要求较高的需求,股票交易所系 统。需要采用可靠的组播协议。
  实时要求。

  分布式编程可提供租用、分布式交易和分布式 事件。
  租用租用与租用一套公寓很类似。我们在租用 一套公寓时,一般会商定使用该公寓的时间。 类似地,在Jini中,对象彼此之间商定租期。 例如,当某设备使用Discovery and Join协议发 现网络时,它就注册一段租用时间。在租约到 期之前,该设备必须重新商定租期。这样,如 果租约到期或设备拔下后,该设备在Lookup中 的记录就会被自动删除。这就是分布式垃圾收 集的工作原理。

五.总结

  自己实现计算引擎。

分布式对象和远程调用相关推荐

  1. 分布式通信:远程调用

    分布式通信:远程调用 前言 什么是远程调用? 远程调用的原理及应用 RPC 的原理及应用 RMI 的原理及应用 RPC 与 RMI 对比分析 知识扩展:远程过程调用存在同步和异步吗? 总结 前言 分布 ...

  2. 从 0 到 1:全面理解 RPC 远程调用!

    作者 | Python编程时光 责编 | 胡巍巍 什么是RPC呢?百度百科给出的解释是这样的:"RPC(Remote Procedure Call Protocol)--远程过程调用协议,它 ...

  3. python rpc调用_从0到1:全面理解 RPC 远程调用

    上一篇关于 WSGI 的硬核长文,不知道有多少同学,能够从头看到尾的,不管你们有没有看得很过瘾,反正我是写得很爽,总有一种将一样知识吃透了的错觉. 今天我又给自己挖坑了,打算将 rpc 远程调用的知识 ...

  4. RCF--RPC(远程调用框架)

    RPC(远程调用框架) 一. RPC定义 RPC(Remote Procedure Call Protocol)--远程过程调用协议,是一种通过网络从远程计算机请求服务,就像调用本地方法一样,不需要了 ...

  5. java分布式对象——远程方法中的参数和返回值+远程对象激活

    [0]README 1)本文文字描述转自 core java volume 2, 旨在学习 java分布式对象--远程方法中的参数和返回值+远程对象激活 的相关知识: [1]远程方法中的参数和返回值 ...

  6. 如何从零起步搭建一个分布式对象存储的架构

    早在几年前,云存储还只是存在于业界大佬们口中的一个概念,其应用场景仅供大公司使用.突飞猛进的网络技术似乎在一瞬间就把这个概念普及到千家万户,现在云存储已经是大家司空见惯的一个网络服务了.比如大家用的百 ...

  7. 分布式服务追踪与调用链系统

    如何构建新一代SkyWalking服务追踪框架 1.生产环境调用接口报错了,如何定位? 2.微服务服务追踪框架构设计原理 3.Sleuth+zipkin实现分布式服务追踪 4.SkyWalking超强 ...

  8. 远程调用服务(RPC)和消息(Message Queue)对比及其适用/不适用场合

    在阿里的平台技术部参与开发了Dubbo(远程调用服务)和Napoli(消息解决方案),又给网站应用支持这2个产品很长一段时间,了解了这2个产品的实现及应用对这两个产品的用法. 大部分情况下," ...

  9. 透彻,在SpringBoot项目中使用Netty实现远程调用

    今日推荐Spring新版本抛弃JVM,可独立部署,网友:要自立门户???国内大神成功给手机装上了 Win11,代码已开源!Fluent Mybatis 牛逼!Nginx 常用配置清单这玩意比Threa ...

最新文章

  1. HDU-4536 XCOM Enemy Unknown 枚举
  2. android蓝牙聊天设备,Android蓝牙开发——实现蓝牙聊天
  3. Android软硬整合设计与框架揭秘教程
  4. Learn Python 014: Funtions
  5. [转载]上善若水,厚德载物
  6. Atitit 利用前端cache indexdb localStorage 缓存提升性能优化attilax总结 1.1. indexdb 更加强大点,但是结果测试,api比较繁琐 使用叫麻烦些 1
  7. iOS 字体大小适配
  8. 小米10pro稳定版root
  9. 域名注册流程是什么 注册域名的时候要注意什么
  10. WebOffice安装教程Hello World!(win10 IE打开控件问题)
  11. 通达信筹码循环指标源码 显示吸筹拉升出货的过程
  12. js判断指定日期是礼拜几
  13. BGP-ISIS实验
  14. 前端开发最基本的3个语言
  15. python实现随机密码生成
  16. Android 6.0权限请求相关及权限分组
  17. 军工企业信息化建设周涛_乘“云”之势,浪潮ERP布局军工企业云
  18. Lattice原理及在通信中的应用 2 Packing, Covering, Quantization, Modulation
  19. 免疫佐剂CpG ODN说明——艾美捷CpG ODN 方案
  20. 用Python形象地解决酒缸分酒问题

热门文章

  1. 关于 如何写批处理文件
  2. 【oracle】oracle创建表、创建索引、创建自增id
  3. 【SQL Server】grant, revoke, deny介绍及相关问题
  4. (arduino基于W5100实现TCP客户端
  5. Xftp传输文件发生错误
  6. 构建“未来级”企业,如何做对这道必答题
  7. 常年不卷,按时下班,工作能力强,同事求助知无不言,不扯皮,不拉帮结派,这样的职场清流竟然被裁掉了!...
  8. ES6、ES7、ES8、ES9、ES10新特性一览
  9. 大数据蓝皮书:解读中国大数据发展十大趋势
  10. 【运筹学】(2)—预测