apache drill rpc 简单说明
drill 是基于netty 4 做为rpc的底层处理,同时基于了 protobuf 进行通信层的处理(减少堆数据的传输)
客户端以及server 都利用了CompleteRpcMessage protobuf 消息包装进行request,response 以及errors 处理
通信是使用流模式 进行CompleteRpcMessage 想对端消息的处理
CompleteRpcMessage 的构成
CompleteRpcMessage 包含三部分,RpcHeader,Protobuf Body (bytes) RawBody (bytes)
drill channel pipeline 的handlers
drill rpc 层构建在netty,异步网络框架之上
参考处理图
包含了 Encryption/Decryption handler, ChunkCreation handler 在 sender 端处理 同时LengthFieldBasedFrameDecoder在接收端必须添加
ChunkCreation 主要是对于输出的rpc 消息进行拆分
说明
dremio rpc 处理部分与drill 是类似的,只是dremio 为了方便模块化自己提取了一个通用的模块base-rpc 同时消息格式相对drill 做了不少优化调整,fabric 服务就使用了
此模块的能力,同时搞了一个自己的FabricProtocol协议,不少基于rpc 通信的服务基本都会扩展此接口(内部消息通信基于了
protobuf)
参考资料
services/base-rpc
protocol
services/fabric-rpc/src/main/java/com/dremio/services/fabric/api/FabricProtocol.java
https://drill.apache.org/docs/rpc-overview/