分布式数据库技术的演进和发展方向

前言

这些年大家都在谈分布式数据库,各大企业也纷纷开始做数据库的分布式改造。那么,所谓的分布式数据库到底是什么?采用什么架构?优势在哪?为什么越来越多企业选择它?分布式数据库技术会向什么方向发展?带着这些疑问,一探究竟吧!

一、分布式数据库的架构演进

随着数据量的爆发增长,传统集中式数据库面临极大的挑战:

1.性能瓶颈

数据规模爆发增长,传统集中式数据库难以维持数据量大时的性能,而分布式数据库的性能可以水平扩展。

2.缺失混合负载能力

数据量爆发增长带来对数据分析(OLAP)需求的增长。企业需要使用两套系统分别支撑事务交易(OLTP)和数据分析(OLAP),不仅造成了大量的数据冗余,同时增加了系统的复杂度和运维难度。而分布式数据库的混合负载能力可大幅度提升分析的时效性,减少数据冗余,并大大提高灵活性。

3.高昂成本

集中式数据库水平扩展难,可靠性需要付出高昂的成本。而分布式数据库的架构支持灵活扩展,实现高可用方案的成本较低。

分布式数据库与单机数据库的不同在于其可以将核心功能扩展到多台节点,甚至多个地域,包括事务管理、数据存储和数据查询等。从实现方式上看,分布式数据库主要有3种不同的技术路线:

1)分布式中间件 + 单机数据库

这条路线本质上是分布式系统由两部分组成:

a) 上层是分布式中间件:维护一套统一的分片规则,提供SQL 解析,请求转发和结果合并的能力。

b) 底层单机数据库:开源MySQL或PG单机数据库,提供数据存储和执行能力。

这种方式主要使用比较成熟的内核来解决扩展性的问题,所以生态友好、成本较低,也比较容易实现。不过,缺点也显而易见,比如功能降级、在全局事务能力和高可用等方面存在短板,需要有针对性增强,导致整个方案的复杂度高、机器冗余多。最重要的是,因为使用的是开源产品的内核,数据库会始终受制于开源代码修改、专利、发行方式等很多方面的风险,这种形式显然无法满足当前国内金融、政企客户的需求。

2)基于分布式存储的分布式数据库

这种形态基于分布式存储,再叠加数据库能力。大部分公有云数据库采用这条技术路线。华为云GaussDB(for MySQL)就是这种形态的典型代表。

这条路线有限地解决了扩展性问题,数据一致性主要依赖分布式存储引擎。上层的计算节点无状态,共享存储提供跨节点读写。这种架构充分利用分布式存储提供的高级特性,更容易形成技术竞争力。但是这种架构的扩展性有限,尤其是写节点。

另外,这种架构对底座(分布式存储)有比较重的依赖,线下实现的成本高。

3)原生分布式数据库

这种形态是基于分布式数据库理论实现的分布式数据库。这条路线是根据分布式一致性协议做底层设计。原生分布式数据库将分布式存储、事务和计算结合在一起,数据由系统自动打散并存储多个副本,通过一致性协议保证多个副本和事务的一致性。

这种形态更容易在数据库本身所擅长的领域发挥优势,比如说性能、复杂SQL处理能力、企业级能力。集群的扩展和收缩对应用透明,按需扩展,支持大规模部署限制;数据一致性由事务层一致性协议保护,安全性更高;灵活部署,多活架构,对硬件的依赖低,可以通过普通服务器实现集群和高可用。

因为金融政企客户在使用分布式技术之前,往往已经有分库分表、使用分布式中间件产品的经验,所以对原生分布式架构的认可度更高,学习成本也相对较低,因此,这种形态也是国内当前被采用较多的一种,华为云GaussDB分布式数据库就是这种形态的典型代表。

GaussDB基于华为在数据库领域20多年的战略投入,已经在金融行业积累了非常丰富的实践经验,是企业数字化转型、核心数据上云、分布式改造的信赖之选。

二、原生分布式数据库的挑战和关键技术

原生分布式数据库基于分布式数据库理论,是一款对于用户应用透明的分布式数据库。不过,实现分布式关系数据库有几个关键挑战:

