分布式数据库架构路线大揭秘

news2024/10/1 12:27:32

文章目录

    • 分布式数据库是如何演进的?
    • 数据库+与分布式中间件有什么区别?
      • 如何处理分布式事务,提供外部一致性?
      • 如何处理分布式SQL?
      • 如何实现分布式一致性?
    • 数据库+更适合金融政企的未来

这些年大家都在谈分布式数据库,各大企业也纷纷开始做数据库的分布式改造。那么所谓的分布式数据库是什么?采用什么架构,优势在哪?为什么越来越多企业选择它?我们不妨一起来深入了解下。

分布式数据库是如何演进的?

回顾分布式数据库的演进历程,我们可以大致概括为三个发展阶段:应用分库分表做垂直拆分、分布式中间件、分布式数据库。每个阶段都呈现出了不同的特点:

应用分库分表做垂直拆分本质上是应用侧的改造,和数据库本身没有太大关系。

在分布式中间件阶段,分布式数据库本质上是由两部分组成的,上层是分布式中间件,底层再搭载开源MySQL或PG单机内核。这种方式因为使用了比较成熟的内核,所以生态友好、成本较低,比较容易实现,不过缺点也显而易见,比如功能降级、分布式事务处理能力较差,最重要的是,因为使用的是开源产品的内核,数据库会始终受制于开源代码修改、专利、发行方式等很多方面的风险,这种形式显然已经无法满足当前国内金融、政企客户的需求。

在这里插入图片描述

到了分布式数据库阶段,主要呈现出两种形态。一种是基于分布式存储实现的分布式数据库,这种形态先有分布式存储,再叠加数据库能力,我们习惯把它称为“分布式+”。

在这里插入图片描述

这种架构在分布式比较擅长的领域,更容易形成它的技术竞争力。什么是分布式擅长的领域呢?

比如说像扩展性、及时的扩展性,大规模运维的灵活性,比如扩缩容。在这方面,分布式+的天花板会更少,因为它一开始就是按照分布式存储来设计的。这里面有意思的一点是,这跟架构本身没有太大关系,我们看到,今年所有的在国内的分布式+的厂商都有一个共同特点,就是在整个存储引擎的设计上跟今天我们认知的,不管是MySQL还是PG,都不一样。它不是一个类似于B-TREE的这样一种结构,而通常是基于LSM-Tree存储引擎,数据写内存,然后批量写持久化的这样一种方式。

这是因为这些分布式+的厂商,他们的所有技术体系都来源于Google,而Google最早做的第一款产品就是分布式存储,叫Big Table,Big Table本身就是基于LSM-Tree的,这是一个历史传统。这就是为什么LSM-Tree跟分布式+本身没有必然关系,但是今天我们看到国内所有走分布式+路线的厂商,都使用的是LSM-Tree。

在这里插入图片描述

LSM-Tree有它的优点,比如主备之间的异构性有天生的优势,但也有一个非常大的缺点,就是对于场景的普遍适用性。它比较适合于写密集的场景,有大量写入插入,比如我的订单、流水化的订单,但不太适合状态类的业务,有大量的读和写,要去更新状态。而且它把随机写转为顺序写,在做compaction也就是内存和持久化存储数据合并时也会有空间放大和性能抖动问题,所以它整个场景的适用性比B-Tree要低。

这个阶段的另外一种形态,就是基于分布式数据库理论实现的原生分布式数据库,与“分布式+”正好相反,它是先有TP单机数据库引擎,再叠加分布式能力,我们一般称之为“数据库+”,华为云GaussDB分布式数据库就是这种形态的典型代表。
在这里插入图片描述

这种形态不存在空间放大和性能抖动的问题,而且更容易在数据库本身所擅长的领域发挥优势,比如说性能、复杂SQL处理能力、企业级能力。同时,因为金融政企客户在使用分布式技术之前,往往已经有分库分表、使用分布式中间件产品的经验,所以对这种架构的认可度更高,学习成本也相对较低,因此这种形态也是国内当前被采用较多的一种。

数据库+与分布式中间件有什么区别?

数据库+和分布式中间件,这两种形式从架构上来看是非常相似的,分布式中间件上面是一个代理层,下面有很多单机数据库。我们可以这么来看,就像是天平的两端,一端在0,一端在1,里面有三个非常大的差别。

在这里插入图片描述

如何处理分布式事务,提供外部一致性?

分布式中间件通常是基于XA来实现数据一致性,但XA本身是不能实现外部一致性的,一般只支持最终一致性,而数据库+的分布式数据库可以基于内置全局授时来实现全局一致性读,从而支持外部一致性。

如何处理分布式SQL?

分布式中间件是把数据库作为黑盒,数据节点之间只能通过SQL的形式传递,是标准的SQL。

