RPC
1. RPC
Remote Procedure Call:
与本地函数调用区别:
- 函数映射
- 数据转为字节流
- 网络传输
RPC=Remote Produce Call 是一种技术的概念名词。RPC由本地方法调用和网络通信实现。HTTP是一种协议,RPC可以通过 HTTP 来实现,也可以通过Socket自己实现一套协议来实现.
概念模型-架构:客户端、客户端存根、服务端、服务端存根
工作过程
- IDL(Interface Definition Language)即接口定义语言,使得不同平台上运行的对象和不同语言编写的程序可以互相通信。
- 生成代码:通过编译工具把IDl转为语言对应静态库。 解编码:从内存中表示到字节序列的转换-编码-序列化 解编码-反序列化
- 通信协议:数据在网络中的传输内容和格式 请求/响应数据 额外元数据
- 网络传输 TCP/UDP
RPC优点
RPC带来的问题
2.分层设计 apache-thrift
2.1 编解码层
考虑兼容性(支持新增字段)、性能(编码大小解码时长)、通用性(平台语言)
二进制编码 TLV编码:length、tag占用额外空间
- tag 标签,类型
- length数据长度
- value 可以嵌套TLV
2.2 协议层
协议的一般构造:
特殊结束符协议:特定字符做协议单元结束标志
变长协议:定长部分+变长部分 定长部分描述不定长的内容长度
协议解析:MagicNumber - PayloadCodec - Patload
2.3 网络通信层
- 提供API 封装底层Socket API 连接管理和事件分发
- 功能 协议支持 tcp、udp和uds等 优雅退出、异常处理等
- 性能 应用层buffer减少copy 高性能定时器、对象池等
Sockets API: Sockets API工作流程:
Sockets API在网络传输的层级:
ddl先上传了