这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天。今天学习了RPC的基本概念和相关知识。
RPC基本概念
RPC(Remote Procedure Calls)即远程函数调用。
在本地调用中,我们只需要把参数压到栈里,然后让函数自己去栈里读就行,这是存储在内存中的。但是在远程过程调用时,客户端跟服务端是不同的进程,不能通过内存来传递参数。这时候就需要客户端把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。
RPC的好处:
- 单一职责。开发(采用不同的语言)、部署以及运维(上线独立)都是独立的
- 可扩展性强。例如压力过大的时候可以独立扩充资源,底层基础服务可以复用,节省资源
- 故障隔离。可扩展性强,例如压力过大的时候可以独立扩充资源,底层基础服务可以复用,节省资源
RPC的问题:
- 服务宕机,通信的节点如何处理?
- 在调用过程中发生网络异常,如何保证消息可达性?
- 请求量突增导致服务无法及时处理,如何解决?
RPC概念模型
RPC的概念模型由 User、User-Stub、RPC-Runtime、Server-Stub、Server组成。
RPC协议分层
编解码层
编解码层涉及到数据格式的设计(语言特定格式如Java的字节序列、文本格式如JSON、CSV、二进制编码如Thrift的BinaryProtocol、Protobuf等)
协议层
协议层规定双方交流的语义,以便解析发送的内容。分为变长协议和定长协议。
网络通信层
网络通信层负责建立两端通信,传输消息。通常会用到Sockets API。