RPC框架 | 青训营笔记

36 阅读2分钟

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

基本概念

远程函数调用

RPC需要解决的问题:函数映射、数据转换成字节流、网络传输

在本地函数调用时,只需要压栈调用就行

RPC概念模型

RPC的过程由5个模型组成:User User-Stub RPC-Rutime Server-strub Server

一次完整的RPC过程

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

生成代码:通过编译器把IDL文件转换成语言对应的静态库

编解码:从内存中表示到字节序列的转换称为编码,反之称为解码

通信协议:规范数据在网络中传输的内容和格式,通常还会包含额外的yuanshuj

网络传输:通常基于成熟的网络走TCP、UDP传输

RPC的好处

单一职责,有利于分工协作和运维开发

可扩展性强,资源使用率更优

故障隔离,服务的整体可靠性更高

RPC带来的问题

服务宕机,对方该如何处理

调用过程中发生网络异常,如何保证消息的可靠性

请求量突增导致服务无法及时处理,有哪些应对措施

分层设计

编解码层

依赖同一份IDL文件生成代码

数据格式

语言特定的格式

文本格式:JSON XML CSV等文本格式,具有人类可读性

二进制编码:Thrift的BinaryProtocol

二进制编码

TLV编码:Tag标签、Length长度、Value值

问题:有额外冗余信息,增加了tag和length

选型

兼容性(支持自动增加新的字段,而不影响老的服务,提高系统的灵活度)、通用性(支持跨平台跨语言)、性能(从时间和空间两个维度考虑)

协议层

特殊结束符:以特殊标记表示消息结束

变长协议:以定长加不定长部分组成,定长部分描述不定长的内容长度