简单了解RPC

1、RPC是什么

RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种经过网络从远程计算机程序上请求服务,而不须要了解底层网络技术的协议。远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个地方(分布到各个服务器),调用者只想要函数运算的结果却不须要了解实现函数的具体细节。也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,因为不在一个内存空间,不能直接调用,须要经过网络来表达调用的语义和传达调用的数据。json

2、RPC须要解决的问题

一、Call ID映射
   咱们怎么告诉远程机器咱们要调用funA而不是funB或者funC呢?在本地调用中函数体是直接经过函数指针来指定的,咱们调用funA编译器就自动帮咱们调用它相应的函数指针。可是在远程调用中函数指针是不行的,由于两个进程的地址空间是彻底不同的。
因此,在RPC中全部的函数都必须有本身的一个ID。这个ID在全部进程中都是惟一肯定的。客户端在作远程过程调用时必须附上这个ID。而后咱们还须要在客户端和服务端分别维护一个 {函数 <–> Call ID} 的对应表。二者的表不必定须要彻底相同但相同的函数对应的Call ID必须相同。当客户端须要进行远程调用时,它就查一下这个表,找出相应的Call ID,而后把它传给服务端,服务端也经过查表,来肯定客户端须要调用的函数,而后执行相应函数的代码。
以下图:
服务器

二、序列化和反序列化
  客户端怎么把参数值传给远程的函数呢?在本地调用中咱们只须要把参数压到栈里,而后让函数本身去栈里读就行。可是在远程过程调用时客户端和服务端是不一样的进程不能经过内存来传递参数。甚至有时候客户端和服务端使用的都不是同一种语言(好比服务端用C++,客户端用Java或者Python)。这时候就须要客户端把参数先转成一个字节流(编码),传给服务端后,再把字节流转成本身能读取的格式(解码)。这个过程叫序列化和反序列化。同理,从服务端返回的值也须要通过序列化和反序列化的过程。
为何须要序列化?网络

  • 转换为字节流方便进行网络传输。
  • 实现跨平台、跨语言;若是是跨平台的序列化则发送方序列化后,接收方能够用任何其支持的平台反序列化成相应的版本,好比 Java序列化后,用.net、phython等反序列化。

三、网络传输
​ 远程调用每每用在网络上,客户端和服务端是经过网络链接的。全部的数据都须要经过网络传输,所以就须要有一个网络传输层。网络传输层须要把Call ID和序列化后的参数字节流传给服务端,而后再把序列化后的调用结果传回客户端。只要能完成这二者的,均可以做为传输层使用。所以,它所使用的协议实际上是不限的,能完成传输就行。尽管大部分RPC框架都使用TCP协议,但其实UDP也能够,而gRPC干脆就用了HTTP2。
四、RPC的调用流程图
架构

3、RPC与REST的比较与区别

一、所属类别不一样
​ REST,是Representational State Transfer 的简写,中文描述表述性状态传递(是指某个瞬间状态的资源数据的快照,包括资源数据的内容、表述格式(XML、JSON)等信息。REST 是一种软件架构风格。这种风格的典型应用,就是HTTP。而RPC ,是 Remote Procedure Call Protocol 的简写,中文描述是远程过程调用,它能够实现客户端像调用本地服务(方法)同样调用服务器的服务(方法)。
RPC能够基于TCP/UDP,也能够基于HTTP协议进行传输的。
二、使用方式不一样
从使用上来看,HTTP接口只关注服务提供方,对于客户端怎么调用并不关心。接口只要保证有客户端调用时,返回对应的数据就好了。而RPC则要求客户端接口保持和服务端的一致。REST是服务端把方法写好,客户端并不知道具体方法,客户端只想获取资源,因此发起HTTP请求,而服务端接收到请求后根据URI通过一系列的路由才定位到方法上面去,而RPC是服务端提供好方法给客户端调用,客户端须要知道服务端的具体类,具体方法,而后像调用本地方法同样直接调用它。
三、面向对象不一样
从设计上来看,RPC所谓的远程过程调用是面向方法的;而REST所谓的Representational state transfer是面向资源的。框架

四、序列化协议不一样
接口调用一般包含两个部分,序列化和通讯协议。REST是基于HTTP协议,而RPC能够基于TCP/UDP,也能够基于 HTTP协议进行传输。常见的序列化协议有:json、xml、hession、protobuf、thrift、text、bytes等,REST一般使用的是JSON或者XML,而RPC使用的是JSON-RPC或者XML-RPC。ide

参考博文:
(1) https://baijiahao.baidu.com/s?id=1637758852641939872&wfr=spider&for=pc (rpc与rest的比较理解与实现)函数

相关文章
相关标签/搜索