Apache Drill中的RPC
Apache Drill中的RPC
Drill 利用 Netty 4 项目作为 RPC 底层。 从那里,我们构建了一个简单的基于 protobuf 的通信层,该层经过优化以最大限度地减少对堆数据转换的要求。 客户端和服务器都使用 CompleteRpcMessage protobuf 信封来传达请求、响应和错误。 通信模型是每个端点向其对等端发送 CompleteRpcMessages 流。 CompleteRpcMessage 以 protobuf 编码长度为前缀。
CompleteRpcMessage 分为三个关键组件:RpcHeader、Protobuf Body(字节)、RawBody(字节)。
RpcHeader 有以下字段:
Drillbits通过 BitCom 中介进行通信。 BitCom 管理……
带处理程序的Drill通道管道
Drill RPC 层建立在 Netty 之上,Netty 是一种异步网络应用程序框架,可以轻松地在应用程序中开发与网络相关的组件(例如,客户端和服务器)。 在 Netty 中,每个连接都表示为一个由自己的管道组成的通道。 管道是在创建通道时创建的。 Channel Pipeline 由一个或多个入站和/或出站 ChannelHandler 组成,它们作用于应用程序发送和/或接收的 I/O 事件。 (有关参考,请参阅接口通道、接口 ChannelPipeline 和接口 ChannelHandler。)
在 Drill 生态系统中,UserClient(在客户端)和 UserServer(在服务器端)分别代表客户端和服务器之间每个连接的包装器。 它们定义了管道和为通信路径添加的各种处理程序。
对于加密支持,UserClient 和 UserServer 都需要修改,因为如果作为握手的一部分协商隐私,将添加新的处理程序用于加密和解密。
加密、解密和块创建处理程序
除了加密/解密处理程序之外,还应添加发送方的 ChunkCreation 处理程序和接收方的 LengthFieldBasedFrameDecoder。
ChunkCreation 处理程序有助于将传出 RPC 消息分成更小的块单元进行加密,而 LengthFieldBasedFrameDecoder 有助于在调用解密模块之前在接收方累积加密负载的所有字节。
下图显示了现有的处理程序以及在 Drill Channel 管道中添加的新处理程序,用于 Drill 1.11 中的客户端到 drillbit 加密支持。