rpc框架 | 青训营笔记

61 阅读2分钟

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

一、目录

  • 什么是RPC框架
  • RPC调用过程
  • RPC的好处

二、详细知识点

2.1 什么是RPC框架

RPC(Remote Procedure Call Protocol)远程过程调用协议。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。

比较正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

2.2 RPC调用过程

以以下这个程序为例:

func main() {
   var a = 2
   var b = 3
   result := calculate(a, b)
   fmt.Println(result)
   return
}

func calculate(x, y int) int {
   z := x * y
   return z
}

调用过程是这样的:

  1. 将a和b的值压栈
  2. 通过函数指针找到calculate函数,进入函数取出栈中的值2和3,将其赋予x和y。
  3. 计算x*y,并将结果存在Z。
  4. 将Z的值压栈,然后从calculate返回。
  5. 从栈中取出Z返回值,并赋值给result。

而远程函数调用(RPC)需要解决以下问题:

  • 函数映射
  • 数据转换为字节流(序列化)
  • 网络传输

一次RPC调用可以分为以下几个过程:

image.png

1. IDL(Interface description language)文件

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

2. 生成代码

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

3. 编解码

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

4. 通信协议

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

5. 网络传输

通常基于成熟的网络库,用TCP/UDP传输

1.4 RPC的好处

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

2.3 RPC框架的关键指标

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

总结

RPC框架在微服务在应用广泛,可以说是不可或缺的一部分。总得来说,RPC框架主要目地是让分布式或者微服务系统中不同服务之间的调用像本地调用一样简单。