1.安全可信

分布式、云化环境的复杂性增加了安全风险,比如数据泄露和丢失的风险增加,身份认证和访问控制以及数据传输、存储安全的控制难度提升。

2.事务系统的正确性及性能

分布式数据库中经常有一次操作涉及多台数据库的场景,需要一种方案来维护整个数据库集群事务的ACID特性,避免出现部分成功部分失败等无法接受的情况。

另外,在大并发场景下事务管理器容易成为性能的单点瓶颈,比如获取事务唯一标识、全局快照、频繁交互导致大量的网络通信和锁等待等。

3.分布式查询能力

在分布式系统中,需要在最短时间内获取准确的查询结果,提升查询性能。

4. 高可用能力

分布式数据库需要确保异常场景下(如:节点硬件故障或者Bug宕机等)数据库系统的连续可用。

分布式数据库的挑战和关键技术

GaussDB分布式数据库研发了一系列高性能、高可用、安全特性迎接上述四大挑战,下面挑选几个有代表性的特性加以说明。

1)全密态

传统的加密方式在服务端加密,密钥管理员是可以获取的。而全密态数据库的密钥掌握在用户自己手上,数据库管理员无法获取,加解密过程仅在客户侧完成,数据在存储、传输、查询整个生命周期过程中均以密文形态存在,避免管理员恶意获取密钥解密数据。

 

 全密态数据库

2)分布式事务GTM-Lite

如下图所示,GaussDB没有采用传统的事务列表的管理方式,而是提供了一个CSN(提交系列号),通过对比CSN的大小来实现事务可见性判断。

 

 GTM-Lite技术示意

 当事务开始时,根据事务隔离级别的不同,从GTM-Lite获取一个CSN值,作为这个事务的查询快照点(如果是可重复读,只需要在事务开始时获取一次CSN值,如果是读已提交,每次SELECT时都需要重新取一次CSN值)。

当事务提交时,向GTM-Lite申请一个新的CSN值,作为这个事务提交CSN值,并记录到事务提交记录中。

GTM-Lite技术通过CSN提交序列号进行可见性判断,无需耗费大量计算资源来遍历列表;无锁化原子操作提供CSN序列号,无需锁等待;节点间事务交互仅需要一个CSN,网络开销跟事务规模无关。在保证事务全局强一致的同时,提供高性能的事务处理能力,避免了单GTM的性能瓶颈。

3)分布式查询优化

a.分布式执行

GaussDB是如何处理分布式数据库集群中的业务应用SQL的呢?

  • 业务应用的SQL会下发给CN节点;
  • CN利用数据库的优化器生成分布式的执行计划,每个DN会按照执行计划的要求处理数据;
  • 数据基于一致性Hash算法分布在每个DN,因此DN在处理数据的过程中,可能需要从其他DN获取数据,GaussDB提供三种stream流(广播流broadcast、聚合流gather和重分布流redistribute)实现数据在DN间的流动;
  • DN将结果集返回给CN进行汇总;CN将汇总的结果返回给业务应。

 让我们展开看一下节点间的数据交换。比如某条SQL的执行逻辑如下图所示:

 SQL执行逻辑

以两个DN为例, 在执行过程中,DN会按照redistribute键将数据发送到对应的节点。

Redistribute算子接收到C/D两表join的数据之后,根据重分布键计算将数据发给DN1还是DN2,Redistribute Collector收集到重分布之后的数据之后发给上层的Join算子再做Join计算。

 

 CN、DN间的数据流动

另外,GaussDB的优化器会根据统计信息选取针对当前SQL性能最优的Stream流算子完成CN、DN间的数据流动。

b. 全并行架构

GaussDB采用全并行架构,从MPP节点并行、SMP线程并行、到SIMD指令并行,到LLVM CodeGen技术,全面挖掘系统计算资源的潜力,提升查询性能。

5. 高可用

1)GaussDB重做日志

重做日志在如下场景可以发挥作用,提升系统的可用性

  • 当数据库发生故障,如宕机,可以通过重做日志文件恢复数据。
  • HA架构下,主备通过重做日志文件进行数据同步。
  • 备份恢复时,通过归档重做日志文件实现PITR。

