这是我参与「第五届青训营 」伴学笔记创作活动的第 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 额外的冗余信息,占据内存开销
协议层
框架通过协议内容,对协议进行解析,MagicNumber -> PayloadCodec -> Payload,编码时进行逆向的操作。
通讯协议
规范了数据在网络中的传输内容和格式,还包含了额外的元数据
网络传输
基于 TCP/UDP 传输
RPC 框架分层设计
编解码层、协议层、网络通信层
网络通信层
选型的重点
- Sockets API - 易用
- 功能 - 支持tcp、udp等,异常处理
- 性能
RPC 的好处
- 单一职责、有利于分工协作
- 可扩展性强,资源使用率高
- 故障隔离,服务可靠