前沿分享|阿里云数据库资深技术专家 姚奕玮:AnalyticDB MySQL离在线一体化技术揭秘

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 本篇内容为2021云栖大会-云原生数据仓库AnalyticDB技术与实践峰会分论坛中,阿里云数据库资深技术专家 姚奕玮关于“AnalyticDB MySQL离在线一体化技术揭秘”的分享。

更多前沿分享,点击云栖大会视频回放链接即可获取。


a6305bc2bf2f4e2c85fd4bf59a7746d7.jpeg


本篇内容将通过三个部分来介绍AnalyticDB MySQL离在线一体化技术。


一、传统大数据架构面临的问题和挑战

二、云原生数据仓库的架构与弹性

三、云原生数据仓库诊断和运维

 

2.png


一、传统大数据架构面临的问题和挑战


3.png


传统大数据架构面临的挑战和问题主要有:第一,数据散乱、不一致,没有一套统一的系统对这些数据进行分析。第二,分析不实时,一般会在夜间12点后对数据进行ETL清洗和转换,数据直到第二天的早上才能被查询到,数据时效性差。第三,系统复杂,为了解决数据时效性差的问题,一般的做法是在批处理上又引入了流式计算的引擎,形成著名的lambda架构,让整套系统变得越来越复杂。第四,高学习成本。专业的研发人员是非常少的,导致他们的工资非常高,所以要维护这一套系统的成本也非常高。


4.png


二、云原生数据仓库的架构与弹性


为了解决以上问题,我们构建这套离在线一体的架构。我们的愿景是:让用户会用数据库就会用大数据。第一,是我们是高度兼容MySQL,我们对MySQL的兼容超过了99%。AnalyticDB MySQL是一个云原生的架构,并且是存储计算分离的,存储计算可以分别扩缩容。我们用一套存储系统支持了实时写入以及多维的分析,并且通过智能索引来支持任意维度的分析。除此之外,我们具备例如审计、自建账号等完备的企业级的能力以及整套的备份还原能力。你如果误删了数据,AnalyticDB可以把数据闪回到你想要的时间点上。最后,我们的融合的计算引擎在同一套架构里面同时支持了离线和在线、结构化和非结构化数据的查询。


5.png


云原生数据仓库AnalyticDB的整个架构分为三层,最上面的是接入层,它负责生成一个执行计划,并且我们的优化器会优化这个执行计划、产生最终最优的物理计划、切分计划并且下发到计算层进行执行。整个数据的存储,我们是分为两级分区。一级分区,把数据打散在各个分片上面,保证了整个系统的水平扩展能力。第二部分提供了用户自定义的二级分区。你可以按照时间来分区,比如按照天或者小时来进行分区。我们的计算引擎也会自动根据这些分区来做分区裁剪。整个存储引擎支持强一致的实时增删改,你可以高并发的写入这些数据,并且数据写入后实时可见。与此同时,我们的计算引擎还支持混合负载。


6.png


如果用户需要一个离在线一体化的系统的话,需要哪些功能?第一个,你需要有支持多维分析以及ETL的能力。同时,必须支持数据的明细查询和检索。最后,你还要支持实时的高吞吐的查询和写入。这三个需求的交集就是AnalyticDB想要做到的部分。我们通过支持混合负载的融合计算引擎来做到高性能的查询;我们通过行列混存以及深度优化的写入方式来达到高并发以及高吞吐的写入;然后我们通过智能索引来做到明细的查询以及数据内文本的检索。


7.png


接下来看一看我们具体是怎么做的。首先是写入部分,离在线一体化的写入部分有两个需求。第一,高并发的数据流式地写入。第二,对于已经有的存量数据,能够高吞吐的把它导入到AnalyticDB里边。左边的部分,它是高并发的,整个流程当中,我们实现了数据的编码和传输的各种优化,使得数据在整个过程中的流转是零拷贝的,并且通过shard级并行和shard内部的表级并行做到了高并发。通过这套架构我们实现了千万级每秒的数据写入。右边的部分是高吞吐写入的架构。我们通过源头向量化读数据源、计算引擎向量化直接写入到存储来做到高吞吐的写入。


