S4 — Squished S3
透明的 GPU S3 压缩网关
何时收回成本?
示例:可压缩 S3 存储每月 $10,000
如果可压缩 S3 存储支出为每月 $10,000,降低 50–80% 约等于 $5,000–$8,000/月的可避免总使用费 — 不含 S4 软件费、运行计算和工作负载差异。
自包含的 S4 透明 S3 压缩网关 EC2 AMI,预装 NVIDIA nvCOMP GPU codecs。在 GPU instance (g4dn / g5 / g6) 上启动,将 S3 clients 指向它,即可将可压缩数据的 S3 storage bytes 减少 50–80% — 无需修改应用。
S4 是一个即插即用、S3-compatible gateway,会在对象进入 bucket 的途中透明压缩每个对象。该 AMI 捆绑 Amazon Linux 2023、NVIDIA driver、container runtime 和 S4 的 GPU build (nvCOMP Bitcomp / zstd / GDeflate),并预装为 systemd service — 无需设置 CUDA、driver 或 nvCOMP。在 GPU instance 上,它会按对象将整数和列式数据 (Parquet, ORC, postings, time-series) 路由到 nvCOMP GPU codecs,将文本或日志数据路由到 CPU zstd。已压缩的输入会原样通过。
面临挑战
您的 S3 存储账单与您保留的字节数呈线性增长,而其中大部分字节(日志、JSON、Parquet/ORC)都是高度可压缩的。由于更改数据存储方式不值得投入工程精力,您的应用程序会以未压缩的方式写入它们,因此您在为并不真正需要的字节付费。这导致账单每月攀升,而这些数据原本可以缩小 3× 甚至更多。
工作原理
- 1
启动 GPU AMI
在您自己 VPC 内的 g4dn、g5、g6 或 g6e 实例上启动 S4 AMI — 预装了 NVIDIA 驱动程序和 nvCOMP,且 S4 作为 systemd 服务运行的 Amazon Linux 2023。
- 2
重定向您的 S3 客户端
只需修改 boto3 / aws-cli / Spark / Trino / DuckDB 客户端的端点 URL;SigV4 认证、分段上传和 Range GET 将保持原样运行。
- 3
传输时进行透明压缩
在每次 PUT 操作时,分发器会对 payload 进行采样,并将其路由至最佳编解码器 — 文本/日志采用 CPU zstd,列式整数采用 GPU nvCOMP Bitcomp,已压缩的数据采用 passthrough — 而 GET 则返回原始字节。
产品亮点
预装 GPU compression:NVIDIA driver + nvCOMP (Bitcomp / zstd / GDeflate) 已内置到 AMI。启动在 g4dn / g5 / g6 上,S4 会自动对整数和列式数据使用 GPU。
可压缩数据的 S3 storage bytes 减少 50–80%,并内置按 bucket 实测的节省报告 (s4 savings)。
零应用修改,无 lock-in:S3 wire-compatible endpoint;即使没有 gateway,也可通过 Apache-2.0 CLI / Python / fsspec 工具读取对象。
包含内容
- 基于 Amazon Linux 2023 的 EC2 AMI,预装了 NVIDIA 驱动程序和 nvCOMP,且 S4 作为 systemd 服务运行,按您常规 AWS 账单上的实例小时数计费。
- 支持的 GPU 实例系列:g4dn、g5、g6 和 g6e。
- 与 S3 协议兼容的端点 — 支持 SigV4 / SigV4a 认证、分段上传、Range GET 和 SSE — 可作为任何 S3 SDK 或工具的直接替换方案。
- 按 payload 进行编解码器分发,支持 CPU zstd、GPU nvCOMP Bitcomp / zstd / GDeflate 以及 passthrough — 通过熵和魔术字节采样自动选择,已压缩的输入将被直接透传。
- 节省报告:在部署前,s4 estimate 可预测现有存储桶的节省空间,而 s4 savings 台账则会报告实际节省 of 存储字节和金额,并包含 Prometheus 指标和 Grafana 仪表板。
- 无锁定读取工具:Apache-2.0 的 s4-codec CLI、s4-codec Python 包、s4fs fsspec 适配器(pandas / pyarrow / DuckDB)以及 WASM 浏览器解码器,均可在无需网关的情况下读取对象。
- Day-2 运营工具:s4 migrate 可对现有对象进行追溯压缩,s4 recompact 可对冷数据进行再压缩,同时 Range GET 将通过与 Parquet/ORC 读取器兼容的边车帧索引来保持高速运行。
适用场景
摄取大量日志或 JSON(nginx 访问日志、应用日志)的团队,且其 S3 账单主要由高度可压缩的文本构成。
存储 Parquet/ORC 和列式整数 data(倒排列表、时间序列),并希望在保持 Range GET 分析速度的同时缩减占用空间的数据湖。
每月 S3 账单超过约 $3,000,或者已经运行 GPU 实例,且节省的存储费用可以轻松覆盖 GPU 计算成本的组织。
希望在不重写应用程序代码的情况下引入压缩的 ETL / ML 流水线 — 只需重新指向 S3 端点。
案例与基准测试
Elasticsearch frozen-tier 存储压缩
在真实的 Elasticsearch 9.4.2 集群上进行端到端测试(ES → S4 → MinIO,400 万文档的日志索引)。在默认的 zstd-3 下压缩 frozen-tier 快照存储库,可减少 27%(标准)/ 22%(LogsDB)的存储空间 — 使用 s4 recompact 时最高可达 33% — 而冷 frozen 分析查询保持在直接查询的 ±1ms 以内,快照实际耗时几乎没有增加。与 LogsDB 结合使用时效果累加,生成的存储库比普通标准默认写入小 2.82×。
查看基准测试OpenSearch searchable-snapshot 存储压缩
在真实的 OpenSearch 2.19 集群上进行端到端测试(OpenSearch → S4 → MinIO,400 万文档的日志索引)。使用 S4 压缩 searchable-snapshot S3 存储库,可减少 28%(默认)/ 17%(best_compression / zstd / zstd_no_dict)的存储空间。由于 OpenSearch 的 index.codec 仅压缩 stored fields,S4 通过压缩 doc-values 和 postings,在原生 zstd 编解码器之上仍能额外节省 ~17%。在本次本地测试中,remote_snapshot 搜索延迟保持在直接查询的 ~1.5ms 以内(S4 性能相同或更快)。repository-s3 配合需要 S4 的 --logical-etag 标志(已在此项工作中添加)。
查看基准测试Grafana Loki chunk 压缩
在真实的 Grafana Loki 3.3.2 实例上进行端到端测试(Loki → S4 → MinIO,400 万行日志)。使用 S4 zstd-3 重新压缩 Loki 的 snappy chunk,可将 bucket 存储空间减少 18.4%(zstd-9 为 19.3%)。坦白地说,如果将 Loki 自身的 chunk_encoding 切换为 zstd,新 chunk 可节省 38% — 效果优于 S4 — 因此 S4 的价值在于处理只读且不可变的现有 snappy 历史积压数据,而非全新项目(属于互补而非替代)。读取方面:通过 S4 进行整块 GET 会多出 ~1.7ms 延迟(字节完全一致;在本地测试中为解压成本)。与 OpenSearch 不同,Loki 不需要 --logical-etag 标志(但推荐使用以确保 ETag 的正确性)。
查看基准测试Kafka 分层存储压缩
在真实的 Apache Kafka 3.9.1 集群上进行端到端测试(KIP-405 分层存储 + Aiven 插件 → S4 → MinIO,每个主题 600k 条记录)。使用 S4 zstd-3 重新压缩分层的日志段,按生产者的 compression.type 划分,存储字节数分别减少了:none(未压缩)74.7% / snappy 22.6% / lz4 20.6% / zstd 0.0%。坦白地说,如果生产者自身发送 zstd,它会在源头缩小段大小(43.9 MB — 这与 S4 在 none 上达到的最低限制 42.0 MB 处于同一水平),而 S4 对于已经是 zstd 的日志段几乎没有任何额外帮助。因此,S4 的价值主要在于 none/snappy/lz4 以及无法更改生产者的场景中的日志段(属于互补而非替代)。在冷数据远程拉取(remote-fetch)中,没有表现出一致的 S4 延迟惩罚(本地运行,单次噪声样本)。与 OpenSearch 不同,Kafka 不需要 --logical-etag 标志(但推荐使用以确保 ETag 的正确性)。
查看基准测试冷 Parquet 再压缩
在本地针对 MinIO 进行测试(2,000,000 行 ECS 风格日志的 Parquet,13 列)。新的 s4 parquet-recompact 子命令可将数据湖冷 Parquet 的列块(column chunks)重新编码为 zstd,并写回原生 Parquet — pyarrow / Spark / Trino / DuckDB 可以直接读取,且读取路径中不需要 S4。相较于 snappy(数据湖默认)它缩减了 36.6% 的存储,未压缩缩减了 51.7%,gzip 缩减了 3.8%,已经是 zstd 的则为 0.0%(跳过)。每一份输出在数值上都完全一致(通过 pyarrow table.equals 验证)。坦白地说,如果将写入端的编解码器设置为 zstd,在源头就能缩减到同等水平(79.4 MB),因此 S4 的切入点是现有的 snappy/none/gzip 历史积压数据,毕竟没有人会为了这些数据重新运行写入作业(属于互补而非替代)。在进行就地覆盖之前,每个对象都会按行组(row group)进行值验证(内存受限),且绝不会覆盖无法验证的对象。
查看基准测试常见问题
如果我停止运行 S4,还能读取我的数据吗?
是的。压缩的对象及其 S4IX 边车仍保持 S3 原生状态,并可继续使用常规的 aws-cli 或 boto3 进行列出和下载。要恢复原始 payload,您可以使用 Apache-2.0 的 s4-codec CLI、s4-codec Python 包、s4fs fsspec 适配器(pandas / pyarrow / DuckDB)或 WASM 浏览器解码器 — 这些全部是开源的纯解码工具,无需运行网关。
我需要修改我的应用程序吗?
不需要。S4 使用 S3 协议 — 相同的 SigV4 认证、分段上传、Range GET 和 SDK 调用。您只需更改 boto3 / aws-cli / Spark / Trino / DuckDB 客户端指向的端点 URL;无需其他改动。
我的账单中具体哪一部分会变便宜?
仅限存储字节数。对于可压缩数据,S4 可将 S3 中的存储字节数减少 50–80% — 例如,1 TiB 的 nginx 日志可以压缩到约 6.6 GiB。请求成本(PUT/GET)、egress 和 GPU 计算保持不变。由于存在 GPU 实例成本,S4 通常在每月 S3 账单大约超过 $1,000 时才划算(使用竞价实例或如果您已经运行 GPU,这一门槛会更低)。
该 AMI 支持哪些 GPU 实例?
EC2 AMI(预装 Amazon Linux 2023、NVIDIA 驱动及 nvCOMP)运行在 g4dn、g5、g6 和 g6e 实例上,在您的常规 AWS 账单上按实例小时计费。没有许可证密钥 — 计量通过 AWS Marketplace 处理。
S4 在哪里运行?谁能看到我的数据?
您在自己的 AWS 账户和 VPC 中启动该 AMI,它会与您自己的 S3 存储桶通信 — 没有任何数据离开您的账户,且路径中不存在第三方服务。它支持 TLS 和服务端加密(SSE)。
为什么更便宜
假设在 S3 Standard (us-east-1) 上存储 100 TB 可压缩约 3× 的数据 (Parquet/ORC、JSON 等)。
- S3 存储 (100 TB)
- $2,300 / 月
- 月度合计
- $2,300 / 月
- S3 存储 (压缩后 34 TB)
- $800 / 月
- S4 实例 (g4dn.xlarge + 软件费)
- $385 / 月
- 月度合计
- $1,185 / 月
按写入负载选择 S4 实例
| 写入负载 | 推荐实例 | S4 实例费用 | 存储 100 TB 时的合计 |
|---|---|---|---|
| ~1 TB / 日 | g4dn.xlarge | $385 / 月 | $1,185 / 月 (−49%) |
| ~10 TB / 日 | g6.xlarge | $590 / 月 | $1,390 / 月 (−40%) |
| 高并发 / 100 TB / 日 | g6.4xlarge | $965 / 月 | $1,765 / 月 (−23%) |
仅供参考。存储费用基于 S3 Standard (us-east-1) 的公开费率 ($0.023/GB·月) 和 g4dn / g6 的 EC2 按需价格。S4 软件费用通过 AWS Marketplace 按小时计费,独立于 EC2 费用 (1 年 Savings Plan 通常可将 EC2 部分降低 30–40%)。实际节省取决于数据的可压缩性 (Parquet、JSON 约 3–5×;文本日志约 4–10×) 以及读写模式。
计费模式
按小时计费的软件费用 + 你选择的 GPU EC2 (g4dn / g5 / g6)。按 instance type 计量,提供年度选项,无需 license keys。