# S3 对象存储：一个伟大的设计

- 作者：知晓云
- 发布时间：2022-05-25 18:25
- 原文：https://www.ifanr.com/minapp/1490846

![封面摄影作者：Stephen Andrews](https://s3.ifanr.com/wp-content/uploads/2022/05/pexels-stephen-andrews-1280x20-1024x682.jpg)

> 编者按：入门无服务器软件开发有必要知道这个故事：为什么 AWS 在 2006 年发布 S3 对象存储，接着在 2014 年发布 AWS Lambda（无服务器）？让我们一起探索背后的故事，也希望为您迁移软件项目到无服务器平台带来启发。

[25000 名 #CloudMadness 投票者不会错](https://acloudguru.com/blog/engineering/cloudmadness-bracket-preview-aws-azure-gcp?_ga)。亚马逊 S3 是有史以来最伟大的云服务。

真的，你永远不知道这样的人气比赛会如何进行。不过在这种情况下，我认为投票者做出了正确的决定。而且我有理由!

## S3 是 OG 云服务

取决于你怎么定义，「Simple Storage Service / 简单存储服务」可能不是 AWS 的第一个产品 —— [SQS 实际上是首先推出的](https://jeff-barr.com/2014/08/19/my-first-12-years-at-amazon-dot-com/)，但推出一段时间后才用于生产环境。不管怎么说，仅靠一个消息队列管理产品是无法说服大多数企业考虑使用公有云的。一个分布式的存储解决方案，可以和你的数据一样大规模弹性扩展，而不需要任何额外的运维投入。

正如 AWS 的 Mike Deck 在投票的热潮中在 Twitter 上所说的那样，「**我认为你没有体会到，在 00 年代末，拥有几乎无限的、高度耐用的、随用随取的存储，不需要你管理任何硬件，是一场多么大的革命。**」

还记得你必须每七天循环备份一次你的驱动器的年代吗？或者把一整车的数据备份磁带开到异地的 DR 位置吗？但，与 S3 一起长大的一代人是不记得这些事的。

但 S3 已经不仅仅是一个数据存储库。作为一个静态网络服务器，S3 为[成千上万的网站](https://www.similartech.com/technologies/amazon-s3)提供内容，包括 Netflix、维基百科和纽约时报。事实上，世界已经对 S3 的 API 进行了「标准化」，以至于谷歌的同类竞品[对 S3 API 的支持也是开箱即用的](https://cloud.google.com/storage/docs/interoperability)。

这就是为什么，当 S3 在某个地区出现[罕见的可用性突发事件](https://www.theregister.co.uk/2017/03/01/aws_s3_outage/)时，似乎有[一半的互联网服务](https://www.theregister.co.uk/2017/03/02/aws_s3_crash_result_of_fatfingered_command/)都会瘫痪。很难想象其它云服务 —— 也许除了 CDN，比如与之密切相关的 CloudFront —— 会有这样的影响。在这一点上，S3 是基本的互联网基础设施，它将长期继续存在，因为…

## S3 是一个工程奇迹

分布式存储仍然是计算机科学中最难的问题之一，尤其是在规模上。历史上[出现过很多存储管理服务](https://en.wikipedia.org/wiki/Gnolia)，但都因为无法保持客户数据的完整性而被淘汰，而数据是客户最宝贵的资源。

考虑到这一点，S3 的[耐用性保证](https://docs.aws.amazon.com/AmazonS3/latest/dev/DataDurability.html) —— 11 个 小数点后的 9，你在开玩笑吗？—— 代表了一个令人瞠目结舌的工程壮举。从这个角度来看，你个人被流星击中的可能性比丢失一百万个 S3 对象中的一个的[可能性要大……大 400 倍](https://wasabi.com/blog/11-nines-durability/)。看看 S3 副总裁 Mai-Lan Tomsen Bukovec 的这个相当惊人的 [re:Invent 主题演讲](https://www.youtube.com/watch?v)，尽量不要被这些数字吓到：百万亿字节的数据，几十万亿的对象，超过 235 个微服务，将这些数据分布在不知有多少物理设施上。

她说的是规范的「正确性验证算法」、松散耦合系统之间的校验，以及硬盘驱动器何时会失效的复杂精算预测模型。AWS 有自动化的「耐久性审计」，反复抓取 S3 数据的每一个字节，以验证当你检索你存进去的数据时是正确的。他们不断地更新这些工具，基于他们从近 15 年来在难以想象的规模下运营 S3 的经验。

所有这些，都是为了我七年前能在命令行下输入「s3 sync」上传随机的源代码文件。说实话，当时这让我觉得有点不值。

当然，S3 多年来增加了大量的功能，有些功能比其它功能更专业（ [S3 接入点 / S3 Access Points](https://aws.amazon.com/s3/features/access-points/)，有人知道这是啥东西吗？） ，但核心价值理念没有改变：你想放多少个对象就放多少个，想存储多久就存储多久，而且它们永远不会当机。驱动器故障，数据中心离线，但 S3 仍然存在。这就是为什么我们开发人员认为它是理所当然的，你可以围绕它建立整个架构：就像太阳升起一样，S3 会在早上出现，除非发生行星灭绝事件。这就是它真正的、毫无疑问的伟大之处。

## 没有 S3，你就无法拼读 s3rverless

当然，当我们大多数人听到「无服务器」这个词时，我们的大脑会跳到一个不同的服务 —— AWS Lambda，这个最初的 FaaS （Function as a Service / 函数即服务）开启了一代无状态应用软件和 HackerNews 的讨论焦点。(在 #CloudMadness 的投票中，Lambda 紧随其后，这并非偶然）。

然而，多年来一直在 iRobot 构建无服务器应用程序的 Ben Kehoe 在民意调查中极力主张使用 S3，他告诉我，「S3是无服务器云计算的缩影，」他还说，「它解决了一个大家都需要解决的非常困难的问题，它有一个（相对）简单的 API，可以扩展到任何你的互联网服务能产生的存储访问流量，但你只需要按标准资费支付存储成本。而且，它的性能不断得到改善，不需要用户采取任何行动」。

发明 Lambda 的 Tim Allen Wagner 说，Lambda「实际上是作为 S3 的一个分支开始的，而不是 EC2。因此，S3 给世界带来了另一个革命性的东西！」

没错：整个无服务器革命的起点是把她当作一种为 S3 事件建立触发器的服务开始的。Wagner 记得他职业生涯中「最可怕的时刻」之一是将 Lambda 与 S3 整合在一起：「在那些日子里，这就像将一根消防管指向一个迪克西杯。幸运的是，S3 有一个惊人的架构和团队，Lambda 成长为非常大的「鞋子」，可以大规模地使用它。」

「虽然 S3 可能是有史以来最伟大的云服务，」Kehoe 补充说，「Lambda 也值得称赞，它成功地改变了云计算用户的关注点，从「在我的服务器中，这部分是他人管理的云计算服务，是有用的」转移到「哇，我可以用这些服务做**所有的事情**」。这是计算资源托管管理（云计算）的一个进化步骤，但它彻底改变了开发者们的思维。」

这就是真正的底线，不是吗？S3，以及其它一些基础性的 AWS 服务，例如 EC2 和弹性负载平衡器，建立了一些基本要素，使得在过去十年里，更高层级的产品创新出现了寒武纪式的爆发。虽然 S3 可能不再是闪亮的新事物，但它值得我们回过头来欣赏一下 AWS 这些年来为我们提供的[存储优化服务](https://acloudguru.com/course/introduction-to-optimizing-data-storage-in-aws)，像发动机一样在引擎盖下默默工作着，其实它并不简单。

毕竟，要站在云层之上看世界，才算是站在巨人的肩膀上。而 S3 就是一个巨人。

（作者 Forrest Brazeal 是 AWS 无服务器产品布道者和企业架构师，曾为从初创公司到财富 50 强的公司领导过云计算资源采购部门。封面摄影作者：Stephen Andrews）
