自互联网进入web2.0时代以来,数据库作为核心底层基础设施软件,也经历了蓬勃发展期。从早期的单机关系数据库到NoSQL再到今天的NewSQL,分布式数据库领域无论是技术还是场景都发生了巨大的变化。在当前的云原生时代,拥有分布式功能似乎是任何软件系统的标准。

尤其是在当前基础软件国产化浪潮中,国产数据库百花齐放,大有弯道超车之势。什么是分布式数据库呢?拆开来解释。

一、分布式

以一个熟悉的场景为例,比如完成一个软件开发工作。

小公司的做法是聘请全栈工程师,可以做所有的工作。但是,这样的人虽然什么都懂一点,但是没有特别精通的方向,很容易达到能力上限。

在一个大型团队中,通常会有很多角色(UI、前端、后端、DBA、运维等)。这些人组成一个分布式系统,大家协调完成共同的任务。中间的协调人是项目经理或部门领导。

这样做的好处是:

职责分离:每个人都要各司其职,做自己擅长的事情。

平滑拓展:哪个环节缺人就定点补充。

能力:可以处理更大和更多的项目。

当然,有利也有弊:

沟通:沟通成本增加,需要标准化的工作模式。

调度:如何高效地协调所有人员。

一致性:如何保证上下游人员信息的一致。

概念区别:分布式和集群

说到分布,就不得不提另一个与之相关的概念,那就是集群。很多初学者不能很好的理解集群和分布的区别。

拿前面的例子来说,如果小公司的全栈工程师出现一些异常情况(离职、出走、不堪重负等。),老板会考虑多雇些这样的人,这就形成了集群。好处是他们可以做更多的工作(负载分流)和互补(高可用性),但本质上他们仍然是自己做所有的事情。

事实上,分布式和集群可以一起使用。例如,在上面的大团队示例中,每个角色可以配置多个人,这就形成了一个分布式集群。

二、数据库

说白了,数据库就是管理数据的地方,就像我们生活中存放货物的仓库。我们要按照一定的规则把货物排列整齐(写数据),方便我们调取快件(核对数据)。

在计算机世界中,数据通常是按照一个二维的表来组织的,我们称之为关系模型,然后我们可以使用结构化查询语言(SQL)对这些数据进行各种关系操作,从而得到想要的结果。这就是关系数据库,也是目前应用最广泛的数据库。除此之外,相信你也听说过其他类型的数据库,比如KV型、文档型、时间序列型、图形数据库等等。

最常见的数据库就是大家用的Excel文档。一个文件可以看成一个数据库,每一张表就是一个数据表,表中的列是字段,每一行就是存储的数据。

乘法的“分布式”和“数据库”

在我看来,“分布式”和“数据库”不是相加,而是相乘。

传统的子数据库和子表方案以及各种分片方案都可以看作是伪分布式(添加),与真正的分布式数据库有本质区别。

最大的区别在于分布式事务。单个数据库的事务在一个节点上完成,分布式数据库需要多个节点的协同。

以典型的银行转账场景为例:

A想转账100元给B,但是A的账户信息存储在节点A,B的数据存储在节点B。

单个数据库可以通过事务轻松完成。

分布式环境下的事务需要考虑各种网络故障和数据一致性。对于客户端来说,还是要保证交易操作的简单性。整个转移操作与单机数据库体验一致,所有故障都要透明处理。

分布式数据库继承了传统单机数据库的核心特性,同时具备分布式系统的处理能力。理论上所有的需求都可以通过横向扩展来解决,这是在大数据高并发的场景下诞生的产物。虽然起步较晚,但可以预见,它将是数据库的下一个发展方向。