前言
这些年大家都在谈分布式数据库,各大企业也纷纷开始做数据库的分布式改造。那么,所谓的分布式数据库到底是什么?采用什么架构?优势在哪?为什么越来越多企业选择它?分布式数据库技术会向什么方向发展?带着这些疑问,一探究竟吧!
一、分布式数据库的架构演进
随着数据量的爆发增长,传统集中式数据库面临极大的挑战:
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,诊断根因,提供全局分析。
四、总结
分布式数据库性能卓越,凭借高可用、高可扩展性、高性价比等优势,已经被对数据库要求最严苛的金融行业所认可,并逐渐被应用在更广阔的领域。不过,从总体发展状态来看,目前还处于早期,但发展方向明朗,上升空间很大。
欢迎小伙伴们交流~