Doris数据库FE——FeServer

这篇具有很好参考价值的文章主要介绍了Doris数据库FE——FeServer。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Doris数据库FE——FeServer,# Doris数据仓库,数据库,oracle

            FeServer feServer = new FeServer(Config.rpc_port);
            feServer.start();

FeServer(Doris frontend thrift server)职责是负责FE和BE之间通信。如下即为初始化中关于FeServer类的构造函数和start函数的具体代码。其start函数流程和构建thrift server行为一致,这里不介绍,仅说明其提供的接口。

public class FeServer {
    private static final Logger LOG = LogManager.getLogger(FeServer.class);
    private int port;  private ThriftServer server;
    public FeServer(int port) { this.port = port; }

    public void start() throws IOException {
        FrontendServiceImpl service = new FrontendServiceImpl(ExecuteEnv.getInstance());
        Logger feServiceLogger = LogManager.getLogger(FrontendServiceImpl.class);
        FrontendService.Iface instance = (FrontendService.Iface) Proxy.newProxyInstance(
                FrontendServiceImpl.class.getClassLoader(), FrontendServiceImpl.class.getInterfaces(),
                (proxy, method, args) -> {
                    long begin = System.currentTimeMillis();
                    String name = method.getName();
                    if (MetricRepo.isInit) { MetricRepo.THRIFT_COUNTER_RPC_ALL.getOrAdd(name).increase(1L); }
                    feServiceLogger.debug("receive request for {}", name);
                    Object r = null;
                    try {  r = method.invoke(service, args);
                    } catch (Throwable t) {
                        feServiceLogger.warn("errors while process request for {}", name, t);
                        // If exception occurs, do not deal it, just keep as the previous
                        throw t;
                    } finally {
                        feServiceLogger.debug("finish process request for {}", name);
                        if (MetricRepo.isInit) {
                            long end = System.currentTimeMillis();
                            MetricRepo.THRIFT_COUNTER_RPC_LATENCY.getOrAdd(name).increase(end - begin);
                        }
                    }
                    return r;
                });
        // setup frontend server
        TProcessor tprocessor = new FrontendService.Processor<>(instance);
        server = new ThriftServer(port, tprocessor);
        server.start();
        LOG.info("thrift server started.");
    }
}

Frontend service用于服务通过thrift协议过来的所有请求。其构造函数主要关注exeEnv和MasterImple两个类。

// Frontend service used to serve all request for this frontend through thrift protocol
public class FrontendServiceImpl implements FrontendService.Iface {
    private static final Logger LOG = LogManager.getLogger(FrontendServiceImpl.class);
    private MasterImpl masterImpl;
    private ExecuteEnv exeEnv;
    // key is txn id,value is index of plan fragment instance, it's used by multi table request plan
    private ConcurrentHashMap<Long, Integer> multiTableFragmentInstanceIdIndexMap =
            new ConcurrentHashMap<>(64);

    public FrontendServiceImpl(ExecuteEnv exeEnv) {
        masterImpl = new MasterImpl();  this.exeEnv = exeEnv;
    }

Doris数据库FE——FeServer,# Doris数据仓库,数据库,oracle
在 FE 端与 BE 端均存在一个任务 Queue,如上图所示,从当前版本来看 thrift 实现的与 BE 之间的交互主要是用 AgentClient 来承载,而查看代码仅用于 snapshot 的管理过程,其他的并非通过该接口实现。注 这里存在疑问 gRpc 和 thrift 接口混着用的目的,不太明确


public TConfirmUnusedRemoteFilesResult confirmUnusedRemoteFiles(TConfirmUnusedRemoteFilesRequest request)
public TGetDbsResult getDbNames(TGetDbsParams params) throws TException
private static ColumnDef initColumnfromThrift(TColumnDesc tColumnDesc, String comment)
public TAddColumnsResult addColumns(TAddColumnsRequest request) throws TException
public TGetTablesResult getTableNames(TGetTablesParams params) throws TException
public TListTableStatusResult listTableStatus(TGetTablesParams params) throws TException
public TListPrivilegesResult listTablePrivilegeStatus(TGetTablesParams params) throws TException
public TListPrivilegesResult listSchemaPrivilegeStatus(TGetTablesParams params) throws TException
public TListPrivilegesResult listUserPrivilegeStatus(TGetTablesParams params) throws TException
public TDescribeTableResult describeTable(TDescribeTableParams params) throws TExceptionpublic
TDescribeTablesResult describeTables(TDescribeTablesParams params) throws TException
public TFetchSchemaTableDataResult fetchSchemaTableData(TFetchSchemaTableDataRequest request) throws TException
public TInitExternalCtlMetaResult initExternalCtlMeta(TInitExternalCtlMetaRequest request) throws TException
public TQueryStatsResult getQueryStats(TGetQueryStatsRequest request) throws TException
public TGetTabletReplicaInfosResult getTabletReplicaInfos(TGetTabletReplicaInfosRequest request)
public TStatus updateStatsCache(TUpdateFollowerStatsCacheRequest request) throws TException


public TShowVariableResult showVariables(TShowVariableRequest params) throws TException
public TMasterOpResult forward(TMasterOpRequest params) throws TException
public TMySqlLoadAcquireTokenResult acquireToken() throws TException
public TCheckAuthResult checkAuth(TCheckAuthRequest request) throws TException


public TFeResult updateExportTaskStatus(TUpdateExportTaskStatusRequest request) throws TException
public TReportExecStatusResult reportExecStatus(TReportExecStatusParams params) throws TException
public TMasterResult finishTask(TFinishTaskRequest request) throws TException
public TMasterResult report(TReportRequest request) throws TException
public TStreamLoadPutResult streamLoadPut(TStreamLoadPutRequest request)
public TStreamLoadMultiTablePutResult streamLoadMultiTablePut(TStreamLoadPutRequest request)


public TLoadTxnBeginResult loadTxnBegin(TLoadTxnBeginRequest request) throws TException
public TBeginTxnResult beginTxn(TBeginTxnRequest request) throws TException
public TLoadTxnCommitResult loadTxnPreCommit(TLoadTxnCommitRequest request) throws TException
public TLoadTxn2PCResult loadTxn2PC(TLoadTxn2PCRequest request) throws TException
public TLoadTxnCommitResult loadTxnCommit(TLoadTxnCommitRequest request) throws TException
public TCommitTxnResult commitTxn(TCommitTxnRequest request) throws TException
public TLoadTxnRollbackResult loadTxnRollback(TLoadTxnRollbackRequest request) throws TException
public TRollbackTxnResult rollbackTxn(TRollbackTxnRequest request) throws TException
public TWaitingTxnStatusResult waitingTxnStatus(TWaitingTxnStatusRequest request) throws TException
public TStatus snapshotLoaderReport(TSnapshotLoaderReportRequest request) throws TException
public TGetBinlogResult getBinlog(TGetBinlogRequest request) throws TException
public TGetSnapshotResult getSnapshot(TGetSnapshotRequest request) throws TException
public TRestoreSnapshotResult restoreSnapshot(TRestoreSnapshotRequest request) throws TException
public TGetBinlogLagResult getBinlogLag(TGetBinlogRequest request) throws TException


public TFrontendPingFrontendResult ping(TFrontendPingFrontendRequest request) throws TException
public TGetMasterTokenResult getMasterToken(TGetMasterTokenRequest request) throws TException文章来源地址https://www.toymoban.com/news/detail-724990.html

到了这里,关于Doris数据库FE——FeServer的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 聊聊分布式 SQL 数据库Doris(二)

