FabricServer 主要是对于dremio内部rpc 的通信,包含了调度节点与执行节点的通信以及内部的一些命令处理
FabricServer 是通过FabricServiceImpl 进行实际服务的创建管理(dremio 服务组件的一个套路实现了service 接口会
包含start 方法)
FabricServer提供的能力
可以看到主要是服务的初始化,以及链接管理处理(FabricMessageHandler 进行处理的,内部会使用不同的FabricProtocol 协议实现处理)
参考类图
FabricServer 的启动
FabricServiceImpl 实现中处理的
FabricProtocol 协议实现
主要是包装的FabricProtocol,还是比较多,包含了各种组件之间通信的处理(协调节点到执行节点,执行节点到执行节点),具体的可以查看实际源码
命令处理
通过FabricCommandRunner 处理,会委托给ProxyCommand,FabricServiceImpl
- 参考代码
服务中是通过FabricRunnerFactory 使用的
FabricRunnerFactory 的定义,主要提供了如何获取commandrunner会调用进行处理 FabricConnectionManager的runCommand
进行链接的处理
不少服务会调用FabricRunnerFactory的能力进行rpc 命令的执行
rpc 响应
主要是通过接口的实现进行response 的处理(毕竟rpc 是需要一个返回的)
类似fabricserver 的实现类
如下图,还是包含了不少的,包含了内部使用的rpc 以及客户端应用使用的,都是以RpcBus 做为核心的
说明
dremio 还包含了一个UserRPCServer,我以前简单介绍过(通过UserServer 启动的),其他类似rpc 的处理都是一致的,可以举一反三
参考资料
services/fabric-rpc/src/main/java/com/dremio/services/fabric/FabricServer.java
services/fabric-rpc/src/main/java/com/dremio/services/fabric/FabricServiceImpl.java
services/fabric-rpc/src/main/java/com/dremio/services/fabric/api/FabricProtocol.java
services/base-rpc/src/main/java/com/dremio/exec/rpc/BasicServer.java
services/base-rpc/src/main/java/com/dremio/exec/rpc/RpcBus.java
services/fabric-rpc/src/main/java/com/dremio/services/fabric/api/FabricCommandRunner.java
services/base-rpc/src/main/java/com/dremio/exec/rpc/RpcCommand.java
services/fabric-rpc/src/main/java/com/dremio/services/fabric/ConnectionManagerRegistry.java
services/fabric-rpc/src/main/java/com/dremio/services/fabric/api/FabricRunnerFactory.java
sabot/kernel/src/main/java/com/dremio/sabot/exec/ExecToCoordTunnelCreator.java
services/fabric-rpc/src/main/java/com/dremio/services/fabric/FabricMessageHandler.java
sabot/kernel/src/main/java/com/dremio/exec/work/rpc/CoordToExecTunnelCreator.java
sabot/kernel/src/main/java/com/dremio/exec/service/executor/ExecutorServiceProductClient.java
services/fabric-rpc/src/main/java/com/dremio/services/fabric/FabricConnection.java
services/fabric-rpc/src/main/java/com/dremio/services/fabric/FabricConnectionManager.java