这篇文章概述了 Amazon S3 如何提供令人难以置信的耐用性。如果您想了解更多信息,请滚动到底部并找到参考资料。
1
背景故事
2010 年 11 月 - 法国巴黎。一位名叫朱莉娅的年轻软件工程师在一家制药初创公司工作。
他们每天都会创建许多日志文件。耐用性对他们的商业模式来说很重要。然而他们将数据存储在内部的一个小型服务器机房里。生活很美好。随着季节的流逝。但是有一天。他们的主数据服务器的硬盘崩溃了。并毁掉了一切。朱莉娅注意到无法找到主要客户的日志文件。所以她很伤心。幸运的是他们有一个备用服务器。
但她知道,他们目前的安排是自找麻烦。因此她在网上寻找便宜又耐用的存储解决方案。并阅读有关 Amazon S3 的信息。它的耐用性数字令她眼花缭乱。Amazon Simple Storage Service(S3 )是一个对象存储。它存储没有层次结构的非结构化数据。
2
Amazon S3 耐用性
Amazon S3 提供11 个 9的耐用性 - 99.999999999%。
换句话说,1000 万个对象中的*一个数据对象可能会在*1000 万年内丢失。
耐用性是关于防止数据丢失。
以下是 Amazon S3 提供极高耐用性的方式:
2.1
1、数据冗余
机械硬盘以较小的成本提供大存储。
因此它们在云中仍然被广泛使用。
但他们却常常失败。
这可能是由于物理冲击或电气故障而发生的。
一个解决方案就是在多个硬盘上复制数据。因此,如果发生故障,可以从另一个磁盘恢复数据。换句话说,复制提高了耐用性。但是,如果存储*特定数据对象的*所有硬盘都发生故障,仍然存在数据丢失的风险。
因此他们使用擦除编码来降低数据丢失的概率。这是一种复制技术。擦除编码将数据对象分割成称为数据分片的块。并创建称为奇偶校验分片的额外块。而原始数据对象可以从分片的子集中重新创建。
他们将擦除编码的*碎片存储在*许多硬盘上。从而降低数据丢失的概率。换句话说,多层次的灵活复制可以提高耐用性。在上图中,碎片以不同的颜色显示。
{:height 293, :width 778}
它们运行后台进程来监控存储设备的健康状况。并快速更换故障的设备以重新复制其数据。此外,他们不会保留空的存储设备。而是每个存储设备中都有一些可用空间。因此许多存储设备可以参与恢复。并通过并行化提供*高恢复*吞吐量。
2.2
2、数据完整性
它们通过*多种服务*发送用户数据,然后将其存储在 S3 中。
然而,网络设备中的位翻转存在导致数据损坏的风险。
位翻转是指位从 0 变为 1 或从 1 变为 0 的不必要变化。
这可能是由于通信信道中的*噪音或*硬件故障而发生的。
此外,TCP不能检测位翻转,因为它是一个更高级别的协议。
因此他们使用 Amazon 客户端 SDK 为数据添加校验和。它可以帮助他们在数据到达 S3 时检测损坏的数据。换句话说,他们使用校验和来检查数据完整性。想象一下校验和是数据对象的指纹。因此两个不同的数据对象不会具有相同的校验和。并且他们使用 CRC32C 和 SHA-1 等校验和算法来提高性能。此外,他们使用HTTP 尾部来发送校验和。因为它允许在分块数据的末尾发送额外的数据。这样就*避免了两次扫描数据并*大规模检查数据完整性的需要。
他们在将数据存储到 S3 之前对其进行擦除编码。并向擦除编码分片添加额外的校验和。因为它允许在读取期间检查数据完整性。而 S3 每秒计算大约 40 亿个校验和。
此外,他们在向用户*返回成功响应之前会进行括号处理。包围是将数据的整个变换集合逆转的过程。它确保可以从各个分片重新创建*数据对象。换句话说,它会根据上传的数据来验证存储的数据。
2.3
3. 数据审计
出现故障的硬盘应快速更换。
还必须重新复制数据以确保持久性。
所以他们将硬盘的修复率与故障率进行匹配。
然而故障率并不总是可以预测的,因为它可能受到天气或停电的影响。
因此他们运行单独的服务来检测硬盘故障。
并相应扩大维修*服务*规模。
硬盘上也会发生位翻转。并可能损坏特定的*数据*扇区。换句话说,存储设备可能可以运行,但特定的数据扇区将无法读取。
因此他们会定期扫描存储设备以检查数据完整性。并使用存储有擦除编码分片的校验和来*审计*数据。此外,如果发现坏扇区,他们会重新复制数据。
2.4
4.数据隔离
它们将元数据和文件内容分别存储在 S3 中。
元数据存储在数据库中。而文件内容则以块的形式存储在大量硬盘阵列中。他们还在可用区域内运行物理上分离的数据中心。换句话说,可用区是一组独立的数据中心。
每个可用区域都有单独的网络基础设施和电源。从而*降低同时发生故障*的风险并提高耐用性。但由于用户的失误,存在数据丢失的风险。例如,用户可能会意外删除或覆盖数据对象。因此他们更好地设计软件以避免这种情况。
它们在 S3 中提供*版本控制来*跟踪数据对象的变化。并且对对象的每次更改都会获得一个版本 ID。删除标记也用于删除版本。因为它延迟了实际的删除。从而避免意外覆盖或删除数据对象。此外,他们支持 S3 中的对象锁,以避免用户错误。它可以防止在指定时间内永久删除对象。此外,他们还提供时间点备份以确保持久性。
2.5
5. 工程文化
他们只有在进行*耐久性审查之后才会*部署变更。
因为它迫使他们思考可能的情况并简化设计决策。
换句话说,耐久性审查有助于他们了解软件设计中的风险。
他们保存一份书面文件以供耐用性审查。还有一个威胁模型,其中列出了可能出错的事情。从而创造一种不断思考耐用性的工程文化。此外,他们使用经过验证的数学模型来计算耐久性。
他们使耐久性成为建筑和工程文化的一部分。此外,他们非常注重耐用性基本原理。并将耐用性视为一个持续的过程。
3
参考
AWS re: Invent 2022 - 深入探究 Amazon S3 ( https://www.youtube.com/watch?v=v3HfUNQ0JOE )
超越 11 个 9 - Amazon S3 如何实现持久性 ( https://www.youtube.com/watch?v=qJoATSh5CZY )
Amazon S3 基础知识:耐用性和可用性 ( https://www.youtube.com/watch?v=soZJGPtdmJQ )
超越 11 个 9 的耐用性:使用 Amazon S3 进行数据保护 ( https://www.youtube.com/watch?v=YsIjt88E6iw )
Amazon S3 中的数据保护 ( https://docs.aws.amazon.com/AmazonS3/latest/userguide/DataDurability.html )
MDN - HTTP 尾部 ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Trailer )
什么原因导致计算机内存中的位翻转? ( https://blog.robertelder.org/causes-of-bit-flips-in-computer-memory/ )
理解纠删码 ( https://stonefly.com/blog/understanding-erasure-coding/ )
系统设计 ( https://newsletter.systemdesign.one/p/amazon-s3-durability )
随手关注或者”在看“,诚挚感谢!