首页 > 其他分享 >rpc rmi区别

rpc rmi区别

时间:2023-04-17 20:35:08浏览次数:34  
标签:调用 请求 区别 对象 RMI rpc rmi 方法 远程


1.


RMI和RPC之间最主要的区别在于方法是如何别调用的。在RMI中,远程接口使每个远程方法都具有方法签名。


如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,


那么这个新方法就不能被RMI客户方所调用。在RPC中,当一个请求到达RPC服务器时,


这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。


这就向RPC服务器表明,被请求的方法在为“classname”的类中,名叫“methodname”。


然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。


这里的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。



2


昨天听了汪老师讲课,感觉不错,做个笔记先:

分布式对象如何构成

 

• 对象的状态由它的实例变量值组成

 

• 每个对象在逻辑上是分区的,可以物理地分布在不同的进程或计算机中

 

• 分布式对象系统可采用客户——服务器体系结构;对象由服务器管理,客户通过RMI调用对象的方法

 

分布式对象的优势

 

将客户和服务器对象分布在不同的进程中

 

• 提高封装性:对象的状态只能通过内部方法访问

 

• 提高数据安全性:对于并发的RMI可能访问同一个对象,可以通过条件变量或同步原语控制并发访问

 

• 有益于异构系统:异构系统在不同上下文中具有不同的数据格式,使用RMI的客户对于数据格式是透明的

 

分布式对象模型

 

• 远程对象引用:远程对象的在分布式系统中的唯一标识;如果某个对象可以访问远程对象的远程对象引用,那么它就能调用远程对象的方法

 

• 远程接口:可以被其他远程对象调用的方法集合,不在相同进程中的对象只能调用远程接口定义的方法;CORBA提供IDL定义远程接口,客户不需要为了能够远程调用其方法而使用与远程对相同的语言;Java RMI以与其它Java接口相同的方式定义远程接口;通过扩展Remote接口而获得远程接口的能力

 

RMI(Remote Method Invocation)

 

• RMI与本地方法调用存在不同,可能有多次调用

 

• RMI调用语义(取决于请求-应答协议的实现方式:重发请求消息、过滤重复请求、重传结果)

 

Ø 或许调用:出现网络故障或系统崩溃而没有容错措施或超时后没有重发请求,使得远程方法的执行情况不明确

 

Ø 至少一次调用:调用者或者得到执行结果,或者接收到异常信息,保证服务器执行过RMI,通过重发请求消息实现

 

(问题:只能解决网络故障,无法解决系统故障

 

多次请求可能引发存储错误或返回错误结果:幂等操作)

 

Ø 至多一次调用:通过容错和重发请求消息、过滤重复请求实现,CORBA、Java RMI都采用此调用语义

 

RMI的实现

 

• 通信模块

 

Ø 实现请求——应答协议,服务器端通信模块为被调用对象选择调度程序,传输其本地调用,该本地引用取自远程引用模块,用来替换请求消息中的远程对象标识符

 

• 远程引用模块

 

Ø 负责翻译本地和远程对象引用以及创建远程对象引用。通常维护一个远程对象表,记录进程的本地和远程对象引用的对应关系

 

Ø 表的内容:

 

• 该进程拥有的所有远程对象的表项

 

• 每个本地代理的表项

 

Ø 动作:

 

• 远程对象第一次作为参数或结果传递时,它创建一个远程对象引用并加入到表中

 

• 当引用对象随请求或应答到达时,它提供对应的本地对象引用,可能指向一个远程对象或一个代理

 

• 代理类

 

Ø 使远程方法调用对客户透明,它不执行调用,而是将调用放在消息里传递给远程对象,隐藏了远程对象引用的细节、参数的编码、结果的编码以及客户消息的发送和接收

 

Ø 代理类实现它所代表的远程对象的远程接口定义的方法

 

Ø 代理中的每个方法会把一个目标对象的引用,它自身的方法ID和它的参数编码进一个请求消息并发送到目标,等待应答消息,然后编码并将结果返回给调用者

 

• 调度程序类

 

Ø 接收来自通信模块的请求或应答信息,并传递消息到相应的代理或骨架

 

Ø 调度程序和代理对远程接口中的方法使用相同的方法ID

 

• 骨架类

 

Ø 远程对象具有的类,用于实现远程接口中的方法

 

Ø 骨架方法解码请求消息中的参数,并调用远程对象中的相应方法,等待调用的完成,然后将结果和任何异常信息编码进应答消息,发送给代理的方法

 

• 服务器程序和客户程序

 

Ø服务器程序包含调度程序类、骨架类以及支持的所有远程对象类的实现,同时还包含一个初始化部分(负责创建和初始化至少一个包含在服务器上的远程对象),另外的远程对象可能应客户发出的请求而创建

 

Ø 客户程序通过代理类,用一个绑定程序查找远程对象引用。远程对象只能在初始化部分创建或通过专门的远程接口方法中创建(厂方法)

 

• 绑定程序

 

Ø 是一种独立的服务,它维护一张表,包含从文本名字倒远程对象引用的映射,服务器根据这张表按照名字注册它们的远程对象,客户根据这张表查找这些远程对象

 

