序章

柔軟でスケーラブルなデータストレージは、最新の技術とツールで開発されているほとんどのアプリケーションとサービスのベースライン要件です。 大量または少量の画像、ビデオ、またはテキストのブロブを保存するかどうかにかかわらず、アプリケーション開発者は、ユーザー生成コンテンツ、ログ、バックアップなどを保存および取得するためのソリューションを必要としています。

今日の複雑な展開、コンテナ、および一時的なインフラストラクチャにより、単一のサーバー上のディスクにファイルを保存するだけの時代は終わりました。 クラウドプロバイダーは、最新のアプリケーション展開のストレージニーズを満たすサービスを開発しており、それらは主にオブジェクトストレージとブロックストレージの2つのカテゴリに当てはまります。

両方を見て、それぞれの一般的な長所、短所、およびユースケースについて説明しましょう。

ブロックストレージとは

ブロックストレージサービスは比較的シンプルでおなじみです。 これらは、ネットワーク上にハードドライブなどの従来のブロックストレージデバイスを提供します。 クラウドプロバイダーは、多くの場合、任意のサイズのブロックストレージデバイスをプロビジョニングして仮想マシンに接続できる製品を持っています。

そこから、通常のディスクのように扱います。 ファイルシステムでフォーマットしてファイルを保存したり、複数のデバイスをRAIDアレイに結合したり、ブロックデバイスに直接書き込むようにデータベースを構成したりして、ファイルシステムのオーバーヘッドを完全に回避できます。 さらに、ネットワークに接続されたブロックストレージデバイスには、通常のハードドライブに比べていくつかの独自の利点があります。

  • バックアップの目的で、デバイス全体のライブスナップショットを簡単に作成できます
  • ブロックストレージデバイスは、増大するニーズに対応するためにサイズ変更できます
  • ブロックストレージデバイスをマシン間で簡単に取り外して移動できます

これは非常に柔軟な設定であり、ほとんどすべての種類のアプリケーションに役立ちます。 このテクノロジーの長所と短所をまとめてみましょう。

ブロックストレージのいくつかの利点は次のとおりです。

  • ブロックストレージはおなじみのパラダイムです。 人とソフトウェアは、ファイルとファイルシステムをほぼ普遍的に理解してサポートします
  • ブロックデバイスは十分にサポートされています。 すべてのプログラミング言語は、ファイルの読み取りと書き込みを簡単に行うことができます
  • ファイルシステムのアクセス許可とアクセス制御はよく知られており、よく理解されています
  • ブロックストレージデバイスは低遅延IOを提供するため、データベースでの使用に適しています。

ブロックストレージの欠点は次のとおりです。

  • ストレージは一度に1台のサーバーに関連付けられます
  • ブロックとファイルシステムには、保存している情報のブロブ(作成日、所有者、サイズ)に関するメタデータが制限されています。 保存しているものに関する追加情報は、アプリケーションおよびデータベースレベルで処理する必要があります。これは、開発者が心配する必要のある追加の複雑さです。
  • 使用していない場合でも、割り当てたすべてのブロックストレージスペースの料金を支払う必要があります
  • 実行中のサーバーを介してのみブロックストレージにアクセスできます
  • ブロックストレージには、オブジェクトストレージ(ファイルシステムの選択、アクセス許可、バージョン管理、バックアップなど)と比較して、より実践的な作業とセットアップが必要です。

ブロックストレージサービスは、その高速IO特性により、従来のデータベースにデータを格納するのに適しています。 さらに、通常のファイルシステムストレージを必要とする多くのレガシーアプリケーションは、ブロックストレージデバイスを使用する必要があります。

クラウドプロバイダーがブロックストレージサービスを提供していない場合は、 OpenStack Cinder Ceph 、または多くのNASデバイスで利用可能な組み込みのiSCSIサービスを使用して独自のサービスを実行できます。

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

クラウドコンピューティングの現代の世界では、オブジェクトストレージは、HTTPAPIを使用したデータとメタデータの非構造化ブロブの保存と取得です。 ファイルシステムを使用してファイルをブロックに分割してディスクに保存する代わりに、ネットワーク上に保存されているオブジェクト全体を処理します。 これらのオブジェクトは、画像ファイル、ログ、HTMLファイル、または任意の自己完結型のバイトブロブである可能性があります。 従う必要のある特定のスキーマや形式がないため、非構造化です。

