元数据驱动架构的官方数据空间设计(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 元数据驱动架构的官方数据空间设计(上)




淘宝开放平台是阿里与外部生态互联互通的重要开放途径,通过开放的产品技术把阿里经济体一系列基础服务,像水、电、煤一样输送给我们的商家、开发者、社区媒体以及其他合作伙伴,推动行业的定制、创新、进化, 并最终促成新商业文明生态圈。开放业务场景常常跟随内部业务的变化,在数据层面上会频繁发生变更。传统数据库在成本、易用性方面无法很好满足生态异变场景的需求。数据空间的探索,是为了在生态场景中支撑业务快速增长的基础上,提供一个可存储海量数据、单表可自动扩容、字段可无限扩充、查询效率不低于 MySQL 数据库的产品。如何以一套统一的数据架构,支持不同用户按需自定义数据模型,保证数据定义层面的扩展和变更不会影响自身和其他租户业务功能的可用性,将数据和能力集成在平台自身。为此我们打造官方弹性存储空间,在安全可控的情况下沉淀数据支撑更多业务场景标准化开放集成。

文为此系列第二篇文章,前一篇见——

第一篇:开放网关架构演进

多租户数据模型


我们先站在巨人的肩膀上来看看业界有哪些通用的多租户存储模型。


数据空间采用类似Salesforce的大宽表模型设计,通过SAAS化的方式开放给开放业务使用。元数据对于平台而言,存储的是所有租户的数据。对于租户而言,每个租户/组织只能看到和定义按照自己租户OrgID隔离的它自己版本的元数据和数据, 而且只能执行自己租户OrgID所授权的行为,这样每个租户就拥有各自版本的SAAS方案。


 元数据驱动的多租户数据架构


数据空间通过业务场景&租户维度隔离每个租户下自己版本的元数据和数据,整个架构分为以下5个逻辑层次。

  1. 1 底层数据存储层存储了租户底层数据结构以及对底层数据的对象和字段定义信息,支持多种存储类型
  2. 2 存储引擎路由层根据业务场景及租户定制,路由到不同的存储产品中执行
  3. 3 元数据层元数据模型主要由对象字段以及底层数据表组成。元数据执行引擎是将业务逻辑模型映射到统一的元数据存储模型最核心的能力,我们常说的ORM功能也是其核心功能,但比其复杂的多
  4. 4 平台接口层:对外提供数据空间SDK标准MySQL协议两种调用方式。数据空间SDK中包含对象模型的创建、简化版的SQL执行等操作。标准MySQL协议通过自建MySQL代理层对外提供数据库服务
  5. 5 业务场景层:数据空间对外服务的特色业务场景



 元数据存储模型


数据空间整个存储采用了与业务无关的宽表设计,可扩展性非常好。底层数据使用动态列存储,加以额外的元数据描述信息。数据模型设计包含以下几部分:

  1. 1 对象元数据表:存放用户自定义和定制化的对象
  2. 2 字段元数据表:对象下字段的定义,包括字段类型、字段映射在真实存储中的位置、是否需要索引、字段校验规则等
  3. 3 数据表:存放用户真实业务数据,由灵活可扩展的弹性列组成,通过对象和字段的元数据定义映射到真实的存储


与Salesforces不同是,这里并没有维护索引表,索引的维护非常复杂,针对ADB有全列索引,并不需要建索引。针对关系型数据库,不使用共享宽表模式的情况下,DDL独立建索引会更为灵活。



基于这个设计可以实现数据空间的弹性列无感DDL,当增加一个数据列时,仅需要选取Data表中相同值类型的数据列,加入到逻辑表字段模型中即可,无需进行显式DDL。

▐  元数据执行引擎


元数据执行引擎由元数据映射、构建语句、组装SQL、执行语句、反元数据映射五个部分组成。用户业务SQL经过引擎执行后映射成与业务无关的元数据存储模型SQL,路由到相应的逻辑租户数据库执行,执行成功后再反元数据映射成用户真实的对象数据。通过元数据执行引擎,就可以实现在统一的多租户元数据存储模型上承载多租户自定义的数据需求。


下面是一个简单的例子。

通用存储协议支持


为了方便用户使用习惯,数据空间除了自身提供SDK调用方式外,还需要适配标准MySQL协议。

对外接口

说明

优点

缺点

数据空间SDK

MySQL语句简版描述

可以通过代码实现数据访问,适合java编程习惯

  1. 可扩展性差
  2. 复杂SQL描述难
  3. 类型转换复杂
  4. 通用型不强,对接业界查询引擎困难

MySQL协议

提供MySQL代理,对外适配MySQL协议

通用性强,通过数据库代理可做治理和管控

技术成本较大,需要平台自建代理层,代理稳定性需要保障


▐  MySQL Proxy


在抽象的多租户元数据模型下,协议层开发的技术成本以及难度还是非常大的。数据空间选用开源中间件Sharing-Proxy作为MySQL代理对外提供数据库服务,隐藏底层元数据存储模型,用户不需要感知底层数据存储。Sharding-Proxy的定位是透明化的数据库代理,它封装了数据库二进制协议,用于完成对异构语言的支持,我们先来看下它原始的架构图。



Frontend层实现了MySQL协议的编解码。原始Sharing-Proxy 得到解码的MySQL命令后,开始调用Sharding-Core对SQL进行解析、路由、改写、结果归并等核心功能,在Backend层与真实数据库的交互。


数据空间由于有一套自定义的元数据模型,解耦了用户逻辑模型和底层物理模型,需要对Sharing-Proxy进行改造。

  1. Frontend层:MySQL协议层编码/解码保持不变
  2. Backend层:与真实数据库的交互并不需要,根据存储路由,存储到相应的物理库即可
  3. Core-module层:得到解码的SQL命令后,需要解析语法树,对元数据进行映射,调用执行引擎执行


改造中最核心的部分在于Core Module层。在Sharding-Proxy的线程模型中,Frontend层使用IO多路复用处理客户端请求,后端使用HiKari连接池同步请求数据库,User Executor Group用于执行MySQL命令。



核心层(Core-module)的执行过程委托给CommandExecuteEngine完成,流程如下:


Sharding-Proxy获取SQL命令执行器的流程保持不变,我们主要对解析Statement语句SQL解析执行引擎进行修改。


▐  SQL解析执行引擎


在数据空间中,我们把SQL执行的整体结构划分为以下几部分。

  1. 1 解析器。ShardingSphere采用完全自研的antlr进行解析,通过测试发现非常耗时,数据空间改成Druid解析后性能提升5倍
  2. 2 提取器。这里需要将AST节点进行深入解析,封装成数据空间简版SDK
  3. 3 构建器。这里指构建查询请求包需要的字段定义信息,包含字段名、表名、字段类型、字段长度等基础参数,由元数据获取。
  4. 4 执行器。交由数据空间元数据执行引擎执行



 引擎升级


在上述解析执行过程中,SQL协议层需要将SQL解析成数据空间规定的协议格式再执行,存在着以下问题。

  1. 1 可扩展性差。每次适配新的SQL语句都需要修改提取器和底层元数据执行引擎,改造成本较大
  2. 2 复杂SQL描述难。数据空间规定的协议格式对于简单SQL描述起来比较容易,但对于子查询、多表查询等复杂类SQL描述起来较为困难
  3. 3 类型转换复杂。在执行参数准备以及结果返回参数过程中,都需要进行类型的转换,负担还是比较大的。对于MySQL支持的标准查询语法,转换逻辑需要考虑的非常全面


基于以上考量,为了保证代理层的稳定性,对上述SQL解析执行引擎进行了整体升级改造。解析、构建过程不变,增加了改写引擎,并将改写后的SQL语句经过执行引擎处理。



SQL改写在元数据存储模型下需要将用户真实字段改写为底层真实存储的弹性列,详细改写规则如下。


  • 标识符改写


由于元数据底层真实存储其实是弹性列,业务侧表名和字段名都是逻辑上的概念,需要改写的标识符包括表名称、字段名称等。表名称改写是指解析AST,获取逻辑表名,并找到元数据定义,将其改写为真实表的过程。字段名称改写是指解析抽象语法树,将所有的字段列改写为真实字段列的过程。


  • 补列


在多租户数据架构下,租户之间数据依赖业务类型&租户ID进行逻辑隔离,需要补列的唯一情况就是所有语句都需要增加租户查询条件(租户+业务类型+表模型)。

 标准协议层适配


对于协议层SQL需要进行单独适配。包括:

  1. information_schema库
  2. MySQL系统变量
  3. set/commit语句等


比如,对于information_schema元数据库中的库表和字段元数据信息,我们需要查询元数据定义信息,并封装返回结果包返回,这里就不一一赘述。


更多精彩内容,欢迎观看:

元数据驱动架构的官方数据空间设计(下):

https://developer.aliyun.com/article/1263243?groupCode=taobaotech

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
机器学习/深度学习 数据采集 人工智能
揭秘!47页文档拆解苹果智能,从架构、数据到训练和优化
【8月更文挑战第23天】苹果公司发布了一份47页的研究文档,深入解析了其在智能基础语言模型领域的探索与突破。文档揭示了苹果在此领域的雄厚实力,并分享了其独特的混合架构设计,该设计融合了Transformer与RNN的优势,显著提高了模型处理序列数据的效能与表现力。然而,这种架构也带来了诸如权重平衡与资源消耗等挑战。苹果利用海量、多样的高质量数据集训练模型,但确保数据质量及处理噪声仍需克服。此外,苹果采取了自监督与无监督学习相结合的高效训练策略,以增强模型的泛化与稳健性,但仍需解决预训练任务选择及超参数调优等问题。
135 66
|
19天前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
22 5
|
2月前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
2月前
|
存储 监控 安全
大数据架构设计原则:构建高效、可扩展与安全的数据生态系统
【8月更文挑战第23天】大数据架构设计是一个复杂而系统的工程,需要综合考虑业务需求、技术选型、安全合规等多个方面。遵循上述设计原则,可以帮助企业构建出既高效又安全的大数据生态系统,为业务创新和决策支持提供强有力的支撑。随着技术的不断发展和业务需求的不断变化,持续优化和调整大数据架构也将成为一项持续的工作。
|
2月前
|
机器学习/深度学习 自然语言处理 数据处理
|
2月前
|
Java 数据库连接 微服务
揭秘微服务架构下的数据魔方:Hibernate如何玩转分布式持久化,实现秒级响应的秘密武器?
【8月更文挑战第31天】微服务架构通过将系统拆分成独立服务,提升了可维护性和扩展性,但也带来了数据一致性和事务管理等挑战。Hibernate 作为强大的 ORM 工具,在微服务中发挥关键作用,通过二级缓存和分布式事务支持,简化了对象关系映射,并提供了有效的持久化策略。其二级缓存机制减少数据库访问,提升性能;支持 JTA 保证跨服务事务一致性;乐观锁机制解决并发数据冲突。合理配置 Hibernate 可助力构建高效稳定的分布式系统。
48 0
|
2月前
|
消息中间件 Java RocketMQ
微服务架构师的福音:深度解析Spring Cloud RocketMQ,打造高可靠消息驱动系统的不二之选!
【8月更文挑战第29天】Spring Cloud RocketMQ结合了Spring Cloud生态与RocketMQ消息中间件的优势,简化了RocketMQ在微服务中的集成,使开发者能更专注业务逻辑。通过配置依赖和连接信息,可轻松搭建消息生产和消费流程,支持消息过滤、转换及分布式事务等功能,确保微服务间解耦的同时,提升了系统的稳定性和效率。掌握其应用,有助于构建复杂分布式系统。
37 0
|
2月前
|
机器学习/深度学习 并行计算 算法
深度学习驱动的声音生成:FunAudioLLM的创新架构
【8月更文第28天】随着深度学习技术的发展,声音合成的质量得到了显著提升。本文将介绍 FunAudioLLM —— 一种基于深度学习的声音生成框架,旨在创造高质量、自然流畅的声音内容。我们将探讨 FunAudioLLM 的核心技术、训练流程及其实现细节,并提供一些示例代码。
26 0
|
2月前
|
存储 缓存 Java
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
Android项目架构设计问题之优化业务接口数据的加载效率如何解决
34 0
|
2月前
|
存储 安全 关系型数据库
"揭秘!如何设计数据库架构,让信息系统心脏强健无比?一场关于数据效率、安全与可扩展性的深度探索"
【8月更文挑战第19天】数据库架构是信息系统的核心,关乎数据存储效率与安全及应用性能和扩展性。优秀设计需综合考量业务需求、数据模型选择、查询优化、事务处理、安全性和扩展性。首先,深刻理解业务需求,如电商系统需高效处理并增长商品、订单等数据。其次,基于需求选择合适的数据模型,如关系型或非关系型数据库。再者,优化查询性能与索引策略以平衡读写负载。同时,考虑事务处理和并发控制以保证数据一致性和完整性。最后,加强安全性措施和备份恢复策略以防数据风险。通过这些步骤,可以构建稳健高效的数据库架构,支持系统的稳定运行。
27 0