オブジェクトストレージ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
オブジェクトストレージのアーキテクチャ

オブジェクトストレージ英語: Object Storage)とは、データをオブジェクト単位で扱うストレージアーキテクチャである。スケーラビリティに優れるため、主にオンラインストレージで利用されている[1]

概要[編集]

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

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

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

詳細[編集]

概念図

データのアクセス方法[編集]

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

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

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

データの格納方法[編集]

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

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

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

欠点[編集]

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

コンポーネント[編集]

サーバ構成の一例

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

Proxyノード[編集]

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

ストレージノード[編集]

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

ハードウェア[編集]

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

実装例[編集]

パブリッククラウドサービス[編集]

オープンソースソフトウェア[編集]

クローズドソースソフトウェア[編集]

関連項目[編集]

出典[編集]

  1. ^ ストレージの基礎”. 2017年12月26日閲覧。
  2. ^ Finding a needle in Haystack: Facebook’s photo storage”. 2017年12月26日閲覧。
  3. ^ ストレージノードのインストールと設定”. 2017年12月26日閲覧。
  4. ^ Los Alamos National Laboratory likes it, puts Scality's RING on it”. 2017年12月26日閲覧。
  5. ^ a b c d オブジェクトストレージとは”. 2017年12月26日閲覧。
  6. ^ 共通テーマ: アドバンスト・ファイルシステム・インプリメンター・ガイド 第10回”. 2017年12月26日閲覧。
  7. ^ What features differentiate HDFS and OpenStack Object Storage?”. 2018年1月2日閲覧。
  8. ^ a b 第3回 ConoHaオブジェクトストレージを使ってみよう”. 2017年12月26日閲覧。
  9. ^ Object Storage API”. 2017年12月26日閲覧。
  10. ^ 用語解説辞典”. 2017年12月26日閲覧。
  11. ^ 日本発、S3互換クラウドストレージ構築パッケージ「Cloudian」”. 2017年12月26日閲覧。
  12. ^ ストレージ バケットの作成”. 2017年12月26日閲覧。
  13. ^ a b 第10回 オブジェクトストレージの宿命、容量効率を高める方法とは?”. 2017年12月26日閲覧。
  14. ^ OpenStack: Swift 【API 編】”. 2017年12月26日閲覧。
  15. ^ 5.2 オブジェクト・ストレージのメタ検索”. 2017年12月26日閲覧。
  16. ^ オブジェクトストレージのおすすめ用途”. 2017年12月26日閲覧。
  17. ^ a b 5.1 オブジェクト・ストレージを利用するには?”. 2017年12月26日閲覧。
  18. ^ a b c OpenStack Swiftを使ってクラウドストレージサービスを構築する”. 2017年12月26日閲覧。