首页 > 其他分享 >dremio FabricServer 服务简单说明

dremio FabricServer 服务简单说明

时间:2023-01-12 19:44:37浏览次数:67  
标签:dremio java fabric FabricServer rpc 简单 services com

FabricServer 主要是对于dremio内部rpc 的通信,包含了调度节点与执行节点的通信以及内部的一些命令处理
FabricServer 是通过FabricServiceImpl 进行实际服务的创建管理(dremio 服务组件的一个套路实现了service 接口会
包含start 方法)

FabricServer提供的能力

可以看到主要是服务的初始化,以及链接管理处理(FabricMessageHandler 进行处理的,内部会使用不同的FabricProtocol 协议实现处理)
参考类图

 

 

 

FabricServer 的启动

FabricServiceImpl 实现中处理的

 
protected FabricServer newFabricServer() throws Exception {
  return new FabricServer(getAddress(), getHandler(), getRpcConfig(), getAllocator(), getRegistry(), getEventLoop());
}

FabricProtocol 协议实现

主要是包装的FabricProtocol,还是比较多,包含了各种组件之间通信的处理(协调节点到执行节点,执行节点到执行节点),具体的可以查看实际源码

 

 

 

命令处理

通过FabricCommandRunner 处理,会委托给ProxyCommand,FabricServiceImpl

  • 参考代码
private static class CommandRunner implements FabricCommandRunner {
 
  private FabricProtocol protocol;
  private FabricConnectionManager manager;
 
  public CommandRunner(FabricProtocol protocol, FabricConnectionManager manager) {
    super();
    this.protocol = protocol;
    this.manager = manager;
  }
 
  @Override
  public <R extends MessageLite, C extends RpcCommand<R, ProxyConnection>> void runCommand(C cmd) {
    // 对于Fabric服务会通过FabricProtocol 协议处理
    manager.runCommand(new ProxyCommand<>(cmd, protocol));
  }
 
}

服务中是通过FabricRunnerFactory 使用的

 // 提供了一个协议注册的地方,方便其他服务集成使用(进行FabricProtocol 子类的注册)
@Override
public FabricRunnerFactory registerProtocol(FabricProtocol protocol) {
  handler.registerProtocol(protocol);
  return new RunnerFactory(protocol);
}
// 通过协议获取
@Override
public FabricRunnerFactory getProtocol(int id) {
  FabricProtocol protocol = handler.getProtocol(id);
  Preconditions.checkNotNull(protocol);
  return new RunnerFactory(protocol);
}

FabricRunnerFactory 的定义,主要提供了如何获取commandrunner会调用进行处理 FabricConnectionManager的runCommand
进行链接的处理


不少服务会调用FabricRunnerFactory的能力进行rpc 命令的执行

 

 

 

rpc 响应

主要是通过接口的实现进行response 的处理(毕竟rpc 是需要一个返回的)

 
// ResponseSender 接口进行数据响应的处理,具体的实现子类可以参考上边的FabricProtocol 协议介绍
public void handle(final PhysicalConnection connection, final int rpcType, final ByteString pBody, final ByteBuf dBody, final ResponseSender sender) throws RpcException;

类似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
https://www.cnblogs.com/rongfengliang/p/17013321.html

标签:dremio,java,fabric,FabricServer,rpc,简单,services,com
From: https://www.cnblogs.com/rongfengliang/p/17047771.html

相关文章

  • HttpListener简单使用
    封装了一个简单便捷使用HttpListener的类,可直接添加接口,实现处理逻辑。1usingSystem;2usingSystem.Collections.Concurrent;3usingSystem.Collections.Gen......
  • SpringBoot简单整合JPA
    SpringBoot简单整合JPAhttps://blog.csdn.net/qq_41378597/article/details/103444889最近帮朋友写个小项目,用惯了Mybatis,有机会想用下SpringBoot整合JPA,发现使用JPA......
  • Springboot简单整合JPA示例
    Springboot整合JPAhttps://blog.csdn.net/wdy00000/article/details/123588201文章目录JPA技术常用注解Springboot整合JPA1.引入JPA依赖2.配置3.启动类4.实体类5.......
  • 一些简单的Dos命令
    Dos命令(打开cmd的方式)打开CMD的方式:1.开始+系统+命令提示符2.按住Win键+R然后输入CMD(推荐使用)3.在桌面空白处按住shift键+鼠标右键点击,选择在此处打开命令行窗口4.资......
  • Oracle DBLINK 简单使用
     oracle在进行跨库访问时,可以通过创建dblink实现,今天就简单的介绍下如果创建dblink,以及通过dblink完成插入、修改、删除等操作     首先了解下环境:在tnsnames.o......
  • LeetCode刷题(52)~杨辉三角【看似简单???】
    题目描述给定一个非负整数numRows,生成杨辉三角的前numRows行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入:5输出:[[1],[1,1],[1......
  • devexpress控件教程 开发workflow设计器这么简单
    如果你的项目的OA,尤其是政府部门的OA,那么一定会涉及工作流这个功能。这个模块说大不大、说小不大,最头疼的就是它的设计器,一直没有合适的。虽然微软出了工作流的3.5和4.0版......
  • 用两个三极管搭建的简单恒流源电路
    如下图所示,是用两个NPN三极管搭建的低成本恒流源电路,结构比较简单。怎么做到恒流的呢?我们一起来分析一下。图1 恒流源电路 在该电路中,可以把D1或R2看作是负载,且互相......
  • 简单图论总结
    一些碎碎念最近复习了一些简单图论的知识,主要有floyd,spfa,拓扑排序,dij,差分等等。其实真正意义上的算法就是floyd和dij以及拓扑排序(spfa目前的应用场景仅限于有负边的最短路......
  • JavaScript数据类型简介以及简单的数据类型
    JavaScript前文回顾: ​​认识JavaScript到初体验​​​​JavaScript注释以及输入输出语句​​​​JavaScript变量的使用、语法扩展、命名规范​​一、数据类型简介1.1为......