RPC 原理与实现 | 青训营笔记

66 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

一、本堂课重点内容:

今天的课程是关于RPC原理与实现。

二、基本概念

远程函数调用(RPC - Remote Procedure Calls) 函数映射 我们怎么告诉支付服务我们要调用付款这个函数,而不是退款或者充值能,在本地调用中,函数体是直接通过函数指针来指定的,我们调用哪个方法,编译器就自动帮我们调用它相应的函数指针。但是在远程调用中,函数指针是不行的,因为两个进程的地址空间是完全不一样的。所以函数都有自己的一个ID,在做RPC的时候要附上这个ID,还得有个ID和函数的对照关系表,通过ID找到对应的函数并执行。 客户端怎么把参数值传给远程的函数呢? 在本地调用中,我们只需要把参数压到栈里,然后让函数自己去栈里读就行。但是在远程过程调用时,客户端跟服务端是不同的进程,不能通过内存来传递参数。这时候就需要客户把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。 远程调用往往用在网络上,如何保证在网络上高效稳定地传输数据?

IDL文件

IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信

生成代码

通过编译器工具把IDL文件转换成语言对应的静态库

编解码

从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化。

通信协议

规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据

网络传输

通常基于成熟的网络库走TCP/UDP传输。

RPC的好处

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

三、分层设计

编解码层

数据格式

  1. 语言特定的格式
  2. 文本格式
  3. 二进制编码

选型

  1. 兼容性
  2. 通用性
  3. 性能

协议层 概念

  1. 特殊结束符
  2. 变长协议

协议构造

  • LENGTH
  • HEADER MAGIC
  • SEQUENCE NUMBER
  • HEADER SIZE
  • PROTOCOL ID
  • TRANSFORM ID
  • INFO ID
  • PATLOAD

四、关键指标

  • 稳定性
  • 易用性
  • 扩展性
  • 观测性
  • 高性能

五、企业实践

整体架构-Kitex

Kitex Core :核心组件

Kitex Byted:与公司内部基础设施集成

Kitex Tool:代码生成工具

六、课后人个收获

通过今天的课程,我从本地函数调用到RPC的基本概念,了解到了很多关于RPC框架的知识。