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,异步网络框架之上
参考处理图

apache drill rpc 简单说明_参考资料

 

 

包含了 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/​