图片分布式中间件处理分布式SQL

而数据库+的代理层和数据节点是一个数据库的不同部分,互相之间可以传递更加内部的东西,比如计划树,不同的数据节点之间也不需要代理节点,可以直接传递。

图片数据库+处理分布式SQL

如何实现分布式一致性?

分布式中间件通常是基于传统主备架构,使用半同步、最大保护等模型来实现分布式一致性,不过这种形式下一致性和高可用是没有办法同时兼顾到的,而数据库+是基于原生分布式共识而打造,比如Quorum、Paxos,Raft,可以实现底层无损容灾,同时满足一致性和高可用性。

对于数据库厂商而言,如果以上三个问题全都做到了,那我们可以说它是分布式数据库,如果三者都无法做到,我们一般说它是分布式中间件,如果说只做到了其中的一部分,那就很难下定义究竟是分布式中间件还是分布式数据库,但可以从这三方面去衡量它的天平更倾向哪一边。

数据库+更适合金融政企的未来

出现三种不同的技术路线,本质上是团队的人员能力模型、特质和最初要解决的问题决定了最终走向哪条路线。技术没有绝对的好与坏,只有是不是合适。今天我们看到很多金融政企客户都在提分布式数据库,从0到1的突破可能是由于政策性的突破,因为国产化,但从1到N的突破,是需要产品本身竞争力的突破。

我们发现,在这个阶段,客户不再关心分布式,客户关心什么?关心的是数据库本身。不管叫什么技术,能不能满足需求,能不能提供足够的性能、足够的扩展性、足够的高可用,能不能支撑复杂的业务场景,我们的观点是,最终这个行业会回归到他的本源,分布式数据库的本源是数据库,不管叫分布式+还是数据库+,最终给客户的核心价值仍然是数据库。因此,数据库+更能匹配金融政企未来长期的发展。

GaussDB融合了华为在数据库领域15年多的战略投入,是基于分布式理论打造的行业领先的国产原生分布式关系型数据库,采用行业先进的全并行分布式架构,有应对海量并发事务处理与复杂查询混合负载的能力;还有同城跨AZ、两地三中心、数据0丢失等多种高可用方案,出色的金融级高可用商用能力全方面满足金融级监管要求。

现在,GaussDB已经在金融行业积累了非常丰富的实践经验,历经华为终端云、华为流程IT、全球TOP银行、运营商等各种严苛场景的考验,不仅成功助力邮储银行新一代个人业务分布式核心系统全面投产上线,为全行6.5亿个人客户、4万多个网点提供日均20亿笔、峰值6.7万笔/秒的交易处理能力,还通过一系列技术创新,轻松支撑华为流程IT ERP系统5倍业务压力下性能保持线性,实现业务效率的10倍提升,是企业数字化转型、核心数据上云、分布式改造的信赖之选。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL-中间件mycat(一)

目录 🍁mycat基础概念 🍁Mycat安装部署 🍃初始环境 🍃测试环境 🍃下载安装 🍃修改配置文件 🍃启动mycat 🍃测试连接 🦐博客主页:大虾好吃吗的博客 &#x1f9…

边缘网关thingsboard-gateway DTU902

thingsboard-gateway是一个采用python语言编写的开放源代码网关程序,用于将传统或第三方系统的设备与thingsboard平台连接。 支持 采集Modbus slaves、CAN、MQTT 、OPC-UA servers, Sigfox Backend。 除了具备普通 网关外,还具备可配置的边缘能力&…

rabbitmq深入实践

生产者,交换机,队列,消费者 交换机和队列通过 rounting key 绑定者,rounting key 可以是#.,*.这类topic模式, 生产者发送消息内容 rountingkey, 到达交换机后交换机检查与之绑定的队列, 如果能匹…

Yolov5之common.py文件解读

深度学习训练营原文链接前言0.导入需要的包以及基本配置1.基本组件1.1 autopad1.2 ConvDWConv模块1.3TransformerLayer模块1.4 Bottleneck和BottleneckCSPBottleneck模型结构1.5 CrossConv模块1.6 C3模块基于C3的改进1.7SPP1.8Focus模块1.9 Concat模块1.10 Contract和Expand1.1…

好东西!!!多亏几位大牛整理的面试题,让我成功上岸!!

凡事预则立,不预则废。相信很多程序员朋友在跳槽前都会临阵磨枪,在网络上搜集一些面试题进行准备。 然而,当机会来临时,却发现这些面试题往往“不快也不光”.... 由于Java面试涉及的范围很广,很杂,而且技…

使用MyBatis实现简单查询

文章目录一,创建数据库与表(一)在Navicat里创建MySQL数据库testdb(二)创建用户表 - t_user(三)在用户表里插入3条记录二,案例演示MyBatis基本使用(一)创建Mav…