    Doris中,Leader节点与非Leader节点和Observer节点之间的元数据高可用和一致性,是通过bdbje(全称:Oracle Berkeley DB Java Edition)的一致性和高可用实现的。 元数据与同步流程 元数据主要存储四类数据: 用户数据信息. 包括数据库, 表的schema, 分片信息等 各类作业信息. 如导入作业, clo

    2024年02月05日
    浏览(48)
  • 聊聊分布式 SQL 数据库Doris(一)

    MPP:Massively Parallel Processing, 即大规模并行处理. 一般用来指多个SQL数据库节点搭建的数据仓库系统. 执行查询的时候, 查询可以分散到多个SQL数据库节点上执行, 然后汇总返回给用户. Doris 作为一款开源的 MPP 架构 OLAP 高性能、实时的分析型数据库,能够运行在绝大多数主流的商

    2024年02月05日
    浏览(34)
  • 聊聊分布式 SQL 数据库Doris(九)

    优化器的作用是优化查询语句的执行效率,它通过评估不同的执行计划并选择最优的执行计划来实现这一目标。 CBO: 一种基于成本的优化器,它通过评估不同查询执行计划的成本来选择最优的执行计划。CBO会根据数据库系统定义的统计信息以及其他因素,对不同的执行计划进

    2024年02月05日
    浏览(36)
  • 聊聊分布式 SQL 数据库Doris(七)

    Doris的存储结构是类似LSM-Tree设计的,因此很多方面都是通用的,先阅读了解LSM相关的知识,再看Doris的底层存储与读取流程会清晰透彻很多,LSM基本知识如下: 原理:把各种数据先用log等形式组织在内存中(该数据结构称为MemTable,且有序);到达一定数据量后再批量merge写入磁

    2024年02月05日
    浏览(36)
  • 分布式数据库Apache Doris简易体验

    📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前服务于工业互联网 擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优

    2024年02月06日
    浏览(46)
  • 聊聊分布式 SQL 数据库Doris(四)

    FE层的架构都能在网上找到说明. 但BE层的架构模式、一致性保障、与FE层之间的请求逻辑,数据传输逻辑等,我个人暂时没有找到相应的博客说明这些的。当然这些是我个人在学习与使用Doris过程中,对内部交互逻辑与实现感兴趣才有这些疑问. 还好现在有GPT这类大模型,有了

    2024年02月05日
    浏览(39)
  • 聊聊分布式 SQL 数据库Doris(三)

    在 Doris 的存储引擎规则: 表的数据是以分区为单位存储的,不指定分区创建时,默认就一个分区. 用户数据首先被划分成若干个分区(Partition),划分的规则通常是按照用户指定的分区列进行范围划分,比如按时间划分。 在每个分区内,数据被进一步的按照Hash的方式分桶,分

    2024年02月05日
    浏览(40)
  • 聊聊分布式 SQL 数据库Doris(五)

    阅读 Doris SQL 原理解析,总结下Doris中SQL解析流程: 词法识别:解析原始SQL文本,拆分token 语法识别:将token转换成AST 单机逻辑查询计划:将AST经过一系列的优化(比如,谓词下推等)成查询计划,提高执行性能与效率。 分布式逻辑查询计划:根据分布式环境(数据分布信息

    2024年02月05日
    浏览(41)
  • 聊聊分布式 SQL 数据库Doris(六)

    此处的负载均衡指的是FE层的负载均衡. 当部署多个 FE 节点时,用户可以在多个 FE 之上部署负载均衡层来实现 Doris 的高可用。官方文档描述: 负载均衡 。 实现方式 实现方式有多种,如下列举。 开发者在应用层自己进行重试与负载均衡。 JDBC Connector 发现一个连接挂掉,就自

    2024年02月05日
    浏览(38)
  • 分布式数据库Apache Doris HA集群部署

    📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前服务于工业互联网 擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包