8.png


这部分讲的是AnalyticDB提供的高性价比。如果用户想把数据全部存在AnalyticDB上面的话,肯定会有冷存数据和热存数据。比如说用户想存三年的数据,但是有可能你只对最近一个星期的数据有热存的要求。因为最近一个星期的数据需要经常查,剩下的数据,用户希望低成本的把它存在AnalyticDB上,那就会放在冷存上面。所以我们提供了三种类型的表,一种是全热的表,数据全部存在热存。一种是全冷的表,数据全部存在冷存。还有一种是冷热混合,也就是部分数据可以存在热存里,剩下的数据存在冷存里。


9.png


接下来,看一下我们明细查询。明细查询利用了AnalyticDB的智能索引能力。我们对于不同的数据类型有不同的索引。我们通过CBO来估算索引筛选率的高低,来决定是否使用索引。AnalyticDB根据不同的过滤条件使用不同的索引,最后渐进地多路归并返回查询结果的行号。我们内部的数据通过行列混存的方式进行存储,并且通过meta里面存储的粗糙集来进一步过滤数据。我们还用了字典编码来压缩字符串类型的数据。


10.png


我们在一套计算系统里实现了离线和在线的融合。对于在线的查询场景,用户希望它的查询能够尽量的快。我们可以做到几十毫秒甚至几毫秒的分析型的查询结果返回。我们通过调起所有的stage,并且算子流式地、不落盘地处理数据来达到极短的延时。右边的是离线的场景,延时并不是第一优先级。用户希望离线场景查询能够在固定的时间内稳定地跑完。


11.png


ETL类型查询有可能会跑个几天,这时候我们采取另一种batch的执行方式,整个过程非常稳定。数据在stage间的shuffle都会落盘。我们对Coordinator和Executor节点的宕机都做了failover的支持,同时我们通过自适应的分批调度来实现子计划的规模化调度。在整个计算的过程当中,我们通过Codegen减少虚函数的开销、减少数据物化到内存,从而进一步优化我们的查询。


12.png


Adaptive Execution解决的问题是,优化器估的再准,总是有误差的。有可能最终生成的计划和我想要生成的最优的计划是不一样的。那我们就需要在计划执行的过程当中去自适应地调整这个计划。我们实现了基于数据中间结果的自适应分区和基于数据结果的自适应计划,起到了runtime矫正计划的作用。


13.png


说完了计算和存储,再说一下优化器。我们实现了整套智能的优化。优化器分为两个部分,第一个部分是底层统计信息的采集部分。我们会根据查询条件,自动在某些列上采集统计信息。第二,我们会在规定的时间内通过Cascades的框架搜索出最优的执行计划,我们用一套优化器支持了整套离在线的查询。并且我们的优化器,不仅对接了AnalyticDB内部的数据源,还支持了外部的例如存储在OSS、HDFS上的数据源。做到了湖仓一体的查询优化。


14.png


除了上面提及的一些性能的优化之外,我们还做了很多其他的性能优化:比如源头向量化读取;向量化算法优化;自动物化视图的改写;基于代价的最大执行子树复用等等。


15.png


AnalyticDB是支持多维的弹性的,计算支持从1个节点到5000节点,ETL+在线分析按需动态扩展。存储的弹性分为两个维度:存储的容量支持从GB到100PB;存储节点的QPS支持从1到百万级。


16.png

 

来看一下我们为什么要做弹性的功能。这是我们AnalyticDB在去年的某一周的所有的查询。我们对它进行了分析。我们发现只有万分之五的查询等待超过了1秒。但是通过另一个维度从实例级别来看,反而有大约有10%的查询超过1秒或者5秒的等待。这说明这万分之五的查询分散在不同的实例上面。说明业务有很多场景,它的查询量,在非常短的时间内会暂时超过它的预估或者期望值,造成查询排队。这时候弹性就能很好的解决这个问题。


17.png


