To do・In progress・Doneに区分されたカンバンボード
ニュース深掘り

圧縮の「使いにくさ」を解消するストレージ階層化の仕組み

目次を見る

エンタープライズ環境に存在するデータの約80%は、ログ・CSV・バックアップといった非構造化データだとされています。Zstd(Meta社が開発した高速圧縮アルゴリズム)を使えば2:1から3:1の圧縮率が得られるにもかかわらず、多くの組織でこれらのデータが無圧縮のまま高価なストレージに置かれ続けています。なぜ技術的に解決できる問題が放置されるのか、その理由は「tarball(ターボール)の罠」と呼ばれる使い勝手の問題にあります。

tarball の罠とは何か

tarball とは `tar czf archive.tar.gz project/` のようなコマンドで作成される、複数ファイルをひとつのアーカイブにまとめた圧縮ファイルのことです。一見便利に見えますが、一度ファイルをtarballに格納すると、ファイルシステム上からそのファイルが「消える」という問題が生じます。

`find` コマンドによる検索も、`grep -r` によるテキスト検索も、ファイルマネージャーでのブラウジングも、すべてアーカイブ内のファイルには届きません。さらに致命的なのは、100GBのtarballから5MBのファイル1つを取り出すためだけに、アーカイブ全体を展開しなければならない点です。CPUとI/Oを使い切って待ち続ける体験が、チームに「圧縮は危険」という印象を与えます。

こうして「アクセス性と圧縮は二者択一」という認識が定着し、理屈では分かっていても圧縮をスキップするという判断が生まれます。ストレージは「十分安い」という感覚がこれを後押しします。しかし実際のコストはストレージ代金だけでなく、バックアップの転送量・クラウドの送受信費用・電力と冷却費用にも広がっており、予算の複数の行に分散するため見えにくくなっています。

FUSE を使わない透過的な展開の仕組み

この問題に対するアプローチのひとつが、データを圧縮・階層化しながらも、アプリケーションからは通常のファイルとして見え続ける「透過的な圧縮ストレージ」です。

Rustで実装されたオープンソースの階層化エンジン「HuskHoard」は、その具体例として注目されています。ファイルを低コストの階層(HDDやクラウドストレージ、LTOテープなど)に退避させつつ、元のディレクトリにはファイルが存在しているように見せます。

透過的なファイルシステムを実現する既存の方法としてFUSE(Filesystem in Userspace:カーネルを変更せずにユーザー空間でファイルシステムを実装する仕組み)があります。しかしFUSEはすべての読み書きをユーザー空間のドライバー経由でルーティングするため、レイテンシの増加と、そのドライバーへの依存という問題を抱えます。

HuskHoardが採用しているのはFUSEではなく、Linuxカーネルの `fanotify` APIです。fanotifyはもともとウイルススキャナーなどのセキュリティソフトがファイルアクセスを監視するために設計されたカーネル機能です。ファイルが開かれた瞬間にカーネルがそのプロセスを一時停止し、HuskHoardのデーモン(バックグラウンドで動くプロセス)がデータを復元してからプロセスを再開します。アプリケーション側には何も変更が要りません。

# HuskHoard がアーカイブ済みのファイルを開こうとすると
# カーネルが fanotify イベントを発行 → デーモンがリコール → プロセスが再開
ls -lh /archive/logs/2022/
# 通常のファイルとして表示される
grep -r 'ERROR' /archive/logs/2022/
# 透過的に読み取れる

関連技術との位置づけ

この種の「透過的な階層化」は、エンタープライズストレージの世界ではHSM(Hierarchical Storage Management:データを使用頻度に応じて自動的に異なるストレージ層へ移動する管理手法)として知られています。IBM Spectrum Scale(旧GPFS)やNetApp FPolicyなどは長年この概念を実装してきましたが、いずれもエンタープライズ向けの高価な製品です。

HuskHoardのようなオープンソース実装は、クラウドネイティブな環境やLinuxベースのストレージサーバーに向けた選択肢として位置づけられます。コンテナ環境では、永続ボリュームのコスト最適化にこの種の技術が応用できる余地があります。

Webフロントエンドの文脈で近いアナロジーを挙げると、CDNのエッジキャッシュがコンテンツをオリジンサーバーから透過的に配信するのと構造上よく似ています。データの「所在」と「見え方」を切り離すというアイデアは、ストレージに限らず分散システム全体に共通するパターンです。

整理すると、この技術スタックが解決しようとしている問題は次の3点です。

  • ファイルシステムの可視性を失わずに圧縮・外部化できること
  • FUSE を使わずカーネル API でオーバーヘッドを最小化していること
  • 既存のツール(find・grep・バックアップソフト)が無改修で動作すること

fanotify を使った透過的なリコールというアプローチは、ストレージの「使いにくさ」という長年のボトルネックに対して、カーネルの機能で正面から応えようとしている点で技術的に興味深いものがあります。Rustによる実装がメモリ安全性の観点でどこまで信頼性を担保できるか、実運用での評価が今後の焦点になるでしょう。

参考

Why Is Only 40% of Your Data Compressed? The Tarball Trap and How to Escape It

この記事について: 本記事は AI を活用して作成し、forva AI 編集部が内容を確認・監修しています。

AI 駆動開発のご相談は forva AI へ。まずはお気軽にどうぞ。