Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

IoTDB 主要包括以下模块,分布式和单机均可由以下模块组合而成。

  • ConfigManager(分区管理器)分区管理引擎(ConfigManager)
    • 节点状态信息、管理数据分区表、元数据分区表、扩缩容、负载均衡
  • PartitionTable(分区信息表)分区表存储引擎(PartitionTable)
    • 元数据分区表、数据分区表
  • StorageEngine(存储引擎)
    • 单例结构,内部管理多个 VSG。TsFile 数据文件、数据合并、数据同步
  • VSG(虚拟存储组,对应单机的 VirtualStorageGroupProsessor)
    • 管理一部分设备的数据
  • SchemaEngine(元数据管理引擎)
    • 单例结构,内部管理多个 MManager
  • MManager
    • 管理一部分元数据,包括设备、时间序列的增、删、查
  • Protocal(网络协议层)
    • 包含 RPC、RestAPI、MQTT 等多种协议的实现,将各种网络协议传来的请求转化为统一的数据处理格式
  • ServiceProvider(请求处理层)
    • 接收统一格式的数据处理请求,并执行接收统一格式的数据处理请求,管理线程的并发模型。管理权限。
  • 客户端请求处理模块(ClientRequestHandler)
    • 管理读写请求的序列化反序列化,管理线程的并发模型。管理权限。
  • 集群请求处理模块(ClusterRequestHandler)
    • 处理 DataNode 发来的读写和管理请求。
  • Planner(执行计划生成器)
       执行计划生成器(Planner)
      • SQL 解析器、查询计划生成、查询优化
    • QueryExecutor(查询执行器)
      • 原始数据查询、聚合查询等
    • Coordinator(协调器)协调者(Coordinator)
      • 接收执行计划,并判断此计划是本地执行还是远端执行。对于写入计划,交给共识模块进行多副本写入。对于查询计划,负责执行计划的拆分、分发读写请求、合并结果集。
    • Consensus(共识层)共识模块(Consensus)
      • 数据复制,根据一致性级别调度读写请求到对应副本管理多个数据副本组,根据一致性级别调度读写请求到对应副本


    单机模块

    • 网络协议层
    • 请求处理层
    • 执行计划生成器
    • 查询引擎
    • 存储引擎
    • 元数据管理引擎
    • 客户端请求处理模块

    分布式模块

    • ConfigNode
      • 网络协议层
      • 请求处理层集群请求处理模块
      • 分区管理引擎
      • 共识模块共识层
      • 分区表存储引擎分区信息表
    • DataNode
      • 网络协议层
      • 客户端请求处理模块请求处理层
      • 执行计划生成器
      • 协调者协调器
      • 共识模块
      • 查询引擎
      • 存储引擎
      • 元数据管理引擎




    集群模块分布示例

    ...

    每个存储组对应 集群总核数/副本数个 VSG 共识组,并且对应 M 个 MManager 共识组




    代码修改


    开发分支:new_cluster

    单机模块转化为分布式模块(server 模块 → DataNode 模块)

    存储引擎的适配

    去掉 StorageGroupManager,将 VirtualStorageGroupProsessor 交给 StorageEngine 管理

    StorageEngine(单机与分布式共用此结构):管理 Map<StringID, VSGProcessor>

    • 单机中通过 StorageName 和 VirtualStorageGroupProcessor 计算出 StringID。
    • 分布式中根据 DeviceId 从 ConfigNode 查询到对应的 VSGID(StringID),发给 DataNode,通过 StorageEngine 获取对应的 VSG。


    元数据管理引擎的适配

    引入 SchemaEngine 类,管理多个 MManager,数据结构 Map<StringID, MManager>

    • 单机:每个存储组对应一个 MManager
    • 分布式:根据 ConfigNode 查询到 MManager 的 RaftID(StringID),发给 DataNode,通过 SchemaEngine 获取对应的 MManager 。


    请求处理层的适配(当前 master 代码已经符合以下设计)

    Protocol:不区分单机与分布式,共用一套实现

    ServiceProvider:

    • 单机:实现 StandAlongServiceProvider,将请求(PhysicalPlan)发送给 PlanExecutor(QueryExecutor)执行
    • 分布式:实现 ClusterServiceProvider,将请求(PhysicalPlan)发送给 Coordinator 执行,Coordinator 再与 ConfigNode 和其他 DataNode 交互进行读写。


    新增包:Coordinator


    新增 ConfigNode 模块


    新增包:ConfigManager、PartitionTable


    新增 Consensor 模块:被 server 模块和 ConfigNode 模块依赖




    ConfigNode


    功能:分区表管理者维护节点状态信息、数据分区表、元数据分区表,同时负责集群扩缩容和负载均衡。

    ...