• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

06 RPC框架简介 | 青训营

武飞扬头像
wulig123
帮助1

1 基本概念

RPC(Remote Procedure Call)远程过程调用。主要功能是让构建分布式计算/应用更加容易,在提供强大的远程调用能力时不损失本地调用时的语言简洁性。

1.1 RPC需要解决的问题

  • 函数映射
  • 数据转换成字节流
  • 网络传输

1.2 概念模型

学新通

1.3 一次RPC的完整过程

1.3.1 一些概念

  • IDL(Interface Description Language)文件
    • IDL 通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序能够相互通信
  • 生成代码
    • 通过编译器工具把 IDL 文件转换成语言相对应的静态库
  • 编解码(也称之为序列化/反序列化)
    • 从内存中表示到字节序列的转换称之为编码,反之为解码
  • 通信协议
    • 规范了数据在网络中的传输内容和格式。除了必须的请求/响应数据外,通常还会包含额外的元数据
  • 网络传输
    • 通常基于成熟的网络库,通过 TCP/UDP 协议传输

1.3.2 传输过程

学新通

1.4 优势

  1. 单一职责,有利于分工协作和运维开发
  2. 可扩展性强,资源使用率好
  3. 故障隔离,服务整体的可靠性更高
  4. 部署灵活

1.5 问题

  1. 可能会出现服务宕机导致客户无法处理的情形
  2. 可能出现在调用过程中的网络异常,无法保证消息的可达性
  3. 可能出现请求量突增导致的服务无法及时处理

2 分层设计

从上往下看,分层结构如下:

  • 用户自己编写的业务逻辑代码
  • 利用代码生成工具将 IDL 文件转换成不同语言所对应的库代码
  • 框架编解码层
    • 数据格式:
      • 不同编程语言特定的格式
      • 文本格式:如JSON、XML、CSV等
      • 二进制编码:具有跨语言、高性能等优点。常用的有TLV(Tag Length Value)编码。
    • 选择类型:
      • 兼容性:支持自动增加新的字段且不影响已有服务
      • 通用性:要支持跨平台、跨语言
      • 性能:考虑空间和时间两个维度
  • 框架的协议层
    • 指定通信协议,可能会额外添加元数据
    • 协议的构造:学新通
      • LENGTH:数据包大小,不包含自身
      • HEADER MAGIC:标识版本信息,协议解析时快速校验
      • SEQUENCE NUMBER:表示数据包的 seqID,可用于多路复用,单连接内递增
      • HEADER SIZE:头部长度,从第14个字节开始计算一直到 PAYLOAD 前
      • PROTOCOL ID:编解码方式,分为 Binary 和 Compact
      • TRANSFORM ID:压缩方式,如 zlib、 snappy
      • INFO ID:传递一些定制的 meta 信息
      • PAYLOAD:消息体
    • 解析过程:学新通
  • 框架的网络通信层
    • 利用 Sockets API:学新通
    • 网络库:
      • 提供易用的API:封装底层 Socket API,连接管理和事件分发
      • 完备的功能:支持TCP、UDP、UDS等协议,也支持优雅退出、异常处理等
      • 较强的性能:应用层 buffer 减少 copy,同时具有高性能定时器、对象池等

3 关键指标

3.1 稳定性

3.1.1 保障策略

  1. 熔断:保护调用方,防止问题扩散影响整个链路
  2. 限流:保护被调用方,防止大流量压垮服务
  3. 超时控制:避免资源浪费在不可用的节点上

3.1.2 请求成功率

提高方法:

  • 负载均衡
  • 重试

3.1.3 长尾请求

长尾请求一般指明显高于均值的一部分占比较小的请求。 业界关于延迟有一个常用的P99标准, 也就是按照请求延迟从小到大排列,99%的请求延迟要满足在一定耗时以内, 1%的请求会大于这个耗时, 而这1%就可以认为是长尾请求。

提高长尾请求的请求成功率方法:利用Backup Request 学新通

提升方式:注册中间件

3.2 易用性

指标:

  • 开箱即用:要有丰富的文档、合理的默认参数选项
  • 有完备的周边工具:生成代码工具、脚手架工具

3.3 扩展性

需要提供尽可能多的扩展点

3.4 观测性

在运行过程中需要尽可能地保证高观测性

常用的工具:Log、Metric、Tracing

Linux中有许多内置的观测工具

3.5 高性能

3.5.1 目标

  • 高吞吐
  • 低延迟

3.5.2 手段

  • 连接池:提高连接的复用率
  • 多路复用:减少链接的开销
  • 高性能编解码协议
  • 高性能网络库

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbakkc
系列文章
更多 icon
同类精品
更多 icon
继续加载