RPC原理 | 青训营笔记

60 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天。今天学习了RPC的基本概念和相关知识。

RPC基本概念

RPC(Remote Procedure Calls)即远程函数调用。

在本地调用中,我们只需要把参数压到栈里,然后让函数自己去栈里读就行,这是存储在内存中的。但是在远程过程调用时,客户端跟服务端是不同的进程,不能通过内存来传递参数。这时候就需要客户端把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。

RPC的好处:

  • 单一职责。开发(采用不同的语言)、部署以及运维(上线独立)都是独立的
  • 可扩展性强。例如压力过大的时候可以独立扩充资源,底层基础服务可以复用,节省资源
  • 故障隔离。可扩展性强,例如压力过大的时候可以独立扩充资源,底层基础服务可以复用,节省资源

RPC的问题:

  • 服务宕机,通信的节点如何处理?
  • 在调用过程中发生网络异常,如何保证消息可达性?
  • 请求量突增导致服务无法及时处理,如何解决?

RPC概念模型

RPC的概念模型由 User、User-Stub、RPC-Runtime、Server-Stub、Server组成。 image.png

RPC协议分层

编解码层

编解码层涉及到数据格式的设计(语言特定格式如Java的字节序列、文本格式如JSON、CSV、二进制编码如Thrift的BinaryProtocol、Protobuf等)

image.png

协议层

协议层规定双方交流的语义,以便解析发送的内容。分为变长协议和定长协议。 image.png

网络通信层

网络通信层负责建立两端通信,传输消息。通常会用到Sockets API。

image.png