• 服务器线程

 

Ø 为避免一个远程调用的执行延误另一个远程调用的执行,服务器一般为每个远程调用的执行分配一个独立的线程

 

• 远程对象的激活

 

Ø 避免服务进程长时间的活跃而造成资源浪费,采用激活方式,当客户需要服务时才启动

 

Ø 启动包含远程对象的服务器进程成为激活器

 

• 持久对象存储

 

Ø 在进程两次激活之间仍然保证存活的对象成为持久对象

 

Ø 通常由持久对象存储管理,在磁盘上以编码格式存储持久对象的状态

 

Ø 当需要调用持久对象时激活该对象,该对象从持久对象管理中退出

 

Ø 当不需要持久对象时,可以在主存中钝化该对象,在大多数情况下,为了容错和数据一致性,对象需要保存在持久对象存储中

 

• 对象定位/span>

 

Ø 通常可以通过远程对象的url及端口号保证其唯一性,但是对于在整个生命周期中需要迁移的远程对象,这种定义方式无法保证其唯一性

 

Ø 定位服务帮助客户根据远程对象引用定位远程对象,它使用一个数据库将远程对象引用映射成他们当前的大概位置。

 

Ø 对于没有移动的对象(保存在缓存中)可以尝试用该地址引用,对于已经移动的对象则需要广播一条请求,找到该对象




标签:调用,请求,区别,对象,RMI,rpc,rmi,方法,远程
From: https://blog.51cto.com/u_2198048/6196308

相关文章

  • 理解Android系统的进程间通信原理(一)----RPC中的代理模式
    理解Android系统的进程间通信原理(一)----RPC中的代理模式Android系统中的进程间通信是通过一个轻量级的RPC(RemoteProcedureCall远程进程调用)和AIDL(AndroidInterfaceDefininationLanguage)规范来生成两个进程之间可以相互访问的代码。其中RPC是以接口方式来实现,客户端与被......
  • gRPC入门
    1.gRPC简介gRPC是一种高性能、开源和通用的远程过程调用(RPC)框架,由Google开源并维护。它使用ProtocolBuffers(protobuf)作为接口定义语言(IDL),提供跨平台、跨语言的RPC调用支持。gRPC具有以下几个特点:高性能:使用HTTP/2协议,支持多路复用和流控制等特性,能够在客户端和服务器之间高效......
  • firewalld 和 iptables 区别
    在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。firewalld跟iptables比起来至少有两大好处:1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以......
  • Jedis与RedisTemplate的区别
    Jedis与RedisTemplate的区别:Jedis是Redis官方推荐的、面向Java的操作Redis的客户端,可以用JedisPool来获得连接进行get、set、del等操作相对简单,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说,可以方便地更换Redis的Java客户端,还......
  • GCP-Bigquery- IFNULL() 和 NULLIF() 的区别和例子
    NULLIF(expr,expr_to_match)BigQueryNULLIF()DescriptionNULLisreturnedifexpr=expr_to_matchistrue,otherwise,exprisreturned.exprandexpr_to_matchmustbeimplicitlycoercibletoacommonsupertypeandcomparable.如果2个结果相同,返回null值,否则返......
  • CSS引入方式及link和@import的区别
    1.概述1.1说明在项目开发中,我们经常使用css样式使页面丰富多彩,编写过程中,CSS有四种引入方式。 2.CSS引入方式2.1 引入方式一:内联样式内联样式(行内样式):直接在HTML标签中的style属性中添加CSS<divstyle="width:200px;height:200px;background:red;"></div>内联......
  • network 路由器和交换机的区别
    目录network路由器和交换机的区别如果在公司内部搭建一个网络,应该使用路由器还是交换机?network路由器和交换机的区别路由器和交换机是网络中两个不同的设备,它们的功能和作用有所不同,主要区别如下:工作层次不同:交换机主要工作在OSI模型的第二层,即数据链路层,它通过MAC地址来转......
  • 关于增值业务和电信运营区别的对话
    文佳-买卖网站频道说:好青润说:好。文佳-买卖网站频道说:忙吗》?青润说:呵呵,今天还行。明天回老家一趟,下周一就到北京了。文佳-买卖网站频道说: 你现在是那家公司啊?青润说:没有公司。呵呵文佳-买卖网站频道说:?自己当老板了//还是政......
  • sha256 和hamc-sha256区别
    签名哈希函数SHA-256:SHA-256是全称为SecureHashAlgorithm256(安全散列算法256)的缩写。SHA-256可以将任意长度的数据计算成一个长度为256位的哈希值,在数字签名中得到广泛应用。SHA-512:SHA-512是SHA-256的加强版,可以生成更长、更不易被碰撞的消息摘要。在一些对于安全......
  • JS中Map、WeakMap和Object的区别
    JavaScript中的Map、WeakMap和Object都是用于存储键值对的数据结构:1.Map:Map是一种新的数据结构,它允许使用任何数据类型(包括对象和基本数据类型)作为键。Map的一些特性包括:-保持键的插入顺序:当遍历Map时,键值对会按照插入顺序返回。-键可以是任意类型:与Object不同,Map的键可以......