RPC的从0到1的认识

前言:

我们在面试或者开发中经常听到RPC框架或者RPC协议,那么RPC到底是是什么呢?今天这篇文章就带你认识RPC。

正文:

一、RPC是什么?

RPC(Remote Procedure Call):远程过程调用的意思。其中过程可以理解为一个程序或者一个功能接口,所以RPC也可以理解为远程程序的调用的或者远程接口的调用。RPC采用CS架构的方式进行应用与应用之间的通信,来达成数据交互。

RPC的从0到1的认识_第1张图片

 二、RPC与RMI的区别?

RMI(Remote Method Invocation)远程方法调用是opp(面向对象编程)领域中RPC的一种具体实现。RMI是Java自带的RPC框架。

RPC的从0到1的认识_第2张图片

两者的区别:

1.方法调用的方式不同

在方法调用上,RMI中,远程接口使每个远程方法都具有方法签名。如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用。

在RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。这就向RPC服务器表明,被请求的方法在为 “classname”的类中,名叫“methodname”。然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。这里的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。

2.适用语言的范围不同

RPC是 跨语言,而 RMI只支持Java。

3.调用结果的返回形式不同 

RMI 调用远程对象方法,允许方法返回 Java 对象以及基本数据类型,而RPC 不支持对象的概念。

PRC的返回结果统一由外部数据表示(External Data Representation,XDR)语言表示,这种语言抽象了字节序类和数据类型结构之间的差异,只有由XDR定义的数据类型才能被传递。

 三、我们熟悉的webservice、restfull接口调用是RPC吗?

 都是RPC,仅消息的组织方式及消息协议不同。

 四、远程过程调用本地调用有何不同?

 速度相对慢(因为要经过网络通信)

可靠性减弱(有可能调不通,相对于本地方法调用)

五、RPC的流程

RPC的从0到1的认识_第3张图片

1.客户端处理过程中调用Client stub (就像调用本地方法一样),传递参数;

2.Client stub将参数编组为消息,然后通过系统调用向服务端发送消息;

3.客户端本地操作系统将消息从客户端机器发送到服务端机器;

4.服务端操作系统将接收到的数据包给Server stub;

5.Server stub解组消息参数;

6.Server stub再调用服务端的过程,过程执行结果以反方向的相同步骤响应给客户端。

六、RPC流程中需要处理的问题

1.Client stub、Server stub的开发;

2.参数如何编组为消息,以及解组消息;

3.消息如何发送;

4.过程结果如何表示、异常情况如何处理;

5.如何实现安全的访问控制。

七、RPC的协议是什么?

RPC调用过程中需要将参数编组为消息进行发送,接收方需要解组消息为参数,过程处理结果同样需要经编组、解组。消息由哪些部分构成及消息的表示形式就构成了消息协议。

RPC调用过程中采用的消息协议称为RPC协议。(这些协议定义了消息的构成和消息的表示形式)

RPC协议规定请求、响应消息的格式,在TCP(网路传输控制协议)上可选用或自定义消息协议来完成RPC消息交互。我们可以选用通用的标准协议(如:http、https),也可根据自身的需要定义自己的消息协议!

八、常见RPC协议

1.XML-RPC

2.JSON-RPC

3.SOAP

九、RPC框架是什么?

封装好参数编组、消息解组、底层网络通信的RPC框架程序开发框架,带来的便捷是可以直接在其基础上只需要专注于过程代码编写。

常见的Java领域RPC框架:

传统的webservice框架:ApacheCXF、Apache Axis2、java自带的JAX-WS等等。webService框架大多基于标准的SOAP协议。

新兴的微服务框架:Dubbo、springcloud、Apache Thrift等等

十、为什么要用RPC

1.服务化(功能拆分成,做成微服务,那么服务直接的调用需要用到rpc)

2.可重用(做成rpc框后就可以复用,各处使用)

3.系统间交互调用(系统之间的交互需要rpc)

 

总结:

今日分享的一句话:电影《当幸福来敲门》中男主说过这样一句话,“You have a dream,you got to protect it”(如果你有梦想,就要守护它)

我是阿达,一名喜欢分享知识的程序员,时不时的也会荒腔走板的聊一聊电影、电视剧、音乐、漫画,这里已经有10586位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里有不明白或有不同观点的地方欢迎留言!

你可能感兴趣的:(开发问题,java)