SANとNASの比較
近年、私が目にした最大の混乱の一つは、NASとSANの違いに関するものです。それぞれが何であるかを理解することは、それらがどこで役立ち適切であるかを理解する上で大いに役立ちます。
最初の課題はマーケティング用語を取り除いて技術的な用語に移行することです。NASはNetwork Attached Storageの略ですが、その意味は正確にはそうではなく、SANはStorage Area Networkの略ですが、一般的にはネットワーク自体ではなくSANデバイスを指すために使われます。最も正確な形では、SANはストレージトラフィック専用のネットワークですが、現実の世界では、それが通常使われる方法ではありません。ここでは、NASとSANデバイスとその比較について話すため、デバイスではなくネットワークを含む定義は使いません。実際には、NASとSANはどちらもマーケティング用語であり、そのためにエッジが少し曖昧です。すべての関係者が意味を知っている限り、通常の技術的な会話で使用するには十分に正確ですが、その意味を議論するときには、かっこいい名前を取り除いて最も技術的な説明に留まるべきです。どちらの用語もマーケティングを通じて使用される場合、それらは「アプライアンス化」された特定のテクノロジーであることを示唆するために使用されますが、これは用語の使用を不必要に複雑にするものの、より有用にはなりません。
したがって、最初の課題はこれら2つの名前がデバイスコンテキストで何を意味するかを定義することです。どちらのデバイスも、ストレージサーバーであることに変わりありません——ただ、そのストレージを外部世界に公開する2つの異なる方法があるだけです。
2つのうちシンプルな方はSANで、正確にはブロックストレージデバイスです。ストレージをブロックデバイスとして外部に公開するデバイスはすべてこのカテゴリに該当し、使用方法に基づいて互いに置き換えて使用できます。ブロックストレージデバイスには、外付けハードドライブ、DAS(Direct Attach Storage)、SANがあります。これらはすべて実際に同じものです。デスクトップに接続する場合は外付けハードドライブと呼びます。サーバーに接続する場合はDASと呼びます。デバイスと最終的にストレージを消費するデバイスの間にスイッチなどのネットワーキングを追加するとSANと呼びます。これらのデバイス間には技術的な違いはありません。従来のSANをデスクトップに直接接続して外付けハードドライブのように使うことができます。外付けハードドライブをスイッチに接続してネットワーク上の複数のデバイスで使用できます。ストレージデバイスとそれを使用するシステムの間のインターフェースはブロックです。ブロックストレージの一般的なプロトコルには、iSCSI、Fibre Channel、SAS、eSATA、USB、Thunderbolt、IEEE1394(別名Firewire)、Fibre Channel over Ethernet(FCoE)、ATA over Ethernet(AoE)があります。ブロックストレージデバイスに接続するデバイスは、常にストレージをディスクドライブとして見ます——それ以上でも以下でもありません。
NAS(「ファイラー」とも呼ばれる)は、ファイルストレージデバイスです。これは、ストレージをネットワークファイルシステムとして公開することを意味します。したがって、このストレージに接続するデバイスはディスクドライブを見るのではなく、マウント可能なファイルシステムを見ます。NASがアプライアンスとしてパッケージされていない場合、単純にファイルサーバーと呼ばれ、デスクトップからサーバーまでほぼすべてのコンピューティングデバイスにはこの機能が何らかの形で含まれています。ファイルストレージデバイスの一般的なプロトコルには、NFS、SMB / CIFS、AFPがあります。ただし、他にも多くのものがあり、技術的にはFTPやHTTPなどの特殊なケースのファイルストレージプロトコルも該当します。極端な例として、従来のウェブサーバーは非常に特殊な形のファイルストレージデバイスです。
ブロックストレージとファイルストレージデバイスを分けるのは、外部世界に提示するインターフェースの種類です。言い換えれば、ストレージスタック内でサーバーデバイスとクライアントデバイスの分割がどこで発生するかです。
今日、同一のデバイスからブロックストレージとファイルストレージの両方を提供するストレージデバイスが非常に一般的になっています。これを行うシステムはユニファイドストレージと呼ばれます。ユニファイドストレージでは、ブロックストレージデバイスとして振る舞っているか、ファイルストレージデバイスとして振る舞っているか(一般的な用語でのSANまたはNAS)、あるいはその両方かは、購入するものではなく、デバイスに設定する動作に基づきます。これは重要であり、これが純粋にプロトコルまたはインターフェースの区別であって、サイズ、能力、信頼性、パフォーマンス、機能などの区別ではないことを強調します。
どちらのタイプのデバイスも、ストレージを外部に引き渡す「境界点」の下で拡張機能を提供するオプションがありますが、必須ではありません。どちらも、RAID、論理ボリューム管理、モニタリングなどを提供する場合も、しない場合もあります。ファイルストレージ(NAS)はWindows NTFS ACLなどのファイルシステム機能も提供する場合があります。
ブロックストレージの主要な利点は、それに接続するシステムが従来のディスクドライブのようにストレージシステムを操作する機会が与えられることです。これは、ストレージデバイスの「ブラックボックス」内ですでに行われている可能性のあるRAIDと論理ボリューム管理が、必要に応じてより高いレベルで再び行われることを意味します。クライアントデバイスはどのような種類のデバイスを見ているかを認識しておらず、ディスクドライブとして表示されることだけを知っています。したがって、それを信頼するか(例えば、適切なレベルのRAIDがあると仮定する)、あるいは通常のローカルディスクと同様に複数のブロックストレージデバイスをRAIDに組み合わせることができます。これは非常にまれですが、興味深いオプションであり、この方法で使用するように設計された製品があります。
より一般的には、Linux LVM、Solaris ZFS、またはWindows Dynamic Disksなどの論理ボリューム管理がデバイスから公開されたブロックストレージの上に適用され、その上にファイルシステムが使用されます。ブロックストレージデバイスではファイルシステムはクライアントデバイスによって作成・管理され、ストレージデバイスによってではないことを覚えておくことが重要です。ストレージデバイスは、提示しているブロックストレージがどのように使用されているかをまったく知らず、エンドユーザーが望む方法で完全な制御を持って使用できるようにします。これは、一方がもう一方へのストレージを提供し、RAID グループに組み合わされるかもしれないブロックストレージデバイスをチェーンできる点にまで及びます——ブロックストレージデバイスはほぼ無限に階層化できます。
一方、ファイルストレージデバイスはストレージのブロック部分をすべて内包しているため、RAID、論理ボリューム管理、モニタリングのあらゆる機会はファイルストレージデバイスによって処理されなければなりません。その後、ブロックストレージの上にファイルシステムが適用されます。一般的にはLinuxのEXT4、FreeBSDとSolarisのZFS、Windows NTFSですが、WAFL、XFS、JFS、BtrFS、UFSなどの他のファイルシステムも確かに可能です。このファイルシステム上にデータが保存されます。そのデータを外部世界と共有するために、ネットワークファイルシステム(分散ファイルシステムとも呼ばれる)が使用されます。これはネットワーク対応のファイルシステムインターフェースを提供します——NFS、SMB、AFPが最も一般的ですが、あらゆるプロトコルファミリーと同様に、多数の特殊ケースやエキゾチックな可能性があります。
ファイルストレージデバイス上のストレージを使用したいリモートデバイスは、ローカルファイルシステムを見るのと同じようにネットワーク越しに見え、同一の方法でマウントできます。これにより、ファイルストレージはエンドコンシューマーにとって特に使いやすく明白であり、あらゆる面で非常に自然です。私たちは通常のデスクトップコンピューティングで毎日ネットワークファイルシステムを使用しています。たとえばWindowsで「ドライブをマップする」とき、ネットワークファイルシステムを使用しています。
ブロックストレージとファイルストレージの間で区別しなければならない重要な違いがあります。どちらも潜在的にネットワーク上に存在し、複数のクライアントマシンが接続できる可能性がありますが、ファイルストレージデバイスだけがそのアクセスを調停する能力を持っています。これは非常に重要で、見落とすことができません。
ブロックストレージはディスクドライブとして表示されます。ディスクドライブを2台以上のコンピューターに同時に接続すると何が起こるか想像できます——それぞれは互いのことを何も知らず、作成されている新しいファイル、変更されているファイルを認識しないため、システムはすぐにお互いを上書きし始めます。ファイルシステムがすべてのノードで読み取り専用であれば、これは問題ではありません。しかし、どのシステムもデータを書き込んだり変更したりしている場合、他のシステムに問題が生じます。これは通常、非常に短時間——一般的に数分以内——でデータ破損を引き起こします。これを極端に体験するには、2〜3台のクライアントシステムすべてが、ディスクドライブへの排他的アクセスを持っていると信じ込ませて、同時にデフラグさせることを想像してください。ドライブ上のすべてのデータが数秒でスクランブルされます。
一方、ファイルストレージデバイスは、ネットワークファイルシステムが実際のファイルシステムへのアクセスのための通信を処理し、ファイルシステムは本来マルチユーザーであるため、自然な調停があります。したがって、ファイルストレージデバイスに接続された1つのシステムが変更を加えると、すべてのシステムが即座に変更を認識し、「お互いの邪魔をする」ことはありません。たとえそれを試みたとしても、ファイルストレージデバイスのファイルシステムがアクセスを調停し、最終的な決定権を持ち、これを起こさせません。これにより、データ共有がエンドユーザーにとって簡単で透明になります。(ここで「エンドユーザー」という用語はシステム管理者も含みます。)
これは、ブロックデバイスからストレージを共有する手段がないことを意味するわけではありませんが、その調停はブロックストレージデバイス自体では処理できません。ブロックストレージデバイスは、クラスター化ファイルシステムとして知られるものを使用することで「共有可能」になります。このタイプのファイルシステムは、サーバークラスターが1本のSCSIケーブルの両端にSCSIコントローラーを持つ2台のサーバーでストレージリソースを共有し、共有ドライブをケーブルの中間に接続していた時代に生まれました。サーバーが通信できる唯一の手段はファイルシステム自体を通じてであったため、ファイルシステム自体を通じてデバイス間の通信を可能にする特殊なクラスター化ファイルシステムが開発され、一方による変更を他方に警告しました。これは驚くほどうまく機能しますが、クラスター化ファイルシステムは比較的まれであり、Red HatのGFSとOracleのOCFSが従来のサーバー世界で最もよく知られており、VMwareのはるかに新しいVMFSが仮想化ストレージへの使用を通じて非常によく知られるようになっています。一般ユーザー(システム管理者を含む)は、クラスター化ファイルシステムへのアクセスを持っていない場合や、その使用を許可しないニーズを持っている場合があります。また重要なことに、調停はファイルストレージデバイスとは異なり、強制によってではなく信頼を通じて処理されます。ファイルストレージデバイスでは、デバイス自体がアクセス調停を処理し、回避する方法はありません。クラスター化ファイルシステムを使用するブロックストレージデバイスでは、ストレージに接続するすべてのデバイスがクラスター化ファイルシステムを無視し、単純に受動的な調停をバイパスできます——これは通常、偶発的に発生するほど簡単です。ファイルシステムをマウントする際に間違ったファイルシステムタイプを指定したときや、ドライブが誤動作したとき、または悪意のある行為によっても発生する可能性があります。したがって、ブロックレベルのストレージを保護するためには、ネットワークレベルでのアクセスセキュリティが重要です。
ここで明らかになっている根本的な概念は、ブロックストレージデバイスはダムデバイス(言うなれば高機能なディスクドライブ)であり、ファイルストレージデバイスはスマートデバイス(言うなれば従来のサーバー)であるということです。ファイルストレージデバイスはCPU、メモリ、ストレージ、ファイルシステム、ネットワーキングを持つ完全に機能する「コンピューター」を含んでいなければなりません。ブロックストレージデバイスはこれらを含むかもしれませんが、必須ではありません。最もシンプルなケースでは、ブロックストレージデバイスはUSBまたはイーサネットアダプターが接続されたディスクドライブに過ぎません。実際、RAIDコントローラーにイーサネットまたはFibre Channelアダプターが接続されただけのものも珍しくありません。
どちらの場合も、ブロックストレージデバイスとファイルストレージデバイスは、些細なほど単純なデバイスから巨大な「メインフレームクラス」の超高可用性システムまでスケールできます。どちらも速い場合も遅い場合もあります。一方が他方より優れているわけでも劣っているわけでもなく、より高かったり低かったりするわけでもなく、よりエンタープライズ向けだったりそうでなかったりするわけでもありません——それらは異なるものであり、一般的に異なる目的に使われます。そして、どちらかが含む場合も含まない場合もある高度な機能があります。課題は、どちらがどの仕事に適しているかを知ることです。
私はブロックストレージプロトコルをコマンドラインの「標準出力」ストリームのようなものと考えるのが好きです。したがって、あらゆるストレージ「パイプライン」の基本レベルは常にブロックデバイスであり、出力がブロックストレージプロトコルであり続ける限り、複数のブロックデバイスや変換が存在し、それぞれが次のものにパイプされることができます。ファイルシステムを適用したときにのみチェーンを終了します。このようにして、ハードウェアRAID、ネットワークRAID、論理ボリューム管理などを必要に応じて複数の組み合わせで適用できます。ブロックストレージは真にデータのブロックだけでなく、ストレージシステムのビルディングブロックです。
非常に興味深い点は、ブロックストレージデバイスはチェーンでき、ネットワークストレージデバイスは「入力」としてブロックストレージを受け入れなければならないため、特に高エンド システムでは、ブロックストレージデバイス(SAN)がファイルストレージデバイス(NAS)のバッキングストレージとして使用されることが実際にかなり一般的であることです。それらは単一のシャーシ内で共存するか、ネットワーク上で協調して動作することができます。
