后端与 RPC 框架分层设计 | 青训营笔记

93 阅读2分钟

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

一、RPC 框架分层设计重点内容

  1. 基本概念
  2. 分层设计
  3. 关键指标
  4. 企业实践

这节课主要是感觉自己对于RPC还不是特别了解,所以去看了一下后端入门 - Go 框架设计与实现

二、详细内容

  • 基本概念

    在引入远程函数调用概念之前(RPC)介绍了本地函数调用。本地函数调用大致分为压栈参数,处理(计算等),返回结果(压栈返回),从栈中取出结果。类似地,RPC需要调用服务端的方法进行处理,所以它要解决以下问题:

    1. 函数映射
    2. 数据转化为字节流
    3. 网络传输

    RPC概念模型如图:

rpc.png

综上,RPC一次的工作流程可以概况为:
 - IDL文件
 - 生成代码
 - 编解码
 - 通信协议
 - 网络传输
 
  • 分层设计——以Apache Thrift为例 结构如图:

分层设计.png 核心为编解码层,协议层,网络层(后面两层参考计算机网络也许也行)。 编解码层主要是可以使得服务端或者客户端使用IDL文件生成语言对应的静态库,从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化。二进制编码,指将数据转换成二进制流(实现方式有tlv编码等)具备跨语言和高性能等优点。其他两层记录下感兴趣的点,网络层的性能主要考虑应用层buffer 减少copy,具备高性能定时器、对象池等特点。

  • 关键指标

    • 稳定性,可以通过注册中间件实现以下:

    1. 熔断:保护调用方,防止被调用的服务出现问题而影响到整个链路

    2. 限流:保护被调用方,防止大流量把服务压垮

    3. 超时控制:避免浪费资源在不可用节点上

    4. 负载均衡(不至于其中一个服务压力过大而崩溃,从而提高成功率)

    • 易用性,开箱即用,周边工具完善

    • 扩展性强,可以注册各种中间件

    • 观测性,可以使用Log、Metric、Tracing或者内置观测性服务