RPC框架 | 青训营

75 阅读2分钟

1 RPC

1.1 本地函数调用

1.2 远程函数调用

Remote Procedure Calls 例:网上商城购物调用支付服务

RPC需要解决的问题: 1.函数映射 2.数据转换成字节流(参数):两个进程地址空间不同,无法使用相同内存。通过id找到进程。 3.网络传输

1.3 RPC概念模型

User, User-stub, RPCRuntime, Server-stub, Server 理论模型

QQ截图20230820111035.jpg

1.4 一次RPC过程

概念: IDL文件: Interface descrption language 生成代码:gencode,通过编译器工具把IDL文件转换成语言对应的静态库 编解码:decoder解码:内存中表示->字节序列1 通信协议:数据在网络中的传输内容和格式 网络传输:基于成熟的往来款走TCP/UDP传输

QQ截图20230820121345.jpg

2 RPC框架

分层设计 apache thritf: code service client/processor read/write TProtocal TTransport ... Network IO

2.1 编解码层

内存对象->字节序列->内存对象 IDL文件数据格式: 语言特定格式 文本格式:JSON、XML、CSV... 二进制编码:最常见,TLV(tag, length,value)...

2.2 协议层

特殊结束符:一个特殊字符作为每个协议单元结束的标识,如\r\n message body \r\n message body \r\n
变长协议:以定长加不定长部分组成,其中定长部分需要描述不定长的内容长度 length message body length message body 协议构造:

QQ截图20230820181726.jpg

  • length:数据包大小
  • header magic:版本信息
  • sequence number:数据包的seqID,可用于多路复用,单连接内递增
  • header size:头部长度,从第14个字节开始,到payload前结束
  • protocol ID:编解码方式,有binary和compact两种
  • transform ID:压缩方式,如zlib,snappy
  • info ID:传递一些定制的meta
  • payload:消息体

2.3 协议层-协议解析

QQ截图20230820182045.jpg

2.4 网络通信层

sockets API:操作系统提供,是利用三元组【ip地址,协议,端口】解决网络通信的中间件工具

QQ截图20230820182233.jpg 网络库:封装底层socket api,提供易用接口

3 RPC关键指标

3.1 稳定性

熔断:保护调用端 限流:保护被调用端 超时:避免浪费 负载均衡 长尾请求-被动请求 通过注册中间件注入以上服务治理策略

QQ截图20230820184241.jpg

3.2 观测性:

log日志 metric监控 tracing跟踪 内置状态暴露服务

4 实践

Kitex

QQ截图20230820184755.jpg

netpoll: 相比原生库(net): 解决了无法感知连接状态和goroutne暴涨的问题

合并部署: 解决微服务过微,序列化开销越来越大的问题 将亲和性强的服务实力尽可能调度到同一个物理机