暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

“分布式数据库”是什么意思

原创 eternity 2022-08-12
434

我们行走的地球景观通常变化非常缓慢。每年可以测量厘米或英寸。但数字环境,特别是分布式数据库环境,正在以巨大的速度发生变化。在我们最近关于下一个技术周期的博客中,您可以阅读更多关于行业当前发生的巨大变化的信息。

在我们了解这些变化对分布式数据库格局的影响之前,我们必须定义术语“分布式数据库”的含义。这就是本文的目的。

定义分布式数据库

正如没有ANSI、ISO、IETF或W3C定义什么是NoSQL数据库一样,也没有关于“分布式数据库”的标准、协议或共识。

因此,我花了一些时间编写了自己的分布式数据库定义,这是基于我在业内几位数据库开发人员工作期间的经历。我相信你自己的经验可能会引导你以完全正交的方式定义这样一个本体论。此外,我可以自由地承认,这更像是一个外行为博客量身定制的务实观点,而不是一位计算机科学教授为学术论文提出的建议。有了这个免责声明和警告,让我们开始吧。

微信图片_20220812092016.png

聚类和分布

首先,让我们模糊地接受“数据库”的概念,尽管它对许多人来说可能意味着很多事情,但我们应该关注“分布式”这个词

我认为,要实现分布式,需要在网络上的多个系统中运行数据库服务器

现在,如果你听过ScyllaDB的首席技术官Avi Kivity,他会说一个现代的多核多CPU节点已经构成了自己的网络,但我们今天不会探索这条道路。

当这个行业开始时,您有一个巨大的节点,通常是大型机,运行您的数据库。或者,到了20世纪80年代,它可以在你的桌面电脑上运行。但这被认为是“一件事”

为了便于讨论,我们将节点定义为一个单一的计算整体-无论该节点是从公共云中经常发现的较大物理服务器中分割出来的虚拟实例,还是运行数据库的完整物理服务器(通常在本地发现)。

我们将集群定义为包含一个或多个节点。

因此,分布式数据库需要在N个节点的集群上运行,其中N>1。

但是,现在数据库引擎已经在这些多个节点上运行,您将如何处理数据?你把它尽可能均匀地分在他们中间吗?这就是所谓的切分。还是在每个节点上保留完整副本?这就是所谓的复制,并且完全复制。

还有服务器之间的物理距离问题,因为据我所知,数据库需要遵循光速。因此,如果您需要快速保持数据库同步,您需要将集群本地化-在同一个数据中心。它是一种分布式数据库,但这只是一个开始。

如果您想为分布在一个地理区域内的用户提供接近的数据,您可以拥有多个本地集群——一个在美国,一个在欧洲,一个位于亚洲。这使得本地用户延迟保持较低。

但是现在,您可以通过某种同步或更新机制让不同的本地集群相互通信。例如,DNS或Active Directory就是这样工作的。每个系统都独立工作,不同系统之间的更新之间存在传播延迟。

不过,对于某些生产用例来说,这可能不够好。因此,如果你更能容忍“光速”传播延迟,并使用所谓的最终一致性,你也许能够将集群本身传播到世界各地。一些服务器可能在美国,另一些在欧洲或亚洲。然而,它被认为是同一个逻辑集群。

节点角色、高可用性和故障切换策略

接下来,您将了解数据库中节点的角色。它们都是对等体,每个都能够进行完全写入,还是其中任何一个都被指定为领导者或主要领导者,而其他人被指定为只读副本?

在当时,通常会将复制副本作为“热备用”,仅在主服务器宕机的情况下使用-对于许多系统来说,这仍然是一种成功的模式。但热备用并没有承担任何负载。它坐在那里悠闲地哼唱,以防万一。

这就是为什么许多人喜欢点对点无领导拓扑,每个人都可以分担负载。而且没有单点故障,也不需要在故障切换期间花费时间打嗝。

在这些所谓的主动场景中,如何保持系统同步更为复杂—这是一件更困难的事情—但如果您能够解决它,您就消除了数据库中的任何单点故障。

此外,即使您有一个分布式数据库,也不意味着您的客户机知道拓扑结构。因此,人们可以在分布式数据库的前端实现负载均衡器,也可以通过创建智能客户端来实现客户端负载平衡,智能客户端知道如何分割数据库,并将查询路由到正确的节点。

