分布式数据库架构:它是什么?
作者:社区 / 开发者
2023 年 4 月 21 日
导航至
本文由 Alexander Fridman 撰写,最初发表于 The New Stack,并经许可在此转载。向下滚动查看作者简介。
了解不同类型、它们的优点和缺点以及如何设计一个。
数据库为所有现代应用程序提供动力。它们既是您的愤怒的小鸟手机游戏的幕后功臣,也是航天飞机的幕后功臣。最初,数据库托管在单台物理机器上。基本上,它是一台只运行一个程序的计算机:数据库。然后我们转向在虚拟机上运行数据库,在虚拟机中,资源在多个操作系统和应用程序之间共享。
近年来,我们转向在云端运行数据库。 我们不再使用单个数据库实例来存储数据。现代数据库系统分布在多台计算机或节点上,这些计算机或节点协同工作以存储、管理和访问数据。
这篇文章是关于分布式数据库架构的。我们将介绍分布式数据库是什么,存在哪些类型,它们的优点和缺点以及如何设计一个。
什么是分布式数据库?
如上所述,分布式数据库是一种数据库设计,它包含多个协同工作的节点。节点基本上是一个计算实例(也可以是虚拟机或容器),它正在运行数据库。分布式数据库中的每个节点都有其自己的数据库副本,这些节点相互通信以确保它们都具有相同的信息。
与传统的单服务器数据库相比,分布式数据库具有许多优点,包括改进的可扩展性、可用性、性能和容错能力。
为什么要从单节点切换到多节点设置?
过去,当数据以兆字节为单位衡量,数据库用户以几十个为单位衡量时,单个数据库节点就可以完成工作。这种架构的典型场景是在本地大型机上托管数据库。开发人员连接到数据库,运行查询,接收输出,然后断开连接。单个系统管理员或数据库管理员负责系统的可用性、性能和升级。
以 Netflix 为例。它具有现代数据库架构。全球数亿用户从不同的设备使用该应用程序。数百万用户同时使用该系统。它应该 24/7 全天候可用。
在这种情况下,Netflix 不可能依赖于运行单个数据库应用程序的单台计算机。如果它宕机,数百万用户将遭受服务中断。此外,将所有数据存储在一个地方既不经济也不实用。
想象一下将所有用户数据保存在运行在单台服务器上的一个数据库实例中。数据库后端应随着更多订阅者加入服务而自动增长。因此,就可用性、可扩展性和容错能力而言,单个本地数据库根本不实用。
分布式数据库架构的优点
如上所述,与传统的单服务器数据库相比,分布式数据库具有许多优点,包括改进的可扩展性、可用性、性能和容错能力。
可扩展性
与只能水平扩展的单个数据库相比,分布式数据库可以垂直扩展。换句话说,如果您有一个单个数据库,扩展它的唯一方法是添加内存和 RAM,以便它可以处理更多负载。使用分布式数据库,您可以添加额外的节点。
可用性和容错能力
如果您只有一个数据库,并且数据库宕机,则应用程序将随之宕机。但是使用分布式数据库,丢失一个节点不会影响整个应用程序,并且服务将继续运行。
数据安全
您可以将数据拆分到多个节点。因此,如果一个节点被入侵,大多数应用程序的数据将保持安全。数据损坏也是如此。如果节点数据由于服务器或软件错误而损坏,则不会影响其他节点。
减少网络流量
分布式数据库可以通过将数据存储在更接近其使用位置的位置来减少网络流量,从而减少通过网络传输数据的需要。
分布式数据库的缺点
设计和实施单个数据库实例比设计和实施分布式数据库架构容易得多。监控、故障排除、维护和升级也是如此。分布式数据库需要周密的计划、合适的数据库供应商、正确的架构等等。
除了增加复杂性之外,还有更高的成本,因为它通常需要更多的硬件、软件和熟练人员。最后,还存在一致性和协调性问题。确保分布式数据库中所有节点之间的一致性可能具有挑战性,尤其是在具有高并发性或大量数据的系统中。
分布式数据库架构的类型
分布式数据库架构有几种类型。每种架构都有其自身的优势和劣势,架构的选择取决于应用程序的特定需求。
主从复制
在主从架构中,有一个主数据库管理所有写入操作,而一个或多个从数据库从主数据库复制数据以进行读取操作。因此,所有插入操作都转到一个节点,读取操作分布在各个节点上。这种设置非常适合读取密集型应用程序。
多主复制
使用多主复制,所有节点都提供读取和写入功能,包括主节点和从节点。
无共享架构
在无共享架构中,数据是共享的,每个节点仅负责部分数据。数据本质上是在节点之间拆分的,每个节点负责读取和写入。
在联邦数据库架构中,有几个独立的数据库(甚至几种数据库类型)组织为一个元数据库。
联邦数据库架构
在联邦数据库架构中,有几个独立的数据库(甚至几种数据库类型)组织为一个元数据库。基本上,您在这里拥有的是一个可以查询的统一虚拟数据库。查询由虚拟数据库管理器在内部进行分发。
分布式数据库的示例
有许多示例和供应商提供可以作为分布式架构工作和部署的数据库解决方案。以下是最流行的
- MongoDB,一种流行的 NoSQL 文档数据库,您可以将其分布在多台服务器上。它将数据存储在集合中而不是表中,并将数据存储在文档中而不是行中。
- Apache Cassandra,一种高度可扩展的分布式数据库系统,旨在管理跨多个数据中心的大量结构化和非结构化数据。
- Amazon DynamoDB,一种完全托管的 NoSQL 数据库服务。
选择和设计您的分布式数据库架构
当需要选择应为您的组织或应用程序使用哪种数据库架构时,有几件事需要考虑。这里没有正确或错误的答案。每种架构都有其用例,因此您应该选择最适合您的架构。考虑(除其他因素外)数据分区、复制和一致性。更详细地说,以下是您应采取的一些步骤
- 确定需要在分布式数据库中存储和访问的数据。这将有助于确定存储量、模式设计等。
- 确定您的数据分区策略。确定跨多个节点进行分区的策略。
- 选择您的复制策略。您可以在主从、多主或其他方式之间进行选择。
- 确定一致性模型。选择您是否需要数据在节点之间保持一致、最终一致或强一致。
这当然不是一个详尽的清单。您还需要聘请一位经验丰富的架构师。
结论
与任何其他技术一样,分布式数据库也有其优点和缺点。但是,对于现代用例,它们的优点大于缺点。分布式数据库架构有几种类型,您应该在仔细考虑后才选择最适合您需求的一种。
关于作者
这篇文章由 Alexander Fridman 撰写。Alexander 是软件行业的资深人士,拥有超过 11 年的经验。他一路晋升,担任过高级软件开发人员、团队负责人、软件架构师和首席技术官等职位。Alexander 在前端开发和 DevOps 方面经验丰富,但他专注于后端开发。