写点什么

S3 老态已显

Chris Riccomini

  • 2024-07-03
    北京
  • 本文字数:1717 字

    阅读完需:约 6 分钟

大小:891.68K时长:05:04
S3 老态已显

本文最初发表于 Materialized View 网站,由 InfoQ 中文站翻译分享。


毋庸置疑,S3 是一项工程方面的壮举。构建和运维一个超大规模的存储系统 需要顶级的灵活性。但是,S3 的特性集正在逐渐落后于它的竞争对手。值得注意的是,S3 缺少比较并交换(compare-and-swap,CAS)操作,而其他竞争对手均支持该操作。它还缺少多区域桶和对象追加功能。甚至连 S3 Express 的表现也难以尽如人意。


这些缺失的特性对于数据湖和离线使用场景来说并不重要。但是,新的基础设施正在使用对象存储作为它们的主持久化层,这一点让我感到非常兴奋。在这方面,S3 的特性差距将会是一个更大的问题。



缺失前置条件功能


前置条件(precondition)也被称为比较并交换(CAS)、条件化、如果无匹配(If-None-Match)、如果匹配(If-Match)等,该特性允许客户端仅在满足特定条件时才写入对象。客户端可能希望仅在对象不存在时才写入对象,或者仅在客户端上次读取对象后未更改的情况下才更新对象。CAS 使这一切能够得以实现。这种操作通常用于分布式系统中的锁和事务。



S3 是唯一不支持前置条件的对象存储。所有其他的对象存储均支持该功能,如 Google Cloud Storage (GCS)、Azure Blob Store (ABS)、Cloudflare Ridiculously Reliable (R2) 存储、Tigris、MinIO。


开发人员被迫使用单独的事务性存储 (如 DynamoDB) 来执行事务操作。在 DynamoDB 和 S3 之间构建两阶段写入在技术上并不困难,但它很令人烦躁,而且会导致丑陋的抽象。


S3 Express One Zone 并不是真正的 S3


当 S3 Express One Zone (S3E1Z) 刚推出时,我真的很兴奋。但是,在它上面花的时间越多,我对它就越无感。第一个问题是 Amazon 为 Express 引入的新的目录桶类型。



但问题并不局限于此。S3E1Z 缺少大量的标准 S3 特性,包括对象版本的支持、桶标签、对象锁、对象标签和 MD5 校验和 ETags。完整的清单非常令人震惊。



我们不能像对待普通的 S3 桶那样对待 S3E1Z 桶。与 CAS 操作一样,开发人员必须围绕这些缺陷进行设计。而且,由于 S3E1Z 不是多区域的,开发人员需要为多个可用性区域构建群体写入(quorum writes),以获得更高的可用性。


考虑到 S3E1Z 的高存储成本 (0.16 美元 /gb),它是 Elastic Block Store(EBS) 通用 SSD (gp3) 成本的两倍,S3E1Z 看起来更像是一个昂贵的 EBS,而且只实现了一半的 S3 API。


缺少双区域 / 多区域桶


S3 没有双区域或多区域桶。这样的桶对于更高的可用性非常有用。谷歌在这方面提供了 广泛的可选方案。



虽然这不是强制的,但拥有更高的可用性桶当然是件好事。


接受现实


我们的梦想是为开发人员提供一个具有所有这些特性的对象存储:低延迟、支持前置条件、双区域 / 多区域等等。但我们必须面对现实,工程师面临着这样的选择:放弃 S3 或围绕这些差距进行构建。

Turbopuffer 是我最喜欢的一个完全放弃 S3 的公司样例。



他们的赌注是 S3 最终会支持前置条件。这种冒险似乎是合理的,因为 Amazon 拥有所有必需的构建块 (DynamoDB 和 S3),而且每个竞争对手都在这方面击败了他们。对于正在开发的云原生 LSM,我也下了类似的赌注。


这种方式的挑战在于云之间的网络成本。所有的云提供商都对网络出口进行收费。如果数据要传输到亚马逊网络服务 (AWS) 之外的基础设施上,那么将产生网络出口费用。但是,AWS 用户的跨云成本并没有想象中的那么糟糕。Turbopuffer 的创始人兼首席执行官 Simon Eskildsen 关于该方面写过很多文章。