GaussDB使用WAL (Write Ahead Log) 机制实现重做日志,在提升可用性的同时兼顾性能,即在数据修改时遵循 no-force-at-commit 策略,在提交时并不强制写。为了保证数据在数据库发生故障时可以恢复,通过Redo 机制,用连续的、顺序的日志条目的写出将随机的、分散的数据块的写出推延,这个推延使得数据的写出可以获得批量效应的性能提升。

2)分布式部署

GaussDB支持多种高可用部署形态,保证系统的稳定性和可靠性。下面我们看两个典型案例。

a. 两地三中心。

同城有两个双活数据中心,两个数据中心同时承载业务,异地一个容灾数据中心;同城可实现节点级、AZ级、数据中心级等故障高可用,同时提供跨城的异地容灾能力。

 

 GaussDB两地三中心高可用部署

b. 同城3AZ高可用+异地容灾

同城采用逻辑3AZ、3副本部署,异地采用单AZ、3副本部署,提供了同城抵御节点级故障和AZ级故障的能力,跨城的Region级容灾的能力。

 

GaussDB同城3AZ高可用+异地容灾

 三、分布式数据库技术的发展方向

基于新需求、新场景、以及全池化架构、新网络和大模型等新技术的出现,我们认为分布式数据库技术主要向以下六个方向发展。

分布式数据库技术的发展方向

1. 高可用能力的持续提升

高可用是目前大多数金融政企客户首要关注的问题,特别是对于多地、多中心容灾有要求的客户。针对这样的客户,华为云GaussDB已经提供了多种解决方案,如支持同城双活、异地容灾、两地三中心的解决方案,支持同城双活强同步的解决方案,支持异步数据复制、多地多活的高可用解决方案。

面向未来,分布式数据库将具备真正全球部署能力的多活架构。

2. 软硬件深度协同

硬件和软件两者之间相辅相成,互相促进。利用新型硬件(GPU、FPGA、高速网络)和华为在芯片、服务器、存储、网络、操作系统、数据库的全栈软硬件能力,提升性能和高可用能力。

首先,数据库的持久化逻辑,深度整合到了计算与存储分离的技术底座中,分布式数据库可以获得在容量、弹性、扩展性方面的巨大提升,同时能提供给客户一致的体验。

其次,从计算节点卸载下推到存储中,特别是对一些复杂的查询处理,同时叠加并行处理能力,使得这些计算逻辑能充分利用下面整个存储池的能力,同时最关键的是能做到对业务透明。

最后,就是高性能。高性能的实现除了I/O聚合之外,单条交易的本质就是网络的时延和处理的时延。所以,网络对于分布式数据库的时延(性能)影响是巨大的。

总而言之,软硬协同带给我们的不仅仅是性能扩展方面的优势,更是可以通过软硬协同打造真正企业级的可靠性。

3.企业级混合负载 (HTAP)

近年来企业级混合负载(HTAP)的兴起,旨在打破事务处理(TP)和分析(AP)之间的壁垒。分布式数据库都应具备混合负载能力,即在支持高并发、事务性请求的同时,对分析型的复杂查询提供了良好的支持,从而大幅度降低成本,同时提高企业决策的效率。下面是HTAP架构的核心技术:

第一,透明路由。通过自动选择行存引擎、列存引擎以及行列组合,提供查询的准确性和实时性,增加客户的易用性,提升HTAP产品的商用价值。

第二,性能提升。TP要求的是低时延、高吞吐,而AP要求的是复杂查询的能力。常规执行优化技术包括并行执行、编译执行、向量化执行等,在这些技术的基础上进一步加速复杂查询,支撑企业级混合负载。

第三,数据新鲜度。保证数据高新鲜度、高性能,保证HTAP架构能够具备更多应对用户的能力。

第四,资源隔离。用户对TP性能要求比较高,在引入实时AP的同时,不能影响TP的能力和性能,需要在资源隔离、数据新鲜度以及性能的提升方面做好权衡。

4.云原生多主