オブジェクトストレージは、開発者のエクスペリエンスを大幅に簡素化したために普及しました。 APIは標準のHTTPリクエストで構成されているため、ライブラリはほとんどのプログラミング言語用に迅速に開発されました。 データのblobの保存は、オブジェクトストアへのHTTPPUTリクエストと同じくらい簡単になりました。 ファイルとメタデータの取得は、通常のGETリクエストです。 さらに、ほとんどのオブジェクトストレージサービスはファイルをユーザーに公開して提供することもできるため、静的アセットをホストするためにWebサーバーを維持する必要がありません。

さらに、オブジェクトストレージサービスは、使用するストレージスペースに対してのみ課金されます(HTTPリクエストごと、および転送帯域幅に対しても課金されるものもあります)。 これは、使用に応じて拡張できるコストでワールドクラスのストレージとアセットのホスティングを利用できる小規模な開発者にとっては朗報です。

ただし、オブジェクトストレージはすべての状況に適したソリューションではありません。 メリットとデメリットの概要を見てみましょう。

オブジェクトストレージのいくつかの利点は次のとおりです。

  • すべての主要なオペレーティングシステムとプログラミング言語で利用可能なクライアントを備えたシンプルなHTTPAPI
  • 使用した分だけ支払うことを意味するコスト構造
  • 静的アセットの組み込みのパブリックサービングは、自分で実行するサーバーが1つ少なくなることを意味します
  • 一部のオブジェクトストアは、組み込みのCDN統合を提供します。これにより、世界中のアセットがキャッシュされ、ユーザーのダウンロードとページの読み込みが高速化されます。
  • オプションのバージョン管理とは、古いバージョンのオブジェクトを取得して、データの誤った上書きから回復できることを意味します
  • オブジェクトストレージサービスは、開発者がより多くのリソースを起動したり、負荷を処理するために再設計したりすることなく、ささやかなニーズから非常に強力なユースケースまで簡単に拡張できます。
  • オブジェクトストレージサービスを使用すると、サービスプロバイダーによって処理されるため、ハードドライブやRAIDアレイを維持する必要がなくなります。
  • データブロブと一緒にメタデータのチャンクを保存できることで、アプリケーションアーキテクチャをさらに簡素化できます

オブジェクトストレージのいくつかの欠点は次のとおりです。

  • 従来のデータベースのレイテンシが高いため、オブジェクトストレージサービスを使用して従来のデータベースをバックアップすることはできません。
  • オブジェクトストレージでは、データBLOBの一部だけを変更することはできません。オブジェクト全体を一度に読み書きする必要があります。 これには、パフォーマンスに影響があります。 たとえば、ファイルシステムでは、ログファイルの最後に1行を簡単に追加できます。 オブジェクトストレージシステムでは、オブジェクトを取得し、新しい行を追加して、オブジェクト全体を書き戻す必要があります。 これにより、オブジェクトストレージは、頻繁に変更されるデータにはあまり理想的ではなくなります。
  • オペレーティングシステムは、通常のディスクのようにオブジェクトストアを簡単にマウントすることはできません。 これを支援するクライアントとアダプタがいくつかありますが、一般に、オブジェクトストアの使用と参照は、ファイルブラウザでディレクトリをめくるほど簡単ではありません。

これらのプロパティがあるため、オブジェクトストレージは、静的アセットのホスティング、画像や動画などのユーザー生成コンテンツの保存、バックアップファイルの保存、ログの保存などに役立ちます。

いくつかの自己ホスト型オブジェクトストレージソリューションがありますが、ホスト型ソリューションの利点のいくつかを放棄します(ハードドライブやスケーリングの問題について心配する必要がないなど)。 Go言語で記述された人気のオブジェクトストレージサーバーであるMinio Ceph 、または OpenStackSwiftを試すことができます。

結論

ストレージソリューションの選択は、開発者にとって複雑な決定になる可能性があります。 この記事では、ブロックストレージサービスとオブジェクトストレージサービスの両方の長所と短所について説明しました。 十分に複雑なアプリケーションでは、すべてのニーズを満たすために両方のタイプのストレージが必要になる可能性があります。