“这是我参与「第五届青训营 」伴学笔记创作活动的第 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
选型
兼容性(支持自动增加新的字段,而不影响老的服务,提高系统的灵活度)、通用性(支持跨平台跨语言)、性能(从时间和空间两个维度考虑)
协议层
特殊结束符:以特殊标记表示消息结束
变长协议:以定长加不定长部分组成,定长部分描述不定长的内容长度