数据库元数据设计的维度和分层设计

对于元数据体系的建设思考 , 目前的设计是基于基础数据配置的管理 , 包括多个元数据维度的管理 , 在此基础上需要梳理基于系统场景的元数据设计 , 覆盖如备份恢复 , 监控报警 , 实例部署等层面的元数据管理信息 , 通过运维任务提炼得到系统流程;然后基于业务需求来梳理相关的业务场景的元数据相关设计 , 如资源申请 , 权限申请等 , 逐步梳理出主干业务流程 , 其中每个层之间都是相对隔离的 , 每个层都需要开放相关的API,在业务层不能直接暴露ORM层的相关操作 。
数据库元数据设计的维度和分层设计
文章图片
我们在此描述的主要是元数据的核心设计部分 。
元数据维度可以按照业务维度和系统维度来综合考虑 , 其中业务维度相对简单 , 而系统维度结构和层次要复杂一些 , 但是业务维度的信息是基于系统维度的设计 , 如对于实例的概念 , 对于业务来说 , 实例 , 集群在业务中都是广义的实例范畴 , 所以接下来会按照系统维度的设计为主 。
数据库元数据设计的维度和分层设计
文章图片
数据库元数据设计的维度和分层设计】接口层:业务访问维度 , 基于app_code,对外统一体现为实例 , 如单实例 , 主从 , 集群等 , 都是以实例的角色出现 , 不显示内部的数据信息(如不显示数据分片节点) , 接口层数据源自代理层 , 接口层的数据为只读模式 , 数据可刷新
代理层:代理层是设计中逻辑关系最为关键的一层 , 承上启下 , 其中单实例在代理层需要体现service_name,基于MHA的环境需要体现Consul或VIP的service_name,如果是集群 , 则需要在其中体现中间件和数据分片;如果是分布式集群 , 仅显示对外服务层(如TiDB中显示Server层 , 如果有多个Server,则显示多个 。
拓扑层:是逻辑关系最复杂的一层 , 需要支持多种拓扑结构 , 比如一主一从 , 一主多从 , 级联复制 , 双主复制等 , 其中单实例是一种特殊的复制拓扑 , 也需要体现 , 此外还需要支持分布式模型 , 在分布式模型中 , 多个节点是相对独立的角色 , 无法体现多个节点间的映射 。
实例层:实例层是整体元数据的基座 , 以IP+端口来唯一标识 , 实例层按照计算存储分离的模式来考虑 , 不光包含数据库实例信息 , 还包括中间件的相关信息 , 实例层是连接数据库层的重要环节 。
主机层:主机层的信息相对独立 , 主要是主机层的基础信息 , 可以通过外部接口进行提取 , 并保持周期性刷新 。
实例和集群的关系
数据库实例是基础的服务单元 , 按照实例角色可以分为单实例 , 主库实例 , 从库实例和级联实例 。
集群类型分为高可用集群 , 分布式集群(分库分表) , 分布式集群(NewSQL体系)
高可用集群:多个主从实例 , 如一主一从或者一主多从
分布式集群(分库分表):多个数据库实例(通常一组主从实例为一个高可用集群)和少量数据库中间件(通常1~3个做负载均衡)
分布式集群(NewSQL体系):按照存储计算分离模式 , 有计算节点 , 存储节点和配置管理节点 , 基于分布式协议实现分布式存储管理
同时 , 集群维度和实例维度会有明显差异的运维管理流程 , 从长远来看 , 以集群形式交付和以实例形式交付是根据业务需求来共同决定 , 会长期共存 。
综上 , 集群和实例的含义有一些交叉 , 但是又有明显的区别 , 按照规范程度来说 , 实例应该尽可能以高可用集群的基础架构形式出现 , 同时按照数据存储水平扩展需要可重构成分布式集群(分库分表)架构 , 同时因为现状和使用的差异 , 会存在单实例 , 普通的主从等环境 。