这样做的好处是,Turbopuffer 构建了一个优雅而简约的设计,它 只有三个组件,即 Turbopuffer 二进制文件、RAM/SSD 缓存和 Google Cloud Storage。


对许多人来说,这似乎有些极端。另一种方法是将元数据存储在 S3 之外的事务性存储中。



一旦开启了单独的元数据平面,你就会发现它的其他使用场景。认识到 S3 是一个对象存储而不是文件系统,这是进入启蒙斜坡(在新技术或新思想出现后,人们逐渐认识到其价值和应用,开始广泛采用的过程。——译者注)的必经之路。通过采用 DynamoDB 作为元数据层,系统可以获得很多好处。


最终,是放弃 S3 还是接受它的缺点取决于系统的使用场景和设计目标。但是,如果 S3 支持前置条件并且 S3E1Z 具有统一的 API,那么这个决定将会容易得多。


声明:本文由 InfoQ 翻译,未经许可禁止转载。

2024-07-03 14:004069

评论

发布
暂无评论
发现更多内容

Spring Boot Serverless 实战 | Serverless 应用的监控与调试

Serverless Devs

Moviepy+OpenCV-python结合进行音视频剪辑处理 | 社区征文

老猿Python

音视频 Moviepy 数字图像处理 新春征文 OpenCV-Python

sql 学习笔记

孙青

在线IEEE浮点二进制计算器工具

入门小站

工具

王者荣耀商城异地多活架构设计

swallowluo

架构实战营 #架构实战营 「架构实战营」

面向推理训练一体化的 MNN 工作台

阿里巴巴终端技术

端智能

人手一个数字人还有多远?百度吴甜做客央视《对话》

百度大脑

网易传媒Go语言探索

月读

golang 开源治理

零代码技能平台技术实践探索

OPPO小布助手

人工智能 低代码 零代码 智能助手 对话系统

奥运吉祥物——冰墩墩太难抢了,Python给你画一个

王小王-123

Python

第八节:SpringBoot指定配置文件配置三

入门小站

Java

vivo 评论中台的流量及数据隔离实践

vivo互联网技术

mongodb 中台 分布式

恒源云(GPUSHARE)_社区大佬的论文小记(Flooding-X)

恒源云

深度学习 计算机视觉

Lazada D11 体验升级技术实践

阿里巴巴终端技术

ios android 客户端开发 移动端 体验优化

推荐系统基础结构总结 | 社区征文

张浩_house

推荐系统 大数据开发 新春征文

JVM进阶(十二):JAVA 可视化分析工具

No Silver Bullet

JVM 监控工具 2月月更

golang 面试总结

yuexin_tech

golang 面试

卷起来了!软件开发正在越来越快……

飞算JavaAI开发助手

你在央视春晚抢红包,京东云却在后台玩起了“剧本杀”

脑极体

云效x钉钉:让研发工作更简单

阿里云云效

阿里云 云原生 钉钉 研发 云钉一体

金融云原生漫谈(七)|云原生时代:从传统运维到智能运维的进阶之路

York

容器 云原生 金融科技 智能运维

Web Components 系列(二)—— 关于 Custom Elements

编程三昧

前端 组件化 2月月更

Go 语言入门很简单:技巧和窍门(Tips and Tricks)

宇宙之一粟

Go 语言 2月月更

优秀程序员的30种思维--行为准则篇(11/100)

hackstoic

辩论这件事,其实不止奇葩说

Taylor

如何用建木CI导入导出Redis数据

Jianmu

DevOps CI/CD Redis 数据结构

监控治理有效性评价体系

焦振清

监控治理 评价体系

读 Go 源码,可以试试这个工具

AlwaysBeta

Go golang 源码 源码解析 Go 语言

一文读懂 Serverless 的起源、发展和落地实践

Serverless Devs

2月月更

渗透测试之中间件漏洞复现

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

关于大数据计算框架Flink内存管理的原理与实现总结 | 社区征文

张浩_house

大数据 flink 新春征文

S3 老态已显_云计算_InfoQ精选文章