数据复制和分片

现在让我们看看这些复制和分片策略。正如我所说,您可以使每个节点成为整个数据库的完整副本。例如,您可以在三台不同的服务器上拥有三套完整的数据,或者您可以在多台服务器上分发不同的数据片段,在每台服务器上进行稍微不同的分片,这样即使集群中有两台或多台服务器死亡,也很难丢失任何一段数据。

微信图片_20220812092216.png
示例1:基本数据分片。请注意,在这种情况下,虽然数据被分片以在不同节点之间进行负载平衡,但它不提供高可用性,因为没有任何分片被复制。
微信图片_20220812092249.png
示例2:数据复制的主副本方法,其中一个节点用于写入数据,然后可以将数据传播到其他只读节点。这提供了一定级别的高可用性,在主服务器离线的情况下,副本可以接管集群。但是,它不能正确地平衡您的工作负载,因为所有写操作都必须在主服务器上处理,因此对于写操作繁重的工作负载来说,这可能是不切实际的。
微信图片_20220812092326.png
示例3:在这里,所有数据都在活动无引线拓扑中进行分片和复制。每个节点都可以接受读写操作,因此所有节点都是管理工作负载的对等节点。此外,由于复制的原因,集群中任何部分的丢失都不会导致数据丢失。

一致性级别

一致性级别决定了在允许读或写操作完成之前,需要多少副本才能同步。假设您的数据以三种方式复制,您希望确保这三种方式始终完全同步。您需要完全事务性的强一致性保证。这些在SQL RDBMS中很常见,您可以使用ACID保证的强一致性。

这完全不同于如果你想确保一个节点得到了更新,相信他,他会在后台告诉两个朋友这个更新。你可以继续你的一天。这就是所谓的最终一致性。这意味着数据库可以更快速、更松散地处理查询,在某些情况下,您可能会发现数据可能变得不一致。

您甚至可以对其进行设置,使每个事务都有自己的可调一致性,从而允许您根据特定的用例定制一致性保证。

微信图片_20220812092407.jpg

示例4:在这个ScyllaDB示例中,您可以将复制因子设置为3(RF=3),但将读取操作的一致性级别设置为1(CL=1)。这意味着您需要得到的只是来自第一个节点(W)的响应,数据存储在该节点中,以便客户机满意;它不需要等待所有三个副本(W、X和Z)都返回。但是,如果希望确保所有三个副本都具有相同的存储结果,可以将查询更改为CL=3;这将允许您发现潜在的数据不一致,可以通过运行反熵修复操作来修复。

手动分片与自动分片

接下来,对于水平可伸缩性,您的系统如何决定如何跨节点分片数据?起初,这始终是一个手动过程,难以管理且存在问题。因此,分布式数据库实现了算法,可以在节点之间自动分割数据。虽然这一点在当今更为普遍,但仍有一些分布式数据库没有解决如何自动分片或使自动分片成为一项高级功能的问题。

拓扑感知

最后——这对高可用性很重要——分布式数据库需要了解它们自己的物理部署。假设您有一个本地集群,但它都位于数据中心的同一机架上。然后,不知何故,它的力量被切断了。哎呀!你的整个系统都坏了。

因此,机架感知意味着您的数据库可以尝试确保集群中的每台服务器都位于自己的机架上,或者至少,它们尽可能均匀地分布在可用机架上。

跨可用性区域或区域的数据中心感知也是如此。您希望确保没有一次数据中心灾难意味着您丢失了部分或全部数据库。

了解有关分布式数据库的更多信息

现在,我们已经制定了一个了解分布式数据库的基线,请观看完整的网络研讨会(如下),了解此定义如何应用于各种分布式数据库,包括流行的SQL和NoSQL系统,以及它们各自如何实现这些概念。

我介绍了不同的数据库和数据库相邻技术,并描述了它们的适当用例、模式和反模式,重点是:

  • 分布式SQL、NewSQL和NoSQL

  • 内存中数据存储和缓存

  • 具有持久数据存储的流技术

原文标题:What Do You Mean By a “Distributed Database?”
原文作者:Peter Corless
原文链接:https://dzone.com/articles/what-do-you-mean-by-a-distributed-database

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论