RPC

RPC

Remote Procedure Call

特点

RPC 与 HTTP 并不是并列关系,RPC 是远程过程调用的规约,可以用 HTTP 进行信息的传输。

RPC 的主要目的是做到不同服务间调用方法像同一服务间调用本地方法一样。

大致流程是编码(protobuf),传输,接收,解码

优点

  1. 用的是 HTTP2.0,只需要一个 TCP 协议就可以使得服务器和客户端在这个 TCP 协议的多个双向 Stream 上并发地传输数据
  2. 用了 protobuf,二进制并且比 json 更小

论文架构

Client, Client-Stub, RPC-Runtime, Server-Stub, Server

Implementing-remote-procedure-calls

实现

rpc-real

IDL (Interface description language)

Descript the interface.

TLV 编码
  • Tag:类型
  • Length:长度
  • Value:值(也可以是 TLV 结构) IDL-TLV

GenCode

Translate the IDL to different programming language.

Need decode and encode logic.

兼容性——增加新的字段不影响现有服务

通用性——跨平台跨语言

性能——空间时间维度,编码后的数据大小和编码时长

Encode

Conv code to byte.

Protocol

Necessary data and metadata

0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 a b c d e f +—————————————————————-+ | 0| LENGTH | +—————————————————————-+ | 0| HEADER MAGIC | FLAGS | +—————————————————————-+ | SEQUENCE NUMBER | +—————————————————————-+ | 0| Header Size(/32) | … +———————————

              Header is of variable size:
               (and starts at offset 14)

+—————————————————————-+ | PROTOCOL ID (varint) | NUM TRANSFORMS (varint) | +—————————————————————-+ | TRANSFORM 0 ID (varint) | TRANSFORM 0 DATA … +—————————————————————-+ | … … | +—————————————————————-+ | INFO 0 ID (varint) | INFO 0 DATA … +—————————————————————-+ | … … | +—————————————————————-+ | | | PAYLOAD | | | +—————————————————————-+

LENGTH: 数据包大小,不包含自身

HEADER MAGIC:标识版本信息,协议解析时快速校验

SEQUENCE NUMBER:表示数据包的 seqlD,可用于多路复用,单连接内递增 HEADER SIZE:头部长度,从第 14 个字节开始计算一直到 PAYLOAD 前 PROTOCOL ID:编解码方式,有 Binary 和 Compact 两种 TRANSFORM ID:压缩方式,如 zlilb 和 snappy INFO ID:传递一些定制的 meta 信息 PAYLOAD:消息体

Network Transfer

Application Layer
Sockets API
TCP/UDP
IP
Driver
Physical Layer

socket

reference

http://ddia.vonng.com/#/ch4?id=%e6%9c%8d%e5%8a%a1%e4%b8%ad%e7%9a%84%e6%95%b0%e6%8d%ae%e6%b5%81%ef%bc%9arest%e4%b8%8erpc

updatedupdated2024-04-122024-04-12