クラウドストレージモデルを理解する

ビットの格納が非常に複雑になると誰が考えたでしょうか。ストレージには、ファイバーチャネルからiSCSI、SMBまで、あらゆるバリエーションのプロトコルが常に多数含まれていますが、フラッシュの登場と仮想化の継続的な成長により、すでに密集したトピックが頭字語、プロトコル、抽象化の絡み合ったジャングルに変わりました。

データセンターの仮想化は、ストレージの仮想化の波を引き起こし、ストレージを物理プロトコルから徐々に引き離し、インスタンスストレージやボリュームストレージなどの論理的で抽象化されたストレージモデルに移行しました。抽象化を提供することにより、データセンターは仮想マシンをストレージプロトコルから着実に切り離しています。

クラウドデータセンターの台頭により、オブジェクトストレージと呼ばれる新しいクラスのストレージも生まれました。これは、グローバルな規模で単一の名前空間を提供するために、従来のストレージプロトコルの強力な一貫性を犠牲にします。

この記事では、インスタンス、ボリューム、およびオブジェクトストレージをデータセンターの進化に配置することで明確にし、これらの新しい抽象化が既存のストレージプロトコルの上または横にどのように適合するかを示します。

クラウドストレージの話は、多くの点で仮想化の話です。物理環境から始めて、仮想モデルと物理モデルが分岐し始める仮想化に移り、物理が仮想モデルによってほぼ完全に抽象化されるクラウドで終わります。

物理ストレージ

すべてのストレージのルートには、物理​​ストレージプロトコルのセットがあるため、物理ストレージの簡単な要約から始めます。現在、物理ストレージモデルの3つの主要なクラスが使用されています。直接接続ストレージ(DAS)、ストレージエリアネットワーク(SAN)、およびネットワーク接続ストレージ(NAS)です。

DAS。 直接接続ストレージは、最も単純なストレージモデルです。私たちは皆DASに精通しています。これは、ほとんどのラップトップ、電話、およびデスクトップコンピューターで使用されているモデルです。 DASの基本単位は、コンピューター自体です。サーバーのストレージは、サーバー自体から分離することはできません。電話の場合、コンピューティングからストレージを削除することは物理的に不可能ですが、理論的にディスクドライブをプルすることが可能なサーバーの場合でも、ドライブがサーバーから分離されると、通常は以前にワイプされます再利用。 SCSIとSATAはDASプロトコルの例です。

さん。 最終的に、ストレージ業界は、ストレージをコンピューティングから分離することの有用性を認識しました。個々のコンピューターにディスクを接続するのではなく、すべてのディスクを単一のサーバークラスターに配置し、ネットワーク経由でディスクにアクセスしました。これにより、バックアップや障害修復などのストレージ管理タスクが簡素化されます。複数のコンピューターが単一のストレージプールを使用するため、このストレージとコンピューティングの分割は共有ストレージと呼ばれることがよくあります。

ローカルに接続されたディスクドライブとの通信に使用されたものと同じ(または非常に類似した)ブロックプロトコルを使用して、ネットワークを介してクライアントとサーバー間で通信するのが最も簡単でした。このように公開されたストレージは、ストレージエリアネットワークと呼ばれます。ファイバーチャネルとiSCSIはSANプロトコルの例です。

SANでは、管理者はディスクのセット(またはディスクのセットの一部)をLUN(論理ユニット)にグループ化し、LUN(論理ユニット)は外部コンピューターに対して単一のディスクドライブのように動作します。LUNは、SANストレージの管理に使用される基本単位です。

NAS。 SANを使用すると、あるコンピューター間でLUNを移動できますが、SANが使用するブロックプロトコルは、コンピューター間で同じLUN内のデータを同時に共有するようには設計されていません。この種の共有を可能にするには、同時アクセス用に構築された新しい種類のストレージが必要です。この新しい種類のストレージでは、ファイルシステムプロトコルを使用してストレージと通信します。ファイルシステムプロトコルは、ローカルコンピューターで実行されるファイルシステムによく似ています。この種のストレージは、ネットワーク接続ストレージと呼ばれます。NFSとSMBは、NASプロトコルの例です。

ファイルシステムの抽象化により、複数のサーバーが同じデータに同時にアクセスできます。複数のサーバーが同時に同じファイルを読み取ることができ、複数のサーバーが同時に新しいファイルをファイルシステムに配置できます。したがって、NASは、共有ユーザーまたはアプリケーションデータにとって非常に便利なモデルです。

NASストレージを使用すると、管理者はストレージの一部を個々のファイルシステムに割り当てることができます。各ファイルシステムは単一の名前空間であり、ファイルシステムはNASの管理に使用される主要なユニットです。

仮想ストレージ

仮想化は、コンピューティングの場合と同様に、ストレージの最新のデータセンターの展望を変えました。物理マシンが仮想マシンに抽象化されたように、物理ストレージは仮想ディスクに抽象化されました。

仮想化では、ハイパーバイザーは、コンピューター、メモリ、ストレージなど、仮想マシンごとにエミュレートされたハードウェア環境を提供します。初期の最新のハイパーバイザーであるVMwareは、各VMにストレージを提供する方法として、ローカルの物理ディスクドライブをエミュレートすることを選択しました。言い換えると、VMwareは、ストレージを仮想マシンに公開する方法として、ローカルディスクドライブ(DAS)モデルを選択しました。

DASのストレージの基本単位が物理マシンであるのと同様に、仮想ディスクストレージの基本単位はVMです。仮想ディスクは、独立したオブジェクトとして公開されるのではなく、特定の仮想マシンの一部として公開されます。これは、ローカルディスクが概念的に物理コンピューターの一部であるのとまったく同じです。DASと同様に、仮想ディスクはVM自体とともに存続および消滅します。VMが削除されると、仮想ディスクも削除されます。

従来のほとんどの仮想化プラットフォームは、仮想ディスクストレージモデルを使用しています。たとえば、VMware vSphere、Microsoft Hyper-V、Red Hat Enterprise Virtualization、およびXen環境のストレージはすべて、同様の方法で管理および接続されます。

仮想ディスクの実装

VMwareは、共有ストレージのメリットを仮想マシンに提供し続けたいと考えていたため、DASプロトコルに依存して仮想ディスクを実装することはできませんでした。SAN LUNはローカルディスクドライブに非常に似ているため、次の明らかな選択はSANを使用することです。

ただし、物理LUNには制限があり、仮想ディスクへの適合が困難になります。仮想化環境は、多数の論理コンピューターを単一の物理サーバーに統合します。つまり、特定のホスト上の仮想ディスクの数は、物理環境内のホストの物理LUNの数よりもはるかに多くなります。特定の物理サーバーに接続できるLUNの最大数が少なすぎて、必要な数の仮想ディスクをサポートできませんでした。

おそらくさらに重要なのは、仮想CPUと同様に、仮想ディスクはプログラムで作成、破棄、および移動できる論理オブジェクトである必要があり、これらはSANストレージが実行するように設計された操作ではありません。たとえば、VMwareは物理ホスト間でVMを動的に移動する必要があり、移行中に共有ストレージアクセスが必要でした。

これらの理由から、VMwareは、仮想ディスクをraw LUNとしてではなく、ファイルシステム(NFS)またはSAN上の分散ファイルシステム(VMFS)のファイルとして実装することを選択しました。

ストレージプロトコルからストレージモデルへ

VMwareがNASまたはSANの上にDASスタイルのブロックストレージモデルである仮想ディスクを実装することを選択したことは、最新のデータセンターストレージの興味深い特徴の1つを示しています。仮想マシンからのIOは、デバイスバス上のハードウェアではなく、ハイパーバイザー内のソフトウェアに渡されるため、VMがハイパーバイザーと通信するために使用するプロトコルは、ハイパーバイザーが通信するために使用するプロトコルと一致する必要はありません。ストレージ自体。

これにより、VMと管理者に公開されるストレージモデルと、ハイパーバイザーが実際にデータを格納するために使用するストレージプロトコルが分離されます。仮想ディスクの場合、VMwareはDASストレージモデルに従ってそれらを設計し、NASストレージプロトコルを使用してそれらを実装しました。

これは、間接参照の強力なレイヤーです。これにより、ストレージモデルとストレージプロトコルを組み合わせる柔軟性が得られ、仮想マシンに影響を与えることなくストレージプロトコルを動的に変更することもできます。たとえば、仮想ディスクは、NFS内のファイル、ファイバーチャネルLUNに保存されたVMFS内のファイル、または(VVolまたは仮想ボリューム内の)iSCSILUNとして直接実装されます。最終的にこれらのプロトコルはすべてVMと管理者に同じように見えるため、実装の選択はアプリケーションに対して完全に透過的です。それらは、VMに接続されたローカルの物理ディスクドライブのように見えます。

したがって、ほとんどのパブリッククラウドインフラストラクチャのアプリケーション開発者は、使用されているストレージプロトコルを知ることができません。実際、プロトコルは動的に変更されることもあります。AmazonがElasticBlock Storageにどのストレージプロトコルを使用しているかはわかりません。また、知ることも重要ではありません。

ストレージモデルとストレージプロトコルが分離されているため、ストレージプロトコルはインフラストラクチャに直面する問題になり、機能を決定するアプリケーションに直面する決定ではなく、主にコストとパフォーマンスにとって重要になります。

クラウドストレージ

仮想化環境がクラウド環境に変化するにつれて、データセンターの展望は再び変化しています。クラウド環境は、仮想化で開拓された仮想ディスクモデルを採用し、完全に仮想化されたストレージスタックを可能にする追加のモデルを提供します。クラウド環境は、ストレージスタック全体を仮想化して、セルフサービスとインフラストラクチャとアプリケーション間のクリーンな分離を提供できるようにします。

クラウド環境にはさまざまな形態があります。これらは、OpenStack、CloudStack、VMware vRealizeスイートなどの環境を使用して、企業がプライベートクラウドとして実装できます。また、Amazon Web Services、Microsoft Azure、Rackspaceなどのパブリッククラウドとしてサービスプロバイダーが実装することもできます。

興味深いことに、クラウド環境で使用されるストレージモデルは、物理環境で使用されているストレージモデルを反映しています。ただし、仮想ディスクと同様に、それらは、それらを実装するために使用できる複数のストレージプロトコルから抽象化されたストレージモデルです。

インスタンスストレージ:クラウド内の仮想ディスク

仮想ディスクストレージモデルは、従来の仮想化環境でのストレージの主要な(または唯一の)モデルです。ただし、クラウド環境では、このモデルは3つのうちの1つです。したがって、モデルにはクラウド環境で特定の名前が付けられます。インスタンスストレージは、従来の仮想ディスクのように消費されるストレージを意味します。

インスタンスストレージはストレージプロトコルではなくストレージモデルであり、複数の方法で実装できることに注意することが重要です。たとえば、インスタンスストレージは、計算ノード自体でDASを使用して実装される場合があります。この方法で実装すると、ストレージの信頼性が通常高くないため、エフェメラルストレージと呼ばれることがよくあります。

インスタンスストレージは、NASまたはボリュームストレージを使用して信頼性の高いストレージとして実装することもできます。これは、次に説明する2番目のストレージモデルです。たとえば、OpenStackを使用すると、ユーザーはインスタンスストレージをホスト上のエフェメラルストレージとして、NFSマウントポイント上のファイルとして、またはboot-from-volumeを使用してCinderボリュームとして実装できます。

ボリュームストレージ:SANは物理的ではありません

ただし、インスタンスストレージには制限があります。クラウドネイティブアプリケーションの開発者は、OSやアプリケーションデータなどの構成データを、データベーステーブルやデータファイルなどのユーザーデータと明示的に区別することがよくあります。2つを分割することにより、開発者は、ユーザーデータの強力な信頼性を維持しながら、構成を一時的かつ再構築可能にすることができます。

この違いにより、別のタイプのストレージが生まれます。ボリュームストレージ、インスタンスストレージとSANのハイブリッドです。ボリュームは、VMではなくボリュームストレージの主要な単位です。ボリュームは、あるVMから切り離して、別のVMに接続できます。ただし、仮想ディスクと同様に、ボリュームは、スケールと抽象化においてLUNよりもファイルに似ています。インスタンスストレージとは対照的に、ボリュームストレージは通常、信頼性が高いと見なされ、ユーザーデータによく使用されます。

OpenStackのCinderは、Dockerの独立したボリューム抽象化と同様に、ボリュームストアの例です。ボリュームストレージはストレージモデルであり、ストレージプロトコルではないことに再度注意してください。ボリュームストレージは、NFSなどのファイルプロトコルまたはiSCSIなどのブロックプロトコルの上に、アプリケーションに対して透過的に実装できます。

オブジェクトストレージ:WebスケールNAS

クラウドネイティブアプリケーションには、VM間で共有されるデータのホームも必要ですが、多くの場合、地理的地域全体の複数のデータセンターに拡張できる名前空間が必要です。オブジェクトストレージはまさにこの種のストレージを提供します。たとえば、AmazonのS3は、リージョン全体、そして間違いなく全世界に単一の論理名前空間を提供します。この規模に到達するために、S3は従来のNASの強力な一貫性ときめ細かい更新を犠牲にする必要がありました。

オブジェクトストレージは、オブジェクトと呼ばれるファイルのような抽象化を提供しますが、結果整合性を提供します。つまり、すべてのクライアントは最終的には要求に対して同じ回答を取得しますが、一時的に異なる回答を受け取る可能性があります。この一貫性は、2台のコンピューター間でDropboxによって提供される一貫性に似ています。クライアントは一時的に同期が外れる可能性がありますが、最終的にはすべてが収束します。

従来のオブジェクトストアは、高遅延WAN接続で使用するように調整されたデータ操作の簡略化されたセットも提供します。「バケット」内のオブジェクトの一覧表示、オブジェクト全体の読み取り、オブジェクト内のデータの完全に新しいデータへの置き換えです。このモデルは、NASよりも基本的な一連の操作を提供します。これにより、アプリケーションはファイル内の小さなブロックの読み取りと書き込み、ファイルの新しいサイズへの切り捨て、ディレクトリ間でのファイルの移動などを行うことができます。