公告隆重推出MongoDB 8.0,史上最快的MongoDB!阅读更多 >>隆重推出MongoDB 8.0,史上最快的MongoDB!>>

什么是分布式数据库?

自2020年以来,全球创造、捕获、复制和消费的数据量几乎翻了一番——这相当于仅仅三年内增加了55.8泽字节!

The volume of data/information created, captured, copied, and consumed worldwide in zettabytes.

(来源:Statista.com,2023年)


因此,组织正在积极寻求灵活、可扩展、高性能的数据存储解决方案,这些解决方案能够适应各种类型的数据(例如,结构化、非结构化)的同时,保持高度的数据完整性。此外,鉴于大量用户从各种移动设备访问这些数据,组织需要支持多个用户同时访问的解决方案,同时确保强大的数据安全和可用性。这些都是分布式数据库继续受到欢迎并成为许多全球组织首选解决方案的几个原因。

在这本分布式数据库指南中,我们将探讨不同类型的分布式数据库、它们的工作原理、分布式数据库架构以及分布式数据库提供的优势和挑战。


目录

什么是分布式数据库?

简单来说,分布式数据库是一种将数据存储在多个位置而不是一个位置的数据库。这意味着不是将所有数据放在一个服务器或一台计算机上,而是将数据放在多个服务器或由单个节点组成的计算机集群中。这些节点通常是地理上分开的,可能是云数据库中的物理计算机或虚拟机。云数据库


集群和节点的示意图


Illustration of cluster and nodes


上面的MongoDB集群示例是创建分布式数据库时许多配置可能性中的一种。然而,与传统的集中式数据库不同,所有分布式数据库都具有将数据分布到多个位置(物理和/或虚拟)的共性,这提高了数据的弹性和可用性。将数据分布到多个位置还可以实现水平扩展。


分布式数据库类型

分布式数据库有两种截然不同的类型:同构数据库和异构数据库。


同构分布式数据库

在同构分布式数据库中,机器、节点、服务器或站点存储相同的数据,使用相同的数据模型,运行相同的操作系统,并共享相同的分布式数据库管理系统(DDBMS)或偶尔来自同一供应商的多种类型的DDBMS。

在同构分布式数据库中,有两个子集:自主和非自主。

  • 自主分布式数据库:在自主分布式数据库中,节点独立工作,拥有自己的完整数据集,只需应用程序来促进跨所有节点或节点之间进行全局更新或通信。
  • 非自主分布式数据库:在非自主分布式数据库中,节点依赖于中央数据库管理系统(DBMS)来协调数据分布、通信和所有更新。

通常情况下,同构分布式数据库通过冗余和由于所有节点的相似性而简化的管理提供了显著的数据保护。


异构分布式数据库

在异构分布式数据库中,不同的机器或站点可能包含不同的数据集,使用不同的操作系统,包含不同的数据模式,并且需要软件来促进机器之间的通信。此外,不同的站点甚至可能不知道其他站点存在。

在异构分布式数据库中,存在两个子集:联邦和非联邦。

  • 联邦分布式数据库:在联邦分布式数据库中,多个节点(可以完全独立运行并可能包含不同的数据)可以协同工作并作为一个实体运行。这意味着当发生查询时,系统会确定哪个节点最适合响应,并相应地传递查询。这个过程有时被称为数据虚拟化。
  • 非联邦分布式数据库:在非联邦分布式数据库中,每个节点独立运行,有一个中心应用程序管理每个节点中每个数据库的访问。

尽管管理起来更复杂,但异构分布式数据库在数据模型、模式选择和可以存储的数据类型方面比同构分布式数据库提供了更大的灵活性。

分布式数据库是如何工作的?

如前所述,节点是位于分布式数据库系统(例如,计算机、虚拟机、没有共享物理组件的服务器)中的单个服务器或计算机。每个节点存储一组数据,并运行在分布式数据库管理系统软件(DDBMS)上。为了确定哪些数据将在哪些节点之间存储,必须考虑数据分布的概念。


数据分布

适当的数据分布对于分布式数据库的效率、安全性和最佳用户访问至关重要。这个过程,有时称为数据分区,可以使用两种不同的方法实现。

  • 水平分区:水平分区涉及将数据表拆分为多个节点之间的行。
  • 垂直分区:垂直分区将表拆分为多个节点之间的列。

Illustration of the difference between horizontal and vertical partitioning.