解决idea每次打开新的项目都需要重新配置maven

原理:就是通过 idea 来进行全局配置【非当前工程配置】 IDEA 版本:2023.1 如何查看版本信息 ? 【主菜单】——【帮助】——【关于】 我在网上查找了许多文章 ,我混淆了一点!当前工程的设置 & 全局设置 不在一个地方…

马斯克掷重金收购英

人前主义,人后生意。在带领一众科技圈大佬签署了呼吁暂停研发比GPT-4更强AI模型的公开信后不久,马斯克却转头豪掷千金收购了10000块英伟达GPU。 一些网友吐槽,以马老板的格局而言,这次价值过亿的投资绝对不是为了借着AI概念火爆来…

2021年 团体程序设计天梯赛——题解集

Hello各位童学大家好!😊😊,茫茫题海你我相遇即是缘分呐,或许日复一日的刷题已经让你感到疲惫甚至厌倦了,但是我们真的真的已经达到了我们自身极限了吗?少一点自我感动,没有结果前别太…

[FREERTOS] 任务的创建、删除、调度与状态

1.什么是任务? 我的理解是:任务像是进程/线程,创建一个任务就会开辟一个空间,每一个任务都是独立的执行相应的动作互不干扰,就比如玩游戏,陪女朋友,任务通常都会有一个while(1)死循环 2.与任务创…

使用cloudflare代理flask启用https服务

原文来自:使用cloudflare代理flask启用https服务 | 夜空中最亮的星 欢迎大家留言讨论 问题1:使用cloudflare的dns回源服务器的时候,出现了http和https不断反复重定向 问题2: flask只能启用http服务,需要启用https 步骤 服务器&…

浅谈[Linux搭建GitLab私有仓库,并内网穿透实现公网访问]

转载自远控源码文章:Linux搭建GitLab私有仓库,并内网穿透实现公网访问 前言 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。 Gitlab是被广泛使用的基于git的开源代码管理平…

报错解决:Python ‘NoneType‘ object is not subscriptable , 获取到的数据为None,需要保留数据

人生苦短,我用python 爬取某DB电影数据的时候, 在获取内容的时候出现 NoneType object is not subscriptablePython 资料报错交流:点击此处跳转文末名片获取 获取数据的部分代码是: writer_avatars (writers_list[wi][avatars][small]) …

Linux0.11 信号(十二)

系列文章目录 Linux 0.11启动过程分析(一) Linux 0.11 fork 函数(二) Linux0.11 缺页处理(三) Linux0.11 根文件系统挂载(四) Linux0.11 文件打开open函数(五&#xff09…

前端webpack项目性能优化——体积压缩和compression-webpack-plugin的使用

前端webpack项目性能优化——体积压缩和compression-webpack-plugin的使用需求优化结果需求 脚手架搭建的项目,会默认开启sourceMap,此时打包下来的包会很大,如图:map文件比所有js文件都大,会导致包整体体积过大&…

NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031

然后我们再来看一下如何把json内容,转换成hive支持的文本格式,其实还是一个格式转换对吧 首先看一下用到的处理器,可以看到这里我们用到了evaluateJsonPath处理器,这个处理器用来提取json中的熟悉,然后ReplaceText处理器用来替换掉FlowFile中的属性的内容 首先看一下这个Evalua…

【Python-Conda】Conda操作解读 pip 和 conda 的区别

【Python-Conda】Conda操作解读 & conda与pip的区别 文章目录【Python-Conda】Conda操作解读 & conda与pip的区别1. 介绍2. conda 操作2.1 创建环境2.2 查看conda已创建的环境2.3 删除环境2.3.1 删除虚拟环境中的包2.4 激活(失活)环境2.4.1 激活…

OpenAI Embedding:快速实现聊天机器人(三)

theme: orange 本文正在参加「金石计划」 接上文OpenAI Embedding:快速实现聊天机器人(二)有讲到聊天机器人的架构和流程,这篇开始通过代码讲讲具体实现。 前言 这篇文章为了降低实现的难度,下图中提供存储和向量相似度搜索的Redis(Redis Sea…

智媒ai在线伪原创-python文本自动伪原创

文章伪原创工具的优势 文章伪原创工具是一类自然语言处理工具,通过对原始文本进行语言转换、替换、重组等方式,生成与原始文本相似但不完全相同的新文本。这种工具的优势主要包括以下几点: 提高工作效率:使用文章伪原创工具可以快…

第三章 传输层

传输层基本服务 传输层核心任务是为应用进程之间提供端到端的逻辑通信服务传输层主要实现功能:传输层寻址、对应用层报文进行分段和重组、对报文进行差错检测、实现进程间的端到端的可靠数据传输控制、面向应用层实现复用与分解、实现端到端的流量控制、拥塞控制 …