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