AnalyticDB提供了三种弹性能力,第一种是分时弹性。比如你知道下午4点到8点会有一个大促活动。那4点之前,我们会把这些计算节点帮用户给弹出来。第二个是租户隔离的能力,假如两个部门有不同的查询在同时跑,A部门的查询并不会影响B部门的查询。第三个是按需弹性。这个主要为了处理不可预期的流量,我们可以按需地弹出用户所想要的节点来保证高优先级业务的SLA。


18.png


我们的分时和按需弹性是怎么做的呢?我们自己维护了一个资源池,然后在池子上写了一套资源管理器。当用户有弹性需要时,我们会从这个池子里面取出节点,加到用户的AnalyticDB里。当他用完时,我们会自动把这个节点归还回资源池里。整个过程是非常快的,我们可以在分钟级别完成这个操作。


19.png


AnalyticDB提供了资源组隔离的能力。不同的资源组的资源在物理上是隔离的。比如A部门的测试查询并不会影响B部门的营销查询。

 

三、云原生数据仓库诊断和运维


20.png


一个优秀的数据仓库,不仅仅内核要做的好,我们还要给用户智能诊断的能力。能够让用户知道自己的系统的问题出在哪里。所以我们做了一整套的智能诊断系统。这套智能诊断系统有很多技术组件,功能组件,这些都深度结合到我们的内核里。当你有新的查询来的时候,我们会根据聚类算法来检测是否有异常出现。如果有异常的话,我们会对接智能告警系统,通过钉钉、电话或者邮件给你发送消息。


21.png


我们的智能优化提供了自动分析的能力;提供了数据仓库建模建议,根据系统的实际运行情况,我们会给出具体的建议来修改数据分布或者分区,让系统更加平滑地运行;同时,我们提供了智能巡检告警的能力。


22.png

 

从AnalyticDB离在线一体化架构对于用户提供的价值来说,第一,我们提供了平台的统一:用户无需自建一套复杂架构来做离在线一体化;第二,相比于自建的系统,我们在性能上有了3到10倍的提升。并且我们整套架构是实时化的。最后,我们具备良好的兼容性和生态,方便用户自建集群迁移到AnalyticDB上。

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
6天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
33 15
|
1月前
|
负载均衡 网络协议 数据库
选择适合自己的数据库多实例负载均衡技术
【10月更文挑战第23天】选择适合自己的数据库多实例负载均衡技术需要全面考虑多种因素。通过深入的分析和评估,结合自身的实际情况,能够做出明智的决策,为数据库系统的高效运行提供有力保障。
115 61
|
1月前
|
SQL DataWorks 关系型数据库
阿里云 DataWorks 正式支持 SelectDB & Apache Doris 数据源,实现 MySQL 整库实时同步
阿里云数据库 SelectDB 版是阿里云与飞轮科技联合基于 Apache Doris 内核打造的现代化数据仓库,支持大规模实时数据上的极速查询分析。通过实时、统一、弹性、开放的核心能力,能够为企业提供高性价比、简单易用、安全稳定、低成本的实时大数据分析支持。SelectDB 具备世界领先的实时分析能力,能够实现秒级的数据实时导入与同步,在宽表、复杂多表关联、高并发点查等不同场景下,提供超越一众国际知名的同类产品的优秀性能,多次登顶 ClickBench 全球数据库分析性能排行榜。
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
55 3
|
1月前
|
缓存 负载均衡 监控
数据库多实例的负载均衡技术深入
【10月更文挑战第23天】数据库多实例负载均衡技术是确保数据库系统高效运行的重要手段。通过合理选择负载均衡策略、实时监控实例状态、不断优化调整,能够实现资源的最优分配和系统性能的提升。在实际应用中,需要根据具体情况灵活运用各种负载均衡技术,并结合其他相关技术,以满足不断变化的业务需求。
|
1月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
41 1
|
4天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
15 3
|
4天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
20 3
|
4天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
26 2
|
17天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
123 15

相关产品

  • 云原生数据仓库AnalyticDB MySQL版
  • 推荐镜像

    更多