单一架构其实并不能解决今天行业碰到的所有问题,但云原生多主架构可以帮助解决两类问题:

第一个,是高可用的问题。基于多主架构,解决切换时业务中断的问题。

第二个,是扩展性的问题。基于多主架构,融合软硬协同的进展,真正能在计算节点以下,持续提升产品的性能和弹性。

5.数据安全可信

当今世界,每个国家、组织和个人都在关注安全、合规和隐私的问题,几年前数据无保护随意获取并使用的便利不再,这也促进了技术的进步和落地。未来,全行业都会面临越来越严格的对于可信安全方面的要求。

全密态是华为云数据库为了提升隐私保护能力研制的一项关键技术,全密态支持数据在整个计算过程中同样是以密文形式存在,实现了让整个敏感数据在全生命周期当中都得到保护。因此,无论数据处于何种状态,攻击者都无法获取到有效信息,从而保障了企业数据全生命周期的隐私安全。

6. AI-Native

机器学习已被广泛用于优化数据管理问题,如数据清理、数据分析、查询重写、数据库诊断等。然而,传统的机器学习算法无法解决泛化和推理问题。幸运的是,大模型(LLM)可以帮助解决这些限制,为智能化数据管理提供了很好的机会。

借助AI/LLM,未来分布式数据库将朝着全流程、全链路、高效易用的智能化数据库的方向发展,在数据库咨询、开发、运维等关键阶段,构建相应的自动化能力:

第一,咨询阶段,提供专家式辅助,制定精细化方案。

· HLD助手,结合专家经验,自动生成数据库HLD;

· DB知识库,通过积累运维工单、答疑、文档手册等,形成数据库行业知识库;

· 问答助手,通过提供ChatBot,实现交互式运维。

第二,开发阶段,提供开发辅助,提升SQL开发效率。

· 通过构建NL2SQL转换能力,让自然语言转换为SQL语句;

· 同时,增强的SQL转换能力提升异构数据库间的SQL语句转换自动化率。

第三,运维阶段,实现预测性维护,提升系统可靠性。

· 智能巡检,可以构筑Schema/SQL、中间件/告警等全链路可观测可跟踪能力;

· 智能故障处理,通过全链路感知编排,提供精准分析,快速定位故障并给出建议;

· SQL质量提升能力,可以快速找出问题SQL,诊断根因,提供全局分析。

四、总结

分布式数据库性能卓越,凭借高可用、高可扩展性、高性价比等优势,已经被对数据库要求最严苛的金融行业所认可,并逐渐被应用在更广阔的领域。不过,从总体发展状态来看,目前还处于早期,但发展方向明朗,上升空间很大。

欢迎小伙伴们交流~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/290730.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++ 内存管理

1、C/C内存分布 首先我们来了解在一个程序中,代码主要存储在哪些地方; 1.栈:又叫堆栈,其中一般存储非静态局部变量、函数参数、返回值等,栈的增长是向下的。 2.内存映射段:是高效的 I/O 映射方式&#xff0…

华为2023年年度报告启示:技术工程师应该如何成长?

华为2023年年度报告显示了公司在面对复杂环境与挑战时的稳健发展,以及在技术创新、生态构建、社会责任等方面取得的显著成就。对于技术工程师而言,这份报告不仅是华为战略与成果的全景展示,更是蕴含了对未来技术趋势的洞见以及对工程师职业发…

前端性能优化:掌握解决方案

课程介绍 我们常说性能永远是第一需求,作为一个前端工程师,不管使用什么框架,不管从事什么类型的网站或应用开发,只要是项目被用户使用,性能优化就永远是你需要关注的问题。通常情况下,工程师们在深入了解…

云原生(七)、Kubernetes初学 + 裸机搭建k8s集群

Kubernetes简介 Kubernetes(通常简称为K8s)是一个开源的容器编排平台,最初由Google设计和开发,现在由Cloud Native Computing Foundation(CNCF)维护。它旨在简化容器化应用程序的部署、扩展和管理。 Kube…

Unity类银河恶魔城学习记录11-7 p109 Aplly item modifiers源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemData_Equipment.cs using System.Collections; using System.Collecti…

