RPC 的原理 | 青训营笔记

68 阅读2分钟

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

  • RPC 相关的基本概念
  • RPC 框架的分层设计
  • 衡量 RPC 框架的一些核心指标
  • 字节内部 RPC 框架 Kitex 实践分享

什么是RPC

RPC - Remote Procedure Calls 即 远程函数调用

A,B 两台不同的服务器部署在不同地点,其中一台 A 中的程序调用 另一台 B 中的程序的函数,就是远程函数调用,RPC 的主要功能目标是让构建分布式应用更加容易

为了满足这个目标,RPC解决了以下的问题:

  • 函数映射
  • 数据转换成字节流
  • 网络传输

RPC 相关的基本概念

相较本地函数调用,远程调用存在方法、参数模糊的问题,因此需要一种方式来描述函数和参数的样子,在这样的场景下,就需要 IDL 文件,IDL 文件通过中立的方式描述接口,使得不同平台、不同语言编写的语言能够相互通信。

IDL(Interface Definition Language) 文件

  • Thrift
  • Protobuf

客户端和服务端依赖同一份 IDL 文件,转换成不同的语言的对应的lib文件

编解码层

TLV 编码 Tag Length Value,但是添加了 Tag 和 Length 额外的冗余信息,占据内存开销

image.png

协议层

框架通过协议内容,对协议进行解析,MagicNumber -> PayloadCodec -> Payload,编码时进行逆向的操作。

image.png

通讯协议

规范了数据在网络中的传输内容和格式,还包含了额外的元数据

网络传输

基于 TCP/UDP 传输

RPC 框架分层设计

编解码层、协议层、网络通信层

网络通信层

选型的重点

  • Sockets API - 易用
  • 功能 - 支持tcp、udp等,异常处理
  • 性能

RPC 的好处

  • 单一职责、有利于分工协作
  • 可扩展性强,资源使用率高
  • 故障隔离,服务可靠