本文分享自华为云社区《多主创新,让云数据库性能更卓越》,作者: GaussDB 数据库。
华为《Taurus MM: bringing multi-master to the cloud》论文被国际数据库顶会VLDB 2023录用,这篇论文里讲述了符合云原生数据库特点的超燃技术。介绍了如何通过各种黑科技减少云原生数据库的网络消耗,进而提升云原生数据库的性能和稳定性。下面就让我们抽丝剥茧,细细品味技术的魅力,揭开华为云数据库多主技术的面纱。
说明:技术论文中的Taurus在华为云商用的产品名是GaussDB(for MySQL),是GaussDB(for MySQL)的云原生架构技术版本。
引言
现下,大型高性能数据库通常采用一写(主)多读(副本)这种标准部署方式来提高业务吞吐量。。然而,单主会导致单点故障,同时限制了写扩展性,也就是说带来了可用性和性能的双重挑战。而性能和可用性是衡量一个企业级数据库是否优秀最关键的两个方面。由此多主数据库应运而生。
多主数据库有Shared-nothing和Shared-storage两种架构。谷歌Spanner、亚马逊DynamoDB、CockroachDB、OceanBase及其他一些数据库采用了Shared-nothing架构。亚马逊Aurora多主数据库、Oracle RAC和IBM DB2 pureScale采用了Shared-storage架构。
对于Shared-nothing架构的多主,每个节点对一个小数据子集执行计算和存储。在高度分区的工作负载场景下,这类架构可以提供非常高的可扩展性。但在如下不均衡的工作负载场景中,其优势受限——节点数越多可能意味着节点间数据交换越多:
- 数据无明显分区特征;
- 工作负载随时间变化;
- 存在热点数据场景。
同时,Shared-nothing架构使用分布式提交协议,信息同步多轮交换,降低了多主系统的性能。
对于传统的Shared-storage架构,计算层与存储层分离。这类架构由于其高度集成及密集网络通信的特点,需要高端和专用的网络硬件,更适用于对成本不敏感的线下数据中心部署,不适用于云原生数据库。云的最核心特点是通过多用户共享基础设施平摊成本(包括网络硬件)来实现高成本收益。
云数据库性能的关键是对共享网络的优化。华为云数据库多主(Multi-Master)专注于从消息的数量和大小两方面减少网络流量,这一目标的达成并不容易,很多公司尝试过,但目前还没有看到成功案例。
华为云数据库多主黑科技解析
那究竟如何实现多主上云呢?华为云数据库多主有哪些硬核技术突破呢?
通过对网络流量消耗进行分析和归类后,我们发现主要的网络消耗是由于主节点写页面、时钟同步和锁信息交互三个方面。华为云数据库在如上三个方面进行了探索和尝试,并取得了可喜成绩。下面详细讨论在每类开销上,华为云数据库是如何尽最大可能减少网络计算开销的。
减少直接页面写入带来的网络消耗
此问题已有解决方案——2020年SIGMOD会议上我们向会议研究团体介绍了华为云原生数据库单主解决方案:“Log As Database”(日志即数据库)。
简单说就是华为云数据库计算与存储分离,计算层包含一写(主)多读(副本)。计算层的作用是执行数据库的修改,主要功能有:接入连接、执行查询、管理事务以及生成WAL日志记录(日志用于描述对数据库页所做的修改)。事务更新时先生成日志记录,主节点将这些日志记录传送到存储层的Log Stores中进行存储,通过日志回放生成数据,从而无需通过网络执行整个数据页面的写入,节省了所需的网络带宽。详细见图1。
图1:华为云数据库组件及分层架构
华为云数据库多主重用了一主多读架构中的思想,采用Shared-storage体系结构,所有Master之间共享日志存储和页面存储,继续沿用悲观并发控制,且引入了全局锁管理器GLM(Global Lock Manager)。
各Master维护自己的预写日志(WAL)。用户事务在单主上执行——没有分布式事务。日志记录写入执行事务的主机中。每个Master会定期将带有位置信息标识(哪个Master生成的)的新生成日志提交给所有其他Master。通过位置信息,各Master读取其他所有Master上生成的日志记录,并更新进自己的缓冲池页面中。详细如图2所示。
图2:华为云数据库多主组件及分层架构
减少时钟同步带来的网络消耗
多主数据库特有的第二个网络开销来源是时钟同步。在单主数据库上,事务时钟信息可以直接使用本地物理时钟。然而,在分布式系统中,不同节点上的物理时钟很难精确保持一致。而通过网络连接同步和获取时间戳,会带来无法容忍的时间延迟。因此,对于分布式数据库物理时钟这种方法不再适用。
这在业界不是一个新近才提出的问题。早在20世纪70年代,莱斯利·兰伯特就为了解决此问题,提出并发明了标量时钟(常称为逻辑时钟,或兰伯特时钟)。此标量时钟由一个数字组成时间戳,仅在消息交换期间进行不同计算机间的时钟同步。兰伯特时钟的算法简单而优雅,但要通过它创建数据库的分布式快照基本不可能,而分布式快照对分布式数据库的性能又是非常重要的。同时,逻辑时钟无法保存事务间的因果关系。简单说,就是假设
标签:multi,行锁,MM,数据库,VLDB,华为,Master,多主,节点 From: https://www.cnblogs.com/huaweiyun/p/17702565.html