今天将Mars 数据库下一个阶段的,分布式版本的整体结构考虑了一下,具体先见下图:
1. ManagerNode 负责集群的多台机器间管理。
1.1 提供 API 服务:消费数据服务,驱动接口API服务
1.2 负责 DataNodeGroup 的管理
提供变量和DataNodeGroup间的映射关系服务
1.2.1 提供DataNodeGroup 内Primary DataNode获取服务
1.2.2 DataNodeGroup 内 API 访问接口服务。
1.3 提供备份磁盘阵列信息服务
1.4 可以多台ManagerNode,多台ManagerNode间自助进行数据同步
1.4.1 多个ManagerNode间,不存在主备,均对外提供服务。
2. DataNodeGroup 一组数据库数据节点构成的逻辑集合。
2.1 DataNodeGroup是一个逻辑概念,标识一组DataNode
2.2 DataNodeGroup 内的节点,处理相同的变量,数据节点是冗余关系,相互备份。
2.3 DataNodeGroup 有一个ID,变量按照DataNodeGroup的ID的顺序,以及每个DataNodeGroup支持的变量的个数,分配到相应的DataNodeGroup内进行处理。由于变量的历史存储是按照变量的ID进行存储,所有与该变量哪个DataNodeGroup中进行处理没有关系。故可以对已经运行后的系统,进行后期调整变量的分布情况。
2.4 客户端在进行数据的采集的时候,首先根据变量的ID,快速定位到DataNodeGroup,然后从该DataNodeGroup内选择一个DataNode进行实时、历史数据服务。2) 备机节点提供实时、非热点历史数据查询服务 3) 主机提供实时、热点(24小时内的数据)历史数据查询。
2.5 数据库驱动进行数据采集的流程。1) 根据变量的ID快速定位到DataNodeGroup,2)获取该DataNodeGroup内的Primary DataNode 3)通过Driver API 设置变量的实时值 4)Primary DataNode 按照DataNode 的ID进行排序, 将收集到的数据同步到ID需要最小的那个DataNode,5)该DataNode 再次根据ID排序的结果,将数据同步到下个ID最小的DataNode 6)重复5的步骤,直到所有备机同步完成。
2.6 DataNodeGroup 内部多个DataNode 间决策出Pramiry 的逻辑。决策执行时机:当首次启动、或Primary DataNode 故障的时候或手动切换的时候。 根据DataNode的ID,按照从小到大取ID最小的可用的DataNode用作Primary DataNode。
3. 模块说明
3.1 DataSyncServer 用于多个ManagerNode 间的数据同步
3.2 Tag-NodeMapManager 变量所在数据节点映射服务。
3.3 RealDataTransformService 实时数据转发服务,将从驱动接收到的数据直接进行转发。
转发过程如下:
1) Primary DataNode 转发给ID最小的DataNode
2) Id最小的DataNode 转发给ID次小的DataNode
3) 依次类推