(来源:Hazelcast.com,2023)


从原始表的横向或纵向分区中产生的数据集有时被称为碎片。

分布式数据库系统通信

尽管节点能够完全独立运行,但它们需要与其他节点进行通信,因为与集中式数据库不同,它们不共享相同的物理组件,甚至不共享相同的数据集。分布式数据库通信有三种类型

  • 广播通信:将一条消息发送到分布式数据库系统中的所有其他节点。
  • 多播通信:将一条消息发送到分布式数据库系统中的某些节点,而不是所有节点。
  • 单播通信:一条消息从一个节点发送到另一个节点。

事务管理

分布式数据库通常需要支持分布式事务,其中一项事务可能涉及多个节点。这种支持方法在分布式数据库系统的ACID属性(原子性、一致性、隔离性、持久性)中得到强调。ACID属性的要点包括

ACID属性的描述。 (来源:Dev.to,2020)


  • 原子性意味着将事务视为单一单元。这也意味着,要么完整的交易可以用于存储,要么因为错误而被拒绝,从而确保数据完整性。

  • 一致性通过强制预定义的规则和数据约束来维护在分布式数据库系统中。如果事务的状态、性质或内容违反这些规则,则该事务将不会被摄取并存储在分布式系统中。

  • 隔离性涉及将每个事务与其他事务分离,以防止数据冲突并维护数据完整性。此外,当管理可能存在于本地数据存储、通过云计算的虚拟机以及可能位于多个地点的多个数据库节点上的多个分布式数据记录时,这也对操作有益。

  • 持久性确保在系统故障的情况下存储的数据得以保留。事务性分布式数据库管理系统通过多种方式完成此任务,包括


容错能力

由于分布式数据库系统比集中式数据库更容易遇到故障或操作中断(例如,由于多个地点或次优文件系统),因此强大的容错过程对于保持访问可靠性和有效的数据库操作至关重要。话虽如此,分布式系统能够保留的各个组件的数量消除了单点故障的风险。

一些常见的容错过程包括数据复制、备份协议、连续故障检测、数据校验和、负载均衡和查询优化。


数据复制

数据复制是在不同节点、服务器或站点上维护数据多个副本的过程。可以选择不同的数据库复制模式,包括

  • 全复制:在全复制中,整个数据库的完整、功能副本发送到分布式数据库系统中的所有站点。数据库副本更新按常规计划提供。全复制还有两种子类型。

    • 事务复制:在事务复制中,每个节点提供完整且完整的数据库副本,然后随着事务处理的发生,数据更改会更新到该副本中,通常为实时。
    • 快照复制:使用快照复制,在特定时间点的数据库副本被捕获。然后根据需要将此快照分发到节点和用户群,但并不持续监控数据更改。因此,建议仅用于不经常更改的内容的快照数据库复制。
  • 部分复制:在某些情况下,某些节点只需要数据库的特定部分,因此将定义的数据库部分复制到选定的一组。在这种类型的数据复制中,任何数量的节点或站点都可以接收复制。

  • 合并复制:正如其名称所示,合并数据库复制是将两个数据库合并为一个。这是数据库复制类型中最复杂的。


备份协议

通过一致的自动化数据备份计划,可以在不过度负担组织员工的情况下维护数据完整性和数据库系统可用性。市场上一些最常用的解决方案包括Veeam、Druva和Commvault的备份软件。

分布式数据库最常用的三种备份类型包括

  • 完整备份:每次执行数据库备份时,都会复制并存储整个数据库。

  • 差异备份:仅复制和存储自上次完整备份以来的更改。

  • 增量备份:增量备份不需要之前的完整备份——它们可以保存自上次差异或增量备份以来的更改。


连续故障检测

与任何系统一样,分布式数据库系统需要持续监控系统故障至关重要——无论是技术问题、自然灾害还是网络攻击。以下是一些实现监控的方式:

  • 心跳:在心跳中,每个节点向其他节点发送信号(心跳)以验证其正常运行。如果没有收到该信号,系统将创建故障消息,并由系统管理员进一步调查该节点的操作。

  • 看门狗定时器:单个节点将具有专注于特定活动或进程的看门狗定时器。如果在活动或进程完成后定时器未到期,将生成一个故障消息,表示需要进一步调查。

  • 数据校验和:为了识别数据篡改或其他数据传输问题,当发送数据传输时,将分配一个特定值(或校验和)。当接收到该传输时,也会分配一个校验和。通过使用软件验证发送者和接收者对该传输具有等效校验和,可以快速识别数据传输完整性问题。


