《深入浅出 RPC 框架》课程笔记 | 青训营

86 阅读2分钟

一、基本概念

1.1 远程函数调用

RPC需要解决的问题

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

1.2 RPC概念模型

QQ截图20230810085952.png

1.3 RPC过程

  • IDL文件:接口描述,不同平台、不同语言运行的对象可以相互通信
  • 生成代码:通过编译工具把IDL文件转换成语言对应静态库
  • 编解码:序列化与反序列化
  • 通信协议:规范数据的网络传输格式
  • 网络传输:通常基于成熟的网络库走TCP/UDP传输

1.4 RPC的好处

  • 单一职责,利于分工协作运维开发
  • 可扩展性强,资源使用率更优
  • 故障隔离,服务的整体可靠性更高

1.5 RPC带来的问题

  • 服务宕机,对方如何处理?
  • 网络异常,如何保证消息可达?
  • 请求量突增服务无法及时处理,有哪些应对措施?

二、分层设计

2.1 分层设计

QQ截图20230810091157.png

2.2 编解码层

  • 数据格式:语言特定的格式、文本格式、二进制编码
  • 选型:兼容性、通用性、性能

2.3 协议层

  • 特殊结束符:表示协议单元结束的标识
  • 变长协议:定长部分需要描述不定长的内容长度

2.4 网络通信层

  • Sockets API

QQ截图20230810093552.png

  • 网络库:提供易用Sockets API、协议支持、异常处理、性能优化

三、关键指标

3.1 稳定性

保障策略

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

请求成功率

  • 一个服务多机器的负载均衡
  • 重试
具体措施 - 注册相应功能的中间件:

QQ截图20230810095257.png

3.2 易用性

  • 合理的默认参数选项、丰富的文档
  • 提供生成代码、脚手架等周边工具

3.3 扩展性

  • 中间件
  • Option
  • 编解码层
  • 协议层
  • 网络传输层
  • 代码生成工具插件扩展

3.4 观测性

  • 传统三件套:LogMetricTracing
  • 内置观测性服务

3.5 高性能

  • 目标:高吞吐、低延迟
  • 手段:连接池、多路复用、高性能编解码协议、高性能网络库