RPC是什么

RPC的全称是Remote Procedure Call,远程过程调用。简单地说,即让你在本地调用远端服务器使你在本地调用远端的函数的体验让你感觉是在本地调用函数一样的体验。所以RPC是做什么的?RPC是帮助我们屏蔽远端调用的过程中网络的细节使我们更专注于业务逻辑,其次是屏蔽远端调用和本地调用的区别,让我们感觉就是调用本地的方法。

简易RPC通信流程

RPC是一个远程调用,为了保证其可靠性我们一般都采用TCP传输,我们常用的HTTP请求也是建立在TCP上的。我们知道网络传输的数据必须是二进制数据。所以我们发送方在发送前需要把数据转二进制,这个过程称为序列化。同样的,接收方接受到二进制数据之后,需要对数据进行反序列化。

当然RPC不仅可以解决通信问题,还是可以用于其他常见,例如分布式缓存,数据库等。如下图例子:

由此可见,RPC 确实是我们日常开发中经常接触的东西,只是被包装成了各种框架导致我们很少有意识到这个RPC。

为什么不用HTTP

我们知道HTTP和RPC都是应用层协议,那我们为什么不直接用HTTP。原因在于,1HTTP协议的数据包大小相对于请求数据本身要大得多,加入了很多我们不需要的内容例如换行符之类的。2,HTTP协议属于无状态协议,客户端和服务器每次请求都要进行重新连接响应后再断开,对于高校RPC来说这是不符合要求的。

RPC协议格式

可以看到,我们协议头标志了整体长度和头长度,这样我们能精准定位处协议体的长度。其次是协议头有拓展字段,这样我们可以对未来协议头添加新内容实现可以拓展。

RPC序列化中我们应该注意:

1. 对象要尽量简单,没有太多的依赖关系,属性不要太多,尽量高内聚;

2. 入参对象与返回值对象体积不要太大,更不要传太大的集合;

3. 尽量使用简单的、常用的、开发语言原生的对象,尤其是集合类;

4. 对象不要有复杂的继承关系,最好不要有父子类的情况

最后,我们可以通 过动态代理技术,屏蔽 RPC 调用的细节,从而让使用者能够面向接口编程。

总结

RPC 是解决应用间通信的一种方式,而无论是在一个大型的分布式应用系统 还是中小型系统中,应用架构最终都会从“单体”演进成“微服务化”,整个应用系统会被 拆分为多个不同功能的应用,并将它们部署在不同的服务器中,而应用之间会通过 RPC 进 行通信,可以说 RPC 对应的是整个分布式应用系统,就像是“经络”一样的存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值