如何检查电脑的最近历史记录?这里提供详细步骤

如果你怀疑有人在使用你的计算机,并且你想查看他们在做什么,下面是如何查看是否有访问内容的痕迹。 如何检查我的计算机的最近历史记录 要检查计算机的最近历史记录,应该从web浏览器历史记录开始,然后移动到文件。但是,可以修改或删除浏览器历史记录,也可以隐藏Windows…

牛角工具箱源码 轻松打造个性化在线工具箱,附带系统搭建教程

这是一款在线工具箱程序,您可以通过安装扩展增强她的功能 通过插件模板的功能,您也可以把她当做网页导航来使用~ 🎊 环境要求 PHP > 7.2.5 MySQL > 5.7 fileinfo扩展 使用Redis缓存需安装Redis扩展 去除禁用函数proc_open、putenv、s…

C语言:文件操作

前言:为什么使用文件? 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久…

day22.二叉树part08

day22.二叉树part08 235.二叉搜索树的最近公共祖先 原题链接 代码随想录链接 思路:因为本题是二叉搜索树,利用它的特性可以从上往下进行递归遍历树,这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间…

基于 SymPy 的反函数求解

原文:https://blog.iyatt.com/?p14396 例一 f(x) 2x 3 这个函数很简单,可以看出它的反函数是(令 yf(x) ):$$x\frac{y-3}{2}$$ 使用 SymPy 求解可以采用这样的思路: 已知函数 f(x)2x3, 令 y f(x), 即构…

FMEA与智能机器人:提升机器人可靠性与安全性的关键

随着科技的飞速发展,智能机器人已经深入到我们生活的方方面面,从工业生产到家庭服务,从深海探险到太空探索,处处都有它们的身影。然而,随着应用的日益广泛,机器人系统的复杂性和不确定性也在增加&#xff0…

【JavaEE】Thread类中run和start的区别

文章目录 先说结论Run方法Start方法 先说结论 当你想要创建一个新的线程并执行某些任务时,你应该重写run方法以提供任务的具体实现,并通过调用start方法来启动新线程 run方法包含了线程应该执行的代码,但直接调用它并不会启动新的线程。 s…

pip永久修改镜像地址

修改命令: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/ 效果: 会在C:\Users\PC(用户名)\AppData\Roaming\pip目录下新增或修改文件pip.ini 文件内容: [global] index-url https://pypi.tuna.tsinghua.e…

OSCP靶场--Zipper

OSCP靶场–Zipper 考点(php zip:// rce[文件上传] CVE-2021-4034提权7z 通配符提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.249.229 -sV -sC -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-29 07:40 EDT …

电动汽车充放电V2G模型(Matlab代码)

目录 1 主要内容 1.1 模型背景 1.2 目标函数 1.3 约束条件 2 部分代码 3 效果图 4 下载链接 1 主要内容 本程序主要建立电动汽车充放电V2G模型,采用粒子群算法,在保证电动汽车用户出行需求的前提下,为了使工作区域电动汽车尽可能多的…

【CTFshow 电子取证】套的签到题

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

政安晨:专栏目录【TensorFlow与Keras机器学习实战】

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 本篇是作者政安晨的专栏《TensorFlow与Keras机器…

linux:线程同步

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言线程同步条件变量接口简单示例pthread_cond_wait为什么要有mutex伪唤醒问题的解决 (if->while) 总结 前言 本文作为我对于线程同步知识总结 线程同步 同步&…

uniapp对接萤石云 实现监控播放、云台控制、截图、录像、历史映像等功能

萤石云开发平台地址:文档概述 萤石开放平台API文档 (ys7.com) 萤石云监控播放 首先引入萤石云js js地址:GitHub - Ezviz-OpenBiz/EZUIKit-JavaScript-npm: 轻应用npm版本,降低接入难度,适配自定义UI,适配主流框架 vi…

速通汇编(二)汇编mov、addsub指令

一,mov指令 mov指令的全称是move,从字面上去理解,作用是移动(比较确切的说是复制)数据,mov指令可以有以下几种形式 无论哪种形式,都是把右边的值移动到左边 mov 寄存器,数据&#…