负载均衡

负载均衡技术将用户请求和查询均匀地分布在数据库节点之间。这不仅提高了性能,还确保了一个节点的故障不会导致其他节点过载。

通常,负载均衡软件作为应用程序或数据库用户之间的中介部署。当收到查询时,负载均衡器将评估请求并确定哪个节点(哪些节点)最适合响应。在此评估过程中,将考虑诸如距离、当前负载和其他预定义的系统规则等因素。这种评估和分配有助于系统避免系统过载和系统效率低下,从而导致用户等待时间过长。


查询优化

分布式数据库使用查询优化技术来有效地在节点之间分配查询,同时最大限度地减少节点之间的数据传输流量。实现此目的的一种方式是基于成本的查询优化。这种查询优化形式考虑了查询的最有效执行,包括查询复杂性、可用数据和包含该数据的位置。

分布式数据库提供的优势和挑战


与任何类型的数据库解决方案一样,都有其优势和挑战。以下是在研究为您的组织使用分布式数据库时应考虑的简要总结。


分布式数据库优势

  • 灵活性:分布式数据库中使用的(例如,异构的)数据结构和模式的可灵活性是对于具有各种数据资产类型和处理要求的组织的一个重大优势。

  • 弹性:由于分布式数据库将数据定位在分布式系统中的多个节点上,因此降低了单点故障的风险。

  • 可扩展性:分布式数据库可以通过简单地调整数据库中的节点数量轻松扩展(或缩小),非常适合成长型组织。

  • 改进的性能:分布式数据库能够通过负载均衡和查询优化来提高整体数据库性能,同时减少用户等待时间。

  • 高可用性:容错性(例如,数据复制、连续故障检测)为用户提供高系统可用性。


分布式数据库挑战

  • 复杂性:由于与集中式数据库相比,分布式数据库有更多的组件,因此它们在设计和管理方面可能更加复杂。《Atlas》开发数据平台通过提供单个UI/API以控制和管理大规模安全MongoDB分布式系统,显著简化了这一点。

  • 延迟:如果管理不当,当用户从多个节点查询数据时可能会发生延迟。

  • 数据一致性:由于分布式数据库能够使用多种数据模式和结构,因此维护数据一致性比传统数据库需要更多的努力。此外,如果发生硬件或网络故障,数据恢复可能会更加复杂。

  • 成本:分布式数据库可能更贵,因为它们的更大灵活性带来的附加复杂性。此外,由于它们通常比传统数据库拥有更多站点和硬件,可能还会有额外的网络成本。


需要发现的其他资源

想了解更多关于分布式数据库的信息?以下是一些深入了解分布式数据库特定元素的资源列表。

常见问题解答

什么是分布式数据库?

分布式数据库是一种数据库系统,它将数据存储在多个位置而不是一个位置。这意味着不是将所有数据都放在一个服务器或一台计算机上,而是将数据放在多个服务器或由单个节点组成的计算机集群中。这些节点通常地理位置不同,可能是物理计算机或云数据库中的虚拟机。云数据库

分布式数据库有两种类型吗?

分布式数据库有两种类型:同构分布式数据库和异构分布式数据库。在同构分布式数据库中,分布式数据库中多个站点上的所有机器共享相同的确切数据、数据模型、操作系统和相同的分布式数据库管理系统。而在异构分布式数据库中,不同的机器可能包含不同的数据集,使用不同的操作系统,包含不同的数据模式,并且需要软件来促进机器之间的通信。

什么是ACID属性?

ACID属性包括四个要素

  1. 原子性:原子性意味着事务被视为一个单一的单位。

  2. 一致性:分布式数据库系统通过强制执行预定义的规则和数据约束来维护数据一致性。

  3. 隔离性:每个事务与其他事务隔离,以防止数据冲突并维护数据完整性。

  4. 持久性:持久性确保在系统故障的情况下存储的数据得到保留。

数据库复制有哪些类型?

数据库复制的类型包括完全复制、事务复制、快照复制、部分复制和合并复制。

分布式数据库系统中有哪些不同类型的连续故障监控?

不同的连续故障监控类型包括

  • 心跳。
  • 看门狗计时器。
  • 数据校验和。