美文网首页
什么是RPC

什么是RPC

作者: justonemoretry | 来源:发表于2019-06-14 20:14 被阅读0次

什么是RPC

RPC把网络交互类比为“client访问server上的函数”:client向server发送request后开始等待,直到server收到、处理、回复client后,client又再度恢复并根据response做出反应。RPC既能解决大部分网络访问,又能隔离更低层的网络细节。简单来说,就是像访问本地方法一样去访问远程服务器上的方法,那么我们下面看下为什么要用RPC。

RPC的实现原理

在远程调用时,我们需要执行的函数体是在远程的机器上的,也就是说,Multiply是在另一个进程中执行的。这就带来了几个新问题:

Call ID映射。我们怎么告诉远程机器我们要调用Multiply,而不是Add或者FooBar呢?在本地调用中,函数体是直接通过函数指针来指定的,我们调用Multiply,编译器就自动帮我们调用它相应的函数指针。但是在远程调用中,函数指针是不行的,因为两个进程的地址空间是完全不一样的。所以,在RPC中,所有的函数都必须有自己的一个ID。这个ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,必须附上这个ID。然后我们还需要在客户端和服务端分别维护一个 {函数 <--> Call ID} 的对应表。两者的表不一定需要完全相同,但相同的函数对应的Call ID必须相同。当客户端需要进行远程调用时,它就查一下这个表,找出相应的Call ID,然后把它传给服务端,服务端也通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。

序列化和反序列化。客户端怎么把参数值传给远程的函数呢?在本地调用中,我们只需要把参数压到栈里,然后让函数自己去栈里读就行。但是在远程过程调用时,客户端跟服务端是不同的进程,不能通过内存来传递参数。甚至有时候客户端和服务端使用的都不是同一种语言(比如服务端用C++,客户端用Java或者Python)。这时候就需要客户端把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。这个过程叫序列化和反序列化。同理,从服务端返回的值也需要序列化反序列化的过程。

网络传输。远程调用往往用在网络上,客户端和服务端是通过网络连接的。所有的数据都需要通过网络传输,因此就需要有一个网络传输层。网络传输层需要把Call ID和序列化后的参数字节流传给服务端,然后再把序列化后的调用结果传回客户端。只要能完成这两者的,都可以作为传输层使用。因此,它所使用的协议其实是不限的,能完成传输就行。尽管大部分RPC框架都使用TCP协议,但其实UDP也可以,而gRPC干脆就用了HTTP2。Java的Netty也属于这层的东西。

所以,要实现一个RPC框架,其实只需要把以上三点实现了就基本完成了。

Call ID映射可以直接使用函数字符串,也可以使用整数ID。映射表一般就是一个哈希表。

序列化反序列化可以自己写,也可以使用Protobuf或者FlatBuffers之类的。

网络传输库可以自己写socket,或者用asio,ZeroMQ,Netty之类。

为什么要使用RPC

http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;

优点就是简单、直接、开发方便。利用现成的http协议进行传输。

但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了。

首先就是长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销;

其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。

再次就是安全性。

最后,就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑

部分内容来自:https://www.zhihu.com/question/25536695

https://www.jianshu.com/p/113e41c8d4a5

相关文章

  • 服务之间的调用为啥不直接用 HTTP 而用 RPC?

    什么是 RPC?RPC原理是什么? 什么是 RPC? RPC(Remote Procedure Call)—远程过...

  • 了解一下RPC,为何诞生RPC,和HTTP有什么不同?

    了解一下RPC,为何诞生RPC,和HTTP有什么不同? 开篇提问 什么是RPC? 为什么需要RPC,用来解决什么问...

  • RPC框架(技术总结)

    什么是 RPC ? rpc解决了什么问题 RPC (Remote Procedure Call)即远程过程调用,是...

  • 看了我的 RPC 实战,同事拍案叫绝

    1. RPC 1.1 什么是 RPC ? RPC(Remote Procedure Call Protocol)远...

  • RPC框架

    1. 什么是RPC? 2. RPC流程是什么样? 3. 开发RPC框架需要注意什么? 4. RPC协议是什么? 消...

  • RPC - 小结

    目录 RPC是什么 RPC的优点 RPC的缺点 RPC是什么 RPC(Remote Procedure Call)...

  • 什么是RPC?

    1. 基本的RPC模型 主要介绍RPC是什么,基本的RPC代码,RPC与REST的区别,gRPC的使用 1.1 基...

  • 什么是RPC

    什么是RPC RPC把网络交互类比为“client访问server上的函数”:client向server发送req...

  • 什么是RPC

    RPC(Remote Procedure Call)—[远程过程调用],它是一种通过[网络]从远程计算机程序上请求...

  • 什么是RPC

    之前不了解什么是rpc,特意去百度了一下,然后给的解释就是:rpc的全称是远程过程调用,他是一种通讯协议,说...

网友评论

      本文标题:什么是RPC

      本文链接:https://www.haomeiwen.com/subject/rlcmfctx.html