什么是RPC

3 篇文章 0 订阅
2 篇文章 0 订阅

RPC Remote Procedure Call,翻译成中文为远程过程调用,它实际上是一种思想,简单说就是本机调用一个函数,但是这个函数是在另一台机器上执行的,这种编码方式就像在本地执行一次函数调用一样。

如上图所示,以一个简单的a+b为例,要执行一个a+b的函数,入参为a、b,函数返回a+b的值。用RPC思想来描述,将这个func封装在server端,这时候只需要在client端将参数a和b打包,放到一个数据包里,通过网络的方式发给服务端,服务端运行完后再将结果打包到数据包内,发回给client,这个过程就是RPC。

对于上面这个过程,可能你会有很多疑问,首先RPC为什么是R呢?

R即Remote,远程,那么为什么要远程呢?在一个分布式系统中,服务A可能运行一个程序,这个程序主要干的事情就是a,在执行a的过程中需要借助于b,但是b不属于服务a的范畴内,因此这个时候就需要调用实现b的服务,从而获取他们计算出来的结果。

从图中可以看出请求与相应,那么你可能会继续问,RPC与HTTP的区别是什么呢?

广义来说,HTTP其实就是一个RPC,因为RPC其实是一种思想,HTTP是实现RPC的一种方式。

狭义来说,RPC框架有很多,如dubbo、gRPC,这里我们以gRPC为例,gRPC是一种高性能、开源的RPC框架,它是基于HTTP/2设计的,可插拔,支持双向流、消息头压缩、单TCP的多路复用、服务端推送等特性。同时通过protobuf来定义接口,从而有严格的接口约束条件。

再仔细看上图,参数和返回值都被封装成数据包传送,你可能会好奇这是如何封装的?

其实这就是我们所说的序列化与反序列化,我们将内存中的数据结构封装成传输时候的数据结构,通常是以文本或[]byte的形式,传输之后再将其恢复到内存中,http请求中我们通常使用json将数据结构转换为文本形式,而在gRPC中,我们使用protobuf(简称pb)来进行序列化的,序列化之后为[]byte的形式。

pb相比于json的优点:

  • 数据占用内存小
  • 解析效率高

但是也有所缺陷,pb序列化后的数据可读性差。例如我们通过json形式将用户信息存到缓存中去,我们get的时候是肉眼可识别的内容,而通过pb形式存储时,所占空间很小,但是get时候看到的是不可读的编码。

最后,如何提高RPC的性能呢?

通过上图也可以看出,整个过程有2个核心,一是序列化,二是网络io的性能。因此只需要从这2个方向进行优化即可提高RPC的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值