这是我参与「第五届青训营」笔记创作活动的第 14 天
|| 🎶今日笔记🎶 ||
RPC 原理与实践
- RPC 的基本概念
- RPC 框架的层次结构设计
- 评估 RPC 框架的关键指标
前言-->
RPC的学习对于软件工程师来说是非常有价值的,能够加深对分布式系统的理解,RPC 是分布式系统中常用的通信协议,学习它可以加深对分布式系统的理解。还能够提高开发效率,因为RPC 可以让开发人员以更高效的方式在分布式系统中进行远程调用。
基本概念
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序之间携带信息数据。RPC将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和吞吐量带来了近似于无限制提升的可能。在OSI网络通信模型中,RPC跨了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯)
RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的工作方式)
RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。
RPC 框架的层次结构设计
RPC 框架的分层设计是一种组织和管理代码结构的方法,目的是使代码更加清晰、可维护、可扩展。RPC 框架通常分为三层:
- 编解码层:负责封装网络传输所需的数据结构,如请求、响应等。
- 协议层:负责定义网络通信的协议,包括数据的格式、编码、解码等。
- 网络通信层:负责实现网络数据的传输,并处理网络异常、超时等情况。
分层设计的优点在于,每一层的职责明确,代码可以被独立维护和扩展,并且更易于测试和debug。因此,RPC 框架的分层设计对于研发团队来说是一种有效的代码管理方法。
一个完整的RPC架构里面包含了四个核心的组件,分别是 Client,Client Stub,Server以及Server Stub,这个Stub可以理解为存根。
-
客户端(Client) :服务的调用方法。
-
客户端存根(Client Stub) :存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
-
服务端(Server) :真正的服务提供者。
-
服务端存根(Server Stub) :接收客户端发送过来的消息,将消息解包,并调用本地的方法
一次 RPC 的完整过程:
IDL方式中立描述接口、生成代码静态库、编解码内存解释到字节序列(序列化)、通信协议请求响应函数、网络传输tcp/udp
RPC 框架的核心指标
-
稳定性
-
保障策略
- 熔断
- 限流
- 超时
-
请求成功率
- 负载均衡
- 重试
-
长尾请求
- BackupRequest
-
-
易用性
- 开箱即用
- 周边工具
-
扩展性
-
观测性
- Log
- Metric
- Tracing
- 内置观测性服务
-
高性能
~ End ~