SHOW COMPONENTS 查询支持展示 api server 信息

背景

OpenMLDB 0.5.0 实现了 SQL 语句 https://openmldb.ai/docs/zh/main/reference/sql/ddl/SHOW_COMPONENTS.html 用于展示集群下所有组件信息,但由于 api server 没有将自身信息统一更新到 zookeeper, 导致无法从 sdk 得到 api server 信息。

编程语言

C++

实现方案

实现方案是利用 zookeeper 保存 api server 的 meta 信息,nameserver 作为和 zookeeper 交互的主要对象,维护一组 api server 的缓存 list, nameserver 会定期查询 zk, 把新加入的 api server 加入缓存,并移除 inactive 的 api server ( cache + zk 信息)。
具体步骤分三部分讨论:

  1. api server
    a. 支持根据传入的 zookeeper 参数,初始化一个 zk_client, 并在初始化成功后往 zk 特定路径 root_path/apiservers/ 写入一个 node, 将自身的 endpoint 信息保存在节点内
  2. name server
    a. 维护一组所有 api server 的 cache 信息
    b. 建立一个定期任务,
    i. 从 apiserver 的 zk 路径 root_path/apiservers/ 定期查询节点列表,将新的 api server 加入 cache 列表
    ii. 对 cache 列表中 inactive 的 api server, 如果在指定时间间隔内无法恢复,删除该 cache 信息同时删除对应的 zk node
    c. 新增一个 RPC 接口,可供 nameserver client 查询所有的 api server 信息
  3. C++ sdk:利用步骤二中新增的 RPC 接口,实现方法 https://github.com/4paradigm/OpenMLDB/blob/af7a30760f354adfa07ae3b20b88adf4e164ffa6/src/sdk/sql_cluster_router.cc#L3597

    GitHub Issue

    https://github.com/4paradigm/OpenMLDB/issues/1416