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 總帳則會報告實際節省的儲存位元組和金額,並包含 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 子命令可將資料湖 cold 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 帳戶 and 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。