[RPC]RPC简介

[RPC]RPC简介

对网上的一些介绍RPC文章的总结,侵删

参考链接:

RPC的概念

RPC(Remote Procedure Call Protocol)远程过程调用协议,可以通过网络向远程服务器请求服务,同时不用在意底层网络细节。通俗说法就是能实现调用远程服务器上的方法,但是不用关系具体怎么实现的。

  • RPC是协议。是一套需要遵循的标准,具体的框架有各自的特点,只需要遵守这套标准即可,对用户来说呈现类似的效果。
  • 隐藏底层网络细节。对于用户来说,只需要调用接口即可,不需要关心具体使用的TCP/UDP/HTTP等协议。
  • 调用方式透明。用户只用传递参数,接收返回值即可,参数如何传递给远程服务器以及结果如何返回并不用关心。
  • 跨语言能力。很明显,只要符合RPC标准,并不用关心双方具体使用什么变成语言(当然也有一些框架仅限于具体的变成语言)。

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敏感,适合于多语言之间进行数据交换

posted @ 2022-05-05 09:34  xiaowk5516  阅读(189)  评论(0编辑  收藏  举报