分布式数据库的概念、术语和定义的概述!

分布式数据库的概念、术语和定义的概述!

 

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

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

定义分布式数据库

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

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

006fRELkly4h15jo2uczkj30hs08emxt

聚类和分布

首先,让我们模糊地接受“数据库”这个概念——尽管它对很多人来说可能意味着很多东西——而把注意力集中在“分布式”这个词上。

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

现在,如果你听过 ScyllaDB 的 CTO Avi Kivity 的话,他会争辩说,一个现代的多核、多 CPU 节点已经构成了自己的网络,但我们今天不会探索这条路径。

当这个行业开始时,你有一个巨大的节点,通常是一个大型机,运行你的数据库。或者,到 1980 年代,它可以在您的台式计算机中运行。但它被认为是“一件事”。

为了这个论点,我们将一个节点定义为一个单一的计算整体——无论该节点是从一个更大的物理服务器(您可能经常在公共云中找到)中雕刻出来的虚拟实例,还是运行您的完整物理服务器数据库,您通常会在本地找到。

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

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

但是现在您已经拥有跨这些多个节点运行的数据库引擎,您将如何处理您的数据?你是否尽可能平均地分配它们?这就是所谓的分片。或者您是否在每个节点上保留完整副本?这就是所谓的复制,并且完全复制。

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

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

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

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

节点角色、高可用性和故障转移策略

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

过去,将副本留作“热备用”是很常见的,仅在主服务器出现故障时使用——这仍然是许多系统的成功模式。但是那个热备份并没有承担任何负载。它坐在那里无所事事地嗡嗡作响,以防万一。

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

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

此外,即使您有一个分布式数据库,这并不意味着您的客户端知道拓扑。因此人们可以实现负载均衡器来前端您的分布式数据库,或者他们可以通过使智能客户端知道您的数据库是如何分片并将查询路由到正确的节点来实现客户端负载均衡。

数据复制和分片

现在让我们看看这些复制和分片策略。就像我说的,您可以使每个节点成为整个数据库的完整副本。例如,您可以在三台不同的服务器上拥有三组完整的数据,或者您可以将不同的数据块分布在多台服务器上,在每台服务器上进行不同的分片,这样即使两个或更多数据也更难丢失集群中的服务器死亡。

006fRELkly4h15jo2wz1qj30hs0bv0sx

示例 1:基本数据分片。请注意,在这种情况下,虽然数据被分片以跨不同节点进行负载平衡,但它不提供高可用性,因为没有任何分片被复制。

006fRELkly4h15jo2uswwj30hs0bv750

示例2:数据复制的主副本方法,其中一个节点用于写入数据,然后可以将其传播到其他只读节点。这提供了一定程度的高可用性,副本能够在主节点离线时接管集群。但是,它不能正确地平衡您的工作负载,因为所有写入都必须在主服务器上处理,因此对于写入繁重的工作负载可能不切实际。

006fRELkly4h15jo2x6u0j30hs0bvmxw

示例 3:在这里,所有数据都在主动-主动无领导拓扑中进行分片和复制。每个节点都可以接受读写操作,因此在管理工作负载方面都是对等的。同样,由于复制,对部分集群的任何丢失都不会导致数据丢失。

一致性级别

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

这与你想确保一个节点得到更新完全不同,相信他,他会在后台告诉两个伙伴这个更新。你可以继续你的一天。这称为最终一致性。这意味着数据库可以更快更松地处理查询,并且在某些情况下,您可能会发现您的数据可能会变得不一致。

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

006fRELkly4h15jo2ueqgj30hs0c3wes

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

手动分片与自动分片

接下来,对于水平可扩展性,您的系统如何决定如何跨节点分片数据?起初,这始终是一个手动过程,管理起来困难且有问题。因此,分布式数据库实现了算法来自动将您的数据分片到您的节点上。尽管如今这种情况更为普遍,但仍有一些分布式数据库尚未解决如何,特别是如何自动分片或使自动分片成为您无法开箱即用的高级功能。

拓扑感知

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

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

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

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

电商数据分析360°实战攻略!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>