オブジェクトストレージ

オブジェクトストレージ（）とは、データをオブジェクト単位で扱うストレージのアーキテクチャである。スケーラビリティに優れるため、主にオンラインストレージで利用されている。

概要
利点は容量の拡張性（スケーラビリティ）であり、Facebookのように大量の写真を格納したり、Amazon Simple Storage Serviceで大量の顧客データを保存する。容量の拡張はストレージサーバー（ノード）の追加で無停止で出来る。ペタバイト（PB）級にも拡張可能で、米国ロスアラモス国立研究所は500 PBのストレージに採用した。

オブジェクトストレージの説明にデータとメタデータを結合してオブジェクトと扱うというものがある。これは特徴の一部でしかない。LinuxのファイルシステムであるXFSには拡張属性があり、属性とデータを一つに格納する。しかしながら、これ単体をオブジェクトストレージと呼ばない。後述のアクセス方法やデータ分散の仕組み等のアーキテクチャ全体と理解される。

PB級の分散ストレージの仕組みには他にもHadoop Distributed File System (HDFS)やGoogle File Systemがある。これらはビッグデータ処理を意識した大きいファイルサイズに最適化された設計である (例：ファイルが100 MB程度の大きさに細切れにされて保存される等) のに対して、オブジェクトストレージはどのような大きさにも適した設計であるとされる。

詳細

データのアクセス方法
データは固有のID（URI）を持ち、データへのアクセスは通常RESTful APIで行う。オブジェクトストレージはウェブブラウザなどのアプリケーションがサーバにAPIリクエストを発行することでアクセスする。命令には、読み込みをするGET、書き込みをするPUTなど、がある。APIとデータIDを指定することでアクセスするため、ファイルサーバやネットワークアタッチトストレージ（NAS）のようにWindowsのExplorerやMacOSのFinderでアクセスするためには、FUSEアダプタなどを使用する必要がある。

データを直接更新したり上書きすることはできず、データを更新する際は、新しいデータの書き込みと古いデータの削除を組み合わせて行うことになる。

APIはAmazon Web Services S3 APIがデファクトとの意見もあり、S3互換を謳った製品もある。

データの格納方法
ディレクトリは持たない。フラットな空間にデータを格納する。これはバケットもしくはコンテナと呼ばれる。バケットは複数あってもよい。

同じデータを複数のストレージに分散して記録する（レプリケーション）ため、RAID等の高可用性技術を別途準備しなくても良い。容量効率を高めたイレージャーコーディングが実装されたオブジェクトストレージも存在する。

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

欠点
既存アプリケーションの変更、特にAPIへの対応が必須となる。また、データの部分的な読み書きができないため、頻繁な部分更新を要するデータベースや高速I/Oのトランザクションは適さない。バックアップ、アーカイブ、サーバーログの保存等であれば問題ない。

コンポーネント

主にProxyノード、ストレージノードからなる。負荷分散のためにロードバランサを利用することもある。

Proxyノード
APIの提供やリクエストを管理する。クライアントからAPIを受け取りストレージノードへ指令を出す。データが保存されているノードの場所も管理する。たとえば、OpenStack Swiftでは「Ring」と呼ばれるアルゴリズムが使用されている。クライアント側のパブリックネットワーク（LAN）端子と、ストレージノード側のプライベートネットワーク端子の二つを持つ。

ストレージノード
実際にデータを格納する。Proxyノードのプライベートネットワーク側に接続され、通常可用性のために複数台のノードから成る。XFS等のデータ属性を保持できるファイルシステムを利用する。オブジェクトストレージはAPIでアクセスするが、これはクライアントからストレージ全体を眺めた場合である。ストレージノード単位で見ると、最終的にオブジェクトは既存のファイルシステムで保存される。

ハードウェア
コンピュータネットワークでストレージを構成する技術にはストレージエリアネットワーク（SAN）もある。オブジェクトストレージはSANで利用される高価なファイバーチャネルを利用しない。ストレージデバイスも低速だが大容量・低価格なSATA HDDを活用する等、コモディティ・ハードウエアの活用が設計思想である。実際にストレージノード間はTCP/IPで通信され、SCSIプロトコルはやり取りされない。これら理由によりストレージはHDD、ネットワークはイーサネットである。ファイバーチャネルやテープデバイスは主流とは言えない。

実装例

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

Amazon Simple Storage Service

Microsoft Azure Blob storage

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

Ceph
OpenStack Swift

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

Haystack - Facebook

ヤフー Dragon

関連項目
 分散ファイルシステム
 ネットワークアタッチトストレージ
 ストレージエリアネットワーク

出典

補助記憶装置
コンピュータネットワーク