オブジェクトストレージ

オブジェクトストレージとは



オブジェクトストレージは、データをオブジェクトと呼ばれる単位で扱うストレージアーキテクチャです。主にオンラインストレージで利用されており、そのスケーラビリティ(拡張性)が大きな特徴です。

概要



オブジェクトストレージの最大の利点は、その高い拡張性です。例えば、Facebookのように大量の写真を保管したり、Amazon S3のように膨大な顧客データを保存するのに適しています。容量の拡張は、ストレージサーバー(ノード)を追加するだけで、システムを停止させることなく行えます。ペタバイト(PB)級の規模にも容易に拡張でき、ロスアラモス国立研究所では500PBのストレージに採用されています。

オブジェクトストレージの説明で、データとメタデータを結合してオブジェクトとして扱う点が強調されることがありますが、これはオブジェクトストレージの特徴の一部に過ぎません。LinuxファイルシステムであるXFSのように、拡張属性を使って属性とデータを一緒に格納する仕組みも存在しますが、これだけではオブジェクトストレージとは言えません。オブジェクトストレージは、後述するデータアクセス方法やデータ分散の仕組みなど、アーキテクチャ全体として理解する必要があります。

PB級の分散ストレージの仕組みとしては、Hadoop Distributed File System (HDFS) や Google File System なども存在します。これらはビッグデータ処理を考慮し、大きなファイルサイズに最適化された設計となっています(例えば、ファイルが100MB程度の大きさに分割されて保存されるなど)。一方、オブジェクトストレージは、ファイルサイズに関わらず、どのような大きさのデータにも適した設計であるとされています。

詳細



データのアクセス方法



オブジェクトストレージ内のデータは、固有のID(URI)を持ち、通常はRESTful APIを通じてアクセスします。WebブラウザなどのアプリケーションがサーバーにAPIリクエストを送信することで、データの読み込み(GET)や書き込み(PUT)などの操作を行います。APIとデータIDを指定してアクセスするため、ファイルサーバーやNASのように、WindowsのエクスプローラーやmacOSのFinderから直接アクセスするためには、FUSEアダプターなどが必要になります。

オブジェクトストレージでは、データを直接更新したり上書きしたりすることはできません。データを更新する場合は、新しいデータを書き込み、古いデータを削除するという手順を踏む必要があります。

APIに関しては、Amazon Web Services S3 APIが事実上の標準(デファクトスタンダード)となっており、S3互換を謳う製品も多く存在します。

データの格納方法



オブジェクトストレージには、ディレクトリという概念が存在しません。データは、バケットまたはコンテナと呼ばれるフラットな空間に格納されます。バケットは複数作成することも可能です。

データの可用性を高めるために、同じデータを複数のストレージに分散して記録するレプリケーションという仕組みが用いられます。これにより、RAIDなどの高可用性技術を別途準備する必要がありません。また、容量効率を高めたイレイジャーコーディングという技術が実装されているオブジェクトストレージも存在します。

データとメタデータを合わせてオブジェクトとします。メタデータはユーザーが自由に登録でき、例えば、画像のメタデータとして被写体や場所を登録し、検索や抽出に利用することができます。

欠点



オブジェクトストレージを利用する上での主な欠点は、既存のアプリケーションを変更する必要がある点です。特に、APIへの対応が必須となります。また、データの部分的な読み書きができないため、頻繁な部分更新を必要とするデータベースや、高速なI/Oを必要とするトランザクション処理には適していません。しかし、バックアップ、アーカイブ、サーバーログの保存などには適しています。

コンポーネント



オブジェクトストレージは、主にProxyノードとストレージノードから構成されます。負荷分散のためにロードバランサが利用されることもあります。

Proxyノード: APIの提供やリクエストの管理を行います。クライアントからのAPIリクエストを受け取り、ストレージノードに指示を出します。データが保存されているノードの場所も管理します。例えば、OpenStack Swiftでは「Ring」と呼ばれるアルゴリズムが使用されています。Proxyノードは、クライアント側のパブリックネットワーク(LAN)と、ストレージノード側のプライベートネットワークの2つのネットワークインターフェースを持ちます。
ストレージノード: 実際にデータを格納します。Proxyノードのプライベートネットワーク側に接続され、通常は可用性を高めるために複数のノードで構成されます。XFSなどのデータ属性を保持できるファイルシステムを利用します。オブジェクトストレージはAPIを通じてアクセスしますが、これはクライアントからストレージ全体を見た場合の話です。ストレージノード単位で見ると、最終的にはオブジェクトは既存のファイルシステムに保存されます。

ハードウェア



オブジェクトストレージは、SANで利用される高価なファイバーチャネルを使用せず、低速ながら大容量で低価格なSATA HDDを活用するなど、コモディティ・ハードウェアの活用を基本設計としています。ストレージノード間はTCP/IPで通信され、SCSIプロトコルは使用されません。そのため、ストレージにはHDD、ネットワークにはイーサネットが用いられるのが一般的です。ファイバーチャネルやテープデバイスは主流ではありません。

実装例



パブリッククラウドサービス



Amazon Simple Storage Service (S3)
Google Cloud Storage
Microsoft Azure Blob Storage

オープンソースソフトウェア



Ceph
OpenStack Swift

クローズドソースソフトウェア



Haystack (Facebook)
ヤフー Dragon

関連項目



分散ファイルシステム
ネットワークアタッチトストレージ (NAS)
ストレージエリアネットワーク (SAN)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。