性能达到原生 MySQL 七倍,华为云 Taurus 技术解读_taurus mm云-程序员宅基地

技术标签: 数据库  技术交流  

吴林、黄伟

近日,华为云自研关系型数据库 Taurus 公开亮相。作为华为云自研的最新一代云原生分布式数据库,Taurus 完全兼容 MySQL 8.0,采用计算与存储分离、日志即数据的架构设计,支持 1 写 15 读,性能达到原生 MySQL 的 7 倍。

过去多年,数据库技术本质上并没有出现颠覆式发展。作为核心基础设施,数据库是一款用户粘性非常高的产品,一旦核心业务数据落定,企业轻易不会尝试更换,因此很长一段时间内,大众习惯于老牌 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 的进化

在这里插入图片描述
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 相关的元数据信息。

  1. SQL Nodes
  2. 管理客户端连接、解析 SQL 请求,、分析执行计划并执行和管理事务隔离级别
  3. 一主多读
  4. 主库和只读松耦合
  5. 主库和只读通信少
  6. 快速 Failover
  7. 引入内核中的一些特性
    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 的性能有了质的飞跃。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/devcloud/article/details/89386835

智能推荐

DNS详解-程序员宅基地

文章浏览阅读809次,点赞20次,收藏22次。DNS(Domain Name System,域名系统)是互联网中的一种分布式命名系统,用于将域名(例如example.com)转换为对应的 IP 地址(例如192.0.2.1)。它充当了互联网上的电话簿,将易记的域名映射到计算机可以理解的 IP 地址。:DNS 的主要功能是进行域名解析。当用户在浏览器中输入一个域名时,操作系统会向本地 DNS 解析器发送查询请求。本地解析器首先检查自己的缓存,如果缓存中没有找到对应的 IP 地址,则会向根域名服务器发送查询请求。

rocky linux 9.3 制作openssh 9.6 rpm包(含ssh-copy-id、openssl) —— 筑梦之路-程序员宅基地

文章浏览阅读899次,点赞9次,收藏11次。rocky linux 兼容红帽系列的操作系统,因此和redhat制作几乎没啥差别,这里主要添加ssh-copy-id命令和显示openssl版本。源码包和二进制rpm包见我的资源。

pygame.error: Couldn't open images\ship.bmp的解决办法-程序员宅基地

文章浏览阅读2.7w次,点赞28次,收藏16次。在《python编程:从入门到实践》这本书中的《外星人入侵》的项目里有如下代码:import pygameclass Ship(): def __init__(self,screen): """初始化飞船并设置其初始位置""" self.screen = screen # 加载飞船图像并获取其外接矩形 self.image =

SpringBoot2.X学习之Intercepter拦截器_handlerinterceptor.super.prehandle-程序员宅基地

文章浏览阅读796次。本节课对SpringBoot2.0以及之前版本的拦截器进行讲解在SpringBoot1.x的版本中实现拦截器,首先写一个自定义拦截器实现addInterceptors接口,实现其三个方法:package com.qzsun.springbootdemo.intecpter;import javax.servlet.http.HttpServletRequest;import jav..._handlerinterceptor.super.prehandle

语音识别_android 编写语音识别利用rnn架构-程序员宅基地

文章浏览阅读289次。* Copyright (C) 2008 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain_android 编写语音识别利用rnn架构

让你COPY 自己的声音,GPT-SoVits 人声模型训练_做声音模型的程序-程序员宅基地

文章浏览阅读1.2k次,点赞14次,收藏26次。一个最快速、方便的声音copy模型,一个强大的少量语音转换和文本转换到语音 WebUI——GPT-SoVITS!_做声音模型的程序

随便推点

Unity Editor(一)OnInspectorGUI的重写与面板的创建-程序员宅基地

文章浏览阅读277次。Unity Editor(一)OnInspectorGUI的重写与面板的创建 http://blog.csdn.net/husheng0/article/details/52568027 posted on 2017-05-12 14:27 jiahuafu 阅读(...) 评论(...) 编辑 收藏..._unity editor oninspectorgui

红队打靶练习:DJINN: 1-程序员宅基地

文章浏览阅读395次,点赞11次,收藏8次。红队打靶练习:DJINN: 1,犹如赤狐突袭般的警觉感......

2024中国ESG传播趋势白皮书-程序员宅基地

文章浏览阅读434次,点赞9次,收藏3次。社会环境,以及技术环境系统性地归纳总结了中国及国外的ESG发展现状。国,存在一股“反ESG”的趋势,一些投资者持观点认为,ESG仅仅利于,并不能为投资。着,在公司层面分析ESG营销的作用,从消费者,到外部利益相关者,再到企业内部,将。国企业与国际组织合作是进行ESG传播和实践的有效方式,因此本文详细列举了与国际组。ESG因素逐渐被纳入企业发展及资本市场的核心考量之中。我们首先采用PEST模型对可持续发展的宏观环境进行分析,从政策环境,经济环境,织合作的方法和案例,希望能够启发更多的中国企业与国际组织合作。

[042] 微信公众帐号开发教程第18篇-应用实例之音乐搜索_音乐消息thumb_media_id是什么-程序员宅基地

文章浏览阅读8.1w次,点赞75次,收藏75次。引言及内容概要微信公众平台支持向用户回复音乐消息,用户收到音乐消息后,点击即可播放音乐。通过音乐消息,公众账号可以实现音乐搜索(歌曲点播)功能,即用户输入想听的音乐名称,公众账号返回对应的音乐(歌曲)。读者可以关注xiaoqrobot体验该功能,操作指南及使用如下所示。考虑到歌曲名称有重复的情况,用户还可以同时指定歌曲名称、演唱者搜索歌曲。下面就为读者详细介绍歌曲点播功能的实现过程_音乐消息thumb_media_id是什么

使用PyQt5/PySide2编写一个极简的音乐播放器_pyside2播放声音-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏18次。文章目录一、创建UI界面二、获取网络歌曲三、创建和链接信号槽疫情肆虐,憋在家实在无聊,索性写点东西,于是就有了这个极极极极极简的音乐播放器。这个极极极简的音乐播放器类似于“阅后即焚”的软件,播放器可以随机播放歌曲,获取下一首歌曲,不能重新播放上一首歌曲,不能获取歌曲的名称和演唱者。听过的歌曲,就像过眼云烟,放完即散。下面来看看如何用Python实现这个音乐播放器软件吧!一、创建UI界面..._pyside2播放声音

python和台达plc通讯_台达PLC通信协议ModbusASCII(DVP)-程序员宅基地

文章浏览阅读528次。-精品文档--精品-台达PLC通信协议ModbusASCII(DVP)编撰:李浩特日期:2013/11/12版本:Ver:3.2例1:读D0(地址为1000H)寄存器数据-------------------------------2例2:读D0-D8(D0地址为1000H,D8地址为1008H)寄存器数据----------3例3:把0010H写入D0数据寄存器-----------------..._python解析台达plc通讯协议

推荐文章

热门文章

相关标签