快捷搜索:  as  www.drou.cn  xxx  88952634+  bitcoin bear  S`(  bear market  crypto marke

TokenPocket钱包官网入口|简述分布式数据存储

数据是今天的基础! 它支持从你最喜欢的猫咪视频到每天发生的数十亿金融交易的一切。这一切的核心是分布式数据存储。


在这篇文章中,我们将学习什么是分布式数据存储,为什么我们需要它,以及如何有效地使用它。本文旨在帮助你开发应用程序,因此我们将只涉及应用程序开发人员需要知道的内容。这包括必要的基础,开发人员遇到的常见陷阱,以及不同的分布式数据存储之间的区别。


这篇文章不需要任何分布式系统知识! 编程和数据库经验会有帮助,但你也可以在我们遇到问题时直接查找主题。让我们开始吧!


一、什么是分布式数据存储?


分布式数据存储是一个在多台机器上存储和处理数据的系统。


作为一个开发者,你可以把分布式数据存储看作是你存储和检索应用程序数据、指标、日志等的方式。你可能熟悉的一些流行的分布式数据存储是MongoDB,亚马逊网络服务(AWS)的S3,以及谷歌云平台的Spanner。


在实践中,有许多种分布式数据存储。它们通常是由云提供商管理的服务或你自己部署的产品。你也可以从头开始或在其他数据存储的基础上建立你自己的数据存储。


二、我们为什么需要它?


为什么不直接使用单机数据存储?为了真正理解,我们首先需要认识到今天数据的规模和普遍性。让我们看看一些具体的数字。


- 2018年,Steam的最高并发用户数为1850万,部署了拥有2.7PB固态硬盘的服务器,并向用户提供了15艾字节的数据¹。


- 纳斯达克在2020年单日摄取了1130亿条记录的峰值,比两年前的平均300亿条有所扩大²。


- 谷物公司凯洛格(Kellogg's)在2014年每周仅模拟促销活动就处理了16TB的数据³。


说实话,我们使用的数据之多令人难以置信。这些字节中的每一个都被仔细地储存和处理在某个地方。这个地方就是我们的分布式数据存储。


单机数据存储根本无法支持这些需求。因此,我们使用分布式数据存储,在性能、可扩展性和可靠性方面具有关键优势。让我们了解一下这些优势在实践中的真正含义。


性能、可扩展性和可靠性


性能是指一台机器能多好地完成工作。

性能是至关重要的。有无数的研究量化并显示了短至100毫秒的延迟对业务的影响。缓慢的响应时间不仅使人们感到沮丧--它们使流量、销售和最终收入下降。


幸运的是,我们确实可以控制我们应用程序的性能。在单机数据存储的情况下,简单地升级到一个更快的机器往往就足够了。如果这还不够,或者你依赖于一个分布式数据存储,那么其他形式的可扩展性就会发挥作用。


可扩展性是指增加或减少基础设施资源的能力。

今天的应用程序经常经历快速增长和周期性的使用模式。为了满足这些负载要求,我们 "扩展 "我们的分布式数据存储。这意味着,我们根据需要提供更多或更少的资源。可扩展性有两种形式。


- 横向扩展意味着添加或删除计算机(也称为机器或节点)。


- 垂直扩展意味着改变机器的CPU、RAM、存储容量或其他硬件。


横向扩展是分布式数据存储能够胜过单机数据存储的原因。通过将工作分散到数百台计算机上,总体系统具有更高的性能和可靠性。虽然分布式数据存储主要依靠水平扩展,但垂直扩展也被结合使用,以优化整体性能和成本⁶。


缩放存在于从手动到完全管理的范围内。有些产品具有手动扩展功能,您可以自行配置额外的容量。其他产品则根据剩余存储容量等指标进行自动缩放。最后,有些服务会处理所有的扩展,而开发者甚至不需要考虑这个问题,例如亚马逊网络服务(AWS)的S3。


不管是哪种方法,所有的服务都有一些不能增加的限制,比如最大对象的大小。你可以检查文档中的配额,看看这些硬性限制。你可以检查网上的基准,看看在实践中可以达到什么性能。


可靠性是指无故障的概率⁷。

有些应用对我们的生活非常关键,甚至几秒钟的故障都是不可接受的。这些应用不能使用单机数据存储,因为不可避免的硬件和网络故障会影响整个服务。相反,我们使用分布式数据存储,因为它们可以适应单个计算机或网络路径的故障。


要做到高度可靠,一个系统必须同时具有可用性和容错性。


- 可用性是指一个服务可以到达并正常响应请求的时间百分比。


- 容错性是指容忍硬件和软件故障的能力。完全容错是不可能的¹⁰。


尽管可用性和容错性一开始可能看起来很相似,但它们实际上是完全不同的。让我们看看如果你有一个但没有另一个会发生什么。


- 可用但不容错。考虑一个每分钟都发生故障但在几毫秒内恢复的系统。用户可以访问服务,但长期运行的工作却没有足够的时间来完成。


- 容错但不可用。考虑一个系统,其中一半的节点永远在重新启动,而其他的节点是稳定的。如果稳定节点的容量不足,那么一些请求将不得不被拒绝。


经验之谈

对于应用程序开发人员来说,关键的一点是,分布式数据存储的性能和可靠性可以远远超过单机。问题是,它们在工作方式上有一些注意事项,会限制它们的潜力。


三、它是如何工作的?


让我们来介绍一下应用程序开发人员需要知道的分布式数据存储的工作原理--分区、查询路由和复制。这些基础知识将使你深入了解分布式数据存储的行为和特点。它将帮助你了解注意事项,权衡利弊,以及为什么我们没有一个分布式数据存储在所有方面都很出色。


分区

我们的数据集往往太大,无法存储在一台机器上。为了克服这个问题,我们将数据划分为较小的子集,让各个机器可以存储和处理。有许多方法可以对数据进行分区,每一种方法都有其自身的优劣势。两个主要的方法是垂直和水平分区。



垂直分割是指按相关字段分割数据¹¹。字段可以因为许多原因而相关。它们可能是一些共同对象的属性。它们可能是经常一起被查询的字段。它们甚至可能是以类似的频率或由具有类似权限的用户访问的字段。你在机器上垂直划分数据的确切方式最终取决于你的数据存储的属性和你要优化的使用模式。


水平分区(也被称为分片)是指我们将数据分割成具有相同模式的子集¹¹。例如,我们可以通过将行分组到分片中来对一个关系数据库表进行水平分区,以便存储在不同的机器上。当一台机器无法处理数据量或数据的查询负载时,我们就会将数据分片。分片策略分为两类:算法型和动态型,但也存在混合型¹⁰。



算法分片是根据数据的键值的函数来确定将数据分配到哪个分片。例如,在存储将URL映射到HTML的键值数据时,我们可以通过根据URL的第一个字母分割键值来对数据进行范围分割。例如,所有以 "A "开头的URL将被放在第一台机器上,"B "被放在第二台机器上,以此类推。有无数的策略,都有不同的权衡。


动态分片明确地选择了数据的位置,并将该位置存储在一个查询表中。要访问数据,我们要咨询有查询表的服务或检查本地缓存。查询表可能相当大,因此它们可能有指向子查询表的查询表,如B+树¹²。动态分片比算法分片更灵活¹³。


分片,在实践中是相当棘手的,会产生许多你需要注意的问题。幸运的是,一些分布式数据存储将为你处理所有这些复杂性。其他的则处理一些或不处理。


- 分片可能有不均匀的数据大小。这在算法分片中很常见,在这种情况下,功能很难正确。我们通过围绕数据定制分片策略来缓解这种情况。


- 分片可能有热点,某些数据的查询频率比其他数据高。例如,考虑在社交网络中查询名人比查询普通人要频繁得多。精细的模式设计、缓存和复制可以在这方面有所帮助。


- 在保持高可用性的情况下,重新分配数据以处理从系统中添加或删除节点是很困难的。


- 索引可能也需要被分割开来。索引可以为它所存储的碎片建立索引(本地索引),也可以为整个数据集建立索引并进行分区(全局索引)。每种方法都有其利弊。


- 跨分区的交易可能工作,也可能被禁用,因为它们速度慢,或以混乱的方式不一致。当你从单机数据存储中建立自己的分布式数据存储时,这尤其困难。


查询路由

划分数据只是故事的一部分。我们仍然需要将查询从客户端路由到正确的后端机器。查询路由可以发生在软件栈的不同层次。让我们看看这三种基本情况。


- 客户端分区是指客户持有要查询哪个后端节点的决策逻辑。其优点是概念简单,缺点是每个客户端必须实现查询路由逻辑。


- 基于代理的分区是指客户端将所有的查询发送给一个代理。然后这个代理决定查询哪个后端节点。这可以帮助减少后端服务器上的并发连接数,并将应用逻辑与路由逻辑分开。


- 基于服务器的分区是指当客户端连接到任何后端节点时,该节点将处理、重定向或转发该请求。

在实践中,查询路由是由大多数分布式数据存储处理的。通常情况下,你配置一个客户端,然后使用客户端进行查询。然而,如果你正在建立你自己的分布式数据存储,或使用像Redis这样的产品不处理它,你将需要考虑到这一点¹⁴。


复制

我们要讨论的最后一个概念是复制。复制意味着存储同一数据的多个副本。这有很多好处。


- 数据冗余。当硬件不可避免地发生故障时,数据不会丢失,因为有另一个副本。


- 数据可访问性。客户可以从任何副本访问数据。这增加了对数据中心故障和网络分区的恢复力。


- 增加阅读量。有更多的机器可以为数据提供服务,因此整体容量更高。


- 减少了网络延迟。客户端可以访问离他们最近的副本,减少了网络延时。


实施复制需要令人费解的共识协议和对失败情况的麻烦的分析。幸运的是,应用程序开发人员通常只需要知道数据复制的地点和时间。


数据复制的地点从数据中心内到跨区、跨地区、甚至跨大陆不等。通过近距离复制数据,我们可以最大限度地减少机器之间更新数据时的网络延迟。然而,通过进一步复制数据,我们可以防止数据中心故障、网络分区,并有可能减少读取的网络延迟。当数据被复制时,可以是同步的或异步的。


- 同步复制是指在响应请求之前将数据复制到所有的副本。这样做的好处是确保各复制体的数据相同,但代价是写入延迟较高。


- 异步复制意味着在响应请求之前,数据只存储在一个副本上。这样做的好处是写入速度快,缺点是数据一致性较差,可能会出现数据丢失。


经验之谈

分区、查询路由和复制是分布式数据存储的构建模块。不同的实现方式会出现不同的功能和属性,你要在它们之间进行权衡。


四、这些差异是什么?

分布式数据存储都是特殊的雪花,每一个都有其独特的功能集。我们将通过把它们的差异归为一类并涵盖每一类的基础知识来比较它们。这将有助于你知道要问什么问题,以及在未来要进一步阅读什么。


数据模型

要考虑的第一个差异是数据模型。数据模型是数据的类型以及你如何查询它。常见的类型包括:


- 文档。JSON文档的嵌套集合。用键或过滤器进行查询。


- 键-值。键值对。用一个键进行查询。


- 关系型。具有明确模式的行的表。用SQL查询。


- 二进制对象。任意二进制大型物件。用一个键进行查询。


- 文件系统。文件的目录。用文件路径查询。


- 图形。带有边的节点。用图查询语言进行查询。


- 信息。一组键值对,像JSON或Python的字典。从队列、主题或发件人查询。


- 时间序列(Time-series)。按时间戳排序的数据。用SQL或其他查询语言进行查询。


- 文本。自由格式的文本或日志。用查询语言进行查询。


不同的数据模型是针对不同的情况。虽然你可以把所有东西都存储为二进制对象,但在查询数据和开发应用程序时,这将是不方便的。相反,使用最适合你的查询类型的数据模型。例如,如果你需要快速、简单地查询小块数据,就使用键值对。我们将在下方列举更多关于预期用途的细节。


请注意,有些数据存储是多模型的,这意味着它们可以有效地操作多种数据模型。


担保

不同的数据存储提供不同的行为 "保证"。虽然从技术上讲,你不需要保证来开发健壮的应用程序,但强大的保证可以极大地简化设计和实施。你会遇到的常见保证有以下几种。


- 一致性是指数据对所有读者来说都是一样的,并且是最新的。请注意,"一致性 "这个词具有讽刺意味,它严重超载--要确定所指的是哪种类型的一致性¹⁵。


- 可用性是指你是否可以访问你的数据。


- 持久性是指存储的数据是否保持安全和不被破坏。


一些服务供应商甚至会通过服务水平协议(SLA)以合同形式保证服务水平,如99.99%的可用性。在他们未能坚持协议的情况下,你通常会得到一些补偿。


生态系统

生态系统(集成、工具、支持软件等)对您在分布式数据存储方面的成功至关重要。需要检查一些简单的问题,比如有哪些SDK可用,支持哪些类型的测试。如果你需要像数据库连接器、移动同步、ORM、协议缓冲区、地理空间库等功能,你需要确认它们是否被支持。文档和博客会有这些信息。


安全问题

安全责任是由你和你的产品/服务提供商共同承担的。你的责任将与你管理的堆栈的程度相关。

如果你使用分布式数据存储作为一种服务,你可能只需要配置一些身份和访问策略、审计和应用安全。然而,如果你建立和部署它,你将需要处理一切,包括基础设施安全、网络安全、休息/传输中的加密、密钥管理、补丁等。检查你的数据存储的 "共同责任模式",以弄清这一点。


合规性

合规性可以是一个关键的差异化因素。许多应用程序需要遵守关于如何处理数据的法律和法规。如果你需要遵守安全政策,如FEDRAMP、PCI-DSS、HIPAA或任何其他政策,你的分布式数据存储也需要遵守。


此外,如果你已经向客户做出了关于数据保留、数据驻留或数据隔离的承诺,你可能希望分布式数据存储具有这方面的内置功能。


价格

不同的数据存储的价格是不同的。有些数据存储只根据存储量收费,而其他的则考虑到服务器和许可证费用。文档中通常会有一个定价计算器,你可以用它来估算账单。请注意,虽然有些数据存储起初看起来成本较高,但它们很可能在工程和操作时间的节省上得到补偿。


经验之谈

分布式数据存储都是独一无二的。我们可以通过文档、博客、基准、定价计算器,或者通过与专业支持人员交谈和建立原型来了解和比较它们的不同特点。


五、有哪些选择呢?

我们现在对抽象的分布式数据存储有了很大的了解。让我们把它联系起来,看看真正的工具吧。

似乎有无限的选择,不幸的是,没有最好的选择。每个分布式数据存储都是为了不同的目的,需要适合你的特定使用情况。为了了解不同的类型,请查看下表。花点时间,专注于一般的类型和用例。


最后,请注意,真实的应用程序和公司有各种各样的工作要做,因此它们依赖于多个分布式数据存储。这些系统一起工作,为终端用户以及开发人员和分析师服务。


六、结束

数据将继续存在,而分布式数据存储正是实现这一目标的手段。


在这篇文章中,我们了解到,分布式数据存储的性能和可靠性可以远远超过单机数据存储的规模。分布式数据存储依靠具有许多机器的架构来划分和复制数据。应用程序开发人员不需要知道所有的具体细节--他们只需要知道足够多的知识以了解实践中出现的问题,如数据热点、交易支持、数据复制的价格等等。


像其他东西一样,分布式数据存储也有大量的功能。一开始,你可能很难将其概念化,但希望我们的分解能帮助你确定思考过程的方向,并指导你今后的学习。


文章来源:https://towardsdatascience.com

原文作者:Quentin Truong

原文链接:https://towardsdatascience.com/introduction-to-distributed-data-storage-2ee03e02a11d


您可能还会对下面的文章感兴趣: