前書き
柔軟でスケーラブルなデータストレージは、最新の技術とツールを使用して開発されているほとんどのアプリケーションとサービスの基本要件です。 大量または少量の画像、ビデオ、またはテキストの塊を保存するかどうかに関係なく、アプリケーション開発者は、ユーザーが生成したコンテンツ、ログ、バックアップなどを保存および取得するためのソリューションを必要とします。
今日の複雑な展開、コンテナ、一時的なインフラストラクチャにより、単一サーバー上のディスクにファイルを保存するだけの時代は終わりました。 クラウドプロバイダーは、最新のアプリケーション展開のストレージニーズを満たすサービスを開発しており、ほとんどの場合、オブジェクトストレージとブロックストレージの2つのカテゴリに適合しています。
両方を見て、それぞれの一般的な長所、短所、ユースケースを説明しましょう。
ブロックストレージとは
ブロックストレージサービスは比較的単純で使い慣れています。 ネットワーク経由で、ハードドライブのような従来のブロックストレージデバイスを提供します。 多くの場合、クラウドプロバイダーには、任意のサイズのブロックストレージデバイスをプロビジョニングして仮想マシンに接続できる製品があります。
そこから、通常のディスクのように扱うことになります。 ファイルシステムでフォーマットしてファイルを保存したり、複数のデバイスをRAIDアレイに結合したり、ブロックデバイスに直接書き込むようにデータベースを構成して、ファイルシステムのオーバーヘッドを完全に回避することができます。 さらに、ネットワーク接続されたブロックストレージデバイスには、通常のハードドライブに比べていくつかのユニークな利点があります。
-
バックアップのためにデバイス全体のライブスナップショットを簡単に取得できます
-
増大するニーズに対応するために、ブロックストレージデバイスのサイズを変更できます
-
マシン間でブロックストレージデバイスを簡単に取り外したり移動したりできます
これは、ほとんどすべての種類のアプリケーションに役立つ非常に柔軟なセットアップです。 この技術の長所と短所をまとめましょう。
ブロックストレージのいくつかの利点は次のとおりです。
-
ブロックストレージはおなじみのパラダイムです。 人々とソフトウェアは、ファイルとファイルシステムをほぼ普遍的に理解しサポートしています
-
ブロックデバイスは十分にサポートされています。 すべてのプログラミング言語はファイルを簡単に読み書きできます
-
ファイルシステムのアクセス許可とアクセス制御はよく知られており、よく理解されています
-
ブロックストレージデバイスは低レイテンシIOを提供するため、データベースでの使用に適しています。
ブロックストレージの欠点は次のとおりです。
-
ストレージは一度に1つのサーバーに関連付けられます
-
ブロックとファイルシステムでは、保存している情報の塊に関するメタデータ(作成日、所有者、サイズ)が制限されています。 保存するものに関する追加情報は、アプリケーションおよびデータベースレベルで処理する必要があります。これは、開発者が心配する追加の複雑さです。
-
使用していない場合でも、割り当てたすべてのブロックストレージスペースの料金を支払う必要があります
-
実行中のサーバーを介してのみブロックストレージにアクセスできます
-
ブロックストレージには、オブジェクトストレージ(ファイルシステムの選択、権限、バージョン管理、バックアップなど)よりも、より実践的な作業とセットアップが必要です。
高速なIO特性のため、ブロックストレージサービスは、従来のデータベースにデータを保存するのに適しています。 さらに、通常のファイルシステムストレージを必要とする多くのレガシーアプリケーションでは、ブロックストレージデバイスを使用する必要があります。
クラウドプロバイダーがブロックストレージサービスを提供していない場合は、OpenStack Cinder、Ceph、または多くのNASデバイスで利用可能な組み込みのiSCSIサービスを使用して独自のサービスを実行できます。
オブジェクトストレージとは
クラウドコンピューティングの現代の世界では、オブジェクトストレージとは、HTTP APIを使用して、構造化されていないデータとメタデータの塊を保存および取得することです。 ファイルシステムを使用してファイルをブロックに分割してディスクに保存する代わりに、ネットワーク経由で保存されたオブジェクト全体を処理します。 これらのオブジェクトは、画像ファイル、ログ、HTMLファイル、またはバイトの自己完結型BLOBである可能性があります。 従う必要のある特定のスキーマや形式がないため、これらはunstructuredです。
開発者のエクスペリエンスが大幅に簡素化されたため、オブジェクトストレージが採用されました。 APIは標準のHTTPリクエストで構成されているため、ほとんどのプログラミング言語用にライブラリが迅速に開発されました。 データのblobの保存は、オブジェクトストアへのHTTP PUTリクエストと同じくらい簡単になりました。 ファイルとメタデータの取得は、通常のGET要求です。 さらに、ほとんどのオブジェクトストレージサービスは、ユーザーにファイルを公開することもできるため、静的なアセットをホストするWebサーバーを維持する必要がなくなります。
その上、オブジェクトストレージサービスは、使用するストレージスペースに対してのみ課金します(一部はHTTPリクエストごと、および転送帯域幅に対しても課金します)。 これは、使用に応じた規模のコストで世界クラスのストレージとアセットのホスティングを取得できる小規模な開発者にとっては朗報です。
ただし、オブジェクトストレージはあらゆる状況に適したソリューションではありません。 利点と欠点の概要を見てみましょう。
オブジェクトストレージのいくつかの利点は次のとおりです。
-
すべての主要なオペレーティングシステムとプログラミング言語で利用可能なクライアントを備えたシンプルなHTTP API
-
使用したものに対してのみ支払うことを意味するコスト構造
-
静的アセットの組み込みパブリックサービングは、自分で実行できるサーバーが1台少ないことを意味します
-
一部のオブジェクトストアには組み込みのCDN統合が用意されており、世界中のアセットをキャッシュして、ユーザーのダウンロードとページの読み込みを高速化します。
-
オプションのバージョニングは、オブジェクトの古いバージョンを取得して、データの偶発的な上書きから回復できることを意味します
-
オブジェクトストレージサービスは、開発者がより多くのリソースを起動したり、負荷を処理するために再設計したりすることなく、控えめなニーズから非常に厳しいユースケースまで簡単に拡張できます。
-
オブジェクトストレージサービスを使用すると、サービスプロバイダーによって処理されるため、ハードドライブとRAIDアレイを保守する必要がなくなります。
-
データブロブと一緒にメタデータのチャンクを格納できることにより、アプリケーションアーキテクチャをさらに簡素化できます。
オブジェクトストレージのいくつかの欠点は次のとおりです。
-
オブジェクトストレージサービスを使用して従来のデータベースをバックアップすることはできません。そのようなサービスは待ち時間が長いためです
-
オブジェクトストレージでは、データBLOBの一部だけを変更することはできません。オブジェクト全体を一度に読み書きする必要があります。 これには、いくつかのパフォーマンスへの影響があります。 たとえば、ファイルシステムでは、ログファイルの最後に1行を簡単に追加できます。 オブジェクトストレージシステムでは、オブジェクトを取得し、新しい行を追加して、オブジェクト全体を書き戻す必要があります。 これにより、オブジェクトストレージは、頻繁に変更されるデータにはあまり理想的ではありません。
-
オペレーティングシステムは、通常のディスクのようにオブジェクトストアを簡単にマウントできません。 これを支援するクライアントとアダプターがいくつかありますが、一般に、オブジェクトストアの使用と参照は、ファイルブラウザーでディレクトリをめくるほど簡単ではありません。
これらのプロパティがあるため、オブジェクトストレージは、静的アセットのホスト、画像や映画などのユーザー生成コンテンツの保存、バックアップファイルの保存、ログの保存などに役立ちます。
いくつかの自己ホスト型オブジェクトストレージソリューションがありますが、ホスト型ソリューションの利点(ハードドライブやスケーリングの問題を心配する必要がないなど)をあきらめます。 Go言語で記述された人気のあるオブジェクトストレージサーバーであるMinio、またはCeph、またはOpenStack Swiftを試すことができます。
結論
ストレージソリューションの選択は、開発者にとって複雑な決定になる場合があります。 この記事では、ブロックストレージサービスとオブジェクトストレージサービスの両方の利点と欠点について説明しました。 十分に複雑なアプリケーションでは、すべてのニーズを満たすために両方のタイプのストレージが必要になる可能性があります。