近日,华为云自研关系型数据库 Taurus 公开亮相。作为华为云自研的最新一代云原生分布式数据库,Taurus 完全兼容 MySQL 8.0,采用计算与存储分离、日志即数据的架构设计,支持 1 写 15 读,性能达到原生 MySQL 的 7 倍。
性能达到原生MySQL七倍,华为云Taurus技术解读 - InfoQwww.infoq.cn过去多年,数据库技术本质上并没有出现颠覆式发展。作为核心基础设施,数据库是一款用户粘性非常高的产品,一旦核心业务数据落定,企业轻易不会尝试更换,因此很长一段时间内,大众习惯于老牌 IT 厂商垄断数据库市场的状况。然而,云厂商涉足数据库领域的消息近年层出不穷,比如 AWS Aurora、阿里云 PolarDB 以及华为云 Taurus。
在互联网、移动和物联网等新场景之下,图片、音频、视频等非结构化数据开始出现爆炸性增长,传统数据库不堪重负,企业客户急切需要新的数据库产品。在云计算技术不断成熟的背景之下,云数据库开始崛起,并因为按需扩展、按需付费等特性获得大量中小企业及互联网客户的拥护。
从云厂商的入局也不难看出,现在做数据库的门槛并不像从前那么高,并不只有传统的数据库厂商可以做,单就这一领域的创业者也不少。在这种情况下,核心竞争力只可能从差异性发展而来,人人都在做且会做的东西很难形成核心竞争力。据此,华为云近日公开亮相的自研关系型数据库 Taurus 有什么不同?核心竞争力是什么?为什么性能足以达到原生 MySQL 的 7 倍?与云上 MySQL 相比,后者的不足之处有哪些?华为云进行了哪些修补?
云原生数据库技术趋势
传统的数据库体系结构已有 30 多年的历史,专为本地部署,本地存储和单机数据库实例而设计和优化,此后很长一段时间内,该体系结构未针对公有云环境进行优化。在公有云环境下,计算和存储通过网络分离以支持多租户数据库实例并 scale out 向两端扩展;并不要求单个节点的高可靠性。
举例来说,假设一个本地数据库的每个数据库实例都有本地存储,为了支持高可用性,通常部署一个备实例并使用数据库内部复制机制将数据库日志(MySQL binlog)发送到备实例重建数据库副本。目前,大多数云厂商都采用类似机制来支持云数据库高可用性。但是,这种内部复制机制并没有利用云存储已经通过存储层复制提供的可靠性,这导致大量存储和带宽浪费。实际上,备数据库实例可以通过云存储与主实例共享数据,不仅可以节省磁盘空间和带宽,还可以为云数据库服务提供快速 RTO。
很明显,在将传统数据库迁移上云时,需要重新设计和优化数据库系统。过去几年,主要云供应商,比如 AWS 和阿里云,已经做了部分工作。预计未来几年,更多云和数据库供应商将遵循这一趋势,构建某种形式的云原生数据库技术。此外,Gartner 预测,到 2019 年,90%的云数据库架构将支持计算和存储分离。
值得注意的是,除了基于云环境的数据库架构重新设计之外,这一领域还存在两大趋势:
- 在云原生数据库中利用新硬件:如新硬件和 RDMA。这些都是活跃的研究领域,然而除了充当缓存和计算机与存储之间的快速链接之外,到目前为止,我们还没有看到任何其他的突破性。
- 基于即时和历史收集的数据,使用 ML(机器学习)和统计技术来帮助管理和自我调整云数据库,包括但不限于数据库实例自动伸缩和参数设置和自动 调整,异常检测等。
云上 MySQL 的不足
当前,对于 RDS for MySQL,各大云厂商基本都采用主备高可用模式、主备间使用 Binlog 复制,该架构下每添加一个从库都需要全栈式资源,这导致了一些问题:
1、资源浪费
备库往往不承担流量;复制线程会消耗主库 / 从库计算资源,造成计算资源浪费;EVS 的 3 副本冗余机制下,N 个备库最大需要 3*(N+1) 个副本,造成存储资源浪费以及多种数据需要走存储网络进行刷盘,造成网络资源浪费等。
2、扩展性不佳
添加只读时需要拷贝数据,重放 binlog,对于大数据量情况下速度很慢,尤其是采用本地盘方案。主从复制延迟问题会让主备倒换受影响,难以保证 RTO。此外,采用物理备份、逻辑备份时备份恢复速度很慢, 1T 以上数据量都以小时计,使得数据库扩展性受限。
华为云 RDS 架构演进
华为云 Taurus 与 Amazon Aurora 数据库进化的方向是一致的,然而进化路径各有不同,这是由各自的数据库云服务实现方式不同所决定的。华为云 RDS MySQL 有如下几个版本,这些产品形态满足不同的用户业务场景,具有不同的特点,可以进行优势互补。
MySQL 单机版
MySQL 单机版采用数据库计算节点和存储节点分离的方式,利用云盘数据本身的可靠性和多副本的特性,同时也利用 ECS 云服务器虚拟化来提升标准化部署、版本和运维管理效率,能够满足低端用户不太注重高可用服务的业务场景。
MySQL 主备版
MySQL 高可用版则是针对企业级用户提供的高可用数据库版本,提供 99.95% 的 SLA 保障。采用 Active-Standby 高可用架构,主节点和备节点之间通过 MySQL Binlog 进行数据 Replication。当主节点发生故障,备节点接管服务。同时还支持最多 5 个只读节点,支持负载均衡的数据读写分离的访问方式。
MySQL 金融版
MySQL 金融版是针对金融行业等高端用户设计的高可用、高可靠云服务产品。一主两备三节点架构,可跨 AZ 部署,任意一台服务器宕机不影响业务可用性;基于 Paxos 协议,实现了分布式下数据的强一致性,拥有更加优异的故障恢复时间,满足数据容灾备份等业务场景的需求。
Taurus 的进化
华为云 RDS 架构演进
华为云 Taurus 与 Amazon Aurora 数据库进化的方向是一致的,然而进化路径各有不同,这是由各自的数据库云服务实现方式不同所决定的。华为云 RDS MySQL 有如下几个版本,这些产品形态满足不同的用户业务场景,具有不同的特点,可以进行优势互补。
MySQL 单机版
MySQL 单机版采用数据库计算节点和存储节点分离的方式,利用云盘数据本身的可靠性和多副本的特性,同时也利用 ECS 云服务器虚拟化来提升标准化部署、版本和运维管理效率,能够满足低端用户不太注重高可用服务的业务场景。
MySQL 主备版
MySQL 高可用版则是针对企业级用户提供的高可用数据库版本,提供 99.95% 的 SLA 保障。采用 Active-Standby 高可用架构,主节点和备节点之间通过 MySQL Binlog 进行数据 Replication。当主节点发生故障,备节点接管服务。同时还支持最多 5 个只读节点,支持负载均衡的数据读写分离的访问方式。
MySQL 金融版
MySQL 金融版是针对金融行业等高端用户设计的高可用、高可靠云服务产品。一主两备三节点架构,可跨 AZ 部署,任意一台服务器宕机不影响业务可用性;基于 Paxos 协议,实现了分布式下数据的强一致性,拥有更加优异的故障恢复时间,满足数据容灾备份等业务场景的需求。
Taurus 的进化
Taurus 采用计算与存储解耦的技术架构,同时可以最多支持 15 个只读节点。主节点和只读节点之间是 Active-Active 的 Failover 方式,计算节点资源得到充分利用,由于使用共享存储,进一步降低了用户使用成本。
Taurus 的设计思想有几个大的革新:
- 将部分计算能力卸载到存储节点
- 软硬件深度优化,充分利用 RDMA 网络、NVME SSD 等硬件优势
- 日志即数据,与传统 RDS for MySQL 相比,不再需要刷 page,所有更新操作都记录日志,不再需要 double write,减少了网络通信。
另外在 DB Server 设计上,完全拥抱开源生态,完全兼容 MySQL 8.0。
华为云 Taurus 和 Amazon Aurora 的一个共同设计哲学就是,先推出一写多读的版本,根据市场需求,适时推出多写版本,满足绝大多数 OLTP 应用场景和性能要求。
Taurus 架构设计原则:
- 采用华为下一代云存储(DFV)作为快速,可扩展,可靠和共享数据库存储。不复制存储层中的已有功能,例如,数据复制,跨 AZ 可靠性,数据清理。
- 单个数据库集群应该只需要一份足够可靠的数据库副本集。所有只读副本共享存储在云存储中,甚至跨 AZ,数据库层中没有逻辑复制。一写多读,没有独立的备用实例。主节点发生故障转移时,只读副本可以切换到接管主服务器。
- 记录为数据库。仅顺序写入以最小化 SSD 磨损(避免写入放大)
- 只有数据库日志通过网络从数据库计算机节点写入 DFV 存储层。没有页面检查点和刷新跨网络,没有双重写入。基于 DFV 存储层内的数据库日志重建数据面,以避免繁重的网络流量。
- 基于跨 DFV 存储节点的切片策略对数据库进行分区,以支持大型数据库卷。单个 DFV 存储节点管理来自不同数据库集群实例的多个分片,实现存储容量和处理能力的无限扩展。
Taurus 数据库关键技术点剖析
Taurus 架构
如图所示,Taurus 是一个分布式集群架构设计,采用计算与存储分离的设计理念,满足公有云计算环境下用户业务弹性扩展的刚性需求。数据库计算节点和存储节点之间采用高速网络互联,并通过 RDMA 协议进行数据传输,使得 I/O 性能不再成为瓶颈。
数据库节点采用和 MySQL 完全兼容的设计。主节点和只读节点之间采用 Active-Active 的 Failover 方式,提供 DB 的高可用服务。同时 ,DB Server 之间仅需同步 Redo log 相关的元数据信息。
- SQL Nodes
- 管理客户端连接、解析 SQL 请求,、分析执行计划并执行和管理事务隔离级别
- 一主多读
- 主库和只读松耦合
- 主库和只读通信少
- 快速 Failover
- 引入内核中的一些特性
- Query result cache
- Query plan cache
- Online DDL
SQL Replication
只读节点在本地 buffer pool 中维护数据页的多个版本
- 减少从存储的远端读取数据页
主库交互
- MVCC: 同步主库当前活跃事务列表
- 页失效: 接收主库页失效列表
高速网络下的 RDMA 协议
部署 RoCE RDMA 以减少网络延迟并增加带宽。在单个 AZ 中,Taurus 可以利用高速网络(RDMA)来获得更新和读取的低延迟存储 I/O,这对于低客户端连接方案非常有用。
存储抽象层 (SAL)
存储抽象层 (SAL) 是逻辑层,将数据存储和 SQL 前端、事务、查询执行等进行隔离。由一组容量和处理能力按需扩展的分片节点组成,SAL 将所有 SQL 节点需要的数据页按分片管理和横向扩展。随着数据库规模的增长,可用资源(存储、内存)随着分片创建按比例增长。数据处理本地化,数据密集型操作是在存储节点上按分片服务执行。
Taurus Storage
Taurus 存储基于华为云存储 DFV 持久层。DFV 持久层集群包括多个存储节点。每个存储节点包含多个 SSD 设备和适应 SSD 介质的 append 存储服务进程。 DFV 持久层为 SQL 节点提供存储接口。
Taurus 采用日志化方式处理 SQL 节点数据,即通常表述的“日志即数据”。数据组织采用面向 SSD 重新设计的 Append 模式,显著减少系统写放大,减少存储时延。同时,在 Append 模式下,数据回滚和回档变得非常快速。
Taurus 核心竞争力
成本更低
与传统 RDS for MySQL 相比,只有一份存储。添加只读节点时,只需添加计算节点,无需额外购买存储。只读节点越多,节省的存储成本越多。
扩展性、可靠性更高
- 横向扩展更快。Taurus 采用共享存储,只需添加计算节点,无论多大数据量,只需 5 分钟左右,并且支持 15 个只读.
- 纵向扩展更快。容器化部署,规格变更更快。
- 主从倒换时间更快。 消除了复制延迟,RTO 有保证。
- 数据库 Crash 恢复更快。
性能更强
软硬结合,基于硬件:Hi1822 卸载,NVMe SSD,RDMA,同时内核进行优化:去掉 double write,Query Cache/Plan Cache 优化,Innodb Lock Management 优化,Audit Plugin 效率优化,性能达到原生 MySQL 的 7 倍。
备份恢复更快
专为 Taurus 引擎定制的分布式存储系统,极大提升数据备份、恢复性能
- 强大的数据快照处理能力。AppendOnly vs. WriteInPlace,数据天然按多时间点多副本存储,快照秒级生成,支持海量快照。
- 任意时间点快速回滚。基于底层存储系统的多时间点特性,不需增量日志回放,可直接实现按时间点回滚。
- 并行高速备份、恢复。备份及恢复逻辑下沉到各存储节点,本地访问数据并直接与第三方存储系统交互,高并发高性能。
- 快速实例恢复。通过异步数据拷贝 + 按需实时数据加载机制, Taurus 实例可在数分钟内达到完整功能可用。
总结
通过以上介绍不难发现,Taurus 的共享存储架构将数据持久化放入新一代存储中,充分保障数据强一致性和 0 丢失;采用软硬件结合,充分利用 RDMA 网络、NVME SSD 等硬件优势,正是这些关键技术的整合创新,才使得 Taurus 的性能有了质的飞跃。