本出願は、2014年9月19日に出願された「TECHNIQUES FOR COORDINATING PARALLEL PERFORMANCE AND CANCELLATION OF COMMANDS IN A STORAGE CLUSTER SYSTEM」という名称の米国特許出願第14/491,799号に対する優先権を主張するものであり、この米国特許出願第14/491,799号は、参照によって本明細書に組み込まれている。
さまざまな実施形態は一般に、ストレージ・クラスタ・システムのノード同士の間におけるデータ・アクセス・コマンドの少なくとも部分的に並列な実行及びキャンセルを調整するための技術を対象としている。ストレージ・クラスタ・システムにおいては、複数のノードが、複数のクラスタへとグループ化されることが可能であり、それらのクラスタはそれぞれ、ノードの1つ又は複数の高い可用性の(HA)グループから構成されることが可能である。それらの複数のクラスタは、地理的に離れているロケーション同士に配置されることが可能であり、インターネット又は専用回線などのネットワークを通じて延在する1つ又は複数の相互接続を介して結合されることが可能である。それぞれのクラスタのHAグループの単一のノードが、アクティブ・ノードであることが可能であり、アクティブ・ノードは、アクティブな通信セッションを介してその他のノードと通信してデータ・アクセス・コマンドのレプリカをやり取りして、それらのデータ・アクセス・コマンドの少なくとも部分的に並列な実行を可能にしてクライアント・デバイス・データの状態をそれらのHAグループ同士の間において同期化する。それらのアクティブ・ノードは、キャンセル・コマンドをやり取りして、データ・アクセス・コマンドのキャンセルの少なくとも部分的に並列な実行を可能にしてクライアント・デバイス・データの状態をそれらのHAグループ同士の間において再び同期化することもできる。さらに、それらのアクティブ・ノードのうちの1つは、1つ又は複数のクライアント・デバイスとさらに通信して、ストレージ・サービスを求める要求を受信して、それらの要求をデータ・アクセス・コマンドへと変換することができる。それぞれのHAグループ内では、少なくとも1つのその他のノードが、非アクティブ・ノードであることが可能であり、非アクティブ・ノードは、アクティブ・ノードとのパートナーにされており、HAグループ内のノード同士の間におけるメタデータの複製を介して、エラーに応答してアクティブ・ノードを引き継ぐ用意ができている。
レプリカ・データ・アクセス・コマンドのそのようなやり取り、キャンセル・コマンドのやり取り、及びそのような引き継ぎをサポートして、それぞれのHAグループの複数のノードが協力して、それらの間における通信セッションのメッシュを形成することができ、そのメッシュは、1つのアクティブな通信セッションと、複数の非アクティブな通信セッションとを含む。HAグループの非アクティブ・ノードが、エラーに応答して同じHAグループ内のアクティブ・ノードを引き継いだときに、アクティブな通信セッションは、非アクティブになることが可能であり、非アクティブな通信セッションのうちの1つが、アクティブな通信セッションになることが可能である。メッシュを形成することをサポートして、その他のノードのうちの1つ又は複数のネットワーク・アドレスを含むメタデータが複製され、それぞれのHAグループ内のノード同士の間において分散されて、ノードのうちの1つ又は複数のリブートに続いてメッシュを形成する際の遅延を最小化することができる。
ノードのうちのそれぞれは、管理モジュール(Mモジュール)、ネットワーク・プロトコル・モジュール(Nモジュール)、及びデータ・ストレージ・モジュール(Dモジュール)のそれぞれの1つ又は複数を含むことができる。Mモジュールは、アクティブ・ノードをクライアント相互接続に結合して、ストレージ・クラスタ・システムの少なくとも一部分をリモートから構成することができるメカニズムを1つ又は複数のクライアント・デバイスに提供することができる。Nモジュールは、アクティブ・ノードをクライアント相互接続に結合して、1つ又は複数のクライアント・デバイスが、ストレージ・サービスを求める要求をそのノードへ送信することを可能にすることができる。Nモジュールは、ストレージ・サービス要求を少なくとも1つのデータ・アクセス・コマンドへと変換することができる。Dモジュールは、Nモジュールに結合されて、そこから少なくとも1つのデータ・アクセス・コマンドを受信することが可能である。Dモジュールは、ノードを1つ又は複数のストレージ・デバイスに結合して、クライアント・デバイス・データを格納することもでき、そこからクライアント・デバイス・データが取り出されることが可能である。それらのストレージ・デバイスの個々のストレージ・デバイス、及び/又はそれらのストレージ・デバイスのグループが、Dモジュールによって論理ユニット(LU)として指定されて扱われることが可能である。Dモジュールは、単一のLU又はLUのグループによって提供されるストレージ・スペース内のアグリゲートを定義することができ、そのアグリゲートのストレージ・スペース内の1つ又は複数のボリュームを定義することができる。クライアント・デバイス・データは、そのアグリゲート内でそのように定義されている1つ又は複数のボリューム内に格納されることが可能である。
Nモジュールから受信されたデータ・アクセス・コマンドを実行することに加えて、第1のHAグループの1つのアクティブ・ノードのDモジュールが、データ・アクセス・コマンドをレプリケートし、結果として生じるそのデータ・アクセス・コマンドのレプリカを第2のHAグループの別のアクティブ・ノードの別のDモジュールへ送信して、2つのアクティブ・ノードのDモジュール同士によるデータ・アクセス・コマンドの少なくとも部分的に並列な実行を可能にすることができる。レプリカ・データ・アクセス・コマンドのそのような送信は、クラスタ間相互接続を介して実行されることが可能であり、そのクラスタ間相互接続は、クライアント相互接続が延在できる際に経由するのと同じネットワークを通じて延在することができる。その別のノードのDモジュールは、レプリカ・データ・アクセス・コマンドの実行における成功又は失敗の表示を伴って、レプリカ・データ・アクセス・コマンドの送信に応答することができる。
第1のHAグループのアクティブ・ノードと、第2のHAグループのアクティブ・ノードとの間におけるレプリカ・データ・アクセス・コマンド及びそれに対する応答のやり取りを可能にすることをサポートして、それらの2つのアクティブ・ノードは協力して、クラスタ間相互接続を通じてそれらの間におけるアクティブな通信セッションを形成及び保持することができる。そのようなアクティブな通信セッションにおいては、2つのアクティブ・ノードのそれぞれの現在の状態に関する情報が、それらの間において繰り返しやり取りされることが可能である。また、第1及び第2のHAグループの非アクティブ・ノードは、第1及び第2のHAグループのノード同士の間において延在する非アクティブな通信セッションを確立及び保持して、いずれかのHAグループのアクティブ・ノード内で生じるエラーに応答して同じHAグループの非アクティブ・ノードによってそのアクティブ・ノードを引き継ぐことをサポートすることもできる。2つのアクティブ・ノードは、第1及び第2のHAグループの非アクティブ・ノードに関する情報をやり取りして、それらの非アクティブな通信セッションの形成を可能にし、それによって通信セッションのメッシュを完成させることができる。エラーの結果、非アクティブ・ノードによってアクティブ・ノードのうちの1つを引き継ぐ場合には、2つのアクティブ・ノードの間におけるアクティブな通信セッションは、非アクティブになることが可能であり、その一方で非アクティブな通信セッションのうちの1つが、アクティブな通信セッションになることが可能である。
通信セッションのメッシュを形成及び保持することをサポートして、それぞれのアクティブ・ノードのMモジュール、Nモジュール、及び/又はDモジュールは協力して、第1及び第2のHAグループのノードのうちの複数のノードのネットワーク・アドレスの表示を含むメタデータ、並びに/又はメッシュの通信セッションの少なくともサブセットを確立することに関するその他の情報を得ること、格納すること、及び/又はやり取りすることが可能である。それぞれのHAグループ内では、アクティブ・ノードのMモジュールは、メタデータの一部分を構成する情報を受信することができ、及び/又はアクティブ・ノードのNモジュールは、テストを実行して、メタデータの別の部分を構成する情報を発見することができる。Mモジュール及びNモジュールのうちの一方又は両方は次いで、メタデータのそれらの部分をアクティブ・ノードのDモジュールに提供することができる。Dモジュールは、メタデータの複製を同じHAグループの1つ又は複数の非アクティブ・ノードのDモジュールへ送信することができ、メタデータのコピーを1つ又は複数のストレージ・デバイス内のボリューム及び/又はアグリゲート内に格納することができ、そこに対して、同じHAグループのアクティブ・ノード及び1つ又は複数の非アクティブ・ノードのDモジュールが、アクセスを共有することができる。結果として、そのようなDモジュールのうちの1つが、リセット又は電源投入されることに続いてリブートしたときに、そのDモジュールは、1つ又は複数のストレージ・デバイスからメタデータを取り出すことによって、自分のノードが別のHAグループのノードとの通信セッションを確立していることに関する情報を取り出せることが可能であり、次いでその情報を採用して、メッシュの通信セッションのうちの1つ又は複数をさらに迅速に形成することができる。複数のHAグループのそれぞれにおけるノードのうちの別々のノードが、さまざまな理由のうちのいずれかのためにときおりリブートされる場合がある実施形態においては、そのようなリブートに続く通信セッションのさらに迅速な再確立は、通信セッションのそのようなメッシュの部分が適所にない時間のピリオドを最小化する役割を果たすことができる。エラーに直面し、その結果、ノード及び/又は通信セッションがアクティブであるか、又は非アクティブであるかが変わる場合には、1つ又は複数のストレージ・デバイス内に格納されているメタデータが更新されて、リブートに続くアクティブな通信セッション及び非アクティブな通信セッションの新たな構成を伴う通信セッションのさらに迅速な再確立を可能にすることができる。
第1のHAグループのアクティブ・ノードのDモジュールがデータ・アクセス・コマンドをレプリケートしたときに、そのDモジュールは、マッチするシーケンス識別子(シーケンスID)をそれぞれのデータ・アクセス・コマンドと、第2のHAグループのアクティブ・ノードのDモジュールへ送信されるそのレプリカ・データ・アクセス・コマンドとに割り振ることができる。第1のHAグループのアクティブ・ノードのDモジュールは、データ・アクセス・コマンドのうちの複数の連続したデータ・アクセス・コマンドをコマンド・セットへとグループ化し、レプリカ・データ・アクセス・コマンドのうちのマッチする連続したレプリカ・データ・アクセス・コマンドを、マッチするレプリカ・コマンド・セットへとグループ化することができる。それぞれの新たなコマンド・セット及びマッチするレプリカ・コマンド・セットは、繰り返す時間のインターバルで、及び/又はコマンドそのもののさまざまな特徴に応じて作成されることが可能である。第1のHAグループのアクティブ・ノードのDモジュールは、マッチするセット識別子(セットID)をコマンド・セットと、レプリカ・コマンド・セットのうちのマッチするレプリカ・コマンド・セットとに割り振ることもできる。レプリカ・データ・アクセス・コマンドのうちの一連のレプリカ・データ・アクセス・コマンドのそれぞれのセットが、第2のHAグループのアクティブ・ノードのDモジュールへ送信されたときに、そのDモジュールは、それぞれのレプリカ・データ・アクセス・コマンドに割り振られたシーケンスIDと、それぞれのレプリカ・コマンド・セットに割り振られたセットIDとの両方を採用して、それらのレプリカ・コマンド・セットを、別々のネットワーク・パケットに含めてそれぞれ送信される場合があるそれらの部分同士からさらに効率よく再構築することができる。例として、第2のHAグループのアクティブ・ノードのDモジュールは、セットIDを採用して、送信されるネットワーク・パケットを通じてネットワーク内で生成される場合があるレプリカ・コマンド・セットの冗長な部分を伝達するネットワーク・パケットをさらに効率よく識別及び破棄することができる。
第1及び第2のHAグループのアクティブ・ノードのDモジュールは、セットIDを採用して、一連のデータ・アクセス・コマンドの実行をキャンセルしたいという、及び少なくとも部分的に並列にそうしたいというクライアント・デバイスからの要求を調整すること、及びさらにスピーディーに実施することも可能である。第1のHAグループのアクティブ・ノードのDモジュールは、キャンセルされることになる一連のデータ・アクセス・コマンドを含むコマンド・セット及びマッチするレプリカ・コマンド・セットのセットIDを特定することができる。第1のHAグループのアクティブ・ノードのDモジュールは次いで、それらのセットIDを使用して、コマンド・セットのうちの破棄すべき1つ又は複数を選択し、次いで、その1つ又は複数のコマンド・セット内のデータ・アクセス・コマンドのさらなる実行を停止すること及び防止することの両方の一部として破棄を行うことができる。第1のHAグループのアクティブ・ノードのDモジュールは、それらのセットIDを伝達するキャンセル・コマンドを用いて第2のHAグループのアクティブ・ノードのDモジュールにシグナリングを行うこともできる。キャンセル・コマンドを受信したことに応答して、第2のHAグループのアクティブ・ノードは、それらのセットIDを使用して、レプリカ・コマンド・セットのうちの破棄すべき1つ又は複数を選択し、次いで、第1のHAグループのアクティブ・ノードによるデータ・アクセス・コマンドのさらなる実行の停止及び防止と少なくとも部分的に並列に1つ又は複数のレプリカ・コマンド・セット内のレプリカ・データ・アクセス・コマンドのさらなる実行を停止すること及び防止することの両方の一部として破棄を行うことができる。
本明細書において使用されている表記及び術語を全般的に参照すると、以降に続く詳細な説明の諸部分は、コンピュータ又はコンピュータのネットワーク上で実行されるプログラム手順という点から提示されている場合がある。これらの手順の記述及び表示は、当業者によって、自分の作業の実体を他の当業者たちに最も効果的に伝達するために使用されている。手順とは、ここでは、及び一般には、所望の結果へつながるオペレーションの首尾一貫したシーケンスであると考えられる。これらのオペレーションは、物理量の物理的な操作を必要とするオペレーションである。通常、必須ではないが、これらの量は、格納されること、転送されること、結合されること、比較されること、及びその他の形で操作されることが可能な電気信号、磁気信号、又は光信号の形態を取る。ビット、値、要素、シンボル、文字、語、数などとしてこれらの信号を指すことが、主として共通の使用という理由から、時として好都合であることがわかっている。しかしながら、これら及び類似の語はすべて、適切な物理量に関連付けられるものであり、それらの量に適用される便宜上のラベルにすぎないということに留意されたい。
さらに、これらの操作はしばしば、付加又は比較などの用語で呼ばれ、これらは一般に、人間のオペレータによって実行される知的なオペレーションに関連付けられている。しかしながら、1つ又は複数の実施形態の一部を形成する、本明細書において説明されているオペレーションのうちのいずれにおいても、ほとんどのケースにおいて、人間のオペレータのそのような能力は必要ではなく、又は望ましくない。むしろ、これらのオペレーションはマシン・オペレーションである。さまざまな実施形態のオペレーションを実行するための有用なマシンは、本明細書における教示に従って書かれている内部に格納されたコンピュータ・プログラムによって選択的にアクティブ化若しくは構成される汎用デジタル・コンピュータを含み、及び/又は必要とされる目的のために特別に構築された装置を含む。さまざまな実施形態はまた、これらのオペレーションを実行するための装置又はシステムに関連している。これらの装置は、必要とされる目的のために特別に構築されることが可能であり、又は汎用コンピュータを含むことができる。さまざまなこれらのマシンのための必要とされる構造は、与えられる説明から現れるであろう。
次いで、図面に対する参照が行われ、全体を通じて、同様の要素を指すために同様の参照番号が使用されている。以降の記述においては、説明の目的から、その徹底的な理解を提供するために多くの具体的な詳細が示されている。しかしながら、これらの具体的な詳細を伴わずに新規な実施形態が実施されることが可能であるということは明らかであると言える。その他の場合においては、その説明を容易にするために、よく知られている構造及びデバイスがブロック図の形態で示されている。意図されているのは、特許請求の範囲の範疇内のすべての修正形態、均等形態、及び代替形態をカバーすることである。
図1は、1つ又は複数のクライアント・デバイス100及び1つ又は複数のクラスタ、たとえば、示されているクラスタ1300a及び1300zを組み込んでいるストレージ・クラスタ・システム1000の例示的な一実施形態のブロック図を示している。示されているように、クラスタ1300aは、ノード300a〜dの1つ又は複数と、ストレージ・デバイスのセット800ab及び800cdとを組み込むことができ、クラスタ1300zは、ノード300y〜zの1つ又は複数と、ストレージ・デバイスのセット800yzとを組み込むことができる。さらに示されているように、クラスタ1300aは、パートナー同士としてのノード300a〜bと、ストレージ・デバイスのセット800abとを組み込んでいるHAグループ1600abを含むことができる。クラスタ1300aは、パートナー同士としてのノード300c〜dと、ストレージ・デバイスのセット800cdとを組み込んでいるHAグループ1600cdを含むこともできる。それに対応して、クラスタ1300zは、パートナー同士としてのノード300y〜zと、ストレージ・デバイスのセット800yzとを組み込んでいるHAグループ1600yzを含むことができる。
いくつかの実施形態においては、クラスタ1300a及び1300zは、地理的に離れているロケーション同士に配置されて、格納用としてクライアント・デバイス100のうちの1つ又は複数によって提供されるクライアント・デバイス・データ130を格納する際及び取り出す際に、ある程度の冗長性を可能にすることができる。そのような配置は、クラスタ1300a又は1300zのうちの一方又は他方をクライアント・デバイス100のうちの1つ又は複数に対してアクセス不能にする場合がある障害又はその他のイベントにもかかわらずクライアント・デバイス100のうちの1つ又は複数によるクライアント・デバイス・データ130に対する継続したアクセスを可能にする上で望ましいとみなされる場合がある。示されているように、クラスタ1300a及び1300zのうちの一方又は両方は、クライアント・デバイス・データ130にまったく無関係である場合があるその他のクライアント・デバイス・データ131をさらに格納することができる。
ストレージ・デバイスのセット800abに対するアクセスを共有するためにパートナーにされている少なくとも2つのノード300a及び300bを伴うHAグループ1600abのフォーメーションは、ノード300a〜bのうちで非アクティブ状態にある一方が、アクティブ状態にある自分のパートナー(たとえば、ノード300a〜bのうちの他方)の中のエラー状況に応答してノード300a〜bのうちのそのアクティブな方を引き継ぐことを可能にすることによって、ストレージ・デバイスのセット800ab内に格納されているクライアント・デバイス・データ130にアクセスする際に、ある程度のフォールト・トレランスを可能にすることができる。それに対応して、ストレージ・デバイスのセット800yzに対するアクセスを共有するためにパートナーにされている少なくとも2つのノード300y及び300zを伴うHAグループ1600yzのフォーメーションは、ノード300y〜zのうちで非アクティブ状態にある一方が、アクティブ状態にある自分のパートナー(たとえば、ノード300y〜zのうちの他方)を同様に引き継ぐことを同様に可能にすることによって、ストレージ・デバイスのセット800yz内に格納されているクライアント・デバイス・データ130にアクセスする際に、ある程度のフォールト・トレランスを同様に可能にすることができる。
示されているように、ノード300a〜d及び300y〜zのうちのいずれかのアクティブ・ノードが、クライアント相互接続199を介してクライアント・デバイス100に対してアクセス可能にされることが可能である。また示されているように、ノード300a〜d及び300y〜zは、クラスタ間相互接続399を介してさらに結合されることが可能である。いくつかの実施形態においては、相互接続199及び399は両方とも、同じネットワーク999を通じて延在することができる。相互接続199及び399のそれぞれは、ネットワーク999を通じて、さまざまなネットワーク・セキュリティー・プロトコルのうちのいずれかを使用して定義される仮想プライベート・ネットワーク(VPN)として実装されることが可能である。ネットワーク999は、単一の建物若しくはその他の相対的に限定されたエリア内に延在することに限定された単一のネットワークであることが可能であり、かなりの距離にわたって延在する接続されたネットワークの組合せを含むことができ、及び/又はインターネットを含むことができる。同じネットワーク999内に共存することの代替として、相互接続199及び399は、物理的にまったく別々のネットワークとして実装されることが可能である。例として、クライアント相互接続199は、インターネットを通じて延在して、クライアント・デバイス100同士が、地理的に多様なロケーション同士に配置されることを可能にすることができ、その一方でクラスタ間相互接続399は、クラスタ1300a及び1300zのそれぞれが配置されている2つの地理的に離れているロケーションの間における専用回線を通じて延在することができる。
示されているように、HAグループ1600ab、1600cd、及び1600yzのそれぞれの中のパートナーにされているノード同士は、それぞれHA相互接続699ab、699cd、及び699yzを介してさらに結合されることが可能である。また示されているように、HAグループ1600ab、1600cd、及び1600yzのそれぞれの中のノード同士は、それぞれ、ストレージ相互接続899ab、899cd、及び899yzを介して共有アクセスを可能にする様式でストレージ・デバイスのセット800ab、800cd、及び800yzに結合されることが可能である。HAグループ1600ab、1600cd、及び1600yzのそれぞれを構成する、パートナーにされているノード、及びストレージ・デバイスのセットは、互いに対して、相対的に近い物理的な近接度内に配置されることが可能であり、それによって、相互接続699ab、899ab、699cd、899cd、699yz、及び899yzはそれぞれ、(たとえば、部屋の中に、及び/又はキャビネットの中に延在して)相対的に短い距離を横切ることが可能である。
より広範には、ネットワーク999、並びに/又は相互接続199、399、699ab、699cd、及び699yzのうちの1つ若しくは複数は、信号をやり取りすることができるさまざまな通信テクノロジー(又はそれらの組合せ)のうちのいずれかに基づくことが可能であり、それらの通信テクノロジーは、電気的に及び/又は光学的に伝導性のケーブルを採用する有線テクノロジー、並びに赤外線、無線周波数、又はその他の形態の無線送信を採用する無線テクノロジーを含むが、それらには限定されない。相互接続899ab、899cd、及び899yzのそれぞれは、さまざまな広く知られて使用されているストレージ・インターフェース標準のうちのいずれかに基づくことが可能であり、SCSI、シリアル接続SCSI(SAS)、ファイバ・チャネルなどを含むが、それらには限定されない。
ストレージ・クラスタ・システム1000内のクラスタ及びノードの具体的な数量の記述にもかかわらず、異なる数量のクラスタ及びノードを組み込むその他の実施形態も可能であるということに留意されたい。同様に、クラスタ1300a及び1300zのそれぞれの中のHAグループ及びノードの具体的な数量の記述にもかかわらず、異なる数量のHAグループ及びノードを組み込むその他の実施形態も可能である。さらに、HAグループ1600ab、1600cd、及び1600yzのそれぞれは、ノード300a〜b、300c〜d、及び300y〜zのペアをそれぞれ組み込んでいるものとして示されているが、HAグループ1600ab、1600cd、及び1600yzのうちの1つ又は複数が、2つよりも多いノードを組み込むことができるその他の実施形態も可能である。
図2A及び図2Bはそれぞれ、ストレージ・クラスタ・システム1000の例示的な部分のブロック図をさらに詳細に示している。さらに具体的には、図2Aは、クラスタ1300a内のノード300a〜d及びそれらの間における相互接続の態様をさらに詳細に示している。図2Bは、クラスタ1300aと1300zとの間に延在する相互接続を含めて、ノード300a〜b及び300y〜zの間における相互接続の態様をさらに詳細に示している。
図2A及び図2Bの両方を参照すると、ノード300a〜d及び300y〜zのそれぞれは、Mモジュール400、Nモジュール500、及びDモジュール600のうちの1つ又は複数を組み込むことができる。示されているように、Mモジュール400及びNモジュール500のそれぞれは、クライアント相互接続199に結合されることが可能であり、クライアント相互接続199によって、それぞれは、クライアント・デバイス100のうちの1つ又は複数に対してアクセス可能となることができる。ノード300a〜d及び300y〜zのうちの1つ又は複数のアクティブ・ノードのMモジュール400は、クライアント相互接続199を介してクライアント・デバイス100のうちの1つ又は複数と協力して、ストレージ・クラスタ・システム1000が、クライアント・デバイス100のうちの1つ又は複数によって提供されるクライアント・デバイス・データ130を格納してそのクライアント・デバイス・データ130に対するアクセスを提供する様式のさまざまな態様をクライアント・デバイス100のうちの1つのオペレータが構成することを可能にすることができる。ノード300a〜d及び300y〜zのうちの1つ又は複数のアクティブ・ノードのNモジュール500は、クライアント相互接続199を介してクライアント・デバイス100のうちの1つ又は複数から受信されるストレージ・サービスを求める要求を受信し、その要求に応答することができ、プロトコル変換を実行して、それぞれのストレージ・サービス要求を1つ又は複数のデータ・アクセス・コマンドへと変換することができる。
示されているように、ノード300a〜d及び300y〜zのうちのすべてのDモジュール600は、クラスタ間相互接続399を介して互いに結合されることが可能である。また、HAグループ1600ab、1600cd、及び1600yzのそれぞれの中においては、パートナーにされているノード同士のDモジュール600は、それぞれストレージ・デバイスのセット800ab、800cd、及び800yzに対する結合を共有することができる。さらに具体的には、パートナーにされているノード300a及び300bのDモジュール600は両方とも、ストレージ相互接続899abを介してストレージ・デバイスのセット800abに結合されることが可能であり、パートナーにされているノード300c及び300dのDモジュール600は両方とも、ストレージ相互接続899cdを介してストレージ・デバイスのセット800cdに結合されることが可能であり、パートナーにされているノード300y及び300zのDモジュール600は両方とも、ストレージ相互接続899yzを介してストレージ・デバイスのセット800yzに結合されることが可能である。ノード300a〜d及び300y〜zのうちのアクティブ・ノードのDモジュール600は、クライアント・デバイス100のうちの1つ又は複数から受信されるストレージ・サービス要求を変換することから、これらのノードのNモジュール500のうちの1つ又は複数によって得られるデータ・アクセス・コマンドを実行することができる。
したがって、ノード300a〜d及び300y〜zのうちのアクティブ・ノードのDモジュール600は、ストレージ相互接続899ab、899cd、及び899yzのうちの対応するストレージ相互接続を介してストレージ・デバイスのセット800ab、800cd、及び800yzのうちの対応するノードにアクセスして、データ・アクセス・コマンドを実行することの一部としてクライアント・デバイス・データ130を格納すること及び/又は取り出すことが可能である。データ・アクセス・コマンドは、格納するためのクライアント・デバイス・データ130の諸部分、及び/又は格納されているクライアント・デバイス・データ130を更新するために用いるクライアント・デバイス・データ130のさらに新たな諸部分によって伴われることが可能である。代替として、又は追加として、データ・アクセス・コマンドは、クライアント・デバイス100のうちの1つ又は複数へ再び供給するためにストレージから取り出されることになるクライアント・デバイス・データ130の諸部分を指定することができる。
さらに、図2Bを参照すると、クラスタ1300a又は1300zのうちの一方のノード300a〜b及び300y〜zのうちのアクティブ・ノードのDモジュール600は、データ・アクセス・コマンドをレプリケートし、結果として生じるレプリカ・データ・アクセス・コマンドを、クラスタ間相互接続399を介してクラスタ1300a又は1300zのうちの他方のノード300a〜b及び300y〜zのうちの別のアクティブ・ノードへ送信して、Dモジュール600のうちの2つによるデータ・アクセス・コマンドの少なくとも部分的な並列実行を可能にすることができる。この方法においては、ストレージ・デバイスのセット800ab又は800yzのうちの1つの中に格納されているクライアント・デバイス・データ130の状態は、示されているように、ストレージ・デバイスのセット800ab又は800yzのうちの他の1つの中にミラーリングされることが可能である。
互いから地理的に離れていることが可能である別々のクラスタに関連付けられているストレージ・デバイスの複数のセットの間におけるクライアント・デバイス・データ130の状態のそのようなミラーリングは、クライアント相互接続199の局所的な障害の結果として(たとえば、クライアント相互接続の一部分が特定の地理的領域において延在する際に経由するネットワーク999の一部分の障害の結果として)クラスタのうちの1つのノードがアクセス不能になるという可能性に対処する上で望ましいとみなされる場合がある。当業者にはよく知られているように、1つのHAグループのパートナーにされているノード同士の間におけるさらなる相互接続(たとえば、HA相互接続699ab、699cd、及び699yz)の使用は、1つのHAグループのパートナーにされているノード同士を互いに対して近い近接度内に物理的に配置することを促す傾向があり、それによって、ネットワークの局所的な障害が、1つのHAグループのすべてのノードをクライアント・デバイス100に対してアクセス不能にする場合がある。たとえば、ノード300a及び300bの両方の付近のクライアント相互接続199を含むネットワークの一部分の障害が、ノード300a及び300bの両方をクライアント・デバイス100に対してアクセス不能にする場合があり、それによって、ストレージ・デバイスのセット800ab内に格納されているクライアント・デバイス・データ130は、ノード300a又は300bのいずれを通じてもアクセス不能になる。ストレージ・デバイスのセット800ab及び800yzの両方がクライアント・デバイス・データ130の状態をミラーリングしている状態で、クライアント・デバイス100は、ストレージ・デバイスのセット800abに対するアクセスの喪失にもかかわらず、ストレージ・デバイスのセット800yz内のクライアント・デバイス・データ130に依然としてアクセスすることができる。
図2A及び図2Bの両方を再び参照すると、前述のように、ノード300a〜d及び300y〜zのうちのパートナーにされているノード同士の間において、それぞれ、ストレージ相互接続899ab、899cd、及び899yzを介してストレージ・デバイスのセット800ab、800cd、及び800yzのそれぞれに対するアクセスを共有することは、ノード300a〜d及び300y〜zのうちの1つの中で障害が生じた場合に、ストレージ・デバイスのセット800ab、800cd、及び800yzのうちの1つに対する継続したアクセスを可能にすることができる。示されているように、そのような障害にもかかわらずそのような継続したアクセスを可能にすることをサポートして、ノード300a〜d及び300y〜zのうちのパートナーにされているノード同士のDモジュール600同士は、それぞれ、HA相互接続699ab、699cd、及び699yzを介してHAグループ1600ab、1600cd、及び1600yzのそれぞれの中で結合されることが可能である。HA相互接続699ab、699cd、又は699yzを通じて、これらのノードのうちのそれぞれのDモジュール600は、自分のパートナーのDモジュール600のステータスをそれぞれモニタすることができる。さらに具体的には、パートナーにされているノード300a及び300bのDモジュール600同士は、HA相互接続699abを通じて互いをモニタすることができ、パートナーにされているノード300c及び300dのDモジュール600同士は、HA相互接続699cdを通じて互いをモニタすることができ、パートナーにされているノード300y及び300zのDモジュール600同士は、HA相互接続699yzを通じて互いをモニタすることができる。
そのようなモニタリングは、HA相互接続699ab、699cd、又は699yzのうちの1つ又は複数を介して「ハートビート」及び/又はその他のステータス信号(たとえば、データ・アクセス・コマンドの実行の現在の状態を伝達するメッセージ)の繰り返しのやり取りを伴うことができ、指定された繰り返しインターバル内にそのような信号の受信がないという場合は、その信号の元として予期されていたDモジュール600のうちの1つの障害の表示と取られることが可能である。代替として、又は追加として、そのようなモニタリングは、Dモジュール600のうちのモニタされているDモジュール600からの、ノード300a〜d又は300y〜zのうちの1つの別のコンポーネントの障害、たとえば、ノード300a〜d又は300y〜zのうちのその1つのMモジュール400の及び/又はNモジュール500の障害が生じている旨の表示を待つことを伴うことが可能である。HAグループ1600ab、1600cd、又は1600yzのうちの1つに属しているノード300a〜d又は300y〜zのうちのアクティブ・ノードの障害のそのような表示に応答して、HAグループ1600ab、1600cd、又は1600yzのうちの同じ1つのノード300a〜d又は300y〜zの中の非アクティブなパートナーが、引き継ぎを行うことができる。ノード300a〜d又は300y〜zのうちのパートナーにされているノード同士の間におけるそのような「引き継ぎ」は、完全な引き継ぎであることが可能である。なぜなら、引き継ぎを行っているパートナーは、これらのノードのうちの障害に陥っているノードによって実行された機能のうちのすべての実行を引き継ぐことができるからである。
しかしながら、いくつかの実施形態においては、少なくとも、ノード300a〜d及び/又は300y〜zのうちの複数のノードのNモジュール500及びDモジュール600が、ノード300a〜d又は300y〜zのうちの1つの一部分の障害に応答した部分的な引き継ぎを可能にする様式で相互接続されることが可能である。図2Aをさらに具体的に参照すると、ノード300a〜dのうちのそれぞれのNモジュール500は、クラスタ内相互接続599aを介してノード300a〜dのうちのそれぞれのDモジュール600に結合されることが可能である。言い換えれば、クラスタ1300a内では、Nモジュール500のうちのすべて及びDモジュール600のうちのすべてが結合されて、ノード300a〜dのうちの別々のノードのNモジュール500及びDモジュール600の間においてデータ・アクセス・コマンドがやり取りされることを可能にすることができる。したがって、例として、ノード300aのNモジュール500が障害に陥っているが、ノード300aのDモジュール600が依然として機能できる場合には、ノード300aのパートナー・ノード300bの(又はHAグループ内でノード300aがパートナーにされていないノード300c又は300dのうちの1つの)Nモジュール500が、ノード300aのNモジュール500を引き継ぐことができる。
クラスタ1300a及び1300zは、互いから地理的に離れていることが可能であるが、クラスタ1300a及び1300zのそれぞれの中では、ノード同士、及び/又はノードのコンポーネント同士は、互いに対して、相対的に近い物理的な近接度内に配置されることが可能であり、それによって、クラスタ内相互接続599a及び599zはそれぞれ、(たとえば、部屋の中に、及び/又は単一のキャビネットの中に延在して)相対的に短い距離を横切ることが可能である。より広範には、クラスタ内相互接続599a及び599zのうちの1つ又は複数は、信号をやり取りすることができるさまざまな通信テクノロジー(又はそれらの組合せ)のうちのいずれかに基づくことが可能であり、それらの通信テクノロジーは、電気的に及び/又は光学的に伝導性のケーブルを採用する有線テクノロジー、並びに赤外線、無線周波数、又はその他の形態の無線送信を採用する無線テクノロジーを含むが、それらには限定されない。例として、クラスタ内相互接続599aは、ノード300a〜dのうちのそれぞれの各Nモジュール500をノード300a〜dのうちのそれぞれの各Dモジュール600に結合するポイントツーポイント相互接続のメッシュから構成されることが可能である。或いは、別の例として、クラスタ内相互接続599aは、ネットワーク・スイッチ(図示せず)を含むことができ、そのネットワーク・スイッチに対して、ノード300a〜dのNモジュール500のうちのそれぞれ及びDモジュール600のうちのそれぞれが結合されることが可能である。
しかしながら、1つのノードが、障害が生じている別のノードのすべての機能を引き継ぐ完全な引き継ぎを選んで、そのような部分的な引き継ぎを許可しない(又はその場合を少なくとも制限する)ことが望ましいとみなされる場合があるということに留意されたい。これは、ノード300a〜d及び/又は300y〜zのうちの1つ又は複数の中のNモジュール500及びDモジュール600の間に延在するクラスタ内相互接続599a及び/又は599zの部分が、異なるノードのNモジュール500及びDモジュール600の間に延在するクラスタ内相互接続599a及び/又は599zの部分よりも大幅に迅速にコマンド及び/又はデータを転送する能力を有している結果かもしれない。したがって、いくつかの実施形態においては、それぞれ、ノード300a〜d又は300y〜zのうちの別々のノードの間に延在するクラスタ内相互接続599a及び/又は599zの部分が使用されず、それによって非アクティブのままでいることが可能である。
ノード300a〜d及び300y〜zのそれぞれの中にMモジュール400、Nモジュール500、及びDモジュール600のそれぞれの単一のモジュールのみが示されているにもかかわらず、これらのノードのうちの1つ又は複数の中にMモジュール400、Nモジュール500、及びDモジュール600のうちの1つ又は複数の異なる数量を組み込むことができるその他の実施形態も可能であるということにも留意されたい。例として、ノード300a〜d及び/若しくは300y〜zのうちの1つ若しくは複数が、クライアント・デバイス100のうちの1つ若しくは複数との通信のために、ある程度のフォールト・トレランスをノード内に提供する目的で複数のNモジュール500を組み込む、並びに/又はストレージ・デバイスのセット800ab、800cd、若しくは800yzのうちの対応するセットにアクセスするために、ある程度のフォールト・トレランスをノード内に提供する目的で複数のDモジュール600を組み込む実施形態が可能である。
図3は、ストレージ・クラスタ・システム1000のクラスタ1300aのHAグループ1600abの例示的な一実施形態のブロック図をさらに詳細に示している。示されているように、HAグループ1600abのノード300a及び300bのうちで、ノード300aは、クライアント・デバイス100との通信に従事して、ストレージ・デバイスのセット800ab内のクライアント・デバイス・データ130を変更するオペレーションを実行するためにアクティブであることが可能であり、その一方でノード300bは、非アクティブでいて、ノード300aを引き継ぐ必要性を待っていることが可能である。さらに具体的には、Mモジュール400及びNモジュール500は、(Mモジュール400及びNモジュール500が点線を用いて描かれている状態で示されているように)クライアント・デバイス100との通信に従事しないことが可能である。また示されているように、ノード300a〜bのそれぞれは、Mモジュール400、Nモジュール500、及びDモジュール600のうちの1つ又は複数を組み込むことができる。
さまざまな実施形態においては、ノード300a〜bのうちのそれぞれのMモジュール400は、プロセッサ・コンポーネント450と、メモリ460と、Mモジュール400を少なくともクライアント相互接続199に結合するためのインターフェース490とのうちの1つ又は複数を組み込む。メモリ460は、コントロール・ルーチン440を格納することができる。コントロール・ルーチン440は、さまざまな機能を実行するためのロジックを実装するために、プロセッサ・コンポーネント450上で、Mモジュール400のメイン・プロセッサ・コンポーネントとしてのその役割において機能する命令のシーケンスを組み込むことができる。ノード300aが、クライアント・デバイス100のうちの1つ又は複数との通信に従事するために、及びデータ・アクセス・コマンドを実行するためにアクティブである結果として、ノード300aのMモジュール400のプロセッサ・コンポーネント450は、コントロール・ルーチン440を実行するためにアクティブであることが可能である。しかしながら、ノード300bが非アクティブである結果として、プロセッサ・コンポーネント450は、ノード300bのMモジュール400内のコントロール・ルーチン440を実行するためにアクティブではないことが可能である。しかしながら、ノード300bがノード300aを引き継いだ場合には、ノード300b内のコントロール・ルーチン440を実行し始めることができ、その一方で、ノード300a内のコントロール・ルーチン440を実行するのを停止することができる。
コントロール・ルーチン440を実行する際に、アクティブ・ノード300aのMモジュール400のプロセッサ・コンポーネント450は、リモートから供給された構成情報を受け入れるようにインターフェース490を操作することができる。具体的には、プロセッサ・コンポーネント450は、ウェブ・サーバ、テルネット・アクセス、インスタント・メッセージング、及び/又はその他の通信サービスを提供することができ、それらによって、ストレージ・クラスタ・システム1000のノード300a、HAグループ1600ab、クラスタ1300a、及び/又はその他のコンポーネントのオペレーションの諸側面がリモートから構成されることが可能である。いくつかの実施形態においては、そのようなリモート構成は、クライアント・デバイス100のうちの1つ又は複数から生じることが可能である。例として、ストレージ・デバイスのセット800ab内に格納されているクライアント・デバイス・データ130に対するアクセスを許可するためにクライアント・デバイス100のうちのそれぞれを認証することができるセキュリティー・プロトコル、並びに、クライアント相互接続199を介した通信においてどんなプロトコルが採用されることが可能であるか、クライアント・デバイス・データ130をストレージ・デバイスのセット800ab内に格納する際にどんなファイル・システムが採用されることが可能であるか、HAグループ1600abを形成するためにノード300b〜d又は300y〜zのうちのどんなその他のノードがノード300aとのパートナーにされることが可能であるか、さらなるフォールト・トレランスを提供するためにどんなその他のノード及び/又はHAグループがノード300a及び/又はHAグループ1600abと協力することができるか、さまざまな相互接続上でノード300a〜d及び/又は300y〜zのうちのその他のノードにどんなネットワーク・アドレスが割り当てられることが可能であるかなどが、リモートから構成されることが可能である。プロセッサ・コンポーネント450がそのような構成情報を受信するときに、及び/又はそのような情報を受信した後に、プロセッサ・コンポーネント450は、その情報及び/又はその情報に対する更新をメタデータの一部分としてNモジュール500及び/又はDモジュール600に中継するようにインターフェース490を操作することができる。
さまざまな実施形態においては、ノード300a〜bのうちのそれぞれのNモジュール500は、プロセッサ・コンポーネント550と、メモリ560と、Nモジュール500をクライアント相互接続199及びクラスタ内相互接続599aのうちの一方又は両方に結合するためのインターフェース590とのうちの1つ又は複数を組み込む。メモリ560は、コントロール・ルーチン540を格納することができる。コントロール・ルーチン540は、さまざまな機能を実行するためのロジックを実装するために、プロセッサ・コンポーネント550上で、Nモジュール500のメイン・プロセッサ・コンポーネントとしてのその役割において機能する命令のシーケンスを組み込むことができる。ノード300aが、クライアント・デバイス100のうちの1つ又は複数との通信に従事するために、及びデータ・アクセス・コマンドを実行するためにアクティブである結果として、ノード300aのNモジュール500のプロセッサ・コンポーネント550は、コントロール・ルーチン540を実行するためにアクティブであることが可能である。しかしながら、ノード300bが非アクティブである結果として、プロセッサ・コンポーネント550は、ノード300bのNモジュール内のコントロール・ルーチン540を実行するためにアクティブではないことが可能である。しかしながら、ノード300bがノード300aを引き継いだ場合には、ノード300b内のコントロール・ルーチン540を実行し始めることができ、その一方で、ノード300a内のコントロール・ルーチン540を実行するのを停止することができる。
コントロール・ルーチン540を実行する際に、アクティブ・ノード300aのNモジュール500のプロセッサ・コンポーネント550は、通信相手となるその他のデバイスを検知するためにさまざまなテストを実行するように、及び/又は通信のためにその他のデバイスに連絡を取ることができるネットワーク・アドレスを割り振るようにインターフェース590を操作することができる。少なくとも、リセット又は電源投入されることに続いてリブートすることの一部として、プロセッサ・コンポーネント550は、ノード300a〜d及び/又は300y〜zのうちの1つ又は複数の1つ又は複数のコンポーネント(たとえば、Mモジュール400、Nモジュール500、及び/又はDモジュール600)と通信するためのアドレス及び/又は通信プロトコルを特定するためにクラスタ間相互接続399及び/又はクラスタ内相互接続599a上でさまざまなテストを実行することができる。代替として、又は追加として、クラスタ内相互接続599aの少なくとも一部分がインターネット・プロトコル(IP)アドレッシングをサポートする実施形態においては、プロセッサ・コンポーネント550は、ダイナミック・ホスト・コントロール・プロトコル(DHCH)サーバの役割において、そのようなアドレスを割り振るように機能することができる。また代替として、又は追加として、プロセッサ・コンポーネント550は、Mモジュール400から構成情報を受信することができる。
いくつかの実施形態においては、Mモジュール400から受信された構成情報は、クラスタ間相互接続399及び/又はクラスタ内相互接続599a上でそのようなテストを実行する際にプロセッサ・コンポーネント550によって採用されることが可能である(たとえば、そのように受信された構成情報は、テストされることになるある範囲のIPアドレスを含むことができる)。プロセッサ・コンポーネント550がそのようなテストを実行するときに、及び/又はそのようなテストを実行した後に、プロセッサ・コンポーネント550は、それらのテストの結果及び/又はそれらの結果に対する更新の表示をメタデータの一部分としてDモジュール600に中継するようにインターフェース590を操作することができる。さらに、プロセッサ・コンポーネント550がクライアント・デバイス100及び/又はその他のデバイスのうちの1つ又は複数と対話するときに、プロセッサ・コンポーネント550は、さまざまなテストの実行から特定された情報における変更を検知することができ、更新されたメタデータの諸部分としてそれらの変更の表示をDモジュール600に提供するようにインターフェース590を操作することができる。
コントロール・ルーチン540をさらに実行する際に、プロセッサ・コンポーネント550は、クライアント相互接続199を介してクライアント・デバイス100のうちの1つ又は複数との間でストレージ・サービス要求、それらに対する応答、及び/又はクライアント・デバイス・データ130をやり取りするようにインターフェース590を操作することができる。クライアント・デバイス100、並びにノード300a〜d及び300y〜zのうちの1つ又は複数のアクティブ・ノードのNモジュール500は、クライアント・デバイス・データ130の取り扱いのためのクライアント/サーバ・モデルに従ってクライアント相互接続199を介して互いに対話することができる。別の言い方をすれば、クライアント・デバイス100のうちのそれぞれは、クライアント・デバイス・データ130の格納に関連したストレージ・サービスを求める要求を、クライアント・デバイス100との通信に従事するためにアクティブであるノード300a〜d及び300y〜zのうちの1つ又は複数に対して発行することができる。そうする際に、クライアント・デバイス100及びNモジュール500は、クライアント相互接続199を介してパケットをやり取りすることができ、それにおいて、ストレージ・サービス要求がNモジュール500へ送信されることが可能であり、応答(たとえば、それらの要求の取り扱いのステータスの表示)がクライアント・デバイス100へ送信されることが可能であり、それらの間においてクライアント・デバイス・データ130がやり取りされることが可能である。やり取りされるパケットは、さまざまなファイルベースのアクセス・プロトコルのいずれかを利用することができ、それらのプロトコルは、TCP/IPを介したコモン・インターネット・ファイル・システム(CIFS)プロトコル又はネットワーク・ファイル・システム(NFS)プロトコルを含むが、それらには限定されない。代替として、又は追加として、やり取りされるパケットは、さまざまなブロックベースのアクセス・プロトコルのいずれかを利用することができ、それらのプロトコルは、TCPを介してカプセル化されたスモール・コンピュータ・システム・インターフェース(SCSI)プロトコル(iSCSI)及び/又はファイバ・チャネルを介してカプセル化されたSCSI(FCP)を含むが、それらには限定されない。
また、コントロール・ルーチン540を実行する際に、プロセッサ・コンポーネント550は、クライアント・デバイス・データ130を含めて、コマンド及び/又はデータを、クラスタ内相互接続599aを介してDモジュール600との間でやり取りするようにインターフェース590を操作することができる。コマンド及び/又はデータのそのようなやり取りは、パケットが使用されるプロトコルを採用すること又は採用しないことが可能である。いくつかの実施形態においては、クライアント・デバイス・データ130のやり取りをもたらすためのデータ・アクセス・コマンドは、クライアント・デバイス・データ130をストレージ・デバイスのセット800ab内に格納する際に使用するために選択されることが可能であるいかなる特定のファイル・システムにも依存しないことが可能である様式でクラスタ内相互接続599aを通じてやり取りされることが可能である。さらに具体的には、クライアント・デバイス・データ130を格納する及び/又は取り出すためのデータ・アクセス・コマンド内でクライアント・デバイス・データ130の諸部分が呼ばれることが可能である様式は、ファイル・システムの選択から独立していることを意図されている様式で、ファイル名の識別、ブロック識別子の識別などを伴うことができる。
通信のプロトコル及び/又はその他の諸側面におけるあり得る相違を前提として、プロセッサ・コンポーネント550は、クライアント相互接続199を介したクライアント・デバイス100のうちの1つ又は複数との通信において採用されているプロトコルと、クラスタ内相互接続599aを介したDモジュール600との通信において採用されているプロトコルとの間において変換を行わされることが可能である。代替として、又は追加として、クライアント相互接続199を介した通信において採用されているプロトコルのうちの1つ又は複数は、そのような通信と、クラスタ内相互接続599aを介した通信との間において最小度合いのプロトコル変換を可能にする様式でファイル識別及び/又はブロック識別を採用することができる。
そのようなプロトコル変換を実行する際に、プロセッサ・コンポーネント550は、クライアント・デバイス100のうちの1つからのストレージ・サービス要求を、クライアント・デバイス・データ130を格納する及び/又は取り出すための1つ又は複数のデータ・アクセス・コマンドとしてDモジュール600へ中継することを行わされることが可能である。さらに具体的には、クライアント・デバイス・データ130を取り出すためのストレージ・サービスを求める、クライアント相互接続199を介して受信された要求は、ストレージ・デバイスのセット800abからクライアント・デバイス・データ130を取り出すために、及びそれらのクライアント・デバイス・データ130をNモジュール500に提供して、Nモジュール500によって、クライアント・デバイス100のうちの要求を行っているクライアント・デバイス100へ中継して戻してもらうためにクラスタ内相互接続599aを介してDモジュール600へ伝達される1つ又は複数のデータ・アクセス・コマンドへと変換されることが可能である。また、クライアント・デバイス・データ130を格納するためのストレージ・サービスを求める、クライアント相互接続199を介して受信された要求は、クライアント・デバイス・データ130をストレージ・デバイスのセット800ab内に格納するためにクラスタ内相互接続599aを介してDモジュール600へ伝達される1つ又は複数のデータ・アクセス・コマンドへと変換されることが可能である。
さまざまな実施形態においては、ノード300a〜bのうちのそれぞれのDモジュール600は、プロセッサ・コンポーネント650と、メモリ660と、ストレージ相互接続899abを介してDモジュール600をストレージ・デバイスのセット800abに結合するためのストレージ・コントローラ665と、Dモジュール600をクラスタ内相互接続599a、クラスタ間相互接続399、及びHA相互接続699abのうちの1つ又は複数に結合するためのインターフェース690とのうちの1つ又は複数を組み込む。メモリ660は、コントロール・ルーチン640及びメタデータ630abのうちの1つ又は複数を格納する。また、さらに詳細に説明されることになるが、ノード300aのDモジュール600において、メモリ660の一部分が、同期化キャッシュ(シンク・キャッシュ)639aとしての役割を果たすように割り当てられることが可能であり、その一方でノード300bのDモジュールにおいて、メモリ660の一部分が、同期キャッシュ639bとしての役割を果たすように同様に割り当てられることが可能である。コントロール・ルーチン640は、さまざまな機能を実行するためのロジックを実装するために、プロセッサ・コンポーネント650上で、Dモジュール600のメイン・プロセッサ・コンポーネントとしてのその役割において機能する命令のシーケンスを組み込む。しかしながら、ノード300aが、クライアント・デバイス100のうちの1つ又は複数との通信に従事するために、及びデータ・アクセス・コマンドを実行するためにアクティブである結果として、ノード300bのDモジュールのプロセッサ・コンポーネント650によって実行されることが可能であるコントロール・ルーチン640の一部分とは異なるコントロール・ルーチン640の部分が、ノード300aのDモジュール600のプロセッサ・コンポーネント650によって実行されることが可能である。結果として、これらのDモジュール600のそれぞれの中のコントロール・ルーチン640の別々の部分の実行によって別々のロジックが実施されることが可能である。
コントロール・ルーチン640を実行する際に、アクティブ・ノード300aのDモジュール600のプロセッサ・コンポーネント650は、Mモジュール400及び/又はNモジュール500からクラスタ内相互接続599aを介してメタデータの諸部分及び/又はそれらに対する更新を受信するようにインターフェース690を操作することができる。少なくともノード300aのオペレーションの諸側面がMモジュール400を介してリモートから構成されているか、及び/又はNモジュール500によって実行されたテストの結果に基づいて構成されているかにかかわらず、プロセッサ・コンポーネント650は、結果として生じるそれらの側面の構成を示すそれらの受信されたメタデータ部分からのメタデータ630abを生成することができ、メタデータ630abを、プロセッサ・コンポーネント650によるその後の使用のためにメモリ660内に格納することができる。プロセッサ・コンポーネント650は、メタデータの更新された部分をMモジュール400、Nモジュール500、及び/又は、更新されたメタデータ部分のその他のあり得るソースから受信したことに応答してメタデータ630abの生成を繰り返し、それによってメタデータ630abの更新されたバージョンを作成することができ、その更新されたバージョンを、プロセッサ・コンポーネント650が、以前のバージョンの代わりにメモリ660内に格納することができる。
メタデータ630ab及び/又はそのそれぞれの更新されたバージョンの生成に続いて、プロセッサ・コンポーネント650は、メタデータ630abを、その後の取り出しのためにストレージ・デバイスのセット800ab内に格納することができる。ノード300aのDモジュール600のその後のリブート中に、プロセッサ・コンポーネント650は、自分がコントロール・ルーチン640を実行することによって、ストレージ・デバイスのセット800abにアクセスしてメタデータ630abを取り出すことを行わされることが可能である。この方法においては、プロセッサ・コンポーネント650は、Dモジュール600がストレージ・デバイスのセット800abを操作することになる様式、及び/又はDモジュール600がその他のデバイス(たとえば、ノード300aのMモジュール400若しくはNモジュール500、及び/又は、その他のノード300b〜d若しくは300y〜zのうちの1つ若しくは複数のNモジュール500若しくはDモジュール600)と対話することになる様式を含めて、少なくともノード300aのオペレーションのさまざまな側面が構成されることになる様式の表示を取り出す。ノード300aのDモジュール600が、少なくともノード300aのオペレーションの諸側面に関する情報を入手することを、Mモジュール400及び/又はNモジュール500から独立してそうすることによって、できるだけ迅速に行うことを可能にすることが望ましいとみなされる場合がある。
Mモジュール400、Nモジュール500、及びDモジュール600のうちの複数を含めて、ノード300aの複数のコンポーネントがリブートさせられる場合があり得るが、それらの場合は、更新、アップグレード、ストレージ・スペースの拡張、修理などを実施することを含むが、それらには限定されない。Dモジュール600のリブートに続いてその後の取り出しのためにストレージ・デバイスのセット800ab内にメタデータ630abを格納することによって、Dモジュール600が、メタデータ630abを再び得るための元となるメタデータ部分を提供される前にMモジュール400及び/又はNモジュール500のリブートの完了を待つ必要性が回避される。
代替として、又は追加として、Mモジュール400及び/又はNモジュール500が機能しなくなるかもしれない状況が起こり得る。例として、Mモジュール400、Nモジュール500、及びDモジュール600のうちの複数がリブートされる場合には、Mモジュール400及び/又はNモジュール500が成功裏にリブートできない可能性があり、それによって、Mモジュール400又はNモジュール500のいずれかが、延長された時間のピリオドにわたって、メタデータ630abを構成するメタデータ部分を提供するためのDモジュール600からのいかなる要求にも応答しないままとなる。したがって、メタデータ630abを独立して取り出すDモジュール600の能力は、Dモジュール600が、ノード300aの少なくとも何らかの機能の喪失にもかかわらず、その他のノード300b〜d及び/又は300y〜zのうちの1つ又は複数のNモジュール500及び/又はDモジュール600と依然として協力して、クライアント・デバイス・データ130のフォールト・トレラントな格納及び取り出しを提供することを可能にすることができる。
また、メタデータ630ab及び/又はそのそれぞれの更新されたバージョンの生成に続いて、ノード300aのDモジュール600のプロセッサ・コンポーネント650は、アクティブ・ノード300a内の障害に応答してそのノード300aをノード300bがさらにスピーディーに引き継ぐことを可能にするためにHA相互接続699abを介して非アクティブ・ノード300bのDモジュール600へメタデータ630abの複製を送信するようにインターフェース690を操作することができる。この方法においては、ノード300bは、1つ若しくは複数のクライアント・デバイスとの通信を引き継ぐこと、ノード300c〜d及び/若しくは300y〜zのうちの1つ若しくは複数の他のノードとの通信を引き継ぐこと、並びに/又はストレージ・デバイスのセット800abのコントロール及び/若しくはストレージ・デバイスのセット800abに対するアクセスを引き継ぐことをさらに容易に行うためにノード300bによって必要とされる情報を提供する目的でメタデータ630ab及び/又はその更新されたバージョンを直接に提供される。
コントロール・ルーチン640をさらに実行する際に、ノード300aのDモジュール600のプロセッサ・コンポーネント650は、説明されているように、クライアント・デバイス・データ130を格納すること及び取り出すことを、クラスタ内相互接続599aを介して受信されたそうするためのデータ・アクセス・コマンドに応答して行うように、ストレージ・コントローラ665を通じてストレージ・デバイスのセット800abを操作することができる。プロセッサ・コンポーネント650は、クラスタ内相互接続599aを介してNモジュール500からデータ・アクセス・コマンドを受信すること、及び/又はNモジュール500との間でデータ(クライアント・デバイス・データ130を含む)をやり取りすることを行うようにインターフェース690を操作することができる。
クライアント・デバイス・データ130をストレージ・デバイスのセット800ab内に格納すること、及び/又はクライアント・デバイス・データ130をそこから取り出すことを行うためのデータ・アクセス・コマンドを実行するようにストレージ・コントローラ665を操作することに加えて、ノード300aのDモジュール600のプロセッサ・コンポーネント650は、それらのデータ・アクセス・コマンドをレプリケートすること、及び結果として生じるレプリカ・データ・アクセス・コマンドを、クラスタ間相互接続399を介してその他のクラスタ1300zのHAグループ1600yzのノード300y〜zのうちのアクティブ・ノードのDモジュール600へ送信するようにインターフェース690を操作することも可能である。論じられているように、別のHAグループのアクティブ・ノードへのそのようなレプリカ・データ・アクセス・コマンドの送信は、クライアント・デバイス・データ130の格納及び/又は取り出しにおけるさらなる度合いのフォールト・トレランスを提供することができ、そのフォールト・トレランスにおいては、ノード300aによる元のデータ・アクセス・コマンドの実行と少なくとも部分的に並列に、別のクラスタのアクティブ・ノードによってレプリカ・データ・アクセス・コマンドが実行されることが可能である。また、プロセッサ・コンポーネント650は、レプリカ・データ・アクセス・コマンドの受信又は実行におけるエラーの表示に応答して、HAグループ1600yz内のノード300y〜zのうちの同じアクティブ・ノードへの、及び/又はHAグループ1600yz内のノード300y〜zのうちの別の非アクティブ・ノードへのそのようなレプリカ・データ・アクセス・コマンドの送信を再試行することを行わされることが可能である。
ノード300aのDモジュール600と、ノード300y〜zのうちのアクティブ・ノードのDモジュール600との間におけるレプリカ・データ・アクセス・コマンド及びそれらに対する応答のそのようなやり取りをサポートして、ノード300aのDモジュール600のプロセッサ・コンポーネント650は、メタデータ630ab内に含まれている情報を採用して、クラスタ間相互接続399を通じたその他のアクティブ・ノードのDモジュール600とのアクティブな通信セッションを形成することができる。プロセッサ・コンポーネント650は、クラスタ間相互接続399を通じたノード300y〜zのうちの非アクティブ・ノードのDモジュールとの非アクティブな通信セッションを、その非アクティブ・ノードのDモジュール600へのレプリカ・データ・アクセス・コマンドの送信を再試行することに備えて、さらに形成することができる。さらに、プロセッサ650がその非アクティブな1つのノードのDモジュール600へのレプリカ・データ・アクセス・コマンドの送信を再試行した場合には、プロセッサ・コンポーネント650は、その非アクティブ・ノードのDモジュール600との間で形成されている非アクティブな通信セッションの状態を非アクティブからアクティブへ変更するように作動することができる。
コントロール・ルーチン640を実行する際に、非アクティブ・ノード300bのDモジュール600のプロセッサ・コンポーネント650は、HA相互接続699abを介してノード300aのDモジュール600からメタデータ630ab及び/又はそれに対する更新を受信するようにインターフェース690を操作することができる。プロセッサ・コンポーネント650は次いで、受信されたメタデータ630ab及び/又は受信されたそれに対する更新を、その後の使用のためにメモリ660内に格納することができる。また、メタデータ630ab及びそれに対する更新をノード300aによってノード300bに供給することは、ノード300bが、ノード300a内で生じている障害に応答してノード300aをさらに迅速に引き継ぐこと(それによって、HAグループ1600abの非アクティブ・ノードであることから、HAグループ1600abのアクティブ・ノードになることへ遷移すること)を可能にする上で望ましいとみなされる場合がある。さらに具体的には、メタデータ630abがノード300bのDモジュール600に既に提供されていることに伴って、ノード300bのDモジュール600のプロセッサ・コンポーネント650がその他のソースからメタデータ630abを取り出すことにさらなる時間をかける必要性が軽減される。さらに正確には、プロセッサ・コンポーネントが、ノード300aを引き継ぐ際に、メタデータ630abをストレージ・デバイスのセット800abから取り出す、又はメタデータの諸部分をノード300a若しくは300bのうちのいずれかのMモジュール400及び/若しくはNモジュール500に要求する必要性が軽減される。
示されているように、メタデータ630abは、不変メタデータ631ab及び可変メタデータ632abを含むことができる。メタデータのどんな断片が不変メタデータ631ab及び可変メタデータ632abのそれぞれに含まれるかは、メタデータのそれぞれの断片が変わると予想される相対的な頻度に基づくことが可能である。例として、ストレージ・デバイスのセット800ab内におけるクライアント・デバイス・データ130の格納の諸側面、たとえば、ファイル・システムの選択、RAIDレベルなどは、その他のメタデータと比べて、変わる可能性がより低い、又はより低い頻度で変わる可能性が高いとみなされている結果として、不変であるとみなされることが可能である。対照的に、ノード300aが相互接続399、599a、又は699abのうちの1つを介して通信することができる相手のその他のノード300a〜d又は300y〜zのうちの1つのMモジュール、Nモジュール、又はDモジュールのネットワーク・アドレスは、その他のメタデータと比べて、変わる可能性がより高い、又はより高い頻度で変わる可能性が高いとみなされている結果として、可変であるとみなされることが可能である。
可変メタデータ632abは、不変メタデータ631ab内に含まれている少なくともノード300aのオペレーションの諸側面の表示よりも高い頻度で変わる可能性が高いとみなされる同様の表示を含むので、少なくとも可変メタデータ632ab内に含まれている情報は、より頻繁に古くなる可能性がある。ノード300aのDモジュール600のリブートに続いて、ストレージ・デバイス800abから入手された可変メタデータ632ab内の情報を採用して、ノード300aのその他のコンポーネントと、並びに/又はノード300b〜d及び/若しくは300y〜zのうちの他のノードのコンポーネントと通信するというプロセッサ・コンポーネント650による試みが不成功である場合には、プロセッサ・コンポーネント650は、可変メタデータ632ab内に含まれている情報の更新されたバージョンを含むメタデータ部分を求める要求を、クラスタ内相互接続599aを介してMモジュール400及び/又はNモジュール500へ送信するようにインターフェース690を操作することができる。Mモジュール400及び/又はNモジュール500もリブートしているかどうかに応じて、プロセッサ・コンポーネント650は、それらのリブートの完了を待つこと、及び次いでそれらの更新されたメタデータ部分を求める自分の要求を再送信することを行わされることが可能である。その要求を受信したことに応答して、プロセッサ・コンポーネント450及び/又は550は、コントロール・ルーチン440及び/又は540の実行によって、そのような更新されたメタデータ部分を、クラスタ内相互接続599aを介してDモジュール600へ送信するようにインターフェース490及び/又は590をそれぞれ操作することを行わされることが可能である。更新された情報を受信すると、プロセッサ・コンポーネント650は次いで、その更新された情報を可変メタデータ632ab内に組み込み、更新された可変メタデータ632abを組み込んでいるメタデータ630abを再び生成し、今更新されたメタデータ630abをメモリ660及びストレージ・デバイスのセット800ab内に格納し、メモリ660内の今更新されたメタデータ630abを採用して、ノード300aのその他のコンポーネントと、並びに/又はノード300b〜d及び/若しくは300y〜zのうちの他のノードのコンポーネントと通信するという別の試みを行うようにインターフェース690を操作することができる。
いくつかの実施形態においては、今更新された可変メタデータ632abを組み込んでいるメタデータ630abを使用して通信を行うというプロセッサ・コンポーネント650による試みも不成功である場合には、プロセッサ・コンポーネント650は、不変メタデータ631abを構成する情報の更新されたバージョンを求める要求をMモジュール400及び/又はNモジュール500へ送信するようにインターフェース690を操作することができる。不変メタデータ631abの更新されたバージョンは、可変メタデータ632abの更新されたバージョン内に含まれている情報を使用することと併せて必要とされるオペレーションの諸側面の表示を含む可能性がある。更新された情報を受信すると、プロセッサ・コンポーネント650は次いで、その更新された情報を不変メタデータ631ab内に組み込み、更新された不変メタデータ631abを組み込んでいるメタデータ630abを再び生成し、今更新されたメタデータ630abをメモリ660及びストレージ・デバイスのセット800ab内に格納し、今更新されたメタデータ630abを採用して、ノード300aのその他のコンポーネントと、並びに/又はノード300b〜d及び/若しくは300y〜zのうちの他のノードのコンポーネントと通信するというさらなる試みを行うことができる。
ノード300a又は300bのうちの一方が他方を引き継ぐ必要があるかどうかを特定することの一部として、ノード300a及び300bのうちのそれぞれのDモジュールのプロセッサ・コンポーネント650同士が協力して、それらの間において延在するHA相互接続699abを介して自分のノードのステータスの表示を繰り返しやり取りすることができる。前述のように、ステータス表示のそのようなやり取りは、オペレーションを実行すること(たとえば、データ・アクセス・コマンドを実行すること)の現在の状態の繰り返す「ハートビート」信号及び/又は表示という形態を取ることができる。また、ノード300a〜bのうちの一方のコンポーネントが機能不良に苛まれているという表示は、予期されているハートビート信号又はその他のステータス表示が、指定された時間のピリオド内に(たとえば、繰り返す時間のインターバル内に)ノード300a〜bのうちの他方によって受信されないことであり得る。アクティブ・ノード300aのDモジュール600が、非アクティブ・ノード300b内の障害の表示を受信した場合には、ノード300aのDモジュール600のプロセッサ・コンポーネント650(又はノード300aの別のコンポーネント)は、ノード300bを引き継ぐためのアクションを取ることを差し控えることができる。なぜなら、ノード300bは非アクティブであり、それによってノード300bは、ノード300bの引き継ぎを必要とするタスクを実行していない可能性があるからである。
しかしながら、非アクティブ・ノード300bのDモジュール600が、アクティブ・ノード300a内の障害の表示を受信した場合には、非アクティブ・ノード300bのDモジュール600のプロセッサ・コンポーネント650(又は非アクティブ・ノード300bの別のコンポーネント)は、ノード300aを引き継ぐためのアクションを取ることができる、なぜなら、ノード300aはアクティブであって、クライアント・デバイス100との通信に従事し、データ・アクセス・コマンドを実行し、別のアクティブ・ノードと協力して、それらの間におけるデータ・アクセス・コマンドの少なくとも部分的な並列実行をもたらしているからである。例として、ノード300bのDモジュール600のプロセッサ・コンポーネント650は、クライアント・デバイス100のうちの1つ若しくは複数との通信を引き継ぐようにノード300bのNモジュール500にシグナリングすることができ、及び/又はノード300aのDモジュール600のプロセッサ・コンポーネント650によって実行されたデータ・アクセス・コマンドを実行することを開始することができる。それらのデータ・アクセス・コマンドの実行を引き継ぐ際に、ノード300bのDモジュール600のプロセッサ・コンポーネント650は、ノード300a及び300bのうちの両方のDモジュール600同士がストレージ相互接続899abを通じてストレージ・デバイスのセット800abに対して共有している結合を介して、ストレージ・デバイスのセット800abに対するアクセス及びストレージ・デバイスのセット800abのコントロールを引き継ぐことができる。
非アクティブ・ノード300bが、アクティブ・ノード300a内で生じている障害に応答してそのノード300aを実際に引き継ぐ場合には、ノード300a及び300bのアクティブな役割及び非アクティブな役割は、少なくともノード300a内の障害が是正された後に、完全に逆転することが可能である。さらに具体的には、ノード300bのMモジュール400及びNモジュール500は、アクティブになって、クライアント相互接続199を介してクライアント・デバイス100との通信に従事して、構成情報及びストレージ・サービス要求を受信し、それによって、ノード300aのMモジュール400及びNモジュール500を引き継ぐことができ、その一方で、ノード300aのMモジュール400及びNモジュール500は、非アクティブになる。同様に、ノード300bのDモジュール600は、アクティブになって、データ・アクセス・コマンドを実行及びレプリケートし、クラスタ間相互接続399を介して別のアクティブ・ノードへレプリカ・データ・アクセス・コマンドを送信して、データ・アクセス・コマンドの少なくとも部分的な並列実行をもたらし、それによって、ノード300aのDモジュール600を引き継ぐことができ、その一方で、ノード300aのDモジュール600は、非アクティブになる。しかしながら、アクティブになる際に、今非アクティブなノード300aのDモジュール600のプロセッサ・コンポーネント650は、ノード300bのDモジュール600のプロセッサ・コンポーネント650と協力して、ノード300b内で生成されたメタデータ630abの新たなバージョンを受信し、HA相互接続699abを介してノード300bのDモジュール600との間でステータスの表示をやり取りして、今アクティブなノード300bをノード300aがその後に引き継ぐべきかどうかを特定することができる。
ノード300a及び300bのうちのそれぞれのDモジュール600のプロセッサ・コンポーネント650は、メモリ660のうちの対応するメモリ660の一部分を、同期化キャッシュ639a及び639bとして指定すること、又はその他の形で使用することが可能であり、同期化キャッシュ639a及び639bはそれぞれ、ノード300a〜d及び/又は300y〜zのうちの他のノードのDモジュール600と通信状態にある。さらに具体的には、ノード300a及び300bのDモジュール600のプロセッサ・コンポーネント650は、同期化キャッシュ639a及び639bをそれぞれ採用して、それらの間においてやり取りされたメタデータ630ab及び/又はステータス表示のバージョンをバッファすることができる。代替として、又は追加として、ノード300aのDモジュール600のプロセッサ・コンポーネント650は、同期化キャッシュ639aを保持及び採用して、別のクラスタの別のHAペアの別のアクティブ・ノードへ送信されたレプリカ・データ・アクセス・コマンド、及び/又はその別のアクティブ・ノードから受信されたそれらのレプリカ・データ・アクセス・コマンドの実行のステータスの表示をバッファすることができる。
広範には、クライアント・デバイス100、ノード300a〜d及び300y〜z、Mモジュール400、Nモジュール500、Dモジュール600、並びに/又はストレージ・デバイス800ab、800cd、及び800yzのそれぞれは、さまざまなタイプのコンピューティング・デバイスのいずれかであることが可能であり、それらのコンピューティング・デバイスは、デスクトップ・コンピュータ・システム、データ入力端末、ラップトップ・コンピュータ、ネットブック・コンピュータ、タブレット・コンピュータ、ハンドヘルド携帯情報端末、スマートフォン、スマート・メガネ、スマート腕時計、デジタル・カメラ、衣類内に組み込まれている身体装着型コンピューティング・デバイス、乗り物(たとえば、車、自転車、車いすなど)の中に統合されているコンピューティング・デバイス、サーバ、サーバのクラスタ、サーバ・ファームなどを含むが、それらには限定されない。
いくつかの実施形態においては、ノード300a〜d及び300y〜zのうちの1つ又は複数は、クラスタ内相互接続599a又は599zのうちの対応するクラスタ内相互接続の物理的な実装によって結合された別々のコンピューティング・デバイスとしてそれぞれが実装される1つ又は複数のMモジュール400、1つ又は複数のNモジュール500、及び1つ又は複数のDモジュール600のアセンブリとして物理的に実装されることが可能である。しかしながら、その他の実施形態においては、ノード300a〜d及び300y〜zのうちの1つ又は複数のMモジュール400、Nモジュール500、及びDモジュール600のうちの複数は、共有プロセッサ・コンポーネント(たとえば、プロセッサ・コンポーネント450、550、又は650のうちの1つ)によるプロセスとして実行される命令のセットとして実装されることが可能である。そのようなその他の実施形態においては、ノード同士の間において延在していないクラスタ内相互接続599a又は599zの少なくとも一部分は、コントロール・ルーチン440、540、及び/又は640の間においてデータ・アクセス・コマンド、クライアント・デバイス・データ130、及びメタデータ630abをやり取りするために採用される、共有メモリ(たとえば、メモリ460、560、又は660のうちの1つ)の中で定義されるバッファ又はその他のデータ構造として実装されることが可能である。
本明細書において提示されている例においては、クライアント・デバイス100のうちの1つ又は複数は、クライアント・デバイス・データ130を生成すること、及び/又はクライアント・デバイス・データ130を用いて作業することを行うために1人又は複数の人によって直接操作されるコンピューティング・デバイスであることが可能であり、ノード300a〜d及び300y〜zのうちの1つ又は複数は、そのようなクライアント・デバイス・データ130をリモートに格納すること、並びにそれに対するアクセスをフォールト・トレラントな様式でクライアント・デバイス100に提供することを行うためにサーバとして機能するコンピューティング・デバイスであることが可能である。代替として、又は追加として、本明細書において提示されている例においては、クライアント・デバイス100のうちの1つ又は複数は、クライアント・デバイス・データ130の少なくとも一部分を格納すること、及びクライアント・デバイス・データ130の少なくとも一部分に対するアクセスを提供することを行うためにサーバとして機能するコンピューティング・デバイスであることが可能であり、ノード300a〜d及び300y〜zのうちの1つ又は複数は、クライアント・デバイス100のうちの1つ又は複数によって提供されるストレージを増補するためにさらなるサーバとして機能するコンピューティング・デバイスであることが可能である。
図4は、ストレージ・クラスタ・システム1000のクラスタ1300aのHAグループ1600abの別の例示的な実施形態のブロック図をさらに詳細に示している。再び示されているように、HAグループ1600abのノード300a及び300bのうちで、ノード300aは、クライアント・デバイス100との通信に従事して、ストレージ・デバイスのセット800ab内のクライアント・デバイス・データ130を変更するオペレーションを実行するためにアクティブであることが可能であり、その一方でノード300bは、非アクティブでいて、ノード300aを引き継ぐ必要性を待っていることが可能である。図4はまた、ストレージ・デバイスのセット800ab内におけるメタデータ630abの生成、複製、及び格納のさまざまな側面をクライアント・デバイス・データ130と並べてさらに詳細に示している。
ストレージ・デバイスのセット800ab、800cd、及び800yzのそれぞれは、さまざまなストレージ・テクノロジーのいずれかに基づくストレージ・デバイスから構成されることが可能であり、それらのストレージ・デバイスは、強磁性の「ハード」ドライブ又は「フロッピー」ドライブ、光磁気メディア・ドライブ、光メディア・ドライブ、不揮発性のソリッド・ステート・ドライブなどを含むが、それらには限定されない。示されているように、ストレージ・デバイスのセット800abは、LU862t〜vを含むことができ、LU862t〜vは共に操作されて、1つのそのようなアレイを形成することが可能である。いくつかの実施形態においては、ノード300aのDモジュール600のプロセッサ・コンポーネント650は、ストレージ・デバイスのセット800abのストレージ・デバイスのそれぞれを別々のLUとして扱うようにストレージ・コントローラ665を操作することができ、及び/又はそれらのストレージ・デバイスのグループを単一のLUとして扱わされることが可能である。複数のLUは、内部でのデータの格納におけるフォールト・トレランスを与えるあるレベルのRAID又はその他の形態のアレイを実装するようにストレージ・コントローラ665を介して共に操作されることが可能である。ストレージ・デバイスのセット800abの1つ若しくは複数のストレージ・デバイスの間においてLUが定義される様式、及び/又は複数のLUが共に操作されることが可能である様式は、メタデータ630ab内で指定されることが可能である。
プロセッサ・コンポーネント650は、単一のLU内で、及び/又は、アレイを形成するように共に操作される複数のLU内でさまざまな方法のいずれかでストレージ・スペースを割り当てることを行わされることが可能である。そうする際に、プロセッサ・コンポーネント650は、単一のLU内で、及び/又は、共に操作される複数のLU内でさまざまな方法のいずれかでストレージ・スペースを細分することを行わされることが可能である。例として、そのような細分は、クライアント・デバイス・データ130を主題に基づいて別々のカテゴリーへと整理することの一部として、クライアント・デバイス・データ130を、時間と共に生成された別々のバージョンへと分割することの一部として、クライアント・デバイス・データ130の別々の断片に対して別々のアクセス・ポリシーを実施することの一部として、といった具合にもたらされることが可能である。いくつかの実施形態においては、示されているように、LU862t内、又はLU862t〜vの組合せ内によって提供されるストレージ・スペースは、アグリゲート872と指定されることが可能である。さらに、アグリゲート872は、ボリューム873p〜rへと細分されることが可能である。アグリゲート及び/又はボリュームが定義される様式は、1つ又は複数の広く知られて使用されているファイル・システムの仕様に準拠するように選択されることが可能であり、それらの仕様は、ライト・エニウェア・ファイル・レイアウト(WAFL)を含むが、それらには限定されない。アグリゲート、及び/又はアグリゲート内のボリュームが、単一のLU、又は共に操作される複数のLUの間において割り当てられる様式は、メタデータ630ab内で指定されることが可能である。
クライアント・デバイス・データ130は、ボリューム873p〜rのうちの1つの中に完全に格納されることが可能であり、又は(示されているように)ボリューム873p〜rのうちの複数のボリュームの間で分散されることが可能である。また示されているように、メタデータ630abは、少なくとも同じアグリゲート872内において、クライアント・デバイス・データ130と共にストレージ・デバイスのセット800ab内に格納されることも可能である。いくつかの実施形態においては、メタデータ630abは、(示されているように)クライアント・デバイス・データ130と同じボリューム873p〜rのうちの1つ又は複数の中に格納されることが可能である。その他の実施形態においては、メタデータ630abは、クライアント・デバイス・データ130が内部に格納されることが可能であるボリューム873p〜rのうちの1つ又は複数の他のボリュームとは別個のボリューム873p〜rのうちの1つの中に格納されることが可能である。メタデータ630ab及び/又はクライアント・デバイス・データ130がアグリゲート及び/又は値内で編成される様式は、メタデータ630ab内で指定されることが可能である。
前述のように、アクティブ・ノード300aのMモジュール400は、クライアント・デバイス100のうちの1つから構成情報を受信したことに応答して、メタデータの諸部分を、それらに対する更新を含めて、Nモジュール500及び/又はDモジュール600に提供することができる。また、アクティブ・ノード300aのNモジュール500は、Nモジュール500によって実行されたさまざまなテストの結果を示すメタデータの諸部分を、それらに対する更新を含めて、Dモジュール600に提供することができる。メタデータ630ab及び/又はその更新されたバージョンは、アクティブ・ノード300aのDモジュール600によって受信されたメタデータのこれらの部分から生成されることが可能であり、次いで、プロセッサ・コンポーネント650によるその後の使用のためにメモリ660内に、及び/又はDモジュール600のリブートに続くその後の取り出しのためにストレージ・デバイスのセット800ab内に格納されることが可能である。代替として、又は追加として、メタデータ630abの複製が生成されて、複製データ636abの一部分として同期化キャッシュ639a内に格納されることが可能であり、それによって、メタデータ630abの複製が、インターフェース690及びHA相互接続699abを介して非アクティブ・ノード300bのDモジュール600へ送信されることが可能である。ノード300bのDモジュール600のインターフェース690を介して受信されると、複製データ636abは、同期化キャッシュ639b内に格納されることが可能であり、そこから、メタデータ630abの複製が取り出されて、ノード300bのDモジュール600のプロセッサ・コンポーネント650によるその後の使用のためにメモリ660内の他の場所に格納されることが可能である。
図5A及び図5Bは両方とも、ストレージ・クラスタ・システム1000のアクティブ・ノード300aと300yとの間における相互接続の例示的な一実施形態のブロック図をさらに詳細に示している。さらに具体的には、図5Aは、ノード300aと300yとの間におけるデータ・アクセス・コマンドのレプリケーション及び少なくとも部分的な並列実行の諸側面をさらに詳細に示している。図5Bは、ノード300a及び300yによるそのような少なくとも部分的な並列実行によって生成された応答同士を結合及び中継することの諸側面をさらに詳細に示している。図5A及び図5Bの両方において示されているように、ノード300aは、クライアント・デバイス100との通信に従事して、ストレージ・デバイスのセット800ab内のクライアント・デバイス・データ130を変更するデータ・アクセス・コマンドを実行するためにアクティブであることが可能であり、その一方でノード300yは、ノード300aとの通信に従事して、ノード300aと少なくとも部分的に並列にストレージ・デバイスのセット800yz内のクライアント・デバイス130を変更するレプリカ・データ・アクセス・コマンドを実行するためにアクティブであることが可能である。
図5Aを参照すると、前述のように、アクティブ・ノード300aのNモジュール500は、クライアント・デバイス100のうちの1つからのクライアント・デバイス・データ130及び/又はストレージ・サービス要求170を受信することができ、それらは次いで、メモリ560内に一時的に格納されることが可能である。クライアント・デバイス・データ130を格納すること及び/又は取り出すことを行いたいというストレージ・サービス要求170は次いで、クライアント・デバイス・データ130を格納すること及び/又は取り出すことをそれぞれ行うためのデータ・アクセス・コマンド570へと変換されることが可能である。そのような変換に続いて、及び/又はそのような変換が生じたときに、クライアント・デバイス・データ130及び/又はストレージ・サービス要求170は、アクティブ・ノード300aのDモジュール600へ中継されることが可能であり、クライアント・デバイス・データ130及び/又はストレージ・サービス要求170は次いで、ノード300aのDモジュール600によって実行されることに備えてメモリ660内に一時的に格納されることが可能である。しかしながら、そのような実行に加えて、データ・アクセス・コマンド570がレプリケートされて、対応するレプリカ・データ・アクセス・コマンド670を生成することが可能であり、そのレプリカ・データ・アクセス・コマンド670は、レプリケーション・データ633aの一部分として同期化キャッシュ639a内に格納されることが可能である。レプリケーション・データ633aは、バッファとしての役割を果たすことができ、そのバッファのコンテンツは、インターフェース690及びクラスタ間相互接続399を介してアクティブ・ノード300yのDモジュール600へ繰り返し送信される。レプリカ・データ・アクセス・コマンド670が、クライアント・デバイス・データ130の断片を格納するためのコマンドを含む場合には、そのような断片は、レプリカ・データ・アクセス・コマンド670と共にノード300yへ送信されることになるレプリケーション・データ633aの別の部分として同期化キャッシュ639a内に格納されることが可能である。
ノード300yのDモジュール600のインターフェース690を介して受信されると、レプリケーション・データ633aの繰り返し送信されたコンテンツは、レプリケーション・データ633yの一部分として同期化キャッシュ639y内に一時的に格納されることが可能である。受信されたレプリカ・データ・アクセス・コマンド670、及び/又は、クライアント・デバイス・データ130の関連付けられている断片は次いで、レプリケーション・データ633yから取り出されて、ノード300yのDモジュール600によるレプリカ・データ・アクセス・コマンド670の実行に備えてメモリ660内の他の場所に一時的に格納されることが可能である。ノード300yのDモジュール600は次いで、ストレージ・デバイスのセット800yz内にクライアント・デバイス・データ130を格納すること、及び/又はストレージ・デバイスのセット800yzからクライアント・デバイス・データ130を取り出すことを行うためのレプリカ・データ・アクセス・コマンド670を、同様にストレージ・デバイスのセット800ab内にクライアント・デバイス・データ130を格納すること、及び/又はストレージ・デバイスのセット800abからクライアント・デバイス・データ130を取り出すことを行うためのデータ・アクセス・コマンド570をノード300aのDモジュール600が実行するのと少なくとも部分的に並列に実行する。
図5Bを参照すると、レプリカ・データ・アクセス・コマンド670がノード300yのDモジュール600によって実行されたときに、それらのレプリカ・データ・アクセス・コマンド670の実行に対するコマンド応答679が生成されることが可能であり、レプリケーション・データ633yの一部分として同期化キャッシュ639y内に一時的に格納されることが可能である。コマンド応答679は、レプリカ・データ・アクセス・コマンド670の実行の成功した開始及び/若しくは完了の表示、並びに/又はレプリカ・データ・アクセス・コマンド670を実行する試みにおいて生じている障害の表示のうちの1つ又は複数を含むことができる。レプリケーション・データ633yは、バッファとしての役割を果たすことができ、そのバッファのコンテンツは、インターフェース690及びクラスタ間相互接続399を介してアクティブ・ノード300aのDモジュール600へ繰り返し送信される。レプリカ・データ・アクセス・コマンド670が、クライアント・デバイス・データ130の断片を取り出すためのコマンドを含む場合には、そのような断片は、コマンド応答679と共にノード300aへ返信されることになるレプリケーション・データ633yの別の部分として同期化キャッシュ639y内に格納されることが可能である。
ノード300aのDモジュール600のインターフェース690を介して受信されると、レプリケーション・データ633yの繰り返し送信されたコンテンツは、レプリケーション・データ633aの一部分として同期化キャッシュ639a内に一時的に格納されることが可能である。受信されたコマンド応答679、及び/又は、クライアント・デバイス・データ130の関連付けられている断片は次いで、レプリケーション・データ633aから取り出されて、ノード300aのDモジュール600によるデータ・アクセス・コマンド570の実行の結果と並べて分析に備えてメモリ660内の他の場所に一時的に格納されることが可能である。ノード300aのDモジュール600は次いで、そのような分析からコマンド応答579を生成し、それらのコマンド応答579、及び/又は、データ130の関連付けられている断片をノード300aのNモジュール500へ中継し、そこでは、一方又は両方がメモリ560内に一時的に格納されることが可能である。コマンド応答579は次いで、ストレージ・サービス要求応答179へと変換されることが可能であり、次いでそれらの要求応答179、及び/又は、クライアント・デバイス・データ130の関連付けられている断片が、クライアント・デバイス100のうちの1つへ返信されることが可能である。
図6は、1つのHAグループ内のメタデータの複製、及び別々のHAグループのノード同士の間におけるクライアント・デバイス・データ130に関連しているデータ・アクセス・コマンドのレプリケーションの例示的な一実施形態をさらに詳細に示している。示されているように、ノード300aは、クライアント相互接続199を介してクライアント・デバイス100と、及びノード300yと通信するためにHAグループ1600ab内でアクティブであることが可能であり、ノード300yは、クラスタ間相互接続399を介してノード300aと通信するためにHAグループ1600yz内でアクティブであることが可能である。ノード300b及び300zは、非アクティブであることが可能である。なぜなら、それぞれは、ノード300a又は300yをそれぞれ引き継ぐ必要性を待っているからである。クライアント・デバイス100と通信するためにノード300aがアクティブ状態であり、それによって、ノード300aのNモジュール500が、そうするために使用されているということは、ノード300aをクライアント・デバイス100に結合しているクライアント相互接続199の部分が実線を用いて描かれていることによって示されており、その一方で、ノード300b及び300y〜zをクライアント相互接続199に結合するための部分は、点線を用いて描かれている。ノード300a及び300yの両方が互いに通信するためにアクティブ状態にあるということは、ノード300a及び300yを結合しているクラスタ間相互接続399の部分が実線を用いて描かれていることによって示されており、その一方で、ノード300b及び300zをクラスタ間相互接続399に結合するための部分は、点線を用いて描かれている。
示されているように、同期化キャッシュ639a〜b及び639y〜zは、それぞれ、ノード300a〜b及び300y〜zのうちのそれぞれのDモジュール600のメモリ660内に形成されて、上述のメタデータの複製及び/又はデータ・アクセス・コマンドのレプリケーションを可能にすることができる。前述のように、同期化キャッシュ639a及び639bは両方とも、メタデータ630abをやり取りするための、パートナーにされているノード300a及び300bのDモジュール600同士の間における協力を可能にすることの一部として複製データ636abを含むことができる。しかしながら、同期化キャッシュ639a〜b及び/又は複製データ636abは、ノード300a〜bのうちの一方を他方によって引き継ぐことを必要とする可能性がある障害の表示を探してそれぞれが他方をモニタすることの一部として、ノード300a及び300bのDモジュール600同士の間において生じているステータスをやり取りすることにおいて採用されることも可能である。同期化キャッシュ639a及び639bは、HA相互接続699abの両方の端部においてバッファされることが可能であるノード300a及び300bのDモジュール600同士の間におけるポータルを提供するように機能的にリンクされる様式で操作されることが可能である。これらのDモジュール600の現在のステータスの表示、及び/又はメタデータ630abのバージョンの複製は、そのような表示及び/又はメタデータを同期化キャッシュ639a又は639bのうちの一方の複製データ636abへと書き込むこと、並びにそのような表示及び/又はメタデータの断片を同期化キャッシュ639a又は639bのうちの他方の複製データ636abから取り出すことによって、やり取りされることが可能である。別の言い方をすれば、複製データ636abのコンテンツは、同期化キャッシュ639aと639bとの間において繰り返し「同期化」されることが可能である。
やはり前述のように、同期化キャッシュ639yは、データ・アクセス・コマンド及びそれらのレプリカを少なくとも部分的に並列に実行するためのノード300a及び300yのDモジュール600同士の間における協力の一部として同期化キャッシュ639a内のレプリケーション・データ633aに対応するものとしてレプリケーション・データ633yを含むことができる。レプリケーション・データ633a及び633yは、クラスタ間相互接続399を介してノード300a及び300yのDモジュール600同士の間において伝達された情報をバッファすることができる。さらに具体的には、ノード300aのDモジュール600によるデータ・アクセス・コマンドのレプリケーションの現在のステータスの表示、少なくともノード300yのDモジュール600によるレプリカ・データ・アクセス・コマンドの少なくとも部分的な並列実行の現在のステータスの表示、及び/又はレプリカ・データ・アクセス・コマンドに関するそれらの間における通信の現在のステータスの表示が、レプリケーション・データ633aの一部として保持されることが可能である。代替として、又は追加として、ノード300yのDモジュール600へ送信されたレプリカ・データ・アクセス・コマンド、それらのレプリカ・データ・アクセス・コマンドと共に伝達されたクライアント・デバイス・データ130の諸部分、及び/又はそれらのレプリカ・データ・アクセス・コマンドに対する応答が、レプリケーション・データ633aの一部として保持されることも可能である。それに対応して、ノード300aのDモジュール600からクラスタ間相互接続399を介してノード300yのDモジュール600によって受信されたレプリカ・データ・アクセス・コマンドが、それらのレプリカ・データ・アクセス・コマンドに伴うあらゆるクライアント・デバイス・データ130及び/又はそれに対する応答と共に、レプリケーション・データ633y内にバッファされることが可能である。ノード300yのDモジュール600によるそれらのレプリカ・データ・アクセス・コマンドの実行の現在のステータスの表示が、ノード300aのDモジュール600へ送信される前にレプリケーション・データ633y内にバッファされることも可能である。
さらに示されているように、同期化キャッシュ639y及び639zは、ノード300a及び300bのDモジュール600同士の間における上述とそっくり同じ様式でそれらの間においてステータス表示、及びメタデータの複製をやり取りするための、パートナーにされているノード300y及び300zのDモジュール600同士の間における協力を可能にすることの一部として複製データ636yzを含むことができる。別の言い方をすれば、ノード300y及び300zのDモジュール600同士は、パートナーにされているノード300a及び300bがHA相互接続699abを介して信号をやり取りして互いをモニタするのと違わない様式で障害の表示を探してそれぞれが他方をモニタすることの一部としてHA相互接続699yzを介してそれらの間においてステータス表示(たとえば、「ハートビート」信号、及び/又は、さまざまなオペレーションを実行することのステータス)を繰り返しやり取りするために協力することができる。さらに、アクティブ・ノード300yのDモジュール600は、パートナーにされているノード300a及び300bがメタデータのバージョンを、そのようなバージョンをストレージ・デバイスのセット800yz内に格納することに加えてやり取りするのと違わない様式でHA相互接続699yzを介して非アクティブ・ノード300zのDモジュールへメタデータのバージョンを送信することができる。ノード300y及び300zによって使用されノード300yと300zとの間においてやり取りされるメタデータは、ノード300a及び300bによって使用されノード300aと300bとの間においてやり取りされるメタデータ630abとは少なくとも部分的に異なる場合があるということに留意されたい。これは、ノード300a〜b及びノード300y〜zが、別々のHAグループに属していること、及び/又は別々のクラスタに属していることに少なくとも部分的に起因して起こる場合がある。
図7は、クラスタ間相互接続399を通じてノード300a〜b及び300y〜zの間において形成されている通信セッションのメッシュの例示的な一実施形態をさらに詳細に示している。さらに具体的には、クラスタ間相互接続399を通じて、HAグループ1600abのノード300a及び300bのそれぞれは、HAグループ1600yzのノード300y及び300zのそれぞれとの通信セッションを形成し、それによって、ノード300a〜b及び300y〜zの間において、示されている通信セッションのメッシュを形成している。示されているように、これらの通信セッションのうちで、ノード300aと300yとの間において延在している通信セッションは、(実線を用いて示されているように)アクティブな通信セッションであることが可能であり、その一方で、これらの通信セッションのうちのその他の通信セッションは、(点線を用いて示されているように)非アクティブな通信セッションであることが可能である。このことが反映している事実として、ノード300a及び300yはそれぞれ、少なくとも初めは、それぞれHAグループ1600ab及び1600yzのアクティブ・ノードであり、それらは、HAグループ1600abと1600yzとの間におけるデータ・アクセス・コマンドの少なくとも部分的に並列な実行を可能にする目的でレプリカ・データ・アクセス・コマンド及び関連付けられているデータをやり取りするために通信に従事している。
したがって、ノード300a及び300yがアクティブ・ノードであって、ノード300a又は300yのいずれの中においてもエラーが生じていないストレージ・クラスタ・システム1000の通常のオペレーション中には、ストレージ・サービスを求める要求が、クライアント・デバイス100のうちの1つからクライアント相互接続199を介してノード300aによって受信される。ノード300aのNモジュール500によってストレージ・サービス要求をデータ・アクセス・コマンドへと変換したことに続いて、ノード300aのDモジュール600は、データ・アクセス・コマンドの実行を開始すること、及びそのデータ・アクセス・コマンドのレプリカを、ノード300aと300yとの間におけるクラスタ間相互接続399を通じて形成されているアクティブな通信セッションを介してノード300yへ送信することの両方が可能である。ノード300yのDモジュール600は次いで、ノード300aのDモジュール600によるデータ・アクセス・コマンドの実行と少なくとも部分的に並列にレプリカ・データ・アクセス・コマンドを実行することができる。
そのような送信に備えて、ノード300aのDモジュール600は、アクティブな通信セッションの形成を要求するメッセージ及び受け入れるメッセージのやり取りを通じてノード300aから300yへの間におけるアクティブな通信セッションを形成するためにノード300yのDモジュール600と協力することができる。その形成に続いて、ノード300a及び300yのDモジュール600同士は、アクティブな通信セッションを、そのアクティブな通信セッションの状態をモニタするためのそこを通じたテスト信号(たとえば、テスト・メッセージ)の繰り返すやり取りによって保持するために協力することができる。
ノード300a及び300yのDモジュール600同士が、レプリカ・データ・アクセス・コマンドのそのようなやり取りをサポートする目的でクラスタ間相互接続399を通じて、示されているアクティブな通信セッションを形成及び保持するために協力することに加えて、ノード300a〜b及び300y〜zのうちのすべてのDモジュール600同士は、ノード300a又は300yのうちの1つに影響を与えるエラー状況を取り扱うことに備えてクラスタ間相互接続399を通じて、示されている非アクティブな通信セッションを形成及び保持するために協力することができる。さらに具体的には、テスト信号(たとえば、テスト・メッセージ)が、非アクティブな通信セッションのうちの1つ又は複数を通じてやり取りされて、それらの状態をモニタすることが可能である。
ノード300aの少なくとも一部分の障害の場合には、ノード300bは、ノード300aを引き継ぐことができ、そうする際に、ノード300b及び300yのDモジュール600同士の間において延在している非アクティブな通信セッションの状態をアクティブな通信セッションへと変更することができる。そうすることによって、ノード300bは、ノード300aの代わりにレプリカ・データ・アクセス・コマンドをノード300yへ送信できるようになる。それに対応して、ノード300yの少なくとも一部分の障害の場合には、ノード300zは、ノード300yを引き継ぐことができ、そうする際に、ノード300a及び300zのDモジュール600同士の間において延在している非アクティブな通信セッションの状態をアクティブな通信セッションへと変更することができる。そうすることによって、ノード300zは、ノード300yの代わりにレプリカ・データ・アクセス・コマンドをノード300aから受信して実行できるようになる。
さまざまな実施形態においては、プロセッサ・コンポーネント450、550、及び650のそれぞれは、さまざまな市販のプロセッサのいずれかを含むことができる。また、これらのプロセッサ・コンポーネントのうちの1つ又は複数は、複数のプロセッサ、マルチスレッド・プロセッサ、マルチコア・プロセッサ(複数のコアが、同じダイ上に共存しているか、若しくは別々のダイ上に共存しているかを問わず)、及び/又は、複数の物理的に別々のプロセッサを何らかの方法でリンクさせるその他の何らかの種類のマルチ・プロセッサ・アーキテクチャーを含むことができる。
さまざまな実施形態においては、コントロール・ルーチン440、540、及び640のそれぞれは、オペレーティング・システム、デバイス・ドライバ、及び/又はアプリケーションレベル・ルーチン(たとえば、ディスク・メディア上に提供されるいわゆる「ソフトウェア・スイート」、リモート・サーバから入手される「アプレット」など)のうちの1つ又は複数を含むことができる。当業者にとっては認識可能なように、コントロール・ルーチン440、540、及び640のそれぞれは、それぞれを構成することができるコンポーネントを含めて、どんなタイプのプロセッサ上でも機能するように選択され、又はプロセッサは、プロセッサ・コンポーネント450、550、若しくは650のうちの適用可能なプロセッサ・コンポーネントを実施するように、若しくはどんなタイプのプロセッサ上でも機能するように選択されることが可能であり、又はプロセッサは、共有プロセッサ・コンポーネントを実施するように選択されることが可能である。とりわけ、オペレーティング・システムが含まれている場合には、そのオペレーティング・システムは、プロセッサ・コンポーネント450、550、若しくは650のうちの対応するプロセッサ・コンポーネントに適している、又は共有プロセッサ・コンポーネントに適しているさまざまな利用可能なオペレーティング・システムのいずれかであることが可能である。また、1つ又は複数のデバイス・ドライバが含まれている場合には、それらのデバイス・ドライバは、モジュール400、500、又は600のうちの対応するモジュールのさまざまなその他のコンポーネントのいずれかのためのサポートを提供することができ、それらのコンポーネントが、ハードウェア・コンポーネントであるか、又はソフトウェア・コンポーネントであるかは問わない。
さまざまな実施形態においては、メモリ460、560、及び660のそれぞれは、さまざまな情報格納テクノロジーのいずれかに基づくことが可能であり、それらの情報格納テクノロジーは、場合によっては、電力の途切れない供給を必要とする揮発性のテクノロジーを含み、場合によっては、取り外し可能であってもなくてもよいマシン可読ストレージ・メディアの使用を伴うテクノロジーを含む。したがって、これらのメモリのそれぞれは、ストレージ・デバイスのさまざまなタイプ(又はタイプの組合せ)のいずれかを含むことができ、それらのタイプは、読み取り専用メモリ(ROM)、ランダムアクセス・メモリ(RAM)、ダイナミックRAM(DRAM)、ダブルデータレートDRAM(DDR−DRAM)、シンクロナスDRAM(SDRAM)、スタティックRAM(SRAM)、プログラム可能ROM(PROM)、消去可能プログラム可能ROM(EPROM)、電気的消去可能プログラム可能ROM(EEPROM)、フラッシュ・メモリ、ポリマー・メモリ(たとえば、強誘電ポリマー・メモリ)、オボニック・メモリ、相変化若しくは強誘電メモリ、シリコン−酸化物−窒化物−酸化物−シリコン(SONOS)メモリ、磁気カード若しくは光カード、1つ若しくは複数の個々の強磁性ディスク・ドライブ、又は、1つ若しくは複数のアレイへと編成された複数のストレージ・デバイス(たとえば、独立ディスクアレイの冗長アレイ、若しくはRAIDアレイへと編成された複数の強磁性ディスク・ドライブ)を含むが、それらには限定されない。これらのメモリのそれぞれは、単一のブロックとして示されているが、これらのうちの1つ又は複数は、別々のストレージ・テクノロジーに基づくことが可能である複数のストレージ・デバイスを含むことができるということに留意されたい。したがって、たとえば、これらの示されているメモリのうちのそれぞれの1つ又は複数は、プログラム及び/又はデータを何らかの形態のマシン可読ストレージ・メディア上に格納して伝達することができる光ドライブ又はフラッシュ・メモリ・カード・リーダと、相対的に延長されたピリオドにわたってプログラム及び/又はデータをローカルに格納するための強磁性ディスク・ドライブと、プログラム及び/又はデータに対する相対的に迅速なアクセスを可能にする1つ又は複数の揮発性ソリッド・ステート・メモリ・デバイス(たとえば、SRAM又はDRAM)との組合せに相当することが可能である。これらのメモリのそれぞれは、同じストレージ・テクノロジーに基づく複数のストレージ・コンポーネントから構成されることが可能であるが、それらは、使用における特化の結果として別々に保持されることが可能である(たとえば、いくつかのDRAMデバイスが、メイン・メモリとして採用され、その一方でその他のDRAMデバイスが、グラフィックス・コントローラの別個のフレーム・バッファとして採用される)ということにも留意されたい。
さまざまな実施形態においては、インターフェース490、590、及び690は、これらのコンピューティング・デバイスが、説明されているようなその他のデバイスに結合されることを可能にするさまざまなシグナリング・テクノロジーのいずれかを採用することができる。これらのインターフェースのそれぞれは、そのような結合を可能にするための必須の機能のうちの少なくともいくつかを提供する回路を含む。しかしながら、これらのインターフェースのそれぞれは、(たとえば、プロトコル・スタック又はその他の機能を実施するために)プロセッサ・コンポーネントのうちの対応するプロセッサ・コンポーネントによって実行される命令のシーケンスを伴って少なくとも部分的に実装されることも可能である。電気的に及び/又は光学的に伝導性のケーブルが採用される場合には、これらのインターフェースは、さまざまな業界標準のいずれかに準拠するシグナリング及び/又はプロトコルを採用することができ、それらの業界標準は、RS−232C、RS−422、USB、イーサネット(登録商標)(IEEE−802.3)、又はIEEE−1394を含むが、それらには限定されない。無線信号送信の使用を伴う場合には、これらのインターフェースは、さまざまな業界標準のいずれかに準拠するシグナリング及び/又はプロトコルを採用することができ、それらの業界標準は、IEEE802.11a、802.11b、802.11g、802.16、802.20(一般に「モバイル・ブロードバンド無線アクセス」と呼ばれている)、Bluetooth(登録商標)、ZigBee、又はセルラー無線電話サービス、たとえば、GSM(登録商標)ウィズ汎用パケット無線サービス(GSM/GPRS)、CDMA/1xRTT、エンハンスド・データ・レート・フォー・グローバル・エボリューション(EDGE)、エボリューション・データ・オンリー/オプティマイズド(EV−DO)、エボリューション・フォー・データ・アンド・ボイス(EV−DV)、ハイ・スピード・ダウンリンク・パケット・アクセス(HSDPA)、ハイ・スピード・アップリンク・パケット・アクセス(HSUPA)、4G LTEなどを含むが、それらには限定されない。
詳細に論じられているように、クライアント・デバイス・データ130に対して格納及びアクセスを行う際の冗長性が、地理的に分散していることが可能である別々のクラスタの別々のHAグループに属する少なくとも2つのノードの間におけるデータ・アクセス・オペレーションの少なくとも部分的に並列な実行をもたらすことによって提供されることが可能である。当業者にはよく知られているように、地理的に離れているロケーション同士において生じるそのような実行を調整する際には、さまざまな課題が提示され、それらの課題は、長い距離にわたってコマンドを送信する際に課される遅延を含む。そのような長い距離の送信におけるネットワークの使用によって、さらなる課題が課される場合があり、それらの課題は、コマンドの複製を、及び/又はコマンドを、それらが送信された順序とは異なる、及び/又はそれらが実行されることになる順序とは異なる順序で受信することを含む。
図8は、ストレージ・クラスタ・システム1000のアクティブ・ノード300aと300yとの間における相互接続の別の例示的な実施形態のブロック図をさらに詳細に示している。さらに具体的には、図8は、ノード300a及び300yのDモジュール600同士の間におけるデータ・アクセス・コマンドの少なくとも部分的に並列な実行及び/又はキャンセルのさらに良好な調整を可能にするために個々のデータ・アクセス・コマンドに、及び/又はデータ・アクセス・コマンドのセットに割り振られることが可能である識別子を採用することの諸側面を示している。示されているように、ノード300aは、クライアント・デバイス100との通信に従事してデータ・アクセス・コマンドを実行するためにアクティブであることが可能であり、その一方でノード300yは、ノード300aとの通信に従事してノード300aと少なくとも部分的に並列にレプリカ・データ・アクセス・コマンドを実行するためにアクティブであることが可能である。
示されているように、ノード300a及び300yのうちのそれぞれのDモジュール600内のコントロール・ルーチン640は、生成コンポーネント641、グループ化コンポーネント642、順序付けコンポーネント645、アクセス・コンポーネント648、及び通信コンポーネント649のうちの1つ又は複数を組み込むことができる。コントロール・ルーチン640を実行する際に、これらのDモジュール600のうちのそれぞれのプロセッサ・コンポーネント650は、コントロール・ルーチン640のコンポーネント641、642、645、648、又は649のうちの1つ又は複数を実行することができる。しかしながら、アクティブ・ノード内のプロセッサ・コンポーネント650によって実行されるコントロール・ルーチン640の諸部分と、非アクティブ・ノード内のプロセッサ・コンポーネント650によって実行されるコントロール・ルーチン640の諸部分とにおいて相違が存在する場合があるのとちょうど同じように、データ・アクセス・コマンドを実行するためにアクティブであるノード内のプロセッサ・コンポーネントによって実行されるコントロール・ルーチン640の諸部分と、レプリカ・データ・アクセス・コマンドを実行するためにアクティブであるノード内のプロセッサ・コンポーネントによって実行されるコントロール・ルーチン640の諸部分とにおいても相違が存在する場合がある。さらに具体的には、ノード300aのDモジュール600のプロセッサ・コンポーネント650は、コンポーネント641、642、648、及び649(実線を用いて描かれている)のうちの1つ又は複数を実行することができるが、コンポーネント645(点線を用いて描かれている)を実行することを差し控えることができる。対照的に、ノード300yのDモジュール600のプロセッサ・コンポーネント650は、コンポーネント645、648、及び649(実線を用いて描かれている)のうちの1つ又は複数を実行することができるが、コンポーネント641及び642(点線を用いて描かれている)を実行することを差し控えることができる。
ノード300a及び300yのうちのそれぞれのDモジュール600内では、通信コンポーネント649は、その他のノードのコンポーネント(たとえば、その他のノードのDモジュール600)との間で、及び/又は同じノードのその他のコンポーネント(たとえば、同じノードのNモジュール500)との間でコマンド及び/又はデータをやり取りするようにインターフェース690を操作することができる。さらに具体的には、ノード300a内では、通信コンポーネント649は、Nモジュール500からデータ・アクセス・コマンドを受信することができ、レプリカ・データ・アクセス・コマンドのセットへと編成されたレプリカ・データ・アクセス・コマンドを、クラスタ間相互接続399を介してアクティブ・ノード300yのDモジュール600へ送信することができる。それらのレプリカ・コマンド・セットをノード300yへそのように送信する際に、それぞれのレプリカ・コマンド・セットは、別々のネットワーク・パケット内に含めて伝達される諸部分へと分割されて、それらの部分において送信されることが可能である。ノード300y内では、通信コンポーネント649は、レプリカ・コマンド・セットの諸部分を、ノード300aのDモジュール600から、それらの部分が送信された順序から外れて、及び/又はインターネットなど、クラスタ間相互接続399が延在できる上で経由するネットワークを通じた送信によってもたらされたいくらかの度合いの複製を伴って受信することができる。前述のように、相互接続399を介してレプリカ・データ・アクセス・コマンドをやり取りする際に、それぞれ、シンク・キャッシュ639a及び639y内に保持されているレプリケーション・データ633a及び633yが、そのようなやり取りをバッファする際に採用されることが可能である。
ノード300a及び300yのうちのそれぞれのDモジュール600内では、アクセス・コンポーネント648は、それぞれ、ストレージ・デバイスのセット800ab及び800yz内に格納されているクライアント・デバイス・データ130上でさまざまなデータ・アクセス・オペレーションを実行するようにストレージ・コントローラ665を操作することができる。さらに具体的には、ノード300a内では、アクセス・コンポーネント648は、ストレージ・サービス要求から変換されてノード300aのNモジュール500によって提供されたデータ・アクセス・コマンドを実行することができる。ノード300y内では、アクセス・コンポーネント648は、ノード300aのNモジュール500によって提供されてクラスタ間相互接続399を介してノード300yに提供されたデータ・アクセス・コマンドをレプリケートすることによってノード300aのDモジュール600によって生成されたレプリカ・データ・アクセス・コマンドを実行することができる。前述のように、データ・アクセス・コマンドと、そこから得られたレプリカ・データ・アクセス・コマンドとの実行は、少なくとも部分的に並列に生じることが可能である。
ノード300aのDモジュール600内では、生成コンポーネント641は、説明されているように、Mモジュール400及び/又はNモジュール500から受信されたメタデータの諸部分からメタデータ630abのバージョンを生成することができる。やはり前述のように、生成コンポーネント641は、ノード300aの少なくともDモジュール600のリブートに続いてストレージ・デバイスのセット800abから取り出されたメタデータ630abを使用するという不成功の試みに応答して、メタデータ630abを構成するメタデータの可変の断片及び/又は不変の断片を更新することが必要とされた際に、メタデータの更新された部分をMモジュール400及び/又はNモジュール500の一方又は両方に要求することができる。
ノード300aのDモジュール600内では、グループ化コンポーネント642は、Nモジュール500から受信されたデータ・アクセス・コマンドのうちの複数のデータ・アクセス・コマンドをコマンド・セットへとグループ化することができ、それに対応して、データ・アクセス・コマンドからレプリケートされたレプリカ・データ・アクセス・コマンドのうちのマッチするレプリカ・データ・アクセス・コマンドを、マッチするレプリカ・コマンド・セットへとグループ化することができる。グループ化コンポーネント642は、データ・アクセス・コマンド及びレプリカ・データ・アクセス・コマンドのうちのマッチするデータ・アクセス・コマンド及びレプリカ・データ・アクセス・コマンドに対して、マッチするシーケンスIDを割り振ることができ、並びに/又はコマンド・セット及びレプリカ・コマンド・セットのうちのマッチするコマンド・セット及びレプリカ・コマンド・セットに対して、マッチするセットIDを割り振ることができる。グループ化コンポーネント642は、繰り返す時間のインターバルの経過に応答して、データ・アクセス・コマンドの特徴に応答して、及び/又は、データ・アクセス・コマンドの実行に影響を与えることが可能であるメタデータ630abにおける変化に応答して、新たなコマンド・セット及びマッチするレプリカ・コマンド・セットを形成することができる。新たなコマンド・セットを得ることが、時間のインターバルの経過に基づくことが可能である場合には、グループ化コンポーネント642は、Dモジュール600のクロック655を採用して、時間の経過をモニタすることができる。
ノード300yのDモジュール600内では、順序付けコンポーネント645は、1つ又は複数のレプリカ・コマンド・セットを、ノード300yによってノード300aからクラスタ間相互接続399を介して受信されるそれらの諸部分として再構築するためにセットID及び/又はシーケンスIDを採用することができる。そうする際に、順序付けコンポーネント645は、既に受信されているレプリカ・コマンド・セットの諸部分をどんなネットワーク・パケットが伝達しているかを特定するために少なくともセットIDを採用することができ、それによって、それらの部分は冗長であり、及びそれによって、それらの冗長な部分を伝達しているネットワーク・パケットは、冗長なものとして破棄されることが可能である。順序付けコンポーネント645は、先のレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドの実行が完了しているか否かに応じて後のレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドの実行の開始を条件付けるために少なくともセットIDを採用することもできる。順序付けコンポーネント645はさらに、ノード300aと少なくとも部分的に並列でのデータ・アクセス・コマンドの実行のキャンセルを調整するために少なくともセットIDを採用することができ、それは、実行されることにならないレプリカ・データ・アクセス・コマンドを含むレプリカ・コマンド・セットの諸部分をどんなネットワーク・パケットが伝達しているかを特定するためにセットIDを採用することを含み、それによって、それらの部分は冗長であり、及びそれによって、それらの冗長な部分を伝達しているネットワーク・パケットは、冗長なものとして破棄されることが可能である。
図9A及び図9Bは共に、マッチするコマンド・セット及びレプリカ・コマンド・セットを生成して、マッチするセットIDと共に使用して、データ・アクセス・コマンド及びレプリカ・データ・アクセス・コマンドの少なくとも部分的に並列な実行及び/又は実行の少なくとも部分的に並列なキャンセルを調整することの諸側面をさらに詳細に示している。さらに具体的には、図9Aは、データ・アクセス・コマンド570をコマンド・セット572へとグループ化することの諸側面、及びマッチするレプリカ・データ・アクセス・コマンド670を、マッチするレプリカ・コマンド・セット672へとグループ化することの諸側面を示している。図9Aはまた、マッチするセットID573及び673を、それぞれ、コマンド・セット572及びレプリカ・コマンド・セット672のうちのマッチするコマンド・セット572及びレプリカ・コマンド・セット672に割り振ることの諸側面を示している。図9Bは、送信された順序から外れて受信される場合があるレプリカ・コマンド・セット672の諸部分をレプリカ・コマンド・セット672へと再構築するためにレプリカ・コマンド・セット672の少なくともセットID673を採用することの諸側面を示している。図9A及び図9Bは両方とも、指定されたデータ・アクセス・コマンド及びマッチするレプリカ・データ・アクセス・コマンドのキャンセルを調整するために少なくともセットID573及び673を採用することの諸側面を示している。
図9Aを参照すると、グループ化コンポーネント642は、IDコンポーネント6421、レプリケーション・コンポーネント6422、及びキャンセル・コンポーネント6425のうちの1つ又は複数を組み込むことができる。前述のように、通信コンポーネント649は、ノード300aのNモジュール500からデータ・アクセス・コマンド570を受信するようにインターフェース690を操作することができ、それらのデータ・アクセス・コマンド570をグループ化コンポーネント642へ中継することができる。グループ化コンポーネント642は、データ・アクセス・コマンド570のうちの複数のデータ・アクセス・コマンド570を複数のコマンド・セット572へとグループ化することができる。コマンド・セット572をそのように形成する際に、グループ化コンポーネント642は、コマンド・セット572のうちのそれぞれの中に共にグループ化されるデータ・アクセス・コマンド570同士の間においてデータ・アクセス・コマンド570同士が実行されることになる順序を保存することができ、コマンド・セット572同士の間におけるデータ・アクセス・コマンド570同士の実行の順序に基づく順序でコマンド・セット572を形成することができる。データ・アクセス・コマンド570同士が実行されることになるそのような順序は、ストレージ・サービス要求をデータ・アクセス・コマンド570へと変換することの一部としてNモジュール500によって得られることが可能である。前述のように、Nモジュール500によって受信された単一のストレージ・サービス要求が複数のデータ・アクセス・コマンド570へと変換される場合があり得る。さらに、データ・アクセス・コマンド570の実行のそのような順序は、データ・アクセス・コマンド570をDモジュール600に提供することの一部としてNモジュール500によってDモジュール600に示されることが可能である。たとえば、Nモジュール500は、そのような順序でデータ・アクセス・コマンド570をDモジュール600に提供することができる。
データ・アクセス・コマンド570の実行の順序を保存することの一部として、IDコンポーネント6421は、シーケンスID571を生成して、それぞれのデータ・アクセス・コマンド570に割り振ることができる。いくつかの実施形態においては、シーケンスID571は、それぞれのデータ・アクセス・コマンド570に関する値をインクリメント又はデクリメントすることによって生成されることが可能である序数(たとえば、整数)であることが可能であり、序数の昇順又は降順でデータ・アクセス・コマンド570同士に割り振られて、データ・アクセス・コマンド570同士が実行されることになる順序を示すことが可能である。したがって、それぞれのデータ・アクセス・コマンド570に関する新たなシーケンスID571を生成することは、IDコンポーネント6421によって操作されるカウンタをインクリメント又はデクリメントすることを伴う場合がある。代替として、又は追加として、シーケンスID571は、現在の時刻に少なくとも部分的に基づくことが可能である。さらに具体的には、IDコンポーネント6421は、クロック655から現在の時刻を繰り返し取り出すことができ、シーケンスID571を生成して、それぞれのデータ・アクセス・コマンド570に割り振ることを、それぞれがノード300aのDモジュール600によって受信された時刻に基づいて、そのシーケンスID571が割り振られる時刻に基づいて、及び/又はそれぞれのデータ・アクセス・コマンド570を含む異なるイベントが生じる時刻に基づいて行うことができる。シーケンスID571がそのように時刻に基づく場合には、シーケンスID571は、時刻及び日付を組み込んでいる序数であることが可能であり、序数の昇順で割り振られて、データ・アクセス・コマンド570の実行の順序を示すことが可能である。
Dモジュール600は、本明細書においては、シーケンスID571を生成するものとして示され論じられているが、シーケンスID571がNモジュール500によって生成され、それによってデータ・アクセス・コマンド570が、シーケンスID571を既に割り振られた状態でDモジュール600によって受信されるその他の実施形態も可能であるということに留意されたい。これは、データ・アクセス・コマンド570が、クライアント・デバイス100のうちの1つ又は複数から受信されたストレージ・サービス要求を変換することの一部としてNモジュール500によって生成されることに照らして、望ましいとみなされる場合がある。本質的には、データ・アクセス・コマンド570がそのように生成されたときにシーケンスID571をそれぞれのデータ・アクセス・コマンド570に割り振る方がさらに効率的であるとみなされる場合がある。
それぞれのデータ・アクセス・コマンド570に関するシーケンスID571が生成される正確な様式にかかわらず、いくつかの実施形態においては、コマンド・セット572のうちのそれぞれに関するセットID573は、コマンド・セット572のうちのそれぞれの中に含まれているデータ・アクセス・コマンド570のうちの1つ又は複数のシーケンスID571に基づくことが可能である。前述のように、データ・アクセス・コマンド570同士がグループ化されて、それぞれのコマンド・セット572内のデータ・アクセス・コマンド570の実行の順序が保存される様式でコマンド・セット572を形成することが可能であり、及び/又はコマンド・セット572は、データ・アクセス・コマンド570の実行の順序に従う順序で形成されることが可能である。たとえば、いくつかの実施形態においては、それぞれのコマンド・セット572のセットID573は、最初に実行されることになる、又は最後に実行されることになるそれぞれのコマンド・セット572内のデータ・アクセス・コマンド570のシーケンスID571に基づくことが可能である。これは、シーケンスID571が、クロック655から繰り返し取り出された時刻に何らかの様式で基づいている場合に当てはまることが可能である。その他の実施形態においては、セットID573は、それぞれのコマンド・セット572内のデータ・アクセス・コマンド570が、コマンド・セット572のうちのその他のコマンド・セット572内のデータ・アクセス・コマンド570と相対的に実行されることになる順序を示すために、それぞれのコマンド・セット572に関する値を序数の昇順又は降順でインクリメント又はデクリメントすることによって生成されることが可能である序数(たとえば、整数)であることが可能である。したがって、それぞれのコマンド・セット572に関する新たなセットID573を生成することも、IDコンポーネント6421によって操作されるカウンタをインクリメント又はデクリメントすることを伴う場合がある。
コマンド・セット572は、データ・アクセス・コマンド570の実行の順序に従う順序で、及び/又は、データ・アクセス・コマンド570同士を、コマンド・セット572のうちのそれぞれの中におけるその順序を保存する様式でグループ化することによって形成されることが可能であるので、それぞれのコマンド・セット572内に(実行の順序という点で)開始時及び終了時にどんなデータ・アクセス・コマンド570があるかをグループ化コンポーネント642によって特定することは、コマンド・セット572のうちのそれぞれへとグループ化されるデータ・アクセス・コマンド570に関連付けられている時間の最大インターバルに基づくことが可能である。さらに具体的には、メタデータ630abは、コマンド・セット572のうちの任意のコマンド・セット572へとグループ化されるデータ・アクセス・コマンド570に関連付けられることになる時間の最大インターバルの表示を含むことができる。いくつかの実施形態においては、これは、共にグループ化されることになる多くのデータ・アクセス・コマンド570をNモジュール500から受信することができる時間の最大インターバルを指定することができ、それによって、いずれのコマンド・セット572も、Nモジュール500からの受信を行うための時間の最大インターバルよりも長くかかったデータ・アクセス・コマンド570同士のグループ化を含むことはできない。その他の実施形態においては、これは、任意のコマンド・セット572内の多くのデータ・アクセス・コマンド570が実行される上で必要とされる時間の最大インターバルを指定することができる。或いは、その他の実施形態においては、メタデータ630abは、任意のコマンド・セット572内に含まれることになるデータ・アクセス・コマンド570の最大数量を指定することができる。
通信コンポーネント649は、ノード300aのMモジュール400及び/又はNモジュール500からメタデータの諸部分を受信するようにインターフェース690を操作することができ、通信コンポーネント649は、メタデータのそれらの部分を生成コンポーネント641へ中継することができる。メタデータの少なくともそれらの部分から、生成コンポーネント641は、メタデータ630abの1つ又は複数のバージョンを生成することができる。生成コンポーネント641へ中継されるメタデータのそれらの部分のうちの1つ又は複数は、いずれか1つのコマンド・セット572へと共にグループ化されるデータ・アクセス・コマンド570に関連付けられることが可能である最大タイム・インターバル、及び/又はメタデータ630ab内に含めて提供されることが可能であるいずれか1つのコマンド・セット572へと共にグループ化されることが可能であるデータ・アクセス・コマンド570の最大数量の表示を含むことができる。
代替として、又は追加として、グループ化コンポーネント642は、それぞれのグループ化コンポーネント642内の1つ又は複数のデータ・アクセス・コマンド570を、データ・アクセス・コマンド570そのものの1つ又は複数の特徴に基づいてグループ化することができる。いくつかの実施形態においては、グループ化コンポーネント642は、2つのデータ・アクセス・コマンド570がクライアント・デバイス・データ130の同じ部分に関連付けられていることのない、及び/又は2つのデータ・アクセス・コマンド570がストレージ・デバイスの同じ部分にアクセスすることのないデータ・アクセス・コマンド570同士を共にグループ化することができる。悪影響を伴うことなく(たとえば、ストレージ・デバイスのセット800ab又は800yzのうちの1つの中に格納されているクライアント・デバイス・データ130の状態が、それらの多数のうちの1つの中のデータ・アクセス・コマンド570が実行される順序に応じて異なるという競合状態をもたらすことなく)、自らのシーケンスIDによって示されている順序から外れて実行されることが可能であるデータ・アクセス・コマンド570同士からコマンド・セット572同士の少なくともサブセットを形成することが望ましいとみなされる場合がある。たとえば、クライアント・デバイス・データ130の別々の部分を読み出すための連続した一連のデータ・アクセス・コマンド570は、それらのデータ・アクセス・コマンド570が実行される順序が、ストレージ・デバイスのセット800ab又は800yzのうちの1つの中に格納されているクライアント・デバイス・データ130の状態に影響を与えることはないという事実に基づいて、コマンド・セット572内で共にグループ化されることが可能である。
また代替として、又は追加として、グループ化コンポーネント642は、データ・アクセス・コマンド570のうちのどのデータ・アクセス・コマンド570がメタデータ630abの古いバージョンを伴って実行されることになるか、及びデータ・アクセス・コマンド570のうちのどのデータ・アクセス・コマンド570がメタデータ630abの新しいバージョンを伴って実行されることになるかに基づいてデータ・アクセス・コマンド570同士を2つの別々のコマンド・セット572へとグループ化することができる。論じられているように、メタデータ630abは、ストレージ・デバイスのセット800ab内におけるクライアント・データ130の格納、及び/又はそこからのクライアント・デバイス・データ130の諸部分の取り出しのさまざまな側面を指定することができる。結果として、メタデータ630abの新たなバージョンは、それらの側面のうちの1つ又は複数を変更する生成コンポーネント641によって生成されることが可能であり、データ・アクセス・コマンド570のうちのいくつかは、メタデータ630abの古いバージョンに関連付けられることが可能であり、それによってそれらは、そのような変更が有効になる前に実行されることを意図されており、その一方で、データ・アクセス・コマンド570のうちのその他のデータ・アクセス・コマンド570は、メタデータ630abの新たなバージョンに関連付けられることが可能であり、それによってそれらは、そのような変更が有効になった後に実行されることを意図されている。それに応答して、グループ化コンポーネント642は、データ・アクセス・コマンド570のうちで、メタデータ630abの古いバージョンに関連付けられているデータ・アクセス・コマンド570を、コマンド・セット572のうちの古い方へとグループ化する一方で、データ・アクセス・コマンド570のうちで、メタデータ630abの新しいバージョンに関連付けられているその他のデータ・アクセス・コマンド570を、コマンド・セット572のうちの新しい方へとグループ化することができる。実際に、これらの2つのコマンド・セットのうちの新しい方は、これらの2つのコマンド・セットのうちの古い方の後にすぐに続くことが可能であり、それによって、それらの間における遷移は、メタデータ630abの新しいバージョンにおいて指定されている変更が有効になるのと同時に起こる。
グループ化コンポーネント642は、それぞれのコマンド・セット572が形成されたときに、それぞれのコマンド・セット572をアクセス・コンポーネント648に提供して、実行されるようにすることが可能である。コマンド・セット572は、データ・アクセス・コマンド570の実行の順序に従う順序で形成されることが可能であるので、それぞれのコマンド・セット572を、それらのコマンド・セット572が実行されるときにアクセス・コンポーネント648にそのように供給する結果、アクセス・コンポーネント648は、データ・アクセス・コマンド570を、それらのデータ・アクセス・コマンド570が実行されることになる順序で受信するはずである。それでもなお、いくつかの実施形態においては、アクセス・コンポーネント648は、データ・アクセス・コマンド570を、それらのデータ・アクセス・コマンド570が実行されることを意図されていた順序で実行するようにストレージ・コントローラ665をアクセス・コンポーネント648が操作することを確実にするために、それぞれのデータ・アクセス・コマンド570に割り振られるシーケンスIDを採用することができる。
コマンド・セット572が形成され、及び/又はアクセス・コンポーネント648に提供されたときに、レプリケーション・コンポーネント6422は、コマンド・セット572のレプリカをレプリカ・コマンド・セット672の形態で生成することができる。それぞれのレプリカ・コマンド・セット672は、コマンド・セット572のうちの1つにマッチするように生成されることが可能であり、これは、コマンド・セット572のうちのマッチされているコマンド・セット572のセットID573にマッチするセットID673を有することを含む。したがって、それぞれのレプリカ・コマンド・セット672は、コマンド・セット572のうちの1つへとグループ化される多くのデータ・アクセス・コマンド570にマッチする多くのレプリカ・データ・アクセス・コマンド670を含むことができ、その多くのレプリカ・データ・アクセス・コマンド670は、その多くのデータ・アクセス・コマンド570に割り振られているシーケンスID571にマッチするシーケンスID671を割り振られることが可能である。レプリケーション・コンポーネント6422は、レプリカ・コマンド・セット672のうちのそれぞれをレプリケーション・データ633aの一部分としてシンク・キャッシュ639a内に格納して、ノード300aのDモジュール600の通信コンポーネント649が、クラスタ間相互接続を介してノード300yのDモジュール600へそれぞれのレプリカ・コマンド・セット672を送信するようにノード300aのインターフェース690を操作することを可能にすることができる。
図9Bを参照すると、ノード300yのDモジュール600の通信コンポーネント649は、ノード300aのDモジュール600からレプリカ・コマンド・セット672を受信するようにノード300yのインターフェース690を操作することができ、レプリカ・コマンド・セット672をレプリケーション・データ633yの一部としてシンク・キャッシュ639y内に一時的に格納することができる。順序付けコンポーネント645は、レプリケーション・データ633yからレプリカ・コマンド・セット672を取り出し、それらの取り出されたレプリカ・コマンド・セット672を、それらのレプリカ・コマンド・セット672内のレプリカ・データ・アクセス・コマンド670同士が実行されることになる順序に従う順序でアクセス・コンポーネント648に提供することができる。アクセス・コンポーネント648は次いで、順序付けコンポーネント645によってそのように提供されたそれぞれのレプリカ・コマンド・セット672のレプリカ・データ・アクセス・コマンド670を実行するようにノード300yのDモジュール600のストレージ・コントローラ665を操作することができる。
前述のように、クラスタ間相互接続399は、いくつかの実施形態においては、ネットワーク(たとえば、ネットワーク999)を通じてルーティングされることが可能である。そのネットワークがパケットベースのプロトコルを採用しているかどうかなど、そのネットワークのさまざまな特徴に応じて、レプリカ・コマンド・セット672のうちのそれぞれは、複数の部分へと分割されることが可能であり、それらの部分はそれぞれ、そのネットワークを通じて別々のネットワーク・パケット内に含めて伝達されることが可能である。したがって、ノード300yのDモジュール600の通信コンポーネント649は、レプリケーション・データ633y内のレプリカ・コマンド・セット672のうちのそれぞれの複数の部分を、それらの部分を伝達するネットワーク・パケットがクラスタ間相互接続399から受信されたときに再構築することができる。
当業者にはよく知られているように、いくつかのネットワークは、別々のパケットが、ネットワークを構成している別々の接続を通じて別々の経路を取る様式で設計される場合があり、それによってパケット同士は、送信側デバイスによって送信された順序とは異なる順序で受信側デバイスにおいて受信される場合がある。パケット同士が、送信されたのとは異なる順序で受信されるというこの可能性の結果、レプリカ・コマンド・セット672のうちの単一のレプリカ・コマンド・セット672を構成しているパケット同士が、ノード300aのインターフェース690によって送信された順序から外れてノード300yのインターフェース690に到着する場合がある。したがって、既に受信されているその単一のレプリカ・コマンド・セット672のレプリカ・データ・アクセス・コマンド670のうちの少なくともいくつかの実行は、先に実行されることを意図されているその同じレプリカ・コマンド・セット672のレプリカ・データ・アクセス・コマンド670のうちのその他のレプリカ・データ・アクセス・コマンド670を伝達するパケットも受信されて、レプリカ・データ・アクセス・コマンド670のうちのそれらのその他のレプリカ・データ・アクセス・コマンド670が実行されるまで遅延されることが必要となる場合がある。また、これは、レプリカ・データ・アクセス・コマンド670同士が実行されることになっていた順序に対応する順序でパケット同士が送信されているにもかかわらず生じる場合がある。
代替として、又は追加として、パケット同士が、送信されたのとは異なる順序で受信されるというこの可能性の結果、レプリカ・コマンド・セット672のうちの複数のレプリカ・コマンド・セット672を構成するパケット同士が、順序から外れてノード300yのインターフェース690に到着し、それによって、後で送信されたレプリカ・コマンド・セット672のレプリカ・データ・アクセス・コマンド670のうちのすべてが、先に送信されたレプリカ・コマンド・セット672のレプリカ・データ・アクセス・コマンド670のうちのすべてよりも前に受信される場合がある。先に送信されたレプリカ・コマンド・セット672のレプリカ・データ・アクセス・コマンド670が、後に送信されたレプリカ・コマンド・セット672のレプリカ・データ・アクセス・コマンド670よりも前に完全に実行されなければならないと仮定すると、後に送信された(しかし先に受信された)レプリカ・コマンド・セット672のレプリカ・データ・アクセス・コマンド670の実行は、先に送信されたレプリカ・コマンド・セット672のレプリカ・データ・アクセス・コマンド670のうちのすべてが受信及び実行の両方を行われるまで遅延されることが必要となる場合がある。
順序付けコンポーネント645は、シンク・キャッシュ639y内の複数のレプリカ・コマンド・セット672の諸部分を、クラスタ間相互接続399から受信されたパケットから、レプリカ・データ・アクセス・コマンド670同士の実行の意図されている順序に従う順序で、及びそれらのパケットが受信される順序にかかわらずに再構築するために通信コンポーネント649と協力することができる。ノード300aのDモジュール600の通信コンポーネント649は、ネットワーク・パケット内に含めて伝達されるレプリカ・コマンド・セット672のそれぞれの部分が属するレプリカ・コマンド・セット672のセットID673の表示を、その部分を送信するネットワーク・パケット内に含めることができる。ノード300yのDモジュール600の通信コンポーネント649は次いで、それぞれの受信されたネットワーク・パケット内にそのように含まれているセットID673を採用して、そのネットワーク・パケット内のレプリカ・コマンド・セット672の伝達された部分を、再構築されている最中である可能性があるレプリカ・コマンド・セット672のうちの1つにマッチさせることができる。それぞれのそのようなネットワーク・パケットにおけるセットID673のそのような使用は、そのようなネットワーク・パケット内に含めて伝達されるそれぞれの部分の中に含まれているレプリカ・データ・アクセス・コマンド670のシーケンスID671を分析してから、次いでそれらのシーケンスID671を特定のレプリカ・コマンド・セット672にマッチさせるよりもさらに迅速にレプリカ・コマンド・セット672を再構築するためのメカニズムを提供することができる。
やはり当業者にはよく知られているように、いくつかのネットワークは、そのようなネットワークを構成している接続から接続へネットワーク・パケットが伝達される際に冗長なネットワーク・パケットの作成をもたらす様式で設計される場合もある。冗長なネットワーク・パケットのそのような作成は、それぞれの送信されたパケットがその意図されている宛先において受信されることを確実にする際にいくらかの度合いの冗長性を提供するためのネットワークのアーキテクチャーにおける望ましい機能とみなされる場合があり、及び/又は宛先への最も速い経路を見つけ出すためのメカニズムとして、ネットワーク・パケットのうちの冗長なネットワーク・パケット同士がネットワーク内で別々の経路に沿って並列に伝達されるようにすることによってネットワーク・パケットの配信を加速するための望ましい機能とみなされる場合がある。しかしながら、この結果、レプリカ・コマンド・セット672の同じ部分がノード300yのインターフェース690において複数回にわたって受信される可能性がある。
順序付けコンポーネント645は、レプリカ・データ・アクセス・コマンド670のシーケンスID671を分析することによるよりもさらに迅速に少なくともいくつかの冗長なパケットを識別するためのメカニズムとして、それぞれのネットワーク・パケット内に含まれているセットID673を使用し、それによって、それらの冗長なネットワーク・パケットがさらに迅速に破棄されることを可能にするためにノード300yのDモジュール600の通信コンポーネント649と協力することができる。順序付けコンポーネント645は、既に完全に再構築されているレプリカ・コマンド・セット672のセットID673を追跡把握することができ、それによって、そのような完全に再構築されているレプリカ・コマンド・セット672のセットID673を含む受信されるそれ以上のいずれのネットワーク・パケットも冗長にちがいなく、なぜなら、そのレプリカ・コマンド・セット672が完全に再構築されるのを依然として待たれているその完全に再構築されているレプリカ・コマンド・セット672の部分は、それ以上ないからである。代替として、又は追加として、順序付けコンポーネント645は、レプリカ・データ・アクセス・コマンド670がアクセス・コンポーネント648によって既に完全に実行されているレプリカ・コマンド・セット672のセットID673を追跡把握することができ、それによって、そのような完全に実行されているレプリカ・コマンド・セット672のセットID673を含む受信されるそれ以上のいずれのネットワーク・パケットも冗長にちがいない。順序付けコンポーネント645は、そのような完全に再構築されている及び/又は完全に実行されているレプリカ・コマンド・セット672のセットID673の表示を通信コンポーネント649に繰り返し伝達して、通信コンポーネント649が、そのような冗長なネットワーク・パケットをさらに迅速に識別して破棄することを可能にすることができる。
セットID573及び673が、カウンタをインクリメント又はデクリメントすることによってIDコンポーネント6421によって(及び/又はノード300aのNモジュール500のコンポーネントによって)生成される序数である実施形態においては、順序付けコンポーネント645は、順序付けコンポーネント645によって操作される対応するカウンタをそれぞれインクリメント又はデクリメントして、ノード300yのDモジュール600のアクセス・コンポーネント648によって最も新たに完全に実行されたレプリカ・コマンド・セット672のセットID673を示すことができる。順序付けコンポーネント645は、破棄すべき冗長なネットワーク・パケットを識別する目的で、レプリカ・コマンド・セット672の一部分を伝達するそれぞれの受信されたネットワーク・パケット内に含まれているセットID673と比較する際に使用するために、そのカウンタの現在の値をノード300yのDモジュール600の通信コンポーネント649に繰り返し提供することができる。例として、セットID673が、カウンタをインクリメントすることによって生成される序数であり、それによって、レプリカ・データ・アクセス・コマンド670の実行のために正しい順序でレプリカ・コマンド・セット672を編成することが、レプリカ・コマンド・セット672同士を、それらのセットID673を序数の昇順で有するように順序付けることを伴う実施形態においては、ノード300yのDモジュール600の通信コンポーネント649は、順序付けコンポーネント645によって提供された現在のカウンタ値以下の値を有しているセットID673を含むそれぞれの受信されたパケットを破棄することができる。また、これは、それぞれのパケット内に含めて伝達されるレプリカ・コマンド・セット672の諸部分の中に含めて伝達されるレプリカ・データ・アクセス・コマンド670のシーケンスID671を分析して、それらの特定のレプリカ・データ・アクセス・コマンド670が既に以前に受信及び/又は実行されているかどうかを特定することと比べて、どのネットワーク・パケットを冗長なものとして破棄すべきかを特定するさらに迅速なメカニズムを提供することができる。
前述のように、データ・アクセス・コマンド570同士をコマンド・セット572へとグループ化することは、悪影響を伴うことなく(たとえば、競合状態をもたらすことなく)順序から外れて実行されることが可能である、共にグループ化するための連続したデータ・アクセス・コマンド570のセットを識別することに少なくとも部分的に基づくことが可能である。したがって、そのようなコマンド・セット572から得られるレプリカ・コマンド・セット672は、そのような悪影響を伴うことなくノード300yのDモジュール600のアクセス・コンポーネント648によって順序から外れて実行されることが可能であるレプリカ・データ・アクセス・コマンド670のセットを含むことができる。したがって、順序付けコンポーネント645が、それぞれのレプリカ・コマンド・セット672を、内部でのレプリカ・データ・アクセス・コマンド670の実行の意図されている順序を保持する様式で再構築するときでさえ、及び順序付けコンポーネント645が、レプリカ・コマンド・セット672を、実行の意図されている順序に従う順序でアクセス・コンポーネント648に提供するときでさえ、アクセス・コンポーネント648は、コマンド・セット672のうちの個々のコマンド・セット672内でレプリカ・データ・アクセス・コマンド670同士を順序から外れて実行することができる。これは、アクセス・コンポーネント648が、レプリカ・データ・アクセス・コマンド670がストレージ・デバイスのセット800yz上で実行されるスピードをよりよく最適化することを可能にする上で望ましいとみなされる場合がある。
図10A及び図10Bは共に、ネットワーク999を通じて少なくともノード300aと300yとの間において延在しているクラスタ間相互接続399を介してレプリカ・コマンド・セット672を伝達するために、セットID673を含むネットワーク・パケット674を送信及び受信することの一実施形態の諸側面を示している。さらに具体的には、図10Aは、セットID673の例を含むレプリカ・コマンド・セット672の例をノード300aからクラスタ間相互接続399を介してノード300yへ送信することを示している。図10Bは、セットID673の例を含むレプリカ・コマンド・セット672の例をノード300aからクラスタ間相互接続399を介してノード300yによって受信することを示している。
図10Aを参照すると、例示的なレプリカ・コマンド・セット672j及び672k(それらのそれぞれは、レプリカ・コマンド・セット672のインスタンスである)が、レプリケーション・データ633aの一部としてシンク・キャッシュ639a内で形成されている。いくつかの実施形態においては、レプリカ・コマンド・セット672がシンク・キャッシュ639a内で生成されてシンク・キャッシュ639aから送信される様式は、ダブル・バッファに似ていると言える。さらに具体的には、レプリケーション・データ633aによって占められているシンク・キャッシュ639a内のロケーション同士のペアが割り当てられることが可能であり、それによって、それらの2つの部分のうちの一方の中に新たなレプリカ・コマンド・セット672が形成され、その一方で、完全に形成されることになる最後のレプリカ・コマンド・セット672が、2つの部分のうちの他方からノード300yへ送信される。したがって、示されているように、完全に形成されたレプリカ・コマンド・セット672jの諸部分は、相互接続399を介してネットワーク・パケット674内に含めてノード300yへ送信されることが可能であり、その一方で、グループ化コンポーネント642は、次なるレプリカ・コマンド・セット672kを形成する。レプリカ・コマンド・セット672kの形成が完了すると、コマンド・セット672kの諸部分も、ネットワーク・パケット674内の諸部分に含めて送信されることになり、その一方で、レプリカ・データ633aのうちでレプリカ・コマンド・セット672jによって占められている部分において、別のレプリカ・コマンド・セットが形成されることになる。
前述のように、及び図10Aにおいて例示されているように、それぞれのレプリカ・コマンド・セット672の諸部分を伝達するネットワーク・パケット674同士は、それぞれのレプリカ・コマンド・セット672内におけるレプリカ・データ・アクセス・コマンド670同士の実行の意図されている順序を保持する順序でノード300aによって送信されることが可能である。したがって、レプリカ・コマンド・セット672jは、諸部分へと分割されることが可能であり、それらの部分は、送信されるネットワーク・パケット674内に含めてノード300aによってノード300yへ、それらのネットワーク・パケット674内の諸部分の中でのレプリカ・データ・アクセス・コマンド670同士の間における実行の順序を保存する順序で、及びその他のいかなるレプリカ・コマンド・セット672の諸部分を伝達するネットワーク・パケット674も、レプリカ・コマンド・セット672jの諸部分を伝達するネットワーク・パケット674同士の間に散在することなく、送信されることが可能である。また示されているように、レプリカ・コマンド・セット672jに割り振られているセットID673jは、レプリカ・コマンド・セット672jの一部分を伝達するネットワーク・パケット674のうちのそれぞれの中に含まれている。
しかしながら、やはり前述のように、図10Bを参照すると、クラスタ間相互接続399が延在できる上で経由するネットワーク999のさまざまな特徴の結果、ネットワーク・パケット674同士が、ノード300yにおいて、ノード300aによるそれらの送信の順序から外れる、及び/又はネットワーク・パケット674のうちの冗長なネットワーク・パケット674を含む様式で受信される場合がある。さらに具体的には、図10Bにおいて例示されているように、ノード300aは、レプリカ・コマンド・セット672g、672h、及び672iの諸部分を伝達する先に送信されたすべてのネットワーク・パケット674を有している可能性があり、かつ、レプリカ・コマンド・セット672jの諸部分を伝達するネットワーク・パケット674を現在送信している可能性があるが、ノード300yは、レプリカ・コマンド・セット672g、672h、及び672iのうちの1つ又は複数の諸部分を伝達するネットワーク・パケット674を依然として受信している可能性がある。したがって、レプリカ・データ633aとは異なり、レプリケーション・データ633yによって占められているシンク・キャッシュ639y内の2つよりも多いロケーションが割り当てられて、示されている例示的なレプリカ・コマンド・セット672g、672h、672i、及び672jなど、2つよりも多いレプリカ・コマンド・セット672のための十分なバッファリングを提供することが可能である。
また、レプリカ・コマンド・セット672はシンク・キャッシュ639y内で完全に再構築されることが可能であるので、レプリカ・コマンド・セット672のうちの完全に再構築されたレプリカ・コマンド・セット672が、レプリカ・データ・アクセス・コマンド670同士の実行の意図されている順序に従う順序で、順序付けコンポーネント645によってノード600yのDモジュール600のアクセス・コンポーネント648に提供されることが可能である。結果として、コマンド・セット672のうちの後に送信されたが先に受信されたコマンド・セット672は、コマンド・セット672のうちの先に送信されたコマンド・セット672の諸部分のすべてが受信されるまで、及びコマンド・セット672のうちの先に送信されたそのコマンド・セット672が完全に再構築されてアクセス・コンポーネント648に提供されるまで、アクセス・コンポーネント648に提供されないことが可能である。例として、レプリカ・コマンド・セット672gは、レプリカ・コマンド・セット672hのレプリカ・データ・アクセス・コマンド670より前に実行されることになるレプリカ・データ・アクセス・コマンド670を含む場合があるが、レプリカ・コマンド・セット672hは、レプリカ・コマンド・セット672gより前にシンク・キャッシュ639y内で完全に受信されて再構築される場合がある。そのような状況においては、レプリカ・コマンド・セット672hのレプリカ・データ・アクセス・コマンド670のうちのすべての実行は、レプリカ・コマンド・セット672gが完全に受信されて再構築されるまで、及びレプリカ・コマンド・セット672gのレプリカ・データ・アクセス・コマンドのうちのすべてが実行されるまで遅延されなければならない。
やはり前述のように、順序付けコンポーネント645は、どんなレプリカ・コマンド・セット672が完全に実行されているかの表示をノード300yのDモジュール600の通信コンポーネント649に提供して、冗長である少なくともいくつかの入ってくるネットワーク・パケット674を通信コンポーネント649がさらに迅速に識別することを可能にすることができ、それによって、それらのネットワーク・パケット674は、破棄されることが可能である。例として、レプリカ・コマンド・セット672g及び672hのレプリカ・データ・アクセス・コマンド670が既に完全に実行されている場合には、順序付けコンポーネント645は、その旨の表示を通信コンポーネント649に提供することができる。その表示を受信したことに応答して、通信コンポーネント649は、ネットワーク・パケット674のうちで、セットID673g及び673hを含むネットワーク・パケット674を識別することができ、それらのセットID673g及び673hは、それらのネットワーク・パケット674を、レプリカ・コマンド・セット672g及び672hの一部分を伝達するものとして識別する。レプリカ・コマンド・セット672g及び672hのレプリカ・データ・アクセス・コマンドは、既に完全に実行されているので、そのような完全な実行の後に受信されるレプリカ・コマンド・セット672g及び672hのいかなる部分も、冗長な部分であり、したがって、そのような冗長な部分を伝達するいかなるネットワーク・パケット674も、それらのコンテンツのさらなる分析を伴わずに破棄されることが可能である冗長なパケットである。いくつかの実施形態においては、冗長なネットワーク・パケット674の破棄は、そのネットワーク・パケット674のいかなる部分もレプリケーション・データ633yの一部としてシンク・キャッシュ639y内に格納しないことを伴うことが可能である。
図9Aに戻ると、ノード300aのNモジュール500から通信コンポーネント649によって受信されるデータ・アクセス・コマンド570のうちの1つがキャンセル・コマンドである場合があり、キャンセル・コマンドは、そのキャンセル・コマンドにおいて示されている一連の先のデータ・アクセス・コマンド570の実行をキャンセルするためのものである。通信コンポーネント649は、そのようなキャンセル・コマンドを、Nモジュール500から受信されたその他のデータ・アクセス・コマンド570と共にグループ化コンポーネント642へ中継することができる。グループ化コンポーネント642のキャンセル・コンポーネント6425は、実行をキャンセルされることになる一連のデータ・アクセス・コマンド570の中に、先に受信されたどんなデータ・アクセス・コマンド570が含まれているかについてのキャンセル・コマンド内の表示を分析して、どんなシーケンスID571及び/又はどんなセットID573が、その一連の中にあるデータ・アクセス・コマンド570に関連付けられているかを識別することができる。少なくとも、実行をキャンセルされることになるそれらの一連のデータ・アクセス・コマンド570が、1つ又は複数のコマンド・セット572の全体を含む場合には、キャンセル・コンポーネント6425は、すべてのデータ・アクセス・コマンド570の実行がキャンセルされることになる1つ又は複数のコマンド・セット572のセットID573の表示を用いてアクセス・コンポーネント648に知らせることができる。
グループ化コンポーネント642のキャンセル・コンポーネント6425からそのような表示を受信したことに応答して、アクセス・コンポーネント648は、その表示において指定されているコマンド・セット572のうちのすべてのデータ・アクセス・コマンド570の既に進行中であるいかなる実行も停止することができ、その表示において指定されているコマンド・セット572のうちでまだ実行されていないすべてのコマンド・セット572のデータ・アクセス・コマンド570のうちのいずれの実行も防止することができ、コマンド・セット572のうちでその表示において指定されているコマンド・セット572の全体を破棄することができる。したがって、キャンセル・コンポーネント6425からのそのような表示において指定されているコマンド・セット572のデータ・アクセス・コマンド570のうちのいずれもまだ実行されていない場合には、アクセス・コンポーネント648は、そのコマンド・セット572の全体を単に破棄することができる。いくつかの実施形態においては、コマンド・セット572のそのような破棄は、そのコマンド・セット572が、アクセス・コンポーネント648による実行のために取り出される目的でどこに格納されていようとも、そのコマンド・セット572が上書きされることを可能にすることを伴うことができる。
しかしながら、当業者にとっては認識可能なように、1つ又は複数の特定のコマンド・セット572のデータ・アクセス・コマンド570の実行をキャンセルするためのそのような表示が、それらのデータ・アクセス・コマンド570の少なくともサブセットが既に実行された後にアクセス・コンポーネント648によって受信される場合があるという可能性が残っている。したがって、ストレージ・デバイスのセット800ab内に格納されているクライアント・デバイス・データ130の状態は、データ・アクセス・コマンド570のそのサブセットの実行の結果として既に変更されている可能性がある。
いくつかの実施形態においては、メタデータ630abにおいて示されている最大タイム・インターバル又は最大コマンド数量が、さまざまな状況のいずれかから起こるデータ破損の結果として許容可能とみなされることが可能である最大度合いのデータ損失の表示に相当することが可能である。それらの状況は、コマンド・セット572のうちの1つ又は複数のデータ・アクセス・コマンド570の実行をキャンセルするためのコマンドを、それらのデータ・アクセス・コマンド570の少なくともサブセットの実行を防止するには遅すぎる時点で受信することから起こる破損を含むことができる。したがって、クライアント・デバイス100のうちの1つによってノード300aへそのようなキャンセル・コマンドを送信することは、そのようなキャンセルは、クライアント・デバイス・データ130を、データ・アクセス・コマンドのそのようなサブセットの実行の前にストレージ・デバイス800ab及び/又は800yz内に格納されていたときにあった状態に復元することで完全に成功するとは限らない場合があるということを理解することに伴ってもたらされることが可能である。
その他の実施形態においては、アクセス・コンポーネント648は、キャンセル・コンポーネント6425からアクセス・コンポーネント648によって受信された表示に含まれている1つ又は複数のコマンド・セット572内のデータ・アクセス・コマンド570の少なくともサブセットの実行をアンドゥするための復元コンポーネント6485を含むことができる。別の言い方をすれば、復元コンポーネント6485は、ストレージ・デバイスのセット800ab内に格納されているクライアント・デバイス・データ130の状態を、その表示に含まれている1つ又は複数のコマンド・セット572のデータ・アクセス・コマンド570が実行される前にクライアント・デバイス・データ130があった状態に復元することができる。そのような実施形態のうちのいくつかにおいては、復元コンポーネント6485は、バッファを保持することができ、そのバッファにおいては、1つ又は複数のコマンド・セット572のデータ・アクセス・コマンド570が、キャッシュに似ていると言える様式でキューに入れられて、それらの実行を遅延させて、Nモジュール500から受信されたキャンセル・コマンドを通じて1つ又は複数のコマンド・セット572のデータ・アクセス・コマンドの実行を防止するための機会を可能にする。そのような実施形態のうちのその他の実施形態においては、復元コンポーネント6485は、バッファを保持することができ、そのバッファにおいては、コマンド・セット572のうちの1つ又は複数のデータ・アクセス・コマンドの実行によって、ストレージ・デバイスのセット800ab内に格納されているクライアント・デバイス・データ130に対して行われたあらゆる変更の表示が一時的に格納されて、それらの変更が、Nモジュール500から受信されたキャンセル・コマンドに応答して元に戻されることを可能にすることができる。
アクセス・コンポーネント648(又はノード300aのDモジュール600の別のコンポーネント)が、既に実行されているデータ・アクセス・コマンド570の実行を元に戻す能力を提供するかどうかにかかわらず、キャンセル・コンポーネント6425は、キャンセル・コマンド675をノード300yへ送信するためにノード300aのDモジュール600の通信コンポーネント649とさらに協力することができる。さらに具体的には、キャンセル・コンポーネント6425は、キャンセル・コマンド675を、ノード300yへ送信されることになるレプリケーション・データ633aの一部としてシンク・キャッシュ639a内に格納することができる。キャンセル・コマンド675は、実行がキャンセルされることになるレプリカ・データ・アクセス・コマンド670を含むレプリカ・コマンド・セット672のうちの1つ又は複数の表示を含むことができる。いくつかの実施形態においては、キャンセル・コマンド675は、そのようなレプリカ・コマンド・セット672を、それらに割り振られているセットID673によって指定することができる。本質的には、キャンセル・コマンド675は、キャンセル・コンポーネント6425によってノード300aのDモジュール600のアクセス・コンポーネント648に提供される表示に類似しているキャンセルの表示をノード300yのDモジュール600のアクセス・コンポーネント648に伝達することを意図されている。この方法においては、これらのアクセス・コンポーネント648の両方は、それぞれ、コマンド・セット572及び672のうちの対応するコマンド・セット572及び672に属しているデータ・アクセス・コマンド570及びレプリカ・データ・アクセス・コマンド670のうちの対応するデータ・アクセス・コマンド570及びレプリカ・データ・アクセス・コマンド670の実行をキャンセルするためのキャンセル表示を提供されることが可能である。したがって、この方法においては、ノード300a及び300yのDモジュール600のアクセス・コンポーネント648は、データ・アクセス・コマンドのうちのマッチするデータ・アクセス・コマンド同士のキャンセルを少なくとも部分的に並列にもたらすことができる。
いくつかの実施形態においては、ノード300aのDモジュール600の通信コンポーネント649は、キャンセル・コマンド675を、レプリカ・コマンド・セット672のうちのいずれの一部分も含んでいないネットワーク・パケット内に含めて送信することができる。さらに、そのような別個のネットワーク・パケットは、レプリカ・コマンド・セット572の一部分を含むネットワーク・パケットよりも迅速にノード300yへ伝達されることが可能である様式でノード300yへ送信されることが可能であり、これが可能なのは、クラスタ間相互接続399が延在できる上で経由するネットワークが、ネットワーク・パケット同士を伝達する際のスピードにおけるそのような相違をサポートするプロトコルを採用している実施形態においてである。
図9Bに戻って、キャンセル・コマンド675を伝達するネットワーク・パケットを受信すると、ノード300yのDモジュール600の通信コンポーネント649は、キャンセル・コマンド675をレプリケーション・データ633yの一部としてシンク・キャッシュ639y内に格納することができる。順序付けコンポーネント645は、キャンセル・コンポーネント6455を含むことができ、キャンセル・コンポーネント6455は、シンク・キャッシュ639yからキャンセル・コマンド675を取り出し、実行がキャンセルされることになるレプリカ・データ・アクセス・コマンド670を含むものとして(たとえば、セットID673によって)キャンセル・コマンド675において指定されているレプリカ・コマンド・セット672のうちの1つ又は複数の表示をノード300yのDモジュール600のアクセス・コンポーネント648へ中継するためのものである。キャンセル・コンポーネント6455からそのような表示を受信したことに応答して、アクセス・コンポーネント648は、その表示において指定されているレプリカ・コマンド・セット672のうちのすべてのレプリカ・データ・アクセス・コマンド670の既に進行中であるいかなる実行も停止することができ、その表示において指定されているコマンド・セット572のうちでまだ実行されていないすべてのコマンド・セット572のデータ・アクセス・コマンド570のうちのいずれの実行も防止することができ、コマンド・セット572のうちでその表示において指定されているコマンド・セット572の全体を破棄することができる。したがって、キャンセル・コンポーネント6455からのそのような表示において指定されているコマンド・セット672のレプリカ・データ・アクセス・コマンド670のうちのいずれもまだ実行されていない場合には、アクセス・コンポーネント648は、そのレプリカ・コマンド・セット672の全体を単に破棄することができる。
しかしながら、1つ又は複数の特定のレプリカ・コマンド・セット672のレプリカ・データ・アクセス・コマンド670の実行をキャンセルするためのそのような表示が、それらのレプリカ・データ・アクセス・コマンド670の少なくともサブセットが既に実行された後にアクセス・コンポーネント648によって受信される場合があるという可能性がやはり残っている。したがって、ストレージ・デバイスのセット800yz内に格納されているクライアント・デバイス・データ130の状態は、レプリカ・データ・アクセス・コマンド670のうちのそのようなレプリカ・データ・アクセス・コマンド670の実行の結果として既に変更されている可能性がある。ノード300aのDモジュール600のアクセス・コンポーネント648と同様に、ノード300yのDモジュール600のアクセス・コンポーネント648は、キャンセル・コンポーネント6455からアクセス・コンポーネント648によって受信された表示に含まれている1つ又は複数のレプリカ・コマンド・セット672内のレプリカ・データ・アクセス・コマンド670の少なくともサブセットの実行をアンドゥするための復元コンポーネント6485を含むことができる。
実行されることにならないレプリカ・データ・アクセス・コマンド670を含むレプリカ・コマンド・セット672の表示をアクセス・コンポーネント648に提供することに加えて、順序付けコンポーネント645のキャンセル・コンポーネント6455は、同様の表示を通信コンポーネント649に提供することができる。ノード300yのDモジュール600の通信コンポーネント649に提供されるそのような表示は、通信コンポーネント649が、冗長なネットワーク・パケットとしてその表示において指定されているレプリカ・コマンド・セット672のうちの1つの一部分を含むこれから受信される可能性があるあらゆるネットワーク・パケットを破棄することを可能にすることができる。したがって、レプリカ・データ・アクセス・コマンド670の実行のキャンセルをもたらすことは、キャンセル・コマンド675の受信後に受信されるそれらのレプリカ・コマンド・セット672の諸部分を冗長なネットワーク・パケットとして扱うことを含むことができる。なぜなら、それらが伝達するレプリカ・コマンド・セット672のそれらの部分は、それらの部分が属するレプリカ・コマンド・セット672内のレプリカ・データ・アクセス・コマンド670が実行されることはないとキャンセル・コマンド675が指定していることに起因して冗長とされているからである。また、ノード300yの通信コンポーネント649は次いで、そのような冗長なネットワーク・パケットをレプリケーション・データ633yの一部としてシンク・キャッシュ639y内に格納しないことによって、そのような破棄をもたらすことができる。
前述のように、いくつかの実施形態においては、セットID573及び673は、カウンタによって保持されている値をインクリメント又はデクリメントすることによってIDコンポーネント6421によって(及び/又はノード300aのNモジュール500のコンポーネントによって)生成される序数であることが可能であり、それによって順序付けコンポーネント645は、対応するカウンタによって保持されている対応する値をそれぞれインクリメント又はデクリメントして、ノード300yのDモジュール600のアクセス・コンポーネント648によって最も新たに完全に実行されたレプリカ・コマンド・セット672のセットID673を示すことができる。そのような実施形態においては、どんなコマンド・セット572及びどんなレプリカ・コマンド・セット672が、実行がキャンセルされることになるデータ・アクセス・コマンド570及びレプリカ・データ・アクセス・コマンド670をそれぞれ含むかの表示が、ノード300a及び300yのうちの両方のDモジュール600のアクセス・コンポーネント648に提供される更新されたカウンタ値として伝達されることが可能である。これらのアクセス・コンポーネント648は次いで、この更新されたカウンタ値を、これらのアクセス・コンポーネント648のいずれかによって現在実行されている、及び/又はその後に受信されるコマンド・セット572及びレプリカ・コマンド・セット672のセットID573及び673とそれぞれ比較して、コマンド・セット572及びレプリカ・コマンド・セット672のうちで破棄すべき冗長なコマンド・セット572及びレプリカ・コマンド・セット672を識別することができる。
例として、セットID573及び673が、カウンタをインクリメントすることによってIDコンポーネント6421によって生成される序数である実施形態においては、両方のアクセス・コンポーネント648に提供される、結果として生じる更新されたカウンタ値は、実行されることにならないデータ・アクセス・コマンド570又はレプリカ・データ・アクセス・コマンド670を含むコマンド・セット572又はレプリカ・コマンド・セット672に関連付けられているセットID573又は673のうちのいずれよりも高い序数のものであるコマンド・セット572及びレプリカ・コマンド・セット672に関するセットID573及び673をそれぞれ示すことができる。ノード300aのDモジュール600のアクセス・コンポーネント648は、更新されたカウンタ値未満であるセットID573を割り振られているそのアクセス・コンポーネント648によって現在実行されている、又はそのアクセス・コンポーネント648にその後に提供されるいかなるコマンド・セット572も破棄することができる。それに対応して、ノード300yのDモジュール600のアクセス・コンポーネント648は、更新されたカウンタ値未満であるセットID673を割り振られているそのアクセス・コンポーネント648によって現在実行されている、又はそのアクセス・コンポーネント648にその後に提供されるいかなるコマンド・セット672も破棄することができる。同様に、ノード300yのDモジュール600の通信コンポーネント649も、更新されたカウンタ値を提供されることが可能であり、その更新されたカウンタ値を、通信コンポーネント649がクラスタ間相互接続399を介してノード300aからその後に受信するレプリカ・コマンド・セット672の一部分を伝達するいかなるネットワーク・パケットのセットID673とも比較することができる。通信コンポーネント649は、更新されたカウンタ値未満である値を伴うセットID673を含むそのようなネットワーク・パケットを破棄することができる。
図11は、ロジック・フロー2100の一実施形態を示している。ロジック・フロー2100は、本明細書において説明されている1つ又は複数の実施形態によって実行されるオペレーションのうちのいくつか又はすべてを代表することが可能である。さらに具体的には、ロジック・フロー2100は、少なくともコントロール・ルーチン640を実行する際にプロセッサ・コンポーネント650によって実行される、及び/又はデータ・ストレージ・モジュール(Dモジュール)600のその他のコンポーネントによって実行されるオペレーションを示すことができる。
2110において、ストレージ・クラスタ・システムの1つのクラスタの第1のHAグループのアクティブ・ノードのDモジュールのプロセッサ・コンポーネントが、そのアクティブ・ノードがクライアント相互接続を介して結合されているクライアント・デバイスからデータ・アクセス・コマンドを受信することができる。そのようなアクティブ・ノードの一例は、ストレージ・クラスタ・システム1000のクラスタ1300aのHAグループ1600ab又は1600cdのうちの1つのノード300a〜dのうちの1つであることが可能であり、そのようなノードは、クライアント相互接続199を介してクライアント・デバイス100のうちの1つ又は複数に結合されることが可能である。
2120において、プロセッサ・コンポーネントは、データ・アクセス・コマンドのうちのそれぞれにシーケンスIDを割り振ることができる。論じられているように、シーケンスIDは、データ・アクセス・コマンド同士が実行されることを意図されている順序を示す増加又は減少する序数の順序でデータ・アクセス・コマンドに割り振られる序数であることが可能である。
2130において、プロセッサ・コンポーネントは、連続して実行されることを意図されているデータ・アクセス・コマンドのうちの複数のデータ・アクセス・コマンドをコマンド・セットへとグループ化することができ、データ・アクセス・コマンド同士が実行されることになる順序に従うコマンド・セット同士にわたる順序でそうすることができる。前述のように、データ・アクセス・コマンドのうちのいくつが共にグループ化されて、コマンド・セットのうちのそれぞれを形成するかは、さまざまな要因によって特定されることが可能であり、それらの要因は、単一のコマンド・セットへとグループ化されることが可能であるデータ・アクセス・コマンドを受信及び/又は実行するのに必要とされる時間の量、単一のコマンド・セット内に含まれることが可能であるデータ・アクセス・コマンドの最大数量、内部でデータ・アクセス・コマンド同士が順序から外れて実行されることが可能である少なくとも1つのコマンド・セットの形成を可能にすることができるデータ・アクセス・コマンドの特徴を含むが、それらには限定されない。
2140において、プロセッサ・コンポーネントは、セットIDをコマンド・セットに割り振ることができ、それらのセットIDも、データ・アクセス・コマンドの実行の順序に従うコマンド・セットの順序の表示を提供することができる。シーケンシャルIDと同様に、セットIDも、コマンド・セット内のデータ・アクセス・コマンド同士が実行されることになる順序に従う増加又は減少する序数の順序でコマンド・セットに割り振られる序数であることが可能である。2150において、プロセッサ・コンポーネントは、コマンド・セットをレプリケートして、マッチするコマンド・セットのセットIDにマッチするセットIDを割り振られているマッチするレプリカ・コマンド・セットを生成することができ、それぞれのレプリカ・コマンド・セットは、1つ又は複数のレプリカ・データ・アクセス・コマンドを含み、それらのレプリカ・データ・アクセス・コマンドは、マッチするコマンド・セットのデータ・アクセス・コマンドにマッチし、マッチするシーケンスIDを割り振られている。
2160において、プロセッサ・コンポーネントは、それぞれのレプリカ・コマンド・セットを諸部分へと分割することができ、それらの部分はそれぞれ、別々のネットワーク・パケット内に含まれて、ストレージ・クラスタ・システムの別のクラスタの第2のHAグループに属する別のアクティブ・ノードへ送信されることになる。そのような別のアクティブ・ノードの一例は、ストレージ・クラスタ・システム1000のクラスタ1300aのHAグループ1600ab又は1600cdのうちの一方のノード300a〜dのうちの別のノードであることが可能である。
2170において、ネットワーク・パケットは、レプリカ・コマンド・セットのその含まれる部分が属するレプリカ・コマンド・セットのセットIDを含むように形成されることが可能である。2180において、ネットワーク・パケットは、その別のアクティブ・ノードへ、少なくともそれらの2つのアクティブ・ノードの間において延在しているクラスタ間相互接続を介して送信されることが可能である。前述のように、そのようなクラスタ間相互接続は、クライアント相互接続が延在する際に経由するのと同じネットワークを通じて延在することができる。
2190において、プロセッサ・コンポーネントは、コマンド・セットのうちのそれぞれのデータ・アクセス・コマンドを実行することができる。そうする際に、プロセッサ・コンポーネントは、それぞれのコマンド・セットのすべてのデータ・アクセス・コマンドが、次なるコマンド・セットのデータ・アクセス・コマンドの実行を開始する前に完全に実行される限り、データ・アクセス・コマンド同士を、それらの実行の意図されている順序に従う順序で実行することができる。しかしながら、コマンド・セットのうちの1つ又は複数の中で、いくつかの実施形態においては、プロセッサ・コンポーネントがデータ・アクセス・コマンド同士の実行の順序に従わない場合がある。
図12は、ロジック・フロー2200の一実施形態を示している。ロジック・フロー2200は、本明細書において説明されている1つ又は複数の実施形態によって実行されるオペレーションのうちのいくつか又はすべてを代表することが可能である。さらに具体的には、ロジック・フロー2200は、少なくともコントロール・ルーチン640を実行する際にプロセッサ・コンポーネント650によって実行される、及び/又はデータ・ストレージ・モジュール(Dモジュール)600のその他のコンポーネントによって実行されるオペレーションを示すことができる。
2210において、ストレージ・クラスタ・システムの1つのクラスタの第1のHAグループのアクティブ・ノードのDモジュールのプロセッサ・コンポーネントが、そのアクティブ・ノードがクライアント相互接続を介して結合されているクライアント・デバイスから、指定されている一連の先に受信されたデータ・アクセス・コマンドの実行をキャンセルするためのデータ・アクセス・コマンドを受信することができる。そのようなアクティブ・ノードの一例は、ストレージ・クラスタ・システム1000のクラスタ1300aのHAグループ1600ab又は1600cdのうちの1つのノード300a〜dのうちの1つであることが可能であり、そのようなノードは、クライアント相互接続199を介してクライアント・デバイス100のうちの1つ又は複数に結合されることが可能である。
2220において、プロセッサ・コンポーネントは、少なくとも、データ・アクセス・コマンドのうちのすべてが、クライアント・デバイスから受信されたキャンセル・コマンドにおいて指定されているデータ・アクセス・コマンドの中にあるコマンド・セットのセットIDを特定し、それによって、それらのコマンド・セット及びそれらのマッチするレプリカ・コマンド・セットを識別することができる。説明されているように、それぞれのコマンド・セットごとに、マッチするレプリカ・コマンド・セットが存在することが可能であり、それらのレプリカ・コマンド・セットのそれぞれは、マッチするセットIDを割り振られることが可能である。
2230において、プロセッサ・コンポーネントは、クライアント・デバイスからのキャンセル・コマンドにおいて指定されているデータ・アクセス・コマンドの現在進行中のいかなる実行も停止し、プロセッサ・コンポーネントは、2240において、クライアント・デバイスからのキャンセル・コマンドにおいて指定されているデータ・アクセス・コマンドに関連付けられているものとして識別されたばかりのコマンド・セットを破棄することができる。前に説明したように、コマンド・セットの破棄は、そのデータ・アクセス・コマンド(少なくとも、まだ実行されていないデータ・アクセス・コマンド)を実行することを差し控えること、及び/又はコマンド・セットが格納されているロケーションが、実行されることになるデータ・アクセス・コマンドを含む別のコマンド・セットで上書きされることを可能にすることを伴うことができる。
2250において、プロセッサ・コンポーネントは、クラスタ間相互接続を介して、ストレージ・クラスタ・システムの別のクラスタの第2のHAグループに属する別のアクティブ・ノードへキャンセル・コマンドを送信することができる。このキャンセル・コマンドは、レプリカ・データ・アクセス・コマンドのうちのすべてが、クライアント・デバイスから受信されたキャンセル・コマンドにおいて指定されているデータ・アクセス・コマンドの中にあるデータ・アクセス・コマンドにマッチするレプリカ・コマンド・セットのセットIDの表示を含むことができる。そのような別のアクティブ・ノードの一例は、ストレージ・クラスタ・システム1000のクラスタ1300aのHAグループ1600ab又は1600cdのうちの1つのノード300a〜dのうちの別の1つであることが可能であり、それらの2つのアクティブ・ノードは、クラスタ間相互接続399を介して結合されることが可能である。
図13は、ロジック・フロー2300の一実施形態を示している。ロジック・フロー2300は、本明細書において説明されている1つ又は複数の実施形態によって実行されるオペレーションのうちのいくつか又はすべてを代表することが可能である。さらに具体的には、ロジック・フロー2300は、少なくともコントロール・ルーチン640を実行する際にプロセッサ・コンポーネント650によって実行される、及び/又はデータ・ストレージ・モジュール(Dモジュール)600のその他のコンポーネントによって実行されるオペレーションを示すことができる。
2310において、ストレージ・クラスタ・システムの1つのクラスタの第2のHAグループのアクティブ・ノードのDモジュールのプロセッサ・コンポーネントが、ネットワークを通じて延在しているクラスタ間相互接続を通じて、そのストレージ・クラスタ・システムの別のクラスタの第1のHAグループに属する別のアクティブ・ノードから、レプリカ・コマンド・セットの諸部分を伝達するネットワーク・パケットを受信することができる。そのようなアクティブ・ノードの例はそれぞれ、ストレージ・クラスタ・システム1000のクラスタ1300aのHAグループ1600ab若しくは1600cdのうちの1つの、又はストレージ・クラスタ・システム1000のクラスタ1300zのHAグループ1600yzのノード300a〜dのうちの1つであることが可能であり、そのようなノード同士は、クラスタ間相互接続399を介することによって結合されることが可能である。
2320において、プロセッサ・コンポーネントは、レプリカ・コマンド・セットのその含まれている部分がどんなレプリカ・コマンド・セットに属するかを示す、それぞれのそのようなネットワーク・パケット内に含まれているセットIDを、レプリカ・データ・アクセス・コマンドが完全に実行されているレプリカ・コマンド・セットに関連付けられている1つ又は複数のセットIDの表示に照らして分析することができる。前述のように、そのような比較は、冗長であるレプリカ・コマンド・セットの一部分を含む少なくともいくつかのネットワーク・パケットの識別を可能にする。なぜなら、そのレプリカ・コマンド・セットは、既に完全に再構築されており、そのレプリカ・データ・アクセス・コマンドのうちのすべては、完全に実行されており、それによって、そのようなレプリカ・コマンド・セットの一部分を伝達しているネットワーク・パケットを冗長にしている。説明されているように、2つのアクティブ・ノードを結合しているクラスタ間相互接続がルーティングされる際に経由するネットワークのさまざまな特徴によって、それらの2つのノードの間においてやり取りされるネットワーク・パケットから冗長なネットワーク・パケットが生成される場合がある。
2330において、プロセッサ・コンポーネントは、レプリカ・コマンド・セットの冗長な部分を伝達していることに起因して冗長と識別されるネットワーク・パケットを破棄し、2340において、1つ又は複数のレプリカ・コマンド・セットを再構築する際に、破棄されていないネットワーク・パケットを採用する。説明されているように、2つのアクティブ・ノードを結合しているクラスタ間相互接続がルーティングされる際に経由するネットワークのさまざまな特徴によって、ネットワーク・パケット同士が、アクティブ・ノードにおいて、他方のアクティブ・ノードがそれらのネットワーク・パケットを送信した順序とは異なる順序で受信される場合がある。結果として、レプリカ・コマンド・セットのうちの複数のレプリカ・コマンド・セットが、順序から外れて受信される可能性があるレプリカ・コマンド・セットの諸部分から再構築されている最中となる場合がある。
2350において、プロセッサ・コンポーネントは、レプリカ・コマンド・セットのうちのそれぞれのレプリカ・データ・アクセス・コマンドを実行することができる。そうする際に、プロセッサ・コンポーネントは、それぞれのレプリカ・コマンド・セットのすべてのレプリカ・データ・アクセス・コマンドが、次なるレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドの実行を開始する前に完全に実行される限り、レプリカ・データ・アクセス・コマンド同士を、それらの実行の意図されている順序に従う順序で実行することができる。しかしながら、レプリカ・コマンド・セットのうちの1つ又は複数の中で、いくつかの実施形態においては、プロセッサ・コンポーネントがレプリカ・データ・アクセス・コマンド同士の実行の順序に従わない場合がある。
2360において、それぞれのレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドが完全に実行されたときに、プロセッサ・コンポーネントは、それらのレプリカ・コマンド・セットのうちのそれぞれのセットIDを、レプリカ・データ・アクセス・コマンドが完全に実行されているレプリカ・コマンド・セットに関連付けられているセットIDの表示に加えることができる。この方法においては、破棄すべき冗長なネットワーク・パケットを識別するために2320において採用されているセットIDのこの表示は、更新されることが可能である。
図14は、ロジック・フロー2400の一実施形態を示している。ロジック・フロー2400は、本明細書において説明されている1つ又は複数の実施形態によって実行されるオペレーションのうちのいくつか又はすべてを代表することが可能である。さらに具体的には、ロジック・フロー2400は、少なくともコントロール・ルーチン640を実行する際にプロセッサ・コンポーネント650によって実行される、及び/又はデータ・ストレージ・モジュール(Dモジュール)600のその他のコンポーネントによって実行されるオペレーションを示すことができる。
2410において、ストレージ・クラスタ・システムの1つのクラスタの第2のHAグループのアクティブ・ノードのDモジュールのプロセッサ・コンポーネントが、ネットワークを通じて延在しているクラスタ間相互接続を通じて、そのストレージ・クラスタ・システムの別のクラスタの第1のHAグループに属する別のアクティブ・ノードから、指定されているレプリカ・コマンド・セット内のすべてのレプリカ・データ・アクセス・コマンドの実行をキャンセルするためのキャンセル・コマンドを受信することができる。そのようなアクティブ・ノードの例はそれぞれ、ストレージ・クラスタ・システム1000のクラスタ1300aのHAグループ1600ab若しくは1600cdのうちの1つの、又はストレージ・クラスタ・システム1000のクラスタ1300zのHAグループ1600yzのノード300a〜dのうちの1つであることが可能であり、そのようなノード同士は、クラスタ間相互接続399を介することによって結合されることが可能である。指定されるレプリカ・コマンド・セットは、キャンセル・コマンド内に含まれる、それらのレプリカ・コマンド・セットに割り振られているセットIDの表示によって、キャンセル・コマンド内で指定されることも可能である。
2420において、プロセッサ・コンポーネントは、指定されているレプリカ・コマンド・セットの中にあるレプリカ・データ・アクセス・コマンドの現在進行中のいかなる実行も停止し、プロセッサ・コンポーネントは、2430において、指定されているコマンド・セットを破棄することができる。前に説明したように、コマンド・セットの破棄は、そのデータ・アクセス・コマンド(少なくとも、まだ実行されていないデータ・アクセス・コマンド)を実行することを差し控えること、及び/又はコマンド・セットが格納されているロケーションが、実行されることになるデータ・アクセス・コマンドを含む別のコマンド・セットで上書きされることを可能にすることを伴うことができる。
2440において、プロセッサ・コンポーネントは、レプリカ・コマンドの一部分を含む、その他のアクティブ・ノードから受信されたそれぞれのネットワーク・パケット内に含まれているセットIDを、指定されているレプリカ・コマンド・セットのセットIDに照らして分析することができる。前述のように、そのような比較は、冗長であるレプリカ・コマンド・セットの一部分を含む少なくともいくつかのネットワーク・パケットの識別を可能にする。キャンセル・コマンドの受信の結果として、指定されているレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドがもはや実行されることにならないとすると、指定されているレプリカ・コマンド・セットのうちの1つの一部分を伝達しているいかなるネットワーク・パケットも、事実上、冗長とされる。なぜなら、そのようなネットワーク・パケット内に含めて伝達されているそのような部分から、指定されているレプリカ・コマンド・セットのうちのいずれを再構築することによっても、何の目的も果たされないからである。2450において、指定されているレプリカ・コマンド・セットのうちの1つ又は複数のそのような冗長な部分を伝達しているそのような冗長なネットワーク・パケットは、破棄される。
図15は、前に説明したようなさまざまな実施形態を実施するのに適している例示的な処理アーキテクチャー3000の一実施形態を示している。さらに具体的には、処理アーキテクチャー3000(又はその異形)は、クライアント・デバイス100、Mモジュール400、Nモジュール500、Dモジュール600、又は、ストレージ・デバイスのセット800ab、800cd、若しくは800yzのうちの1つ又は複数の一部として実装されることが可能である。処理アーキテクチャー3000のコンポーネントは、参照番号を与えられており、それらの参照番号においては、最後の2つの数字が、モジュール400、500、及び600の一部として前に示され説明されているコンポーネントのうちの少なくともいくつかの参照番号の最後の2つの数字に対応しているということに留意されたい。これは、それぞれのコンポーネント同士を相関付けることに対する補助として行われている。
処理アーキテクチャー3000は、デジタル処理において一般に採用されるさまざまな要素を含み、それらの要素は、1つ又は複数のプロセッサ、マルチコア・プロセッサ、コプロセッサ、メモリ・ユニット、チップセット、コントローラ、周辺機器、インターフェース、オシレータ、タイミング・デバイス、ビデオ・カード、オーディオ・カード、マルチメディア入力/出力(I/O)コンポーネント、電源などを含むが、それらには限定されない。本出願において使用される際には、「システム」及び「コンポーネント」という用語は、デジタル処理が実行されるコンピューティング・デバイスのエンティティーを指すことを意図されており、そのエンティティーは、ハードウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、又は実行中のソフトウェアであり、それらの例は、この示されている例示的な処理アーキテクチャーによって提供される。たとえば、コンポーネントは、プロセッサ・コンポーネント上で稼働しているプロセス、プロセッサ・コンポーネントそのもの、光及び/若しくは磁気ストレージ・メディアを採用することができるストレージ・デバイス(たとえば、ハード・ディスク・ドライブ、アレイにおける複数のストレージ・ドライブなど)、ソフトウェア・オブジェクト、実行可能な命令のシーケンス、実行のスレッド、プログラム、並びに/又はコンピューティング・デバイス全体(たとえば、コンピュータ全体)であることが可能であるが、それらには限定されない。例として、サーバ上で稼働しているアプリケーション、及びそのサーバは両方とも、コンポーネントであることが可能である。1つ又は複数のコンポーネントが1つのプロセス及び/又は実行のスレッド内に存在することが可能であり、1つのコンポーネントを1つのコンピューティング・デバイス上に局在させること、及び/又は複数のコンピューティング・デバイスの間に分散させることが可能である。さらに、コンポーネント同士は、さまざまなタイプの通信メディアによって互いに通信可能に結合されて、オペレーションを調整することが可能である。その調整は、情報の一方向の又は双方向のやり取りを含むことができる。たとえば、コンポーネント同士は、通信メディアを介して通信される信号の形態で情報を通信することができる。それらの情報は、1つ又は複数の信号線に割り当てられる信号として実装されることが可能である。メッセージ(コマンド、ステータス、アドレス、又はデータ・メッセージを含む)は、そのような信号のうちの1つであることが可能であり、又は複数のそのような信号であることが可能であり、さまざまな接続及び/又はインターフェースのうちのいずれかを通じて順次又は実質的に並列に送信されることが可能である。
示されているように、処理アーキテクチャー3000を実装する際に、コンピューティング・デバイスは、少なくとも、プロセッサ・コンポーネント950と、内蔵ストレージ960と、その他のデバイスへのインターフェース990と、カップリング959とを含む。説明されるように、意図されている使用及び/又は使用の条件を含めて、処理アーキテクチャー3000を実装するコンピューティング・デバイスのさまざまな側面に応じて、そのようなコンピューティング・デバイスは、さらなるコンポーネントをさらに含むことができ、それらのコンポーネントは、ディスプレイ・インターフェース985などであるが、それらには限定されない。
カップリング959は、1つ又は複数のバス、ポイントツーポイント相互接続、トランシーバ、バッファ、クロスポイント・スイッチ、及び/若しくはその他のコンダクタ、並びに/又は、少なくともプロセッサ・コンポーネント950を内蔵ストレージ960に通信可能に結合するロジックを含む。カップリング959は、プロセッサ・コンポーネント950を、インターフェース990、オーディオ・サブシステム970、及びディスプレイ・インターフェース985のうちの1つ又は複数に(これら及び/又はその他のコンポーネントのうちのどれがまた存在しているかに応じて)さらに結合することができる。プロセッサ・コンポーネント950がカップリング959によってそのように結合されている状態で、プロセッサ・コンポーネント950は、上で詳細に説明されているタスクのうちのさまざまなタスクを実行し、上述のコンピューティング・デバイスのうちのどのコンピューティング・デバイスに関しても、処理アーキテクチャー3000を実施することができる。カップリング959は、信号を光学的に及び/又は電気的に伝達することができるさまざまなテクノロジー又はテクノロジー同士の組合せのうちのいずれかを用いて実装されることが可能である。さらに、カップリング959の少なくとも諸部分は、さまざまな業界標準のうちのいずれかに準拠するタイミング及び/又はプロトコルを採用することができ、それらの業界標準は、アクセラレイテッド・グラフィックス・ポート(AGP)、カードバス、エクステンデッド・インダストリー・スタンダード・アーキテクチャー(E−ISA)、マイクロ・チャネル・アーキテクチャー(MCA)、ヌーバス、ペリフェラル・コンポーネント・インターコネクト(エクステンデッド)(PCI−X)、PCIエクスプレス(PCI−E)、パーソナル・コンピュータ・メモリ・カード・インターナショナル・アソシエーション(PCMCIA)バス、ハイパートランスポート(商標)、クイックパスなどを含むが、それらには限定されない。
前述のように、プロセッサ・コンポーネント950(プロセッサ・コンポーネント450、550、及び650に対応する)は、さまざまなテクノロジーのうちのいずれかを採用している、及び複数の方法のうちのいずれかで物理的に結合されている1つ又は複数のコアとともに実装されているさまざまな市販のプロセッサのうちのいずれかを含むことができる。
前述のように、内蔵ストレージ960(ストレージ460、560、及び660に対応する)は、さまざまなテクノロジー又はテクノロジー同士の組合せのうちのいずれかに基づく1つ又は複数の個別のストレージ・デバイスから構成されることが可能である。さらに具体的には、示されているように、内蔵ストレージ960は、揮発性ストレージ961(たとえば、1つ又は複数の形態のRAMテクノロジーに基づくソリッド・ステート・ストレージ)、不揮発性ストレージ962(たとえば、コンテンツを保存するのに電力の絶え間ない供給を必要としないソリッド・ステート・ストレージ、強磁性のストレージ、又はその他のストレージ)、及び取り外し可能なメディア・ストレージ963(たとえば、コンピューティング・デバイス同士の間において情報を伝達することができる取り外し可能なディスク又はソリッド・ステート・メモリ・カード・ストレージ)のうちの1つ又は複数を含むことができる。内蔵ストレージ960を、複数の個別のタイプのストレージを含む可能性があるものとしてこのように示しているのは、コンピューティング・デバイスにおいては複数のタイプのストレージ・デバイスがよく使用されているという認識においてのことであり、1つのタイプは、相対的に高速な読み出し能力及び書き込み能力を提供して、プロセッサ・コンポーネント950によってデータをより高速に操作することを可能にし(ただし、電力を絶えず必要とする「揮発性」のテクノロジーを使用する可能性があり)、その一方で別のタイプは、相対的に高い密度の不揮発性ストレージを提供する(ただし、相対的に低速の読み出し能力及び書き込み能力を提供する可能性が高い)。
別々のテクノロジーを採用している別々のストレージ・デバイスが別々の特徴を有している場合が多いとすると、そのような別々のストレージ・デバイスが、別々のインターフェースを通じて別々のストレージ・デバイスに結合されている別々のストレージ・コントローラを通じてコンピューティング・デバイスのその他の部分に結合されることもよくある。例として、揮発性ストレージ961が存在していて、RAMテクノロジーに基づいている場合には、揮発性ストレージ961は、おそらくは行及び列のアドレッシングを採用している揮発性ストレージ961への適切なインターフェースを提供するストレージ・コントローラ965aを通じてカップリング959に通信可能に結合されることが可能であり、ストレージ・コントローラ965aは、揮発性ストレージ961内に格納されている情報を保存する際の補助となるように行のリフレッシング及び/又はその他のメンテナンス・タスクを実行することができる。別の例として、不揮発性ストレージ962が存在していて、1つ又は複数の強磁性ディスク・ドライブ及び/又はソリッドステート・ディスク・ドライブを含んでいる場合には、不揮発性ストレージ962は、おそらくは情報のブロックの、並びに/又はシリンダ及びセクタのアドレッシングを採用している不揮発性ストレージ962への適切なインターフェースを提供するストレージ・コントローラ965bを通じてカップリング959に通信可能に結合されることが可能である。さらに別の例として、取り外し可能なメディア・ストレージ963が存在していて、マシン可読ストレージ・メディア969の1つ又は複数の断片を採用している1つ又は複数の光ディスク・ドライブ及び/又はソリッドステート・ディスク・ドライブを含んでいる場合には、取り外し可能なメディア・ストレージ963は、おそらくは情報のブロックのアドレッシングを採用している取り外し可能なメディア・ストレージ963への適切なインターフェースを提供するストレージ・コントローラ965cを通じてカップリング959に通信可能に結合されることが可能であり、ストレージ・コントローラ965cは、マシン可読ストレージ・メディア969の寿命を延ばすことに固有の様式で、読み出しオペレーション、消去オペレーション、及び書き込みオペレーションを調整することができる。
揮発性ストレージ961又は不揮発性ストレージ962のうちの一方又は他方は、それぞれが基づいているテクノロジーに応じて、プロセッサ・コンポーネント950によって実行可能な命令のシーケンスを含むルーチンが格納されることが可能であるマシン可読ストレージ・メディアの形態の製品を含むことができる。例として、不揮発性ストレージ962が、強磁性ベースのディスク・ドライブ(たとえば、いわゆる「ハード・ドライブ」)を含んでいる場合には、それぞれのそのようなディスク・ドライブは典型的に、1つ又は複数の回転プラッタを採用しており、それらの回転プラッタ上には、フロッピー・ディスケットなどのストレージ・メディアに似ている様式で磁気応答性粒子のコーティングが配置され、さまざまなパターンで磁気的に配向されて、命令のシーケンスなどの情報を格納する。別の例として、不揮発性ストレージ962は、ソリッドステート・ストレージ・デバイスのバンクから構成されて、コンパクト・フラッシュ・カードに似ている様式で命令のシーケンスなどの情報を格納することが可能である。また、別々の時点でコンピューティング・デバイスにおいて別々のタイプのストレージ・デバイスを採用して、実行可能なルーチン及び/又はデータを格納することがよくある。したがって、プロセッサ・コンポーネント950によって実行されることになる命令のシーケンスを含むルーチンが、初めにマシン可読ストレージ・メディア969上に格納されることが可能であり、その後に、そのルーチンを長期格納のために不揮発性ストレージ962にコピーする際に、取り外し可能なメディア・ストレージ963が採用されることが可能であり、マシン可読ストレージ・メディア969及び/又は揮発性ストレージ961の継続的な存在を不要として、そのルーチンが実行される際にプロセッサ・コンポーネント950によるさらに迅速なアクセスを可能にする。
前述のように、インターフェース990(場合によっては、インターフェース490又は590に対応する)は、コンピューティング・デバイスを1つ又は複数のその他のデバイスに通信可能に結合するために採用されることが可能であるさまざまな通信テクノロジーのうちのいずれかに対応するさまざまなシグナリング・テクノロジーのうちのいずれかを採用することができる。また、さまざまな形態の有線シグナリング又は無線シグナリングのうちの一方又は両方が採用されて、プロセッサ・コンポーネント950が、場合によってはネットワーク(たとえば、ネットワーク999)又はネットワーク同士の相互接続されているセットを通じて、入力/出力デバイス(たとえば、示されている例示的なキーボード920又はプリンタ925)及び/又はその他のコンピューティング・デバイスと対話することを可能にすることができる。任意の1つのコンピューティング・デバイスによってしばしばサポートされなければならない複数のタイプのシグナリング及び/又はプロトコルの特徴は大幅に異なる場合が多いという認識において、インターフェース990は、複数の異なるインターフェース・コントローラ995a、995b、及び995cを含むものとして示されている。インターフェース・コントローラ995aは、さまざまなタイプの有線のデジタル・シリアル・インターフェース又は無線周波数無線インターフェースのうちのいずれかを採用して、示されているキーボード920などのユーザ入力デバイスからの順次送信されたメッセージを受信することができる。インターフェース・コントローラ995bは、さまざまなケーブルベースの又は無線のシグナリング、タイミング、及び/又はプロトコルのうちのいずれかを採用して、示されているネットワーク999(おそらくは、1つ若しくは複数のリンクから構成されているネットワーク、より小さなネットワーク、又はおそらくはインターネット)を通じてその他のコンピューティング・デバイスにアクセスすることができる。インターフェース995cは、順次の又は並列な信号送信の使用を可能にするさまざまな導電性のケーブルのうちのいずれかを採用して、示されているプリンタ925へデータを伝達することができる。インターフェース990の1つ又は複数のインターフェース・コントローラを通じて通信可能に結合されることが可能であるデバイスのその他の例は、人の音をモニタして、それらの人が生み出すことができる声又はその他の音を介してそれらの人によって伝達されるコマンド及び/又はデータを受け取るためのマイクロフォン、リモコン、スタイラス・ペン、カード・リーダ、指紋リーダ、仮想現実対話グローブ、グラフィカル入力タブレット、ジョイスティック、その他のキーボード、網膜スキャナ、タッチ・スクリーンのタッチ入力コンポーネント、トラックボール、さまざまなセンサ、人の動きをモニタして、ジェスチャー及び/又は表情を介してそれらの人によって伝達されるコマンド及び/又はデータを受け取るためのカメラ若しくはカメラ・アレイ、レーザー・プリンタ、インクジェット・プリンタ、機械式ロボット、フライス盤などを含むが、それらには限定されない。
コンピューティング・デバイスが、ディスプレイ(たとえば、示されている例示的なディスプレイ980)に通信可能に結合されている(又はおそらくは、ディスプレイを実際に組み込んでいる)場合には、処理アーキテクチャー3000を実装するそのようなコンピューティング・デバイスは、ディスプレイ・インターフェース985を含むこともできる。ディスプレイに通信可能に結合する際に、より一般化されたタイプのインターフェースが採用されることが可能であるが、ディスプレイ上にさまざまな形態のコンテンツを視覚的に表示する際にしばしば必要とされるいくらか特化したさらなる処理、並びに使用されるケーブルベースのインターフェースのいくらか特化した性質によって、個別のディスプレイ・インターフェースの供給が望ましくなる場合が多い。ディスプレイ980の通信可能な結合においてディスプレイ・インターフェース985によって採用されることが可能である有線及び/又は無線のシグナリング・テクノロジーは、さまざまな業界標準のうちのいずれかに準拠するシグナリング及び/又はプロトコルを利用することができ、それらの業界標準は、さまざまなアナログ・ビデオ・インターフェース、デジタル・ビデオ・インターフェース(DVI)、ディスプレイポートなどのうちのいずれかを含むが、それらには限定されない。
より一般には、本明細書において説明され示されているコンピューティング・デバイスのさまざまな要素は、さまざまなハードウェア要素、ソフトウェア要素、又は両方の組合せを含むことができる。ハードウェア要素の例は、デバイス、ロジック・デバイス、コンポーネント、プロセッサ、マイクロプロセッサ、回路、プロセッサ・コンポーネント、回路要素(たとえば、トランジスタ、抵抗器、コンデンサ、インダクタなど)、集積回路、特定用途向け集積回路(ASIC)、プログラマブル・ロジック・デバイス(PLD)、デジタル・シグナル・プロセッサ(DSP)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、メモリ・ユニット、ロジック・ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセットなどを含むことができる。ソフトウェア要素の例は、ソフトウェア・コンポーネント、プログラム、アプリケーション、コンピュータ・プログラム、アプリケーション・プログラム、システム・プログラム、ソフトウェア開発プログラム、マシン・プログラム、オペレーティング・システム・ソフトウェア、ミドルウェア、ファームウェア、ソフトウェア・モジュール、ルーチン、サブルーチン、関数、メソッド、プロシージャー、ソフトウェア・インターフェース、アプリケーション・プログラム・インターフェース(API)、命令セット、コンピューティング・コード、コンピュータ・コード、コード・セグメント、コンピュータ・コード・セグメント、ワード、値、シンボル、又はそれらの任意の組合せを含むことができる。しかしながら、一実施形態がハードウェア要素を使用して実装されるか、及び/又はソフトウェア要素を使用して実装されるかを特定することは、所与の実施態様に関する要望に応じて、所望の計算速度、電力レベル、耐熱性、処理サイクル予算、入力データ・レート、出力データ・レート、メモリ・リソース、データ・バス・スピード、及びその他の設計又は実行上の制約など、任意の数の要因に従って変わる場合がある。
いくつかの実施形態は、「一実施形態」又は「実施形態」という表現をそれらの派生語と共に使用して説明されているかもしれない。これらの用語は、その実施形態に関連して記述されている特定の機能、構造、又は特徴が、少なくとも1つの実施形態に含まれているということを意味する。「一実施形態においては」というフレーズが、本明細書におけるさまざまな個所に登場しても、それらは、必ずしもすべて同じ実施形態を指しているとは限らない。さらに、いくつかの実施形態は、「結合される」及び「接続される」という表現をそれらの派生語と共に使用して説明されているかもしれない。これらの用語は、必ずしも互いにとっての同義語として意図されているわけではない。たとえば、いくつかの実施形態は、複数の要素が互いに直接の物理的な又は電気的な接触状態にあるということを示すために、「接続される」及び/又は「結合される」という用語を使用して説明されているかもしれない。しかしながら、「結合される」という用語は、複数の要素が互いに直接の接触状態にはないが、それでもなお互いに協力又は対話しているということを意味する場合もある。さらに、別々の実施形態からの態様同士又は要素同士が組み合わされることが可能である。
本開示の要約書は、技術的な開示の本質を読者が迅速に確認することを可能にするために提供されているということが強調される。要約書は、特許請求の範囲の範疇又は意味を解釈又は限定するためにこの要約書が使用されることはないという理解を伴って提示されている。加えて、前述の詳細な説明においては、本開示を簡潔にする目的で、さまざまな機能が単一の実施形態において共にグループ化されているということを見て取ることができる。開示のこの方法は、特許請求されている実施形態は、それぞれの請求項において明示的に列挙されているよりも多くの機能を必要とするという意図を反映していると解釈されるべきではない。むしろ、添付の特許請求の範囲が反映しているように、発明性のある主題は、単一の開示されている実施形態のすべての機能よりも少ない中に存在する。したがって、添付の特許請求の範囲は、これによって詳細な説明へと組み込まれており、それぞれの請求項は、個別の実施形態として単独で存立している。添付の特許請求の範囲においては、「including(含む)」及び「in which」という用語はそれぞれ、「comprising(含む)」及び「wherein」というそれぞれの用語の平易な英語での同義語として使用されている。その上、「第1の」、「第2の」、「第3の」などの用語は、ラベルとして使用されているにすぎず、それらの対象に数的要件を課すことを意図されているものではない。
上述されている内容は、開示されているアーキテクチャーの例を含んでいる。もちろん、コンポーネント及び/又は方法の考えられるすべての組合せを説明することは不可能であるが、当技術分野における標準的な技術者なら、多くのさらなる組合せ及び順列が可能であるということを認識することができる。したがって、この新規なアーキテクチャーは、添付の特許請求の範囲の趣旨及び範疇内に収まるすべてのそのような変更形態、修正形態、及び変形形態を包含することを意図されている。詳細な開示は次いで、さらなる実施形態に関連する例を提供することに移る。以降で提供されている例は、限定的であることを意図されているものではない。