一、基本概念
RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,用于在不同的进程或者不同的计算机之间进行通信和调用远程的程序或函数。
RPC基本概念包括:
-
客户端和服务器:RPC通信模型中,客户端发起请求,服务器响应请求并返回结果。
-
远程过程调用:客户端通过RPC协议调用远程服务器上的程序或函数,就像调用本地程序一样。
-
传输协议:RPC协议可以使用不同的传输协议,如TCP、UDP、HTTP等。
-
序列化和反序列化:RPC通信过程中,数据需要在网络中传输,需要将数据序列化为二进制数据,然后在接收端进行反序列化还原为原始数据。
-
接口定义语言(IDL):IDL是一种描述RPC接口的语言,用于定义RPC接口的参数、返回值、异常等信息,以便客户端和服务器进行通信。
-
远程对象:RPC协议支持远程对象的调用,即客户端可以调用服务器上的远程对象的方法。
本地函数调用:
1.将a和 b 的值压栈
2.通过函数指针找到 calculate 函数,进入函数取出栈中的值 2 和3,将其赋予 x 和y
3.计算 x*y ,并将结果存在 Z
4.将z 的值压栈,然后从 calculate 返回
5.从栈中取出 z 返回值,并赋值给 result
一次 RPC 的完整过程
IDL (Interface description language) 又件IDL 通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信 生成代码通过编译器工具把 IDL 文件转换成语言对应的静态库 编解码 从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化 通信协议规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据 网络传输通常基于成熟的网络库走 TCP/UDP 传输
二、分层设计
协议构造
LENGTH: 数据包大小,不包含自身
HEADER MAGIC: 标识版本信息,协议解析时候快速校验
SEQUENCE NUMBER: 表示数据包的 segID可用于多路复用,单连接内递增
HEADER SIZE: 头部长度,从第14个字节开始it算一直到 PAYLOAD前
PROTOCOL ID:编解码方式,有 Binary 和Compact 两种
TRANSFORM ID: 压缩方式,如 zlib 和
snappyINFO ID: 传递一些定制的 meta 信息
PAYLOAD:消息体
三、关键指标
1.框架通过中间件来注入各种服务治理策略,保障服务的稳定性
2.通过提供合理的默认配置和方便的命令行工具可以提升框架的易用性
3.框架应当提供丰富的扩展点,例如核心的传输层和协议层
4.观测性除了传统的 Log、Metric 和 Tracing 之外,内置状态暴露服务也很有必要
5.性能可以从多个层面去优化,例如选择高性能的编解码协议和网络库