这是我参与「第五届青训营」伴学笔记创作活动的第17天。
之前遇到一个面试题,为什么有HTTP还要有RPC,其实本质这个问题就问得不对,HTTP只是RPC的其中一种
什么是RPC?
RPC-Remote Procedure Calls 即远程过程(函数)调用
RPC可以和本地函数调用做对比,本地函数调用之间是利用栈进行参数传递,并且函数的返回值也是利用栈来存储兼返回。
远程函数调用(RPC)需要解决1.函数调用,2.数据转换为字节流,3.进行网络传输
一次RPC的过程
- IDL (Interface description Language)
为了让调用者,知道远程函数(服务)的一些信息,如调用所需的参数等。IDL以一种中立的方式来描述接口,使得在不同平台上运行的对象和不同语言编写的程序可以相互通信。
- 生成代码
编译器把IDL文件转换为语言对应的静态库
- 编解码
从内存中表示到字节序列的转换称为编码,反之称为解码,也被称为序列化和反序列化。
- 通信协议
规范数据在网络的传输内容和格式
- 网络传输
一般是基于TCP或UDP进行网络传输
RPC分层设计
RPC框架主要由三层构成:
- 解编码层:通过代码生成工具把IDL文件转化成对应的库文件,使得客户端、服务器间达到共识,并制定具体的解码编码协议进行数据传输;
- 协议层:制定双方交流的语义,一般通过变长协议的方式完成,其中定长的部分用于描述不定长的内容长度;
- 网络通信层:使用socket套接字编程,一般运用成熟的网络库。 RPC 框架的核心指标
- 稳定性,保障策略,请求成功率
- 负载均衡,易用性,开箱即用
- 扩展性,观测性,高性能
RPC的作用和问题
RPC的好处
- 单一职责,有利于分工协作和运维开发
- 可扩展性强,资源使用率更优
- 故障隔离,服务的整体可靠性更高 RPC带来的问题
- 服务宕机,对方应该如何处理?
- 在调用过程中发生网络异常,如何保证消息的可达性?
- 请求量突增导致服务无法及时处理,有哪些应对措施?