近期,华为云在云原生数据库多主技术方面取得一项重磅突破。华为《Taurus MM: bringing multi-master to the cloud》论文被国际数据库顶会VLDB 2023收录。该论文主要介绍了华为云数据库如何通过各种黑科技减少云原生多主数据库的网络消耗,进而提升云原生多主数据库的性能和稳定性,成为首篇从网络消耗角度寻求创新、提升云原生多主数据库性能和稳定性的顶会论文。
VLDB(International Conference on Very Large Data Bases)是数据库三大国际顶级会议 (SIGMOD、VLDB、ICDE) 之一,今年已举办至第49届,每届会议都会集中展示当前数据库研究的前沿方向、工业界的最新技术和各国的研发水平。VLDB 的论文接受率总体较低,其中核心数据库主题中的接受率仅约16.7%,入选论文必须提供巨大贡献。
华为云数据库的关键技术创新不仅有效解决了多主数据库的网络消耗难题、进而提升了云原生数据库的性能和稳定性,同样也适用于高可用性和无服务计算等其他领域。
攻坚云原生多主数据库三方面“网络消耗”难题
当前,大多数云原生数据库通常会采用一写(主)多读(副本)标准部署方式来提高业务吞吐量。然而,单主会导致单点故障,同时限制了写扩展性,也就是说带来了可用性和性能的双重挑战,因此云原生多主数据库应运而生。
该论文指出多主数据库主要的网络消耗来自于主节点写页面、时钟同步和锁信息交互三个方面。多主数据库内部各节点间、以及同分布式存储节点间势必要保持沟通和信息对齐,而这就需要通过网络进行,从而需要占用网络带宽,消耗网络流量。
网络消耗无疑会影响性能,同时也会带来更高的成本,对于云原生数据库来说,网络消耗的降低对于性能和成本至关重要。为降低云原生多主数据库的网络消耗,华为云数据库通过在以下三个方面进行探索,实现了重要技术突破。
日志即数据库,减少直接页面写入带来的网络消耗
为减少直接页面写入带来的网络消耗,华为云数据库采用计算存储分离架构,计算层负责接收客户端及应用的连接,执行查询、管理事务及生成WAL日志,存储层分为日志存储(Log Stores)和数据存储(Page Stores)。事务更新时会先生成日志记录,主节点将这些日志记录传送到存储层的Log Stores中进行存储,通过日志回放生成数据,不直接通过网络执行整个数据页面的写入,节省了所需的网络带宽。
研发新型VS时钟,减少时钟同步带来的网络消耗
多主数据库特有的第二个网络消耗来源于时钟同步。在分布式系统中,不同节点上的物理时钟很难精确保持一致,需要通过网络连接进行时钟同步校正,并获取时间戳,会带来无法容忍的时间延迟。
华为云数据库研发了一种新型的时钟——VS时钟(VECTOR-SCALAR CLOCKS)。其关键的创新是,既可以产生矢量时间戳,又可以产生标量时间戳,实现优势互补。VS时钟的应用,既达成了较小的网络消耗又保证了数据库全局快照的创建能力。
行锁信息融入页锁,优化锁协议减少网络消耗
多主数据库的第三个主要网络消耗是由锁信息交互所带来的。对数据库中的数据修改需要满足原子性,通常数据库使用锁来实现原子性。通过大量观察发现:鉴于所有行都是存储在页面上的,因此要修改或读取对应行,就意味着必须修改或读取此行所在的页面。
对此,华为云创新性地提出通过优化多主数据库锁协议来减少网络消耗的解决方案:对于数据库最底层的行页混合锁,行锁信息不再作为单独的消息进行传递,而是融入页锁中,作为页锁信息的一部分来传递,大幅减少锁信息的数量。这种方案能使锁信息的数量显著减少,从而进一步降低网络负载。
作为专门为云环境设计的云原生多主数据库系统,华为云数据库是一个存算分离的数据库系统,使用全局锁管理器来协调对数据库页和行的读写访问,在共享程度低的工作负载上实现了良好的性能和可扩展性。
通过持续探索与攻坚,华为云数据库在日志即数据库的基础上,通过两个关键创新技术: VS(vector-scalar)时钟和混合行页锁,有效降低了网络负载,实现了性能提升。在TPC-C基准测试中,4个主节点的最大扩展效率为84%,8个主节点的最大扩展效率为62%。在最大8个计算节点的集群上,华为云数据库多主在TPC-C上展示了优于Aurora多主和CRDB的性能。