[RPC]RPC简介
对网上的一些介绍RPC文章的总结,侵删
参考链接:
RPC的概念
RPC(Remote Procedure Call Protocol)远程过程调用协议,可以通过网络向远程服务器请求服务,同时不用在意底层网络细节。通俗说法就是能实现调用远程服务器上的方法,但是不用关系具体怎么实现的。
- RPC是协议。是一套需要遵循的标准,具体的框架有各自的特点,只需要遵守这套标准即可,对用户来说呈现类似的效果。
- 隐藏底层网络细节。对于用户来说,只需要调用接口即可,不需要关心具体使用的TCP/UDP/HTTP等协议。
- 调用方式透明。用户只用传递参数,接收返回值即可,参数如何传递给远程服务器以及结果如何返回并不用关心。
- 跨语言能力。很明显,只要符合RPC标准,并不用关心双方具体使用什么变成语言(当然也有一些框架仅限于具体的变成语言)。
RPC的结构
图片来自https://blog.csdn.net/yjp198713/article/details/79410521
Client: 客户端,RPC的调用方,不用清楚RPC框架的实现
Server: 远程服务器,提供了一些可能被调用的方法
Stub/Proxy: 管理消息格式、网络传输协议等等
Selector/Processor: 管理服务器上提供的接口,包括注册接口,执行接口等。
Message Protocol: 消息的编解码
Transfer/Network Protocol: 管理用到的网络协议和IO模型
IDL: 接口定义语言,存在于跨语言的RPC框架之中,用于确定各种语言都能理解的消息结构和接口定义的描述形式
影响RPC框架性能的因素
网络IO模型:使用传统的阻塞时同步IO、非阻塞式同步IO或者多路IO模型
网络协议:选择TCP、UDP还是HTTP
消息的封装格式:消息的编解码难度,消息体大小,解决粘包/半包的难度
Schema和序列化:序列化/反序列化,兼容性等
服务管理方式:服务器端在高并发情况下对请求的处理方式
常见的RPC框架特点
Dubbo: 阿里开发的,基于java interface
gRPC: 谷歌开发的,使用protobuf序列化,通信使用http2
Thrift: 脸书开发的,基于tcp,对CPU敏感,适合于多语言之间进行数据交换