这是我参与「第五届青训营」伴学笔记活动的第十二天,今天学习了解了rpc基本框架,了解到了目前存在问题和其每个层次的功能。
存在问题
rpc需要解决函数映射(地址不同,通过id找到函数),数据转换成字节流(本地压栈,远程进程不同,先转换成字节流给客户端,再转换成相应的格式),网络传输(保证高效稳定)。
RPC早期流程
调用端里user发起本地调用userstub,然后将参数打包再交给rpc runtime并传送到被用段,被用段交给server-stub解压数据,再经过sever调用事务并返回,然后又传给server并打包,之后依次经过先前的组件并进行调用端和被调用段相反的操作。
IDL
IDL:是一种使得不同平台的运行对象和不同语言编写的程序相互通信的接口语言。
生成代码:用户代码依赖生成代码可以看成整体,把IDL文件转换成语言对应的静态库。
编解码:在内存中表示字节序列的转换和反序列化,只解决了交互格式。
通信协议:规范了数据在网络中传输内容和格式,包括请求,响应数据和部分元数据。
网络传输: tcp/udp传输。
过程:先生成代码并进行编码,再通过通信协议进行打包传送到解码器
原则:专一,可扩展,故障隔离
编解码层
1.用户代码经过生成工具把IDL文件转换成不同语言对应的lib文件,并封装了编解代码逻辑,可以看成框架编解码层的一部分
2.客户和服务端依赖同一份IDL文件即同一份约束生成不同语言的生成代码
3.语言特定格式兼容差,文本格式json无法识别精度,没有产品约束,二进制代码thrift 的binaryprotocol高性能跨平台
4.tlv编码 tag类型,length,value,冗余,有额外内存开销
协议形式
1.特殊结束符,变长协议(定长部分描述不定长的内容长度)
2.结构:包括length,header magic(标识版本),sequence number(可多路复用),protocol id(编码方式有binary和compact两种),tansform id(压缩方式,有zlib,snappy),INFO id(定制meta信息)