RPC设计与实现 | 青训营笔记

73 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第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带来的问题
  • 服务宕机,对方应该如何处理?
  • 在调用过程中发生网络异常,如何保证消息的可达性?
  • 请求量突增导致服务无法及时处理,有哪些应对措施?