RPC 原理与实践 | 青训营笔记

118 阅读3分钟

这是我参与「第五届青训营」笔记创作活动的第 14

|| 🎶今日笔记🎶 ||

RPC 原理与实践

  1. RPC 的基本概念
  2. RPC 框架的层次结构设计
  3. 评估 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架构里面包含了四个核心的组件,分别是 ClientClient StubServer以及Server Stub,这个Stub可以理解为存根。

  • 客户端(Client) :服务的调用方法。

  • 客户端存根(Client Stub) :存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。

  • 服务端(Server) :真正的服务提供者。

  • 服务端存根(Server Stub) :接收客户端发送过来的消息,将消息解包,并调用本地的方法

一次 RPC 的完整过程:

IDL方式中立描述接口、生成代码静态库、编解码内存解释到字节序列(序列化)、通信协议请求响应函数、网络传输tcp/udp

image.png


RPC 框架的核心指标

  • 稳定性

    • 保障策略

      • 熔断
      • 限流
      • 超时
    • 请求成功率

      • 负载均衡
      • 重试
    • 长尾请求

      • BackupRequest
  • 易用性

    • 开箱即用
    • 周边工具
  • 扩展性

  • 观测性

    • Log
    • Metric
    • Tracing
    • 内置观测性服务
  • 高性能

~ End ~