(57)【特許請求の範囲】
【請求項１】
第１のノードのプロセッサ・コンポーネントであって、前記第１のノードが、クライアント・デバイス・データを格納する第１のストレージ・デバイスに結合されている、プロセッサ・コンポーネントと、
前記第１のストレージ・デバイス内に格納されている前記クライアント・デバイス・データについてレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドを実行するために、前記プロセッサ・コンポーネントによって実行するためのアクセス・コンポーネントであって、それぞれのレプリカ・コマンド・セットは、前記レプリカ・データ・アクセス・コマンドのセットを含んでおり、セット識別子（ＩＤ）を割り振られている、アクセス・コンポーネントと、
第２のノードからの第１のネットワーク・パケット内に含まれている第１のセットＩＤを分析し、前記第１のネットワーク・パケットによって伝達された第１のレプリカ・コマンド・セットの第１の部分が冗長であるかどうかを特定し、前記第１の部分が冗長であるかどうかの前記特定に基づいて少なくとも前記第１の部分から前記第１のレプリカ・コマンド・セットを再構築するために、前記プロセッサ・コンポーネントによって実行するための通信コンポーネントであって、前記第１のセットＩＤは、前記第１のレプリカ・コマンド・セットに割り振られており、前記第１の部分が前記第１のレプリカ・コマンド・セットのものであることを示すために前記第１のネットワーク・パケット内に含まれている、通信コンポーネントと、
前記アクセス・コンポーネントがレプリカ・データ・アクセス・コマンドの前記セットを完全に実行しているレプリカ・コマンド・セットのセットＩＤの表示を前記通信コンポーネントに提供するために、前記プロセッサ・コンポーネントによって実行するための順序付けコンポーネントと
を含む装置。
【請求項２】
前記レプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドは、前記第２のノードに結合されている第２のストレージ・デバイス内に格納されている前記クライアント・デバイス・データについて前記第２のノードによって実行されたコマンド・セットのデータ・アクセス・コマンドからレプリケートされ、前記アクセス・コンポーネントが、レプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドを実行して、前記第１のストレージ・デバイス内に格納されている前記クライアント・デバイス・データを変更することを、前記第２のノードが、マッチするコマンド・セットのデータ・アクセス・コマンドの照合を実行しそれに対応して前記第２のストレージ・デバイス内に格納されている前記クライアント・デバイス・データを変更することと少なくとも部分的に並列に行うように機能することが可能である、請求項１に記載の装置。
【請求項３】
前記通信コンポーネントが、前記第２のノードからの第２のネットワーク・パケット内に含まれている第２のセットＩＤを分析し、前記第２のネットワーク・パケットによって伝達された第２のレプリカ・コマンド・セットの第２の部分が冗長であるかどうかを特定し及び前記第２の部分が冗長であるかどうかの前記特定に基づいて前記第２のネットワーク・パケットを冗長なネットワーク・パケットとして破棄するように機能することが可能である、請求項１又は２に記載の装置。
【請求項４】
前記通信コンポーネントが、前記第２のノードからの複数のネットワーク・パケットで伝達されたレプリカ・コマンド・セットの複数の部分から複数のレプリカ・コマンド・セットを再構築し及び前記複数のネットワーク・パケットのうちのそれぞれのネットワーク・パケット内に含まれている前記セットＩＤと前記複数のレプリカ・コマンド・セットのうちのそれぞれのレプリカ・コマンド・セットに割り振られている前記セットＩＤとを利用して、前記複数の部分のうちのそれぞれの部分を前記複数のレプリカ・コマンド・セットのうちのレプリカ・コマンド・セットと照合するように機能することが可能であり、前記複数のレプリカ・コマンド・セットが、前記第１のレプリカ・コマンド・セットを含む、請求項１から３のいずれか一項に記載の装置。
【請求項５】
前記複数のレプリカ・コマンド・セットのそれぞれのレプリカ・データ・アクセス・コマンドが、前記レプリカ・データ・アクセス・コマンドの実行順序を示すシーケンスＩＤを割り振られており、前記複数のレプリカ・コマンド・セットに割り振られている前記セットＩＤが、前記シーケンスＩＤによって示されている前記実行順序に従う前記複数のレプリカ・コマンド・セット内における順序を示しており、前記順序付けコンポーネントが、前記複数のレプリカ・コマンド・セットのうちのそれぞれのレプリカ・コマンド・セットを前記アクセス・コンポーネントに提供することを、前記アクセス・コンポーネントが、それぞれのレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドを完全に実行する際の前記複数のレプリカ・コマンド・セット内における順序で行うように機能することが可能である、請求項４に記載の装置。
【請求項６】
前記アクセス・コンポーネントが、前記第１のレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドを前記実行順序で実行するように、及び前記複数のレプリカ・コマンド・セットのうちの第２のレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドを前記実行順序から外れて実行するように機能することが可能である、請求項５に記載の装置。
【請求項７】
前記複数のレプリカ・コマンド・セットの前記セットＩＤが、前記複数のレプリカ・コマンド・セット内における順序を示すために序数の昇順又は降順で前記複数のレプリカ・コマンド・セットのうちのそれぞれのレプリカ・コマンド・セットに割り振られている序数を含み、前記順序付けコンポーネントによって前記通信コンポーネントに提供されるセットＩＤの前記表示が、前記アクセス・コンポーネントがレプリカ・データ・アクセス・コマンドの前記セットを最も新たに完全に実行した前記レプリカ・コマンド・セットの前記セットＩＤを含み、前記通信コンポーネントが、前記順序付けコンポーネントによって提供された前記セットＩＤの前記序数を、前記第１のセットＩＤの前記序数と比較して、前記第１のレプリカ・コマンド・セットの前記第１の部分が冗長であるかどうかを特定するように機能することが可能である、請求項５又は６に記載の装置。
【請求項８】
第２のレプリカ・コマンド・セットのすべてのレプリカ・データ・アクセス・コマンドの実行がキャンセルされることになることを指定する前記第２のノードからのキャンセル・コマンドを前記第１のノードにおいて受信したことに応答して、前記順序付けコンポーネントは、前記通信コンポーネントへの前記表示において提供された前記セットＩＤの前記序数をインクリメント又はデクリメントして、前記通信コンポーネントに、（ｉ）前記第２のノードからの第２のネットワーク・パケットで伝達された前記第２のレプリカ・コマンド・セットの第２の部分が冗長な部分であると特定すること、及び（ｉｉ）前記第２の部分は冗長な部分であるという前記特定に基づいて前記第２のネットワーク・パケットを破棄すること、を行わせるように機能することが可能である、請求項７に記載の装置。
【請求項９】
第２のレプリカ・コマンド・セットのすべてのレプリカ・データ・アクセス・コマンドの実行がキャンセルされることになることを指定する前記第２のノードからのキャンセル・コマンドを前記第１のノードにおいて受信したことに応答して、前記通信コンポーネントは、前記第２のノードからの前記第２のレプリカ・コマンド・セットの一部分を伝達する第２のネットワーク・パケットを破棄するように機能することが可能である、請求項１から８のいずれか一項に記載の装置。
【請求項１０】
第２のレプリカ・コマンド・セットのすべてのレプリカ・データ・アクセス・コマンドの実行がキャンセルされることになることを指定する前記第２のノードからのキャンセル・コマンドを前記第１のノードにおいて受信したことに応答して、前記アクセス・コンポーネントは、前記第２のレプリカ・コマンド・セットの少なくとも１つのレプリカ・データ・アクセス・コマンドの実行を停止又は防止することを、前記第２のノードが、前記第２のレプリカ・コマンド・セットのレプリケート元であるコマンド・セットの少なくとも１つのデータ・アクセス・コマンドの実行を停止又は防止することと並列に行うように機能することが可能である、請求項１から９のいずれか一項に記載の装置。
【請求項１１】
第１のノードにおいて、前記第１のノードに結合されている第１のストレージ・デバイス内に格納されているクライアント・デバイス・データについてレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドを実行するステップであって、それぞれのレプリカ・コマンド・セットは、前記レプリカ・データ・アクセス・コマンドのセットを含んでおり、セット識別子（ＩＤ）を割り振られている、ステップと、
第２のノードからの第１のネットワーク・パケット内に含まれている第１のセットＩＤを、レプリカ・データ・アクセス・コマンドの前記セットが完全に実行されているレプリカ・コマンド・セットの少なくとも１つのセットＩＤと比較して、前記第１のネットワーク・パケットによって伝達された第１のレプリカ・コマンド・セットの第１の部分が冗長であるかどうかを特定するステップであって、前記第１のセットＩＤは、前記第１のレプリカ・コマンド・セットに割り振られており、前記第１の部分が前記第１のレプリカ・コマンド・セットのものであることを示すために前記第１のネットワーク・パケット内に含まれている、ステップと、
前記第１の部分が冗長であるかどうかの前記特定に基づいて少なくとも前記第１の部分から前記第１のレプリカ・コマンド・セットを再構築するステップと
を含む、コンピュータにより実行される方法。
【請求項１２】
前記レプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドは、前記第２のノードに結合されている第２のストレージ・デバイス内に格納されている前記クライアント・デバイス・データについて前記第２のノードによって実行されたコマンド・セットのデータ・アクセス・コマンドからレプリケートされ、前記方法は、レプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドを実行して、前記第１のストレージ・デバイス内に格納されている前記クライアント・デバイス・データを変更することを、前記第２のノードが、マッチするコマンド・セットのデータ・アクセス・コマンドの照合を実行して、それに対応して、前記第２のストレージ・デバイス内に格納されている前記クライアント・デバイス・データを変更することと、少なくとも部分的に並列に行うステップをさらに含む、請求項１１に記載の方法。
【請求項１３】
前記第２のノードからの第２のネットワーク・パケット内に含まれている第２のセットＩＤを、レプリカ・データ・アクセス・コマンドの前記セットが完全に実行されているレプリカ・コマンド・セットの前記少なくとも１つのセットＩＤと比較して、前記第２のネットワーク・パケットによって伝達された第２のレプリカ・コマンド・セットの第２の部分が冗長であるかどうかを特定するステップであって、前記第２のセットＩＤが、前記第２のレプリカ・コマンド・セットに割り振られており、前記第２の部分が前記第２のレプリカ・コマンド・セットのものであることを示すために前記第２のネットワーク・パケット内に含まれている、ステップと、
前記第２の部分が冗長であるかどうかの前記特定に基づいて前記第２のネットワーク・パケットを冗長なネットワーク・パケットとして破棄するステップと
をさらに含む、請求項１１又は１２に記載の方法。
【請求項１４】
前記第２のノードからの複数のネットワーク・パケットで伝達されたレプリカ・コマンド・セットの複数の部分から複数のレプリカ・コマンド・セットを再構築するステップと、
前記複数のネットワーク・パケットのうちのそれぞれのネットワーク・パケット内に含まれている前記セットＩＤと、前記複数のレプリカ・コマンド・セットのうちのそれぞれのレプリカ・コマンド・セットに割り振られている前記セットＩＤとを利用して、前記複数の部分のうちのそれぞれの部分を前記複数のレプリカ・コマンド・セットのうちのレプリカ・コマンド・セットと照合するステップであって、前記複数のレプリカ・コマンド・セットが、前記第１のレプリカ・コマンド・セットを含む、ステップと
をさらに含む、請求項１１から１３のいずれか一項に記載の方法。
【請求項１５】
前記複数のレプリカ・コマンド・セットのそれぞれのレプリカ・データ・アクセス・コマンドが、前記レプリカ・データ・アクセス・コマンドの実行順序を示すシーケンスＩＤを割り振られており、前記複数のレプリカ・コマンド・セットに割り振られている前記セットＩＤが、前記シーケンスＩＤによって示されている前記実行順序に従う前記複数のレプリカ・コマンド・セット内における順序を示しており、前記方法は、前記複数のレプリカ・コマンド・セットのうちのそれぞれのレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドの前記セットを、それぞれのレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドが完全に実行される際の前記複数のレプリカ・コマンド・セット内における前記順序で実行するように選択するステップをさらに含む、請求項１４に記載の方法。
【請求項１６】
前記第１のレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドを前記実行順序で実行するステップと、
前記複数のレプリカ・コマンド・セットのうちの第２のレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドを前記実行順序から外れて実行するステップと
をさらに含む、請求項１５に記載の方法。
【請求項１７】
前記複数のレプリカ・コマンド・セットの前記セットＩＤが、前記複数のレプリカ・コマンド・セット内における前記順序を示すために序数の昇順又は降順で前記複数のレプリカ・コマンド・セットのうちのそれぞれのレプリカ・コマンド・セットに割り振られている序数を含み、前記方法が、
前記複数のレプリカ・コマンド・セット内における順序に少なくとも従う順序でそれぞれのレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドが実行された際にカウンタの序数をインクリメント又はデクリメントして、レプリカ・データ・アクセス・コマンドの前記セットが最も新たに完全に実行された前記レプリカ・コマンド・セットの前記セットＩＤを示すステップと、
前記カウンタの前記序数を、前記第１のセットＩＤの前記序数と比較して、前記第１のレプリカ・コマンド・セットの前記第１の部分が冗長であるかどうかを特定するステップとをさらに含む、請求項１５又は１６に記載の方法。
【請求項１８】
第２のレプリカ・コマンド・セットのすべてのレプリカ・データ・アクセス・コマンドの実行がキャンセルされることになることを示す前記第２のノードからのキャンセル・コマンドを前記第１のノードにおいて受信するステップと、
前記キャンセル・コマンドを受信したことに応答して前記カウンタの前記序数をインクリメント又はデクリメントして、前記第２のノードからの前記第２のレプリカ・コマンド・セットの第２の部分を伝達する第２のネットワーク・パケットの第２のＩＤの比較を引き起こし、前記第２の部分が冗長な部分であるという特定に至るステップであって、前記第２のネットワーク・パケットは、前記第２の部分が冗長な部分であるという前記特定に基づいて破棄される、ステップと
をさらに含む、請求項１７に記載の方法。
【請求項１９】
第２のレプリカ・コマンド・セットのすべてのレプリカ・データ・アクセス・コマンドの実行がキャンセルされることになることを示す前記第２のノードからのキャンセル・コマンドを前記第１のノードにおいて受信するステップと、
前記キャンセル・コマンドを受信したことに応答して前記第２のレプリカ・コマンド・セットの少なくとも１つのレプリカ・データ・アクセス・コマンドの実行を停止又は防止することを、前記第２のノードが、前記第２のレプリカ・コマンド・セットのレプリケート元であるコマンド・セットの少なくとも１つのデータ・アクセス・コマンドの実行を停止又は防止することと、並列に行うステップと
をさらに含む、請求項１１から１８のいずれか一項に記載の方法。
【請求項２０】
前記第１のノードと前記第２のノードとを結合している、及びネットワークを通じて延在しているクラスタ間相互接続から前記レプリカ・コマンド・セットを前記第１のノードにおいて受信するステップをさらに含む、請求項１１から１９のいずれか一項に記載の方法。
【請求項２１】
命令を含む少なくとも１つのコンピュータ読み取り可能な記憶媒体であって、前記命令は、プロセッサ・コンポーネントによって実行される場合に：
第１のノードにおいて、前記第１のノードに結合されている第１のストレージ・デバイス内に格納されているクライアント・デバイス・データについてレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドを実行するステップであり、それぞれのレプリカ・コマンド・セットは、前記レプリカ・データ・アクセス・コマンドのセットを含んでおり、セット識別子（ＩＤ）を割り振られている、ステップと、
第２のノードからの第１のネットワーク・パケット内に含まれている第１のセットＩＤを、レプリカ・データ・アクセス・コマンドの前記セットが完全に実行されているレプリカ・コマンド・セットの少なくとも１つのセットＩＤと比較して、前記第１のネットワーク・パケットによって伝達された第１のレプリカ・コマンド・セットの第１の部分が冗長であるかどうかを特定するステップであり、前記第１のセットＩＤは、前記第１のレプリカ・コマンド・セットに割り振られており、前記第１の部分が前記第１のレプリカ・コマンド・セットのものであることを示すために前記第１のネットワーク・パケット内に含まれている、ステップと、
前記第１の部分が冗長であるかどうかの前記特定に基づいて少なくとも前記第１の部分から前記第１のレプリカ・コマンド・セットを再構築するステップと
を前記プロセッサ・コンポーネントに実行させる、記憶媒体。
【請求項２２】
前記レプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドは、前記第２のノードに結合されている第２のストレージ・デバイス内に格納されている前記クライアント・デバイス・データについて前記第２のノードによって実行されたコマンド・セットのデータ・アクセス・コマンドからレプリケートされ、前記プロセッサ・コンポーネントが、レプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドを実行して、前記第１のストレージ・デバイス内に格納されている前記クライアント・デバイス・データを変更することを、前記第２のノードが、マッチするコマンド・セットのデータ・アクセス・コマンドの照合を実行しそれに対応して前記第２のストレージ・デバイス内に格納されている前記クライアント・デバイス・データを変更することと、少なくとも部分的に並列に行うステップを行わされる、請求項２１に記載の記憶媒体。
【請求項２３】
前記プロセッサ・コンポーネントが、
前記第２のノードからの第２のネットワーク・パケット内に含まれている第２のセットＩＤを、レプリカ・データ・アクセス・コマンドの前記セットが完全に実行されているレプリカ・コマンド・セットの前記少なくとも１つのセットＩＤと比較して、前記第２のネットワーク・パケットによって伝達された第２のレプリカ・コマンド・セットの第２の部分が冗長であるかどうかを特定するステップであって、前記第２のセットＩＤが、前記第２のレプリカ・コマンド・セットに割り振られており、前記第２の部分が前記第２のレプリカ・コマンド・セットのものであることを示すために前記第２のネットワーク・パケット内に含まれている、ステップと、
前記第２の部分が冗長であるかどうかの前記特定に基づいて前記第２のネットワーク・パケットを冗長なネットワーク・パケットとして破棄するステップとを行わされる、請求項２１又は２２に記載の記憶媒体。
【請求項２４】
前記プロセッサ・コンポーネントが、
前記第２のノードからの複数のネットワーク・パケットで伝達されたレプリカ・コマンド・セットの複数の部分から複数のレプリカ・コマンド・セットを再構築するステップと、
前記複数のネットワーク・パケットのうちのそれぞれのネットワーク・パケット内に含まれている前記セットＩＤと、前記複数のレプリカ・コマンド・セットのうちのそれぞれのレプリカ・コマンド・セットに割り振られている前記セットＩＤとを利用して、前記複数の部分のうちのそれぞれの部分を前記複数のレプリカ・コマンド・セットのうちのレプリカ・コマンド・セットと照合するステップであって、前記複数のレプリカ・コマンド・セットが、前記第１のレプリカ・コマンド・セットを含む、ステップとを行わされる、請求項２１から２３のいずれか一項に記載の記憶媒体。
【請求項２５】
前記複数のレプリカ・コマンド・セットのそれぞれのレプリカ・データ・アクセス・コマンドが、前記レプリカ・データ・アクセス・コマンドの実行順序を示すシーケンスＩＤを割り振られており、前記複数のレプリカ・コマンド・セットに割り振られている前記セットＩＤが、前記シーケンスＩＤによって示されている前記実行順序に従う前記複数のレプリカ・コマンド・セット内における順序を示しており、前記プロセッサ・コンポーネントが、前記複数のレプリカ・コマンド・セットのうちのそれぞれのレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドの前記セットを、それぞれのレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドが完全に実行される際の前記複数のレプリカ・コマンド・セット内における前記順序で実行するように選択するステップを行わされる、請求項２４に記載の記憶媒体。
【請求項２６】
前記プロセッサ・コンポーネントが、
前記第１のレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドを前記実行順序で実行するステップと、
前記複数のレプリカ・コマンド・セットのうちの第２のレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドを前記実行順序から外れて実行するステップとを行わされる、請求項２５に記載の記憶媒体。
【請求項２７】
前記複数のレプリカ・コマンド・セットの前記セットＩＤが、前記複数のレプリカ・コマンド・セット内における前記順序を示すために序数の昇順又は降順で前記複数のレプリカ・コマンド・セットのうちのそれぞれのレプリカ・コマンド・セットに割り振られている序数を含み、前記プロセッサ・コンポーネントが、
前記複数のレプリカ・コマンド・セット内における順序に少なくとも従う順序でそれぞれのレプリカ・コマンド・セットの前記レプリカ・データ・アクセス・コマンドが実行された際にカウンタの序数をインクリメント又はデクリメントして、レプリカ・データ・アクセス・コマンドの前記セットが最も新たに完全に実行された前記レプリカ・コマンド・セットの前記セットＩＤを示すステップと、
前記カウンタの前記序数を、前記第１のセットＩＤの前記序数と比較して、前記第１のレプリカ・コマンド・セットの前記第１の部分が冗長であるかどうかを特定するステップとを行わされる、請求項２５又は２６に記載の記憶媒体。
【請求項２８】
前記プロセッサ・コンポーネントが、
第２のレプリカ・コマンド・セットのすべてのレプリカ・データ・アクセス・コマンドの実行がキャンセルされることになることを示す前記第２のノードからのキャンセル・コマンドを前記第１のノードにおいて受信するステップと、
前記キャンセル・コマンドを受信したことに応答して前記カウンタの前記序数をインクリメント又はデクリメントして、前記第２のノードからの前記第２のレプリカ・コマンド・セットの第２の部分を伝達する第２のネットワーク・パケットの第２のＩＤの比較を引き起こし、前記第２の部分が冗長な部分であるという特定に至るステップであって、前記第２のネットワーク・パケットは、前記第２の部分が冗長な部分であるという前記特定に基づいて破棄される、ステップとを行わされる、請求項２７に記載の記憶媒体。
【請求項２９】
前記プロセッサ・コンポーネントが、
第２のレプリカ・コマンド・セットのすべてのレプリカ・データ・アクセス・コマンドの実行がキャンセルされることになることを示す前記第２のノードからのキャンセル・コマンドを前記第１のノードにおいて受信するステップと、
前記キャンセル・コマンドを受信したことに応答して前記第２のレプリカ・コマンド・セットの少なくとも１つのレプリカ・データ・アクセス・コマンドの実行を停止又は防止することを、前記第２のノードが、前記第２のレプリカ・コマンド・セットのレプリケート元であるコマンド・セットの少なくとも１つのデータ・アクセス・コマンドの実行を停止又は防止することと、並列に行うステップとを行わされる、請求項２１から２８のいずれか一項に記載の記憶媒体。
【請求項３０】
前記第１のノードと前記第２のノードとを結合し、及びネットワークを通じて延在しているクラスタ間相互接続から前記レプリカ・コマンド・セットを前記第１のノードにおいて受信するステップが前記プロセッサ・コンポーネントにより実行される、請求項２１から２９のいずれか一項に記載の記憶媒体。
【請求項３１】
コンピュータによって実行される場合に、請求項１１から２０のいずれか一項に記載の方法を前記コンピュータに実行させる命令を有するコンピュータ・プログラム。
【発明の詳細な説明】
【関連出願】
【０００１】
本出願は、２０１４年９月１９日に出願された「ＴＥＣＨＮＩＱＵＥＳ  ＦＯＲ  ＣＯＯＲＤＩＮＡＴＩＮＧ  ＰＡＲＡＬＬＥＬ  ＰＥＲＦＯＲＭＡＮＣＥ  ＡＮＤ  ＣＡＮＣＥＬＬＡＴＩＯＮ  ＯＦ  ＣＯＭＭＡＮＤＳ  ＩＮ  Ａ  ＳＴＯＲＡＧＥ  ＣＬＵＳＴＥＲ  ＳＹＳＴＥＭ」という名称の米国特許出願第１４／４９１，７９９号に対する優先権を主張するものであり、この米国特許出願第１４／４９１，７９９号は、参照によって本明細書に組み込まれている。
【背景技術】
【０００２】
リモートからアクセスされるストレージ・クラスタ・システムは、複数の相互接続されているノードを含むことができ、それらのノードは、フォールト・トレラントな様式でクライアント・デバイス・データの格納を実行するために、及びそのデータのスピーディーな取り出しを可能にするために地理的に分散していることが可能である。そのようなノードのそれぞれは、複数の相互接続されているモジュールを含むことができ、それらのモジュールのそれぞれは、クライアント・デバイス・データを格納すること及び取り出すことというタスクのうちの一部分を実行することに特化されていることが可能である。遠隔通信は、そのようなタスクの実行において起こる場合があるエラーの取り扱いを調整するためにそのようなノードのうちの複数のノードの間において急に生じる必要がある場合がある。したがって、そのようなストレージ・クラスタ・システムのアーキテクチャーは、非常に複雑である場合がある。
【０００３】
対照的に、クライアント・デバイスは、そのような複雑なアーキテクチャーの諸側面、又はそれらがフォールト・トレランスを達成する様式の複雑さをモニタ及び／又はコントロールするように構成されていない場合がある。クライアント・デバイスは、そのような複雑さの詳細を伝達するのにあまり適していないプロトコルを使用してストレージ・クラスタ・システムと通信する場合があり、クライアント・デバイスは、そのような複雑さから起こる遅延を扱う際に柔軟性をほとんど提供しないオペレーティング・システムを採用している場合がある。
【図面の簡単な説明】
【０００４】
【図１】ストレージ・クラスタ・システムの例示的な一実施形態を示す図である。
【図２Ａ】１つのクラスタの高い可用性のグループ同士のペアの例示的な一実施形態を示す図である。
【図２Ｂ】別々のクラスタの高い可用性のグループ同士のペアの例示的な一実施形態を示す図である。
【図３】パートナーにされているノード同士のＨＡグループの例示的な一実施形態を示す図である。
【図４】ストレージ・デバイス同士の共有されているセット内でのメタデータの複製及び格納の例示的な一実施形態を示す図である。
【図５Ａ】ノード同士の間におけるコマンドのレプリケーションの例示的な一実施形態を示す図である。
【図５Ｂ】レプリケートされたコマンドに対する応答をノード同士の間において中継することの例示的な一実施形態を示す図である。
【図６】ノード同士の間におけるコマンド及びメタデータの同期化の例示的な一実施形態を示す図である。
【図７】ノード同士の間における通信セッションのメッシュの例示的な一実施形態を示す図である。
【図８】レプリカ・データ・アクセス・コマンドをやり取りする別々のＨＡグループのアクティブ・ノードの例示的な一実施形態を示す図である。
【図９Ａ】共に、２つのアクティブ・ノードの間におけるレプリカ・コマンド・セットの形成及び送信の例示的な一実施形態を示す図である。
【図９Ｂ】共に、２つのアクティブ・ノードの間におけるレプリカ・コマンド・セットの形成及び送信の例示的な一実施形態を示す図である。
【図１０Ａ】共に、２つのアクティブ・ノードの間におけるネットワーク・パケット内の部分同士におけるレプリカ・コマンド・セットの送信の例示的な一実施形態を示す図である。
【図１０Ｂ】共に、２つのアクティブ・ノードの間におけるネットワーク・パケット内の部分同士におけるレプリカ・コマンド・セットの送信の例示的な一実施形態を示す図である。
【図１１】一実施形態によるロジック・フローを示す図である。
【図１２】一実施形態によるロジック・フローを示す図である。
【図１３】一実施形態によるロジック・フローを示す図である。
【図１４】一実施形態によるロジック・フローを示す図である。
【図１５】一実施形態による処理アーキテクチャーを示す図である。
【発明を実施するための形態】
【０００５】
さまざまな実施形態は一般に、ストレージ・クラスタ・システムのノード同士の間におけるデータ・アクセス・コマンドの少なくとも部分的に並列な実行及びキャンセルを調整するための技術を対象としている。ストレージ・クラスタ・システムにおいては、複数のノードが、複数のクラスタへとグループ化されることが可能であり、それらのクラスタはそれぞれ、ノードの１つ又は複数の高い可用性の（ＨＡ）グループから構成されることが可能である。それらの複数のクラスタは、地理的に離れているロケーション同士に配置されることが可能であり、インターネット又は専用回線などのネットワークを通じて延在する１つ又は複数の相互接続を介して結合されることが可能である。それぞれのクラスタのＨＡグループの単一のノードが、アクティブ・ノードであることが可能であり、アクティブ・ノードは、アクティブな通信セッションを介してその他のノードと通信してデータ・アクセス・コマンドのレプリカをやり取りして、それらのデータ・アクセス・コマンドの少なくとも部分的に並列な実行を可能にしてクライアント・デバイス・データの状態をそれらのＨＡグループ同士の間において同期化する。それらのアクティブ・ノードは、キャンセル・コマンドをやり取りして、データ・アクセス・コマンドのキャンセルの少なくとも部分的に並列な実行を可能にしてクライアント・デバイス・データの状態をそれらのＨＡグループ同士の間において再び同期化することもできる。さらに、それらのアクティブ・ノードのうちの１つは、１つ又は複数のクライアント・デバイスとさらに通信して、ストレージ・サービスを求める要求を受信して、それらの要求をデータ・アクセス・コマンドへと変換することができる。それぞれのＨＡグループ内では、少なくとも１つのその他のノードが、非アクティブ・ノードであることが可能であり、非アクティブ・ノードは、アクティブ・ノードとのパートナーにされており、ＨＡグループ内のノード同士の間におけるメタデータの複製を介して、エラーに応答してアクティブ・ノードを引き継ぐ用意ができている。
【０００６】
レプリカ・データ・アクセス・コマンドのそのようなやり取り、キャンセル・コマンドのやり取り、及びそのような引き継ぎをサポートして、それぞれのＨＡグループの複数のノードが協力して、それらの間における通信セッションのメッシュを形成することができ、そのメッシュは、１つのアクティブな通信セッションと、複数の非アクティブな通信セッションとを含む。ＨＡグループの非アクティブ・ノードが、エラーに応答して同じＨＡグループ内のアクティブ・ノードを引き継いだときに、アクティブな通信セッションは、非アクティブになることが可能であり、非アクティブな通信セッションのうちの１つが、アクティブな通信セッションになることが可能である。メッシュを形成することをサポートして、その他のノードのうちの１つ又は複数のネットワーク・アドレスを含むメタデータが複製され、それぞれのＨＡグループ内のノード同士の間において分散されて、ノードのうちの１つ又は複数のリブートに続いてメッシュを形成する際の遅延を最小化することができる。
【０００７】
ノードのうちのそれぞれは、管理モジュール（Ｍモジュール）、ネットワーク・プロトコル・モジュール（Ｎモジュール）、及びデータ・ストレージ・モジュール（Ｄモジュール）のそれぞれの１つ又は複数を含むことができる。Ｍモジュールは、アクティブ・ノードをクライアント相互接続に結合して、ストレージ・クラスタ・システムの少なくとも一部分をリモートから構成することができるメカニズムを１つ又は複数のクライアント・デバイスに提供することができる。Ｎモジュールは、アクティブ・ノードをクライアント相互接続に結合して、１つ又は複数のクライアント・デバイスが、ストレージ・サービスを求める要求をそのノードへ送信することを可能にすることができる。Ｎモジュールは、ストレージ・サービス要求を少なくとも１つのデータ・アクセス・コマンドへと変換することができる。Ｄモジュールは、Ｎモジュールに結合されて、そこから少なくとも１つのデータ・アクセス・コマンドを受信することが可能である。Ｄモジュールは、ノードを１つ又は複数のストレージ・デバイスに結合して、クライアント・デバイス・データを格納することもでき、そこからクライアント・デバイス・データが取り出されることが可能である。それらのストレージ・デバイスの個々のストレージ・デバイス、及び／又はそれらのストレージ・デバイスのグループが、Ｄモジュールによって論理ユニット（ＬＵ）として指定されて扱われることが可能である。Ｄモジュールは、単一のＬＵ又はＬＵのグループによって提供されるストレージ・スペース内のアグリゲートを定義することができ、そのアグリゲートのストレージ・スペース内の１つ又は複数のボリュームを定義することができる。クライアント・デバイス・データは、そのアグリゲート内でそのように定義されている１つ又は複数のボリューム内に格納されることが可能である。
【０００８】
Ｎモジュールから受信されたデータ・アクセス・コマンドを実行することに加えて、第１のＨＡグループの１つのアクティブ・ノードのＤモジュールが、データ・アクセス・コマンドをレプリケートし、結果として生じるそのデータ・アクセス・コマンドのレプリカを第２のＨＡグループの別のアクティブ・ノードの別のＤモジュールへ送信して、２つのアクティブ・ノードのＤモジュール同士によるデータ・アクセス・コマンドの少なくとも部分的に並列な実行を可能にすることができる。レプリカ・データ・アクセス・コマンドのそのような送信は、クラスタ間相互接続を介して実行されることが可能であり、そのクラスタ間相互接続は、クライアント相互接続が延在できる際に経由するのと同じネットワークを通じて延在することができる。その別のノードのＤモジュールは、レプリカ・データ・アクセス・コマンドの実行における成功又は失敗の表示を伴って、レプリカ・データ・アクセス・コマンドの送信に応答することができる。
【０００９】
第１のＨＡグループのアクティブ・ノードと、第２のＨＡグループのアクティブ・ノードとの間におけるレプリカ・データ・アクセス・コマンド及びそれに対する応答のやり取りを可能にすることをサポートして、それらの２つのアクティブ・ノードは協力して、クラスタ間相互接続を通じてそれらの間におけるアクティブな通信セッションを形成及び保持することができる。そのようなアクティブな通信セッションにおいては、２つのアクティブ・ノードのそれぞれの現在の状態に関する情報が、それらの間において繰り返しやり取りされることが可能である。また、第１及び第２のＨＡグループの非アクティブ・ノードは、第１及び第２のＨＡグループのノード同士の間において延在する非アクティブな通信セッションを確立及び保持して、いずれかのＨＡグループのアクティブ・ノード内で生じるエラーに応答して同じＨＡグループの非アクティブ・ノードによってそのアクティブ・ノードを引き継ぐことをサポートすることもできる。２つのアクティブ・ノードは、第１及び第２のＨＡグループの非アクティブ・ノードに関する情報をやり取りして、それらの非アクティブな通信セッションの形成を可能にし、それによって通信セッションのメッシュを完成させることができる。エラーの結果、非アクティブ・ノードによってアクティブ・ノードのうちの１つを引き継ぐ場合には、２つのアクティブ・ノードの間におけるアクティブな通信セッションは、非アクティブになることが可能であり、その一方で非アクティブな通信セッションのうちの１つが、アクティブな通信セッションになることが可能である。
【００１０】
通信セッションのメッシュを形成及び保持することをサポートして、それぞれのアクティブ・ノードのＭモジュール、Ｎモジュール、及び／又はＤモジュールは協力して、第１及び第２のＨＡグループのノードのうちの複数のノードのネットワーク・アドレスの表示を含むメタデータ、並びに／又はメッシュの通信セッションの少なくともサブセットを確立することに関するその他の情報を得ること、格納すること、及び／又はやり取りすることが可能である。それぞれのＨＡグループ内では、アクティブ・ノードのＭモジュールは、メタデータの一部分を構成する情報を受信することができ、及び／又はアクティブ・ノードのＮモジュールは、テストを実行して、メタデータの別の部分を構成する情報を発見することができる。Ｍモジュール及びＮモジュールのうちの一方又は両方は次いで、メタデータのそれらの部分をアクティブ・ノードのＤモジュールに提供することができる。Ｄモジュールは、メタデータの複製を同じＨＡグループの１つ又は複数の非アクティブ・ノードのＤモジュールへ送信することができ、メタデータのコピーを１つ又は複数のストレージ・デバイス内のボリューム及び／又はアグリゲート内に格納することができ、そこに対して、同じＨＡグループのアクティブ・ノード及び１つ又は複数の非アクティブ・ノードのＤモジュールが、アクセスを共有することができる。結果として、そのようなＤモジュールのうちの１つが、リセット又は電源投入されることに続いてリブートしたときに、そのＤモジュールは、１つ又は複数のストレージ・デバイスからメタデータを取り出すことによって、自分のノードが別のＨＡグループのノードとの通信セッションを確立していることに関する情報を取り出せることが可能であり、次いでその情報を採用して、メッシュの通信セッションのうちの１つ又は複数をさらに迅速に形成することができる。複数のＨＡグループのそれぞれにおけるノードのうちの別々のノードが、さまざまな理由のうちのいずれかのためにときおりリブートされる場合がある実施形態においては、そのようなリブートに続く通信セッションのさらに迅速な再確立は、通信セッションのそのようなメッシュの部分が適所にない時間のピリオドを最小化する役割を果たすことができる。エラーに直面し、その結果、ノード及び／又は通信セッションがアクティブであるか、又は非アクティブであるかが変わる場合には、１つ又は複数のストレージ・デバイス内に格納されているメタデータが更新されて、リブートに続くアクティブな通信セッション及び非アクティブな通信セッションの新たな構成を伴う通信セッションのさらに迅速な再確立を可能にすることができる。
【００１１】
第１のＨＡグループのアクティブ・ノードのＤモジュールがデータ・アクセス・コマンドをレプリケートしたときに、そのＤモジュールは、マッチするシーケンス識別子（シーケンスＩＤ）をそれぞれのデータ・アクセス・コマンドと、第２のＨＡグループのアクティブ・ノードのＤモジュールへ送信されるそのレプリカ・データ・アクセス・コマンドとに割り振ることができる。第１のＨＡグループのアクティブ・ノードのＤモジュールは、データ・アクセス・コマンドのうちの複数の連続したデータ・アクセス・コマンドをコマンド・セットへとグループ化し、レプリカ・データ・アクセス・コマンドのうちのマッチする連続したレプリカ・データ・アクセス・コマンドを、マッチするレプリカ・コマンド・セットへとグループ化することができる。それぞれの新たなコマンド・セット及びマッチするレプリカ・コマンド・セットは、繰り返す時間のインターバルで、及び／又はコマンドそのもののさまざまな特徴に応じて作成されることが可能である。第１のＨＡグループのアクティブ・ノードのＤモジュールは、マッチするセット識別子（セットＩＤ）をコマンド・セットと、レプリカ・コマンド・セットのうちのマッチするレプリカ・コマンド・セットとに割り振ることもできる。レプリカ・データ・アクセス・コマンドのうちの一連のレプリカ・データ・アクセス・コマンドのそれぞれのセットが、第２のＨＡグループのアクティブ・ノードのＤモジュールへ送信されたときに、そのＤモジュールは、それぞれのレプリカ・データ・アクセス・コマンドに割り振られたシーケンスＩＤと、それぞれのレプリカ・コマンド・セットに割り振られたセットＩＤとの両方を採用して、それらのレプリカ・コマンド・セットを、別々のネットワーク・パケットに含めてそれぞれ送信される場合があるそれらの部分同士からさらに効率よく再構築することができる。例として、第２のＨＡグループのアクティブ・ノードのＤモジュールは、セットＩＤを採用して、送信されるネットワーク・パケットを通じてネットワーク内で生成される場合があるレプリカ・コマンド・セットの冗長な部分を伝達するネットワーク・パケットをさらに効率よく識別及び破棄することができる。
【００１２】
第１及び第２のＨＡグループのアクティブ・ノードのＤモジュールは、セットＩＤを採用して、一連のデータ・アクセス・コマンドの実行をキャンセルしたいという、及び少なくとも部分的に並列にそうしたいというクライアント・デバイスからの要求を調整すること、及びさらにスピーディーに実施することも可能である。第１のＨＡグループのアクティブ・ノードのＤモジュールは、キャンセルされることになる一連のデータ・アクセス・コマンドを含むコマンド・セット及びマッチするレプリカ・コマンド・セットのセットＩＤを特定することができる。第１のＨＡグループのアクティブ・ノードのＤモジュールは次いで、それらのセットＩＤを使用して、コマンド・セットのうちの破棄すべき１つ又は複数を選択し、次いで、その１つ又は複数のコマンド・セット内のデータ・アクセス・コマンドのさらなる実行を停止すること及び防止することの両方の一部として破棄を行うことができる。第１のＨＡグループのアクティブ・ノードのＤモジュールは、それらのセットＩＤを伝達するキャンセル・コマンドを用いて第２のＨＡグループのアクティブ・ノードのＤモジュールにシグナリングを行うこともできる。キャンセル・コマンドを受信したことに応答して、第２のＨＡグループのアクティブ・ノードは、それらのセットＩＤを使用して、レプリカ・コマンド・セットのうちの破棄すべき１つ又は複数を選択し、次いで、第１のＨＡグループのアクティブ・ノードによるデータ・アクセス・コマンドのさらなる実行の停止及び防止と少なくとも部分的に並列に１つ又は複数のレプリカ・コマンド・セット内のレプリカ・データ・アクセス・コマンドのさらなる実行を停止すること及び防止することの両方の一部として破棄を行うことができる。
【００１３】
本明細書において使用されている表記及び術語を全般的に参照すると、以降に続く詳細な説明の諸部分は、コンピュータ又はコンピュータのネットワーク上で実行されるプログラム手順という点から提示されている場合がある。これらの手順の記述及び表示は、当業者によって、自分の作業の実体を他の当業者たちに最も効果的に伝達するために使用されている。手順とは、ここでは、及び一般には、所望の結果へつながるオペレーションの首尾一貫したシーケンスであると考えられる。これらのオペレーションは、物理量の物理的な操作を必要とするオペレーションである。通常、必須ではないが、これらの量は、格納されること、転送されること、結合されること、比較されること、及びその他の形で操作されることが可能な電気信号、磁気信号、又は光信号の形態を取る。ビット、値、要素、シンボル、文字、語、数などとしてこれらの信号を指すことが、主として共通の使用という理由から、時として好都合であることがわかっている。しかしながら、これら及び類似の語はすべて、適切な物理量に関連付けられるものであり、それらの量に適用される便宜上のラベルにすぎないということに留意されたい。
【００１４】
さらに、これらの操作はしばしば、付加又は比較などの用語で呼ばれ、これらは一般に、人間のオペレータによって実行される知的なオペレーションに関連付けられている。しかしながら、１つ又は複数の実施形態の一部を形成する、本明細書において説明されているオペレーションのうちのいずれにおいても、ほとんどのケースにおいて、人間のオペレータのそのような能力は必要ではなく、又は望ましくない。むしろ、これらのオペレーションはマシン・オペレーションである。さまざまな実施形態のオペレーションを実行するための有用なマシンは、本明細書における教示に従って書かれている内部に格納されたコンピュータ・プログラムによって選択的にアクティブ化若しくは構成される汎用デジタル・コンピュータを含み、及び／又は必要とされる目的のために特別に構築された装置を含む。さまざまな実施形態はまた、これらのオペレーションを実行するための装置又はシステムに関連している。これらの装置は、必要とされる目的のために特別に構築されることが可能であり、又は汎用コンピュータを含むことができる。さまざまなこれらのマシンのための必要とされる構造は、与えられる説明から現れるであろう。
【００１５】
次いで、図面に対する参照が行われ、全体を通じて、同様の要素を指すために同様の参照番号が使用されている。以降の記述においては、説明の目的から、その徹底的な理解を提供するために多くの具体的な詳細が示されている。しかしながら、これらの具体的な詳細を伴わずに新規な実施形態が実施されることが可能であるということは明らかであると言える。その他の場合においては、その説明を容易にするために、よく知られている構造及びデバイスがブロック図の形態で示されている。意図されているのは、特許請求の範囲の範疇内のすべての修正形態、均等形態、及び代替形態をカバーすることである。
【００１６】
図１は、１つ又は複数のクライアント・デバイス１００及び１つ又は複数のクラスタ、たとえば、示されているクラスタ１３００ａ及び１３００ｚを組み込んでいるストレージ・クラスタ・システム１０００の例示的な一実施形態のブロック図を示している。示されているように、クラスタ１３００ａは、ノード３００ａ〜ｄの１つ又は複数と、ストレージ・デバイスのセット８００ａｂ及び８００ｃｄとを組み込むことができ、クラスタ１３００ｚは、ノード３００ｙ〜ｚの１つ又は複数と、ストレージ・デバイスのセット８００ｙｚとを組み込むことができる。さらに示されているように、クラスタ１３００ａは、パートナー同士としてのノード３００ａ〜ｂと、ストレージ・デバイスのセット８００ａｂとを組み込んでいるＨＡグループ１６００ａｂを含むことができる。クラスタ１３００ａは、パートナー同士としてのノード３００ｃ〜ｄと、ストレージ・デバイスのセット８００ｃｄとを組み込んでいるＨＡグループ１６００ｃｄを含むこともできる。それに対応して、クラスタ１３００ｚは、パートナー同士としてのノード３００ｙ〜ｚと、ストレージ・デバイスのセット８００ｙｚとを組み込んでいるＨＡグループ１６００ｙｚを含むことができる。
【００１７】
いくつかの実施形態においては、クラスタ１３００ａ及び１３００ｚは、地理的に離れているロケーション同士に配置されて、格納用としてクライアント・デバイス１００のうちの１つ又は複数によって提供されるクライアント・デバイス・データ１３０を格納する際及び取り出す際に、ある程度の冗長性を可能にすることができる。そのような配置は、クラスタ１３００ａ又は１３００ｚのうちの一方又は他方をクライアント・デバイス１００のうちの１つ又は複数に対してアクセス不能にする場合がある障害又はその他のイベントにもかかわらずクライアント・デバイス１００のうちの１つ又は複数によるクライアント・デバイス・データ１３０に対する継続したアクセスを可能にする上で望ましいとみなされる場合がある。示されているように、クラスタ１３００ａ及び１３００ｚのうちの一方又は両方は、クライアント・デバイス・データ１３０にまったく無関係である場合があるその他のクライアント・デバイス・データ１３１をさらに格納することができる。
【００１８】
ストレージ・デバイスのセット８００ａｂに対するアクセスを共有するためにパートナーにされている少なくとも２つのノード３００ａ及び３００ｂを伴うＨＡグループ１６００ａｂのフォーメーションは、ノード３００ａ〜ｂのうちで非アクティブ状態にある一方が、アクティブ状態にある自分のパートナー（たとえば、ノード３００ａ〜ｂのうちの他方）の中のエラー状況に応答してノード３００ａ〜ｂのうちのそのアクティブな方を引き継ぐことを可能にすることによって、ストレージ・デバイスのセット８００ａｂ内に格納されているクライアント・デバイス・データ１３０にアクセスする際に、ある程度のフォールト・トレランスを可能にすることができる。それに対応して、ストレージ・デバイスのセット８００ｙｚに対するアクセスを共有するためにパートナーにされている少なくとも２つのノード３００ｙ及び３００ｚを伴うＨＡグループ１６００ｙｚのフォーメーションは、ノード３００ｙ〜ｚのうちで非アクティブ状態にある一方が、アクティブ状態にある自分のパートナー（たとえば、ノード３００ｙ〜ｚのうちの他方）を同様に引き継ぐことを同様に可能にすることによって、ストレージ・デバイスのセット８００ｙｚ内に格納されているクライアント・デバイス・データ１３０にアクセスする際に、ある程度のフォールト・トレランスを同様に可能にすることができる。
【００１９】
示されているように、ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちのいずれかのアクティブ・ノードが、クライアント相互接続１９９を介してクライアント・デバイス１００に対してアクセス可能にされることが可能である。また示されているように、ノード３００ａ〜ｄ及び３００ｙ〜ｚは、クラスタ間相互接続３９９を介してさらに結合されることが可能である。いくつかの実施形態においては、相互接続１９９及び３９９は両方とも、同じネットワーク９９９を通じて延在することができる。相互接続１９９及び３９９のそれぞれは、ネットワーク９９９を通じて、さまざまなネットワーク・セキュリティー・プロトコルのうちのいずれかを使用して定義される仮想プライベート・ネットワーク（ＶＰＮ）として実装されることが可能である。ネットワーク９９９は、単一の建物若しくはその他の相対的に限定されたエリア内に延在することに限定された単一のネットワークであることが可能であり、かなりの距離にわたって延在する接続されたネットワークの組合せを含むことができ、及び／又はインターネットを含むことができる。同じネットワーク９９９内に共存することの代替として、相互接続１９９及び３９９は、物理的にまったく別々のネットワークとして実装されることが可能である。例として、クライアント相互接続１９９は、インターネットを通じて延在して、クライアント・デバイス１００同士が、地理的に多様なロケーション同士に配置されることを可能にすることができ、その一方でクラスタ間相互接続３９９は、クラスタ１３００ａ及び１３００ｚのそれぞれが配置されている２つの地理的に離れているロケーションの間における専用回線を通じて延在することができる。
【００２０】
示されているように、ＨＡグループ１６００ａｂ、１６００ｃｄ、及び１６００ｙｚのそれぞれの中のパートナーにされているノード同士は、それぞれＨＡ相互接続６９９ａｂ、６９９ｃｄ、及び６９９ｙｚを介してさらに結合されることが可能である。また示されているように、ＨＡグループ１６００ａｂ、１６００ｃｄ、及び１６００ｙｚのそれぞれの中のノード同士は、それぞれ、ストレージ相互接続８９９ａｂ、８９９ｃｄ、及び８９９ｙｚを介して共有アクセスを可能にする様式でストレージ・デバイスのセット８００ａｂ、８００ｃｄ、及び８００ｙｚに結合されることが可能である。ＨＡグループ１６００ａｂ、１６００ｃｄ、及び１６００ｙｚのそれぞれを構成する、パートナーにされているノード、及びストレージ・デバイスのセットは、互いに対して、相対的に近い物理的な近接度内に配置されることが可能であり、それによって、相互接続６９９ａｂ、８９９ａｂ、６９９ｃｄ、８９９ｃｄ、６９９ｙｚ、及び８９９ｙｚはそれぞれ、（たとえば、部屋の中に、及び／又はキャビネットの中に延在して）相対的に短い距離を横切ることが可能である。
【００２１】
より広範には、ネットワーク９９９、並びに／又は相互接続１９９、３９９、６９９ａｂ、６９９ｃｄ、及び６９９ｙｚのうちの１つ若しくは複数は、信号をやり取りすることができるさまざまな通信テクノロジー（又はそれらの組合せ）のうちのいずれかに基づくことが可能であり、それらの通信テクノロジーは、電気的に及び／又は光学的に伝導性のケーブルを採用する有線テクノロジー、並びに赤外線、無線周波数、又はその他の形態の無線送信を採用する無線テクノロジーを含むが、それらには限定されない。相互接続８９９ａｂ、８９９ｃｄ、及び８９９ｙｚのそれぞれは、さまざまな広く知られて使用されているストレージ・インターフェース標準のうちのいずれかに基づくことが可能であり、ＳＣＳＩ、シリアル接続ＳＣＳＩ（ＳＡＳ）、ファイバ・チャネルなどを含むが、それらには限定されない。
【００２２】
ストレージ・クラスタ・システム１０００内のクラスタ及びノードの具体的な数量の記述にもかかわらず、異なる数量のクラスタ及びノードを組み込むその他の実施形態も可能であるということに留意されたい。同様に、クラスタ１３００ａ及び１３００ｚのそれぞれの中のＨＡグループ及びノードの具体的な数量の記述にもかかわらず、異なる数量のＨＡグループ及びノードを組み込むその他の実施形態も可能である。さらに、ＨＡグループ１６００ａｂ、１６００ｃｄ、及び１６００ｙｚのそれぞれは、ノード３００ａ〜ｂ、３００ｃ〜ｄ、及び３００ｙ〜ｚのペアをそれぞれ組み込んでいるものとして示されているが、ＨＡグループ１６００ａｂ、１６００ｃｄ、及び１６００ｙｚのうちの１つ又は複数が、２つよりも多いノードを組み込むことができるその他の実施形態も可能である。
【００２３】
図２Ａ及び図２Ｂはそれぞれ、ストレージ・クラスタ・システム１０００の例示的な部分のブロック図をさらに詳細に示している。さらに具体的には、図２Ａは、クラスタ１３００ａ内のノード３００ａ〜ｄ及びそれらの間における相互接続の態様をさらに詳細に示している。図２Ｂは、クラスタ１３００ａと１３００ｚとの間に延在する相互接続を含めて、ノード３００ａ〜ｂ及び３００ｙ〜ｚの間における相互接続の態様をさらに詳細に示している。
【００２４】
図２Ａ及び図２Ｂの両方を参照すると、ノード３００ａ〜ｄ及び３００ｙ〜ｚのそれぞれは、Ｍモジュール４００、Ｎモジュール５００、及びＤモジュール６００のうちの１つ又は複数を組み込むことができる。示されているように、Ｍモジュール４００及びＮモジュール５００のそれぞれは、クライアント相互接続１９９に結合されることが可能であり、クライアント相互接続１９９によって、それぞれは、クライアント・デバイス１００のうちの１つ又は複数に対してアクセス可能となることができる。ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちの１つ又は複数のアクティブ・ノードのＭモジュール４００は、クライアント相互接続１９９を介してクライアント・デバイス１００のうちの１つ又は複数と協力して、ストレージ・クラスタ・システム１０００が、クライアント・デバイス１００のうちの１つ又は複数によって提供されるクライアント・デバイス・データ１３０を格納してそのクライアント・デバイス・データ１３０に対するアクセスを提供する様式のさまざまな態様をクライアント・デバイス１００のうちの１つのオペレータが構成することを可能にすることができる。ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちの１つ又は複数のアクティブ・ノードのＮモジュール５００は、クライアント相互接続１９９を介してクライアント・デバイス１００のうちの１つ又は複数から受信されるストレージ・サービスを求める要求を受信し、その要求に応答することができ、プロトコル変換を実行して、それぞれのストレージ・サービス要求を１つ又は複数のデータ・アクセス・コマンドへと変換することができる。
【００２５】
示されているように、ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちのすべてのＤモジュール６００は、クラスタ間相互接続３９９を介して互いに結合されることが可能である。また、ＨＡグループ１６００ａｂ、１６００ｃｄ、及び１６００ｙｚのそれぞれの中においては、パートナーにされているノード同士のＤモジュール６００は、それぞれストレージ・デバイスのセット８００ａｂ、８００ｃｄ、及び８００ｙｚに対する結合を共有することができる。さらに具体的には、パートナーにされているノード３００ａ及び３００ｂのＤモジュール６００は両方とも、ストレージ相互接続８９９ａｂを介してストレージ・デバイスのセット８００ａｂに結合されることが可能であり、パートナーにされているノード３００ｃ及び３００ｄのＤモジュール６００は両方とも、ストレージ相互接続８９９ｃｄを介してストレージ・デバイスのセット８００ｃｄに結合されることが可能であり、パートナーにされているノード３００ｙ及び３００ｚのＤモジュール６００は両方とも、ストレージ相互接続８９９ｙｚを介してストレージ・デバイスのセット８００ｙｚに結合されることが可能である。ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちのアクティブ・ノードのＤモジュール６００は、クライアント・デバイス１００のうちの１つ又は複数から受信されるストレージ・サービス要求を変換することから、これらのノードのＮモジュール５００のうちの１つ又は複数によって得られるデータ・アクセス・コマンドを実行することができる。
【００２６】
したがって、ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちのアクティブ・ノードのＤモジュール６００は、ストレージ相互接続８９９ａｂ、８９９ｃｄ、及び８９９ｙｚのうちの対応するストレージ相互接続を介してストレージ・デバイスのセット８００ａｂ、８００ｃｄ、及び８００ｙｚのうちの対応するノードにアクセスして、データ・アクセス・コマンドを実行することの一部としてクライアント・デバイス・データ１３０を格納すること及び／又は取り出すことが可能である。データ・アクセス・コマンドは、格納するためのクライアント・デバイス・データ１３０の諸部分、及び／又は格納されているクライアント・デバイス・データ１３０を更新するために用いるクライアント・デバイス・データ１３０のさらに新たな諸部分によって伴われることが可能である。代替として、又は追加として、データ・アクセス・コマンドは、クライアント・デバイス１００のうちの１つ又は複数へ再び供給するためにストレージから取り出されることになるクライアント・デバイス・データ１３０の諸部分を指定することができる。
【００２７】
さらに、図２Ｂを参照すると、クラスタ１３００ａ又は１３００ｚのうちの一方のノード３００ａ〜ｂ及び３００ｙ〜ｚのうちのアクティブ・ノードのＤモジュール６００は、データ・アクセス・コマンドをレプリケートし、結果として生じるレプリカ・データ・アクセス・コマンドを、クラスタ間相互接続３９９を介してクラスタ１３００ａ又は１３００ｚのうちの他方のノード３００ａ〜ｂ及び３００ｙ〜ｚのうちの別のアクティブ・ノードへ送信して、Ｄモジュール６００のうちの２つによるデータ・アクセス・コマンドの少なくとも部分的な並列実行を可能にすることができる。この方法においては、ストレージ・デバイスのセット８００ａｂ又は８００ｙｚのうちの１つの中に格納されているクライアント・デバイス・データ１３０の状態は、示されているように、ストレージ・デバイスのセット８００ａｂ又は８００ｙｚのうちの他の１つの中にミラーリングされることが可能である。
【００２８】
互いから地理的に離れていることが可能である別々のクラスタに関連付けられているストレージ・デバイスの複数のセットの間におけるクライアント・デバイス・データ１３０の状態のそのようなミラーリングは、クライアント相互接続１９９の局所的な障害の結果として（たとえば、クライアント相互接続の一部分が特定の地理的領域において延在する際に経由するネットワーク９９９の一部分の障害の結果として）クラスタのうちの１つのノードがアクセス不能になるという可能性に対処する上で望ましいとみなされる場合がある。当業者にはよく知られているように、１つのＨＡグループのパートナーにされているノード同士の間におけるさらなる相互接続（たとえば、ＨＡ相互接続６９９ａｂ、６９９ｃｄ、及び６９９ｙｚ）の使用は、１つのＨＡグループのパートナーにされているノード同士を互いに対して近い近接度内に物理的に配置することを促す傾向があり、それによって、ネットワークの局所的な障害が、１つのＨＡグループのすべてのノードをクライアント・デバイス１００に対してアクセス不能にする場合がある。たとえば、ノード３００ａ及び３００ｂの両方の付近のクライアント相互接続１９９を含むネットワークの一部分の障害が、ノード３００ａ及び３００ｂの両方をクライアント・デバイス１００に対してアクセス不能にする場合があり、それによって、ストレージ・デバイスのセット８００ａｂ内に格納されているクライアント・デバイス・データ１３０は、ノード３００ａ又は３００ｂのいずれを通じてもアクセス不能になる。ストレージ・デバイスのセット８００ａｂ及び８００ｙｚの両方がクライアント・デバイス・データ１３０の状態をミラーリングしている状態で、クライアント・デバイス１００は、ストレージ・デバイスのセット８００ａｂに対するアクセスの喪失にもかかわらず、ストレージ・デバイスのセット８００ｙｚ内のクライアント・デバイス・データ１３０に依然としてアクセスすることができる。
【００２９】
図２Ａ及び図２Ｂの両方を再び参照すると、前述のように、ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちのパートナーにされているノード同士の間において、それぞれ、ストレージ相互接続８９９ａｂ、８９９ｃｄ、及び８９９ｙｚを介してストレージ・デバイスのセット８００ａｂ、８００ｃｄ、及び８００ｙｚのそれぞれに対するアクセスを共有することは、ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちの１つの中で障害が生じた場合に、ストレージ・デバイスのセット８００ａｂ、８００ｃｄ、及び８００ｙｚのうちの１つに対する継続したアクセスを可能にすることができる。示されているように、そのような障害にもかかわらずそのような継続したアクセスを可能にすることをサポートして、ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちのパートナーにされているノード同士のＤモジュール６００同士は、それぞれ、ＨＡ相互接続６９９ａｂ、６９９ｃｄ、及び６９９ｙｚを介してＨＡグループ１６００ａｂ、１６００ｃｄ、及び１６００ｙｚのそれぞれの中で結合されることが可能である。ＨＡ相互接続６９９ａｂ、６９９ｃｄ、又は６９９ｙｚを通じて、これらのノードのうちのそれぞれのＤモジュール６００は、自分のパートナーのＤモジュール６００のステータスをそれぞれモニタすることができる。さらに具体的には、パートナーにされているノード３００ａ及び３００ｂのＤモジュール６００同士は、ＨＡ相互接続６９９ａｂを通じて互いをモニタすることができ、パートナーにされているノード３００ｃ及び３００ｄのＤモジュール６００同士は、ＨＡ相互接続６９９ｃｄを通じて互いをモニタすることができ、パートナーにされているノード３００ｙ及び３００ｚのＤモジュール６００同士は、ＨＡ相互接続６９９ｙｚを通じて互いをモニタすることができる。
【００３０】
そのようなモニタリングは、ＨＡ相互接続６９９ａｂ、６９９ｃｄ、又は６９９ｙｚのうちの１つ又は複数を介して「ハートビート」及び／又はその他のステータス信号（たとえば、データ・アクセス・コマンドの実行の現在の状態を伝達するメッセージ）の繰り返しのやり取りを伴うことができ、指定された繰り返しインターバル内にそのような信号の受信がないという場合は、その信号の元として予期されていたＤモジュール６００のうちの１つの障害の表示と取られることが可能である。代替として、又は追加として、そのようなモニタリングは、Ｄモジュール６００のうちのモニタされているＤモジュール６００からの、ノード３００ａ〜ｄ又は３００ｙ〜ｚのうちの１つの別のコンポーネントの障害、たとえば、ノード３００ａ〜ｄ又は３００ｙ〜ｚのうちのその１つのＭモジュール４００の及び／又はＮモジュール５００の障害が生じている旨の表示を待つことを伴うことが可能である。ＨＡグループ１６００ａｂ、１６００ｃｄ、又は１６００ｙｚのうちの１つに属しているノード３００ａ〜ｄ又は３００ｙ〜ｚのうちのアクティブ・ノードの障害のそのような表示に応答して、ＨＡグループ１６００ａｂ、１６００ｃｄ、又は１６００ｙｚのうちの同じ１つのノード３００ａ〜ｄ又は３００ｙ〜ｚの中の非アクティブなパートナーが、引き継ぎを行うことができる。ノード３００ａ〜ｄ又は３００ｙ〜ｚのうちのパートナーにされているノード同士の間におけるそのような「引き継ぎ」は、完全な引き継ぎであることが可能である。なぜなら、引き継ぎを行っているパートナーは、これらのノードのうちの障害に陥っているノードによって実行された機能のうちのすべての実行を引き継ぐことができるからである。
【００３１】
しかしながら、いくつかの実施形態においては、少なくとも、ノード３００ａ〜ｄ及び／又は３００ｙ〜ｚのうちの複数のノードのＮモジュール５００及びＤモジュール６００が、ノード３００ａ〜ｄ又は３００ｙ〜ｚのうちの１つの一部分の障害に応答した部分的な引き継ぎを可能にする様式で相互接続されることが可能である。図２Ａをさらに具体的に参照すると、ノード３００ａ〜ｄのうちのそれぞれのＮモジュール５００は、クラスタ内相互接続５９９ａを介してノード３００ａ〜ｄのうちのそれぞれのＤモジュール６００に結合されることが可能である。言い換えれば、クラスタ１３００ａ内では、Ｎモジュール５００のうちのすべて及びＤモジュール６００のうちのすべてが結合されて、ノード３００ａ〜ｄのうちの別々のノードのＮモジュール５００及びＤモジュール６００の間においてデータ・アクセス・コマンドがやり取りされることを可能にすることができる。したがって、例として、ノード３００ａのＮモジュール５００が障害に陥っているが、ノード３００ａのＤモジュール６００が依然として機能できる場合には、ノード３００ａのパートナー・ノード３００ｂの（又はＨＡグループ内でノード３００ａがパートナーにされていないノード３００ｃ又は３００ｄのうちの１つの）Ｎモジュール５００が、ノード３００ａのＮモジュール５００を引き継ぐことができる。
【００３２】
クラスタ１３００ａ及び１３００ｚは、互いから地理的に離れていることが可能であるが、クラスタ１３００ａ及び１３００ｚのそれぞれの中では、ノード同士、及び／又はノードのコンポーネント同士は、互いに対して、相対的に近い物理的な近接度内に配置されることが可能であり、それによって、クラスタ内相互接続５９９ａ及び５９９ｚはそれぞれ、（たとえば、部屋の中に、及び／又は単一のキャビネットの中に延在して）相対的に短い距離を横切ることが可能である。より広範には、クラスタ内相互接続５９９ａ及び５９９ｚのうちの１つ又は複数は、信号をやり取りすることができるさまざまな通信テクノロジー（又はそれらの組合せ）のうちのいずれかに基づくことが可能であり、それらの通信テクノロジーは、電気的に及び／又は光学的に伝導性のケーブルを採用する有線テクノロジー、並びに赤外線、無線周波数、又はその他の形態の無線送信を採用する無線テクノロジーを含むが、それらには限定されない。例として、クラスタ内相互接続５９９ａは、ノード３００ａ〜ｄのうちのそれぞれの各Ｎモジュール５００をノード３００ａ〜ｄのうちのそれぞれの各Ｄモジュール６００に結合するポイントツーポイント相互接続のメッシュから構成されることが可能である。或いは、別の例として、クラスタ内相互接続５９９ａは、ネットワーク・スイッチ（図示せず）を含むことができ、そのネットワーク・スイッチに対して、ノード３００ａ〜ｄのＮモジュール５００のうちのそれぞれ及びＤモジュール６００のうちのそれぞれが結合されることが可能である。
【００３３】
しかしながら、１つのノードが、障害が生じている別のノードのすべての機能を引き継ぐ完全な引き継ぎを選んで、そのような部分的な引き継ぎを許可しない（又はその場合を少なくとも制限する）ことが望ましいとみなされる場合があるということに留意されたい。これは、ノード３００ａ〜ｄ及び／又は３００ｙ〜ｚのうちの１つ又は複数の中のＮモジュール５００及びＤモジュール６００の間に延在するクラスタ内相互接続５９９ａ及び／又は５９９ｚの部分が、異なるノードのＮモジュール５００及びＤモジュール６００の間に延在するクラスタ内相互接続５９９ａ及び／又は５９９ｚの部分よりも大幅に迅速にコマンド及び／又はデータを転送する能力を有している結果かもしれない。したがって、いくつかの実施形態においては、それぞれ、ノード３００ａ〜ｄ又は３００ｙ〜ｚのうちの別々のノードの間に延在するクラスタ内相互接続５９９ａ及び／又は５９９ｚの部分が使用されず、それによって非アクティブのままでいることが可能である。
【００３４】
ノード３００ａ〜ｄ及び３００ｙ〜ｚのそれぞれの中にＭモジュール４００、Ｎモジュール５００、及びＤモジュール６００のそれぞれの単一のモジュールのみが示されているにもかかわらず、これらのノードのうちの１つ又は複数の中にＭモジュール４００、Ｎモジュール５００、及びＤモジュール６００のうちの１つ又は複数の異なる数量を組み込むことができるその他の実施形態も可能であるということにも留意されたい。例として、ノード３００ａ〜ｄ及び／若しくは３００ｙ〜ｚのうちの１つ若しくは複数が、クライアント・デバイス１００のうちの１つ若しくは複数との通信のために、ある程度のフォールト・トレランスをノード内に提供する目的で複数のＮモジュール５００を組み込む、並びに／又はストレージ・デバイスのセット８００ａｂ、８００ｃｄ、若しくは８００ｙｚのうちの対応するセットにアクセスするために、ある程度のフォールト・トレランスをノード内に提供する目的で複数のＤモジュール６００を組み込む実施形態が可能である。
【００３５】
図３は、ストレージ・クラスタ・システム１０００のクラスタ１３００ａのＨＡグループ１６００ａｂの例示的な一実施形態のブロック図をさらに詳細に示している。示されているように、ＨＡグループ１６００ａｂのノード３００ａ及び３００ｂのうちで、ノード３００ａは、クライアント・デバイス１００との通信に従事して、ストレージ・デバイスのセット８００ａｂ内のクライアント・デバイス・データ１３０を変更するオペレーションを実行するためにアクティブであることが可能であり、その一方でノード３００ｂは、非アクティブでいて、ノード３００ａを引き継ぐ必要性を待っていることが可能である。さらに具体的には、Ｍモジュール４００及びＮモジュール５００は、（Ｍモジュール４００及びＮモジュール５００が点線を用いて描かれている状態で示されているように）クライアント・デバイス１００との通信に従事しないことが可能である。また示されているように、ノード３００ａ〜ｂのそれぞれは、Ｍモジュール４００、Ｎモジュール５００、及びＤモジュール６００のうちの１つ又は複数を組み込むことができる。
【００３６】
さまざまな実施形態においては、ノード３００ａ〜ｂのうちのそれぞれのＭモジュール４００は、プロセッサ・コンポーネント４５０と、メモリ４６０と、Ｍモジュール４００を少なくともクライアント相互接続１９９に結合するためのインターフェース４９０とのうちの１つ又は複数を組み込む。メモリ４６０は、コントロール・ルーチン４４０を格納することができる。コントロール・ルーチン４４０は、さまざまな機能を実行するためのロジックを実装するために、プロセッサ・コンポーネント４５０上で、Ｍモジュール４００のメイン・プロセッサ・コンポーネントとしてのその役割において機能する命令のシーケンスを組み込むことができる。ノード３００ａが、クライアント・デバイス１００のうちの１つ又は複数との通信に従事するために、及びデータ・アクセス・コマンドを実行するためにアクティブである結果として、ノード３００ａのＭモジュール４００のプロセッサ・コンポーネント４５０は、コントロール・ルーチン４４０を実行するためにアクティブであることが可能である。しかしながら、ノード３００ｂが非アクティブである結果として、プロセッサ・コンポーネント４５０は、ノード３００ｂのＭモジュール４００内のコントロール・ルーチン４４０を実行するためにアクティブではないことが可能である。しかしながら、ノード３００ｂがノード３００ａを引き継いだ場合には、ノード３００ｂ内のコントロール・ルーチン４４０を実行し始めることができ、その一方で、ノード３００ａ内のコントロール・ルーチン４４０を実行するのを停止することができる。
【００３７】
コントロール・ルーチン４４０を実行する際に、アクティブ・ノード３００ａのＭモジュール４００のプロセッサ・コンポーネント４５０は、リモートから供給された構成情報を受け入れるようにインターフェース４９０を操作することができる。具体的には、プロセッサ・コンポーネント４５０は、ウェブ・サーバ、テルネット・アクセス、インスタント・メッセージング、及び／又はその他の通信サービスを提供することができ、それらによって、ストレージ・クラスタ・システム１０００のノード３００ａ、ＨＡグループ１６００ａｂ、クラスタ１３００ａ、及び／又はその他のコンポーネントのオペレーションの諸側面がリモートから構成されることが可能である。いくつかの実施形態においては、そのようなリモート構成は、クライアント・デバイス１００のうちの１つ又は複数から生じることが可能である。例として、ストレージ・デバイスのセット８００ａｂ内に格納されているクライアント・デバイス・データ１３０に対するアクセスを許可するためにクライアント・デバイス１００のうちのそれぞれを認証することができるセキュリティー・プロトコル、並びに、クライアント相互接続１９９を介した通信においてどんなプロトコルが採用されることが可能であるか、クライアント・デバイス・データ１３０をストレージ・デバイスのセット８００ａｂ内に格納する際にどんなファイル・システムが採用されることが可能であるか、ＨＡグループ１６００ａｂを形成するためにノード３００ｂ〜ｄ又は３００ｙ〜ｚのうちのどんなその他のノードがノード３００ａとのパートナーにされることが可能であるか、さらなるフォールト・トレランスを提供するためにどんなその他のノード及び／又はＨＡグループがノード３００ａ及び／又はＨＡグループ１６００ａｂと協力することができるか、さまざまな相互接続上でノード３００ａ〜ｄ及び／又は３００ｙ〜ｚのうちのその他のノードにどんなネットワーク・アドレスが割り当てられることが可能であるかなどが、リモートから構成されることが可能である。プロセッサ・コンポーネント４５０がそのような構成情報を受信するときに、及び／又はそのような情報を受信した後に、プロセッサ・コンポーネント４５０は、その情報及び／又はその情報に対する更新をメタデータの一部分としてＮモジュール５００及び／又はＤモジュール６００に中継するようにインターフェース４９０を操作することができる。
【００３８】
さまざまな実施形態においては、ノード３００ａ〜ｂのうちのそれぞれのＮモジュール５００は、プロセッサ・コンポーネント５５０と、メモリ５６０と、Ｎモジュール５００をクライアント相互接続１９９及びクラスタ内相互接続５９９ａのうちの一方又は両方に結合するためのインターフェース５９０とのうちの１つ又は複数を組み込む。メモリ５６０は、コントロール・ルーチン５４０を格納することができる。コントロール・ルーチン５４０は、さまざまな機能を実行するためのロジックを実装するために、プロセッサ・コンポーネント５５０上で、Ｎモジュール５００のメイン・プロセッサ・コンポーネントとしてのその役割において機能する命令のシーケンスを組み込むことができる。ノード３００ａが、クライアント・デバイス１００のうちの１つ又は複数との通信に従事するために、及びデータ・アクセス・コマンドを実行するためにアクティブである結果として、ノード３００ａのＮモジュール５００のプロセッサ・コンポーネント５５０は、コントロール・ルーチン５４０を実行するためにアクティブであることが可能である。しかしながら、ノード３００ｂが非アクティブである結果として、プロセッサ・コンポーネント５５０は、ノード３００ｂのＮモジュール内のコントロール・ルーチン５４０を実行するためにアクティブではないことが可能である。しかしながら、ノード３００ｂがノード３００ａを引き継いだ場合には、ノード３００ｂ内のコントロール・ルーチン５４０を実行し始めることができ、その一方で、ノード３００ａ内のコントロール・ルーチン５４０を実行するのを停止することができる。
【００３９】
コントロール・ルーチン５４０を実行する際に、アクティブ・ノード３００ａのＮモジュール５００のプロセッサ・コンポーネント５５０は、通信相手となるその他のデバイスを検知するためにさまざまなテストを実行するように、及び／又は通信のためにその他のデバイスに連絡を取ることができるネットワーク・アドレスを割り振るようにインターフェース５９０を操作することができる。少なくとも、リセット又は電源投入されることに続いてリブートすることの一部として、プロセッサ・コンポーネント５５０は、ノード３００ａ〜ｄ及び／又は３００ｙ〜ｚのうちの１つ又は複数の１つ又は複数のコンポーネント（たとえば、Ｍモジュール４００、Ｎモジュール５００、及び／又はＤモジュール６００）と通信するためのアドレス及び／又は通信プロトコルを特定するためにクラスタ間相互接続３９９及び／又はクラスタ内相互接続５９９ａ上でさまざまなテストを実行することができる。代替として、又は追加として、クラスタ内相互接続５９９ａの少なくとも一部分がインターネット・プロトコル（ＩＰ）アドレッシングをサポートする実施形態においては、プロセッサ・コンポーネント５５０は、ダイナミック・ホスト・コントロール・プロトコル（ＤＨＣＨ）サーバの役割において、そのようなアドレスを割り振るように機能することができる。また代替として、又は追加として、プロセッサ・コンポーネント５５０は、Ｍモジュール４００から構成情報を受信することができる。
【００４０】
いくつかの実施形態においては、Ｍモジュール４００から受信された構成情報は、クラスタ間相互接続３９９及び／又はクラスタ内相互接続５９９ａ上でそのようなテストを実行する際にプロセッサ・コンポーネント５５０によって採用されることが可能である（たとえば、そのように受信された構成情報は、テストされることになるある範囲のＩＰアドレスを含むことができる）。プロセッサ・コンポーネント５５０がそのようなテストを実行するときに、及び／又はそのようなテストを実行した後に、プロセッサ・コンポーネント５５０は、それらのテストの結果及び／又はそれらの結果に対する更新の表示をメタデータの一部分としてＤモジュール６００に中継するようにインターフェース５９０を操作することができる。さらに、プロセッサ・コンポーネント５５０がクライアント・デバイス１００及び／又はその他のデバイスのうちの１つ又は複数と対話するときに、プロセッサ・コンポーネント５５０は、さまざまなテストの実行から特定された情報における変更を検知することができ、更新されたメタデータの諸部分としてそれらの変更の表示をＤモジュール６００に提供するようにインターフェース５９０を操作することができる。
【００４１】
コントロール・ルーチン５４０をさらに実行する際に、プロセッサ・コンポーネント５５０は、クライアント相互接続１９９を介してクライアント・デバイス１００のうちの１つ又は複数との間でストレージ・サービス要求、それらに対する応答、及び／又はクライアント・デバイス・データ１３０をやり取りするようにインターフェース５９０を操作することができる。クライアント・デバイス１００、並びにノード３００ａ〜ｄ及び３００ｙ〜ｚのうちの１つ又は複数のアクティブ・ノードのＮモジュール５００は、クライアント・デバイス・データ１３０の取り扱いのためのクライアント／サーバ・モデルに従ってクライアント相互接続１９９を介して互いに対話することができる。別の言い方をすれば、クライアント・デバイス１００のうちのそれぞれは、クライアント・デバイス・データ１３０の格納に関連したストレージ・サービスを求める要求を、クライアント・デバイス１００との通信に従事するためにアクティブであるノード３００ａ〜ｄ及び３００ｙ〜ｚのうちの１つ又は複数に対して発行することができる。そうする際に、クライアント・デバイス１００及びＮモジュール５００は、クライアント相互接続１９９を介してパケットをやり取りすることができ、それにおいて、ストレージ・サービス要求がＮモジュール５００へ送信されることが可能であり、応答（たとえば、それらの要求の取り扱いのステータスの表示）がクライアント・デバイス１００へ送信されることが可能であり、それらの間においてクライアント・デバイス・データ１３０がやり取りされることが可能である。やり取りされるパケットは、さまざまなファイルベースのアクセス・プロトコルのいずれかを利用することができ、それらのプロトコルは、ＴＣＰ／ＩＰを介したコモン・インターネット・ファイル・システム（ＣＩＦＳ）プロトコル又はネットワーク・ファイル・システム（ＮＦＳ）プロトコルを含むが、それらには限定されない。代替として、又は追加として、やり取りされるパケットは、さまざまなブロックベースのアクセス・プロトコルのいずれかを利用することができ、それらのプロトコルは、ＴＣＰを介してカプセル化されたスモール・コンピュータ・システム・インターフェース（ＳＣＳＩ）プロトコル（ｉＳＣＳＩ）及び／又はファイバ・チャネルを介してカプセル化されたＳＣＳＩ（ＦＣＰ）を含むが、それらには限定されない。
【００４２】
また、コントロール・ルーチン５４０を実行する際に、プロセッサ・コンポーネント５５０は、クライアント・デバイス・データ１３０を含めて、コマンド及び／又はデータを、クラスタ内相互接続５９９ａを介してＤモジュール６００との間でやり取りするようにインターフェース５９０を操作することができる。コマンド及び／又はデータのそのようなやり取りは、パケットが使用されるプロトコルを採用すること又は採用しないことが可能である。いくつかの実施形態においては、クライアント・デバイス・データ１３０のやり取りをもたらすためのデータ・アクセス・コマンドは、クライアント・デバイス・データ１３０をストレージ・デバイスのセット８００ａｂ内に格納する際に使用するために選択されることが可能であるいかなる特定のファイル・システムにも依存しないことが可能である様式でクラスタ内相互接続５９９ａを通じてやり取りされることが可能である。さらに具体的には、クライアント・デバイス・データ１３０を格納する及び／又は取り出すためのデータ・アクセス・コマンド内でクライアント・デバイス・データ１３０の諸部分が呼ばれることが可能である様式は、ファイル・システムの選択から独立していることを意図されている様式で、ファイル名の識別、ブロック識別子の識別などを伴うことができる。
【００４３】
通信のプロトコル及び／又はその他の諸側面におけるあり得る相違を前提として、プロセッサ・コンポーネント５５０は、クライアント相互接続１９９を介したクライアント・デバイス１００のうちの１つ又は複数との通信において採用されているプロトコルと、クラスタ内相互接続５９９ａを介したＤモジュール６００との通信において採用されているプロトコルとの間において変換を行わされることが可能である。代替として、又は追加として、クライアント相互接続１９９を介した通信において採用されているプロトコルのうちの１つ又は複数は、そのような通信と、クラスタ内相互接続５９９ａを介した通信との間において最小度合いのプロトコル変換を可能にする様式でファイル識別及び／又はブロック識別を採用することができる。
【００４４】
そのようなプロトコル変換を実行する際に、プロセッサ・コンポーネント５５０は、クライアント・デバイス１００のうちの１つからのストレージ・サービス要求を、クライアント・デバイス・データ１３０を格納する及び／又は取り出すための１つ又は複数のデータ・アクセス・コマンドとしてＤモジュール６００へ中継することを行わされることが可能である。さらに具体的には、クライアント・デバイス・データ１３０を取り出すためのストレージ・サービスを求める、クライアント相互接続１９９を介して受信された要求は、ストレージ・デバイスのセット８００ａｂからクライアント・デバイス・データ１３０を取り出すために、及びそれらのクライアント・デバイス・データ１３０をＮモジュール５００に提供して、Ｎモジュール５００によって、クライアント・デバイス１００のうちの要求を行っているクライアント・デバイス１００へ中継して戻してもらうためにクラスタ内相互接続５９９ａを介してＤモジュール６００へ伝達される１つ又は複数のデータ・アクセス・コマンドへと変換されることが可能である。また、クライアント・デバイス・データ１３０を格納するためのストレージ・サービスを求める、クライアント相互接続１９９を介して受信された要求は、クライアント・デバイス・データ１３０をストレージ・デバイスのセット８００ａｂ内に格納するためにクラスタ内相互接続５９９ａを介してＤモジュール６００へ伝達される１つ又は複数のデータ・アクセス・コマンドへと変換されることが可能である。
【００４５】
さまざまな実施形態においては、ノード３００ａ〜ｂのうちのそれぞれのＤモジュール６００は、プロセッサ・コンポーネント６５０と、メモリ６６０と、ストレージ相互接続８９９ａｂを介してＤモジュール６００をストレージ・デバイスのセット８００ａｂに結合するためのストレージ・コントローラ６６５と、Ｄモジュール６００をクラスタ内相互接続５９９ａ、クラスタ間相互接続３９９、及びＨＡ相互接続６９９ａｂのうちの１つ又は複数に結合するためのインターフェース６９０とのうちの１つ又は複数を組み込む。メモリ６６０は、コントロール・ルーチン６４０及びメタデータ６３０ａｂのうちの１つ又は複数を格納する。また、さらに詳細に説明されることになるが、ノード３００ａのＤモジュール６００において、メモリ６６０の一部分が、同期化キャッシュ（シンク・キャッシュ）６３９ａとしての役割を果たすように割り当てられることが可能であり、その一方でノード３００ｂのＤモジュールにおいて、メモリ６６０の一部分が、同期キャッシュ６３９ｂとしての役割を果たすように同様に割り当てられることが可能である。コントロール・ルーチン６４０は、さまざまな機能を実行するためのロジックを実装するために、プロセッサ・コンポーネント６５０上で、Ｄモジュール６００のメイン・プロセッサ・コンポーネントとしてのその役割において機能する命令のシーケンスを組み込む。しかしながら、ノード３００ａが、クライアント・デバイス１００のうちの１つ又は複数との通信に従事するために、及びデータ・アクセス・コマンドを実行するためにアクティブである結果として、ノード３００ｂのＤモジュールのプロセッサ・コンポーネント６５０によって実行されることが可能であるコントロール・ルーチン６４０の一部分とは異なるコントロール・ルーチン６４０の部分が、ノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０によって実行されることが可能である。結果として、これらのＤモジュール６００のそれぞれの中のコントロール・ルーチン６４０の別々の部分の実行によって別々のロジックが実施されることが可能である。
【００４６】
コントロール・ルーチン６４０を実行する際に、アクティブ・ノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０は、Ｍモジュール４００及び／又はＮモジュール５００からクラスタ内相互接続５９９ａを介してメタデータの諸部分及び／又はそれらに対する更新を受信するようにインターフェース６９０を操作することができる。少なくともノード３００ａのオペレーションの諸側面がＭモジュール４００を介してリモートから構成されているか、及び／又はＮモジュール５００によって実行されたテストの結果に基づいて構成されているかにかかわらず、プロセッサ・コンポーネント６５０は、結果として生じるそれらの側面の構成を示すそれらの受信されたメタデータ部分からのメタデータ６３０ａｂを生成することができ、メタデータ６３０ａｂを、プロセッサ・コンポーネント６５０によるその後の使用のためにメモリ６６０内に格納することができる。プロセッサ・コンポーネント６５０は、メタデータの更新された部分をＭモジュール４００、Ｎモジュール５００、及び／又は、更新されたメタデータ部分のその他のあり得るソースから受信したことに応答してメタデータ６３０ａｂの生成を繰り返し、それによってメタデータ６３０ａｂの更新されたバージョンを作成することができ、その更新されたバージョンを、プロセッサ・コンポーネント６５０が、以前のバージョンの代わりにメモリ６６０内に格納することができる。
【００４７】
メタデータ６３０ａｂ及び／又はそのそれぞれの更新されたバージョンの生成に続いて、プロセッサ・コンポーネント６５０は、メタデータ６３０ａｂを、その後の取り出しのためにストレージ・デバイスのセット８００ａｂ内に格納することができる。ノード３００ａのＤモジュール６００のその後のリブート中に、プロセッサ・コンポーネント６５０は、自分がコントロール・ルーチン６４０を実行することによって、ストレージ・デバイスのセット８００ａｂにアクセスしてメタデータ６３０ａｂを取り出すことを行わされることが可能である。この方法においては、プロセッサ・コンポーネント６５０は、Ｄモジュール６００がストレージ・デバイスのセット８００ａｂを操作することになる様式、及び／又はＤモジュール６００がその他のデバイス（たとえば、ノード３００ａのＭモジュール４００若しくはＮモジュール５００、及び／又は、その他のノード３００ｂ〜ｄ若しくは３００ｙ〜ｚのうちの１つ若しくは複数のＮモジュール５００若しくはＤモジュール６００）と対話することになる様式を含めて、少なくともノード３００ａのオペレーションのさまざまな側面が構成されることになる様式の表示を取り出す。ノード３００ａのＤモジュール６００が、少なくともノード３００ａのオペレーションの諸側面に関する情報を入手することを、Ｍモジュール４００及び／又はＮモジュール５００から独立してそうすることによって、できるだけ迅速に行うことを可能にすることが望ましいとみなされる場合がある。
【００４８】
Ｍモジュール４００、Ｎモジュール５００、及びＤモジュール６００のうちの複数を含めて、ノード３００ａの複数のコンポーネントがリブートさせられる場合があり得るが、それらの場合は、更新、アップグレード、ストレージ・スペースの拡張、修理などを実施することを含むが、それらには限定されない。Ｄモジュール６００のリブートに続いてその後の取り出しのためにストレージ・デバイスのセット８００ａｂ内にメタデータ６３０ａｂを格納することによって、Ｄモジュール６００が、メタデータ６３０ａｂを再び得るための元となるメタデータ部分を提供される前にＭモジュール４００及び／又はＮモジュール５００のリブートの完了を待つ必要性が回避される。
【００４９】
代替として、又は追加として、Ｍモジュール４００及び／又はＮモジュール５００が機能しなくなるかもしれない状況が起こり得る。例として、Ｍモジュール４００、Ｎモジュール５００、及びＤモジュール６００のうちの複数がリブートされる場合には、Ｍモジュール４００及び／又はＮモジュール５００が成功裏にリブートできない可能性があり、それによって、Ｍモジュール４００又はＮモジュール５００のいずれかが、延長された時間のピリオドにわたって、メタデータ６３０ａｂを構成するメタデータ部分を提供するためのＤモジュール６００からのいかなる要求にも応答しないままとなる。したがって、メタデータ６３０ａｂを独立して取り出すＤモジュール６００の能力は、Ｄモジュール６００が、ノード３００ａの少なくとも何らかの機能の喪失にもかかわらず、その他のノード３００ｂ〜ｄ及び／又は３００ｙ〜ｚのうちの１つ又は複数のＮモジュール５００及び／又はＤモジュール６００と依然として協力して、クライアント・デバイス・データ１３０のフォールト・トレラントな格納及び取り出しを提供することを可能にすることができる。
【００５０】
また、メタデータ６３０ａｂ及び／又はそのそれぞれの更新されたバージョンの生成に続いて、ノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０は、アクティブ・ノード３００ａ内の障害に応答してそのノード３００ａをノード３００ｂがさらにスピーディーに引き継ぐことを可能にするためにＨＡ相互接続６９９ａｂを介して非アクティブ・ノード３００ｂのＤモジュール６００へメタデータ６３０ａｂの複製を送信するようにインターフェース６９０を操作することができる。この方法においては、ノード３００ｂは、１つ若しくは複数のクライアント・デバイスとの通信を引き継ぐこと、ノード３００ｃ〜ｄ及び／若しくは３００ｙ〜ｚのうちの１つ若しくは複数の他のノードとの通信を引き継ぐこと、並びに／又はストレージ・デバイスのセット８００ａｂのコントロール及び／若しくはストレージ・デバイスのセット８００ａｂに対するアクセスを引き継ぐことをさらに容易に行うためにノード３００ｂによって必要とされる情報を提供する目的でメタデータ６３０ａｂ及び／又はその更新されたバージョンを直接に提供される。
【００５１】
コントロール・ルーチン６４０をさらに実行する際に、ノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０は、説明されているように、クライアント・デバイス・データ１３０を格納すること及び取り出すことを、クラスタ内相互接続５９９ａを介して受信されたそうするためのデータ・アクセス・コマンドに応答して行うように、ストレージ・コントローラ６６５を通じてストレージ・デバイスのセット８００ａｂを操作することができる。プロセッサ・コンポーネント６５０は、クラスタ内相互接続５９９ａを介してＮモジュール５００からデータ・アクセス・コマンドを受信すること、及び／又はＮモジュール５００との間でデータ（クライアント・デバイス・データ１３０を含む）をやり取りすることを行うようにインターフェース６９０を操作することができる。
【００５２】
クライアント・デバイス・データ１３０をストレージ・デバイスのセット８００ａｂ内に格納すること、及び／又はクライアント・デバイス・データ１３０をそこから取り出すことを行うためのデータ・アクセス・コマンドを実行するようにストレージ・コントローラ６６５を操作することに加えて、ノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０は、それらのデータ・アクセス・コマンドをレプリケートすること、及び結果として生じるレプリカ・データ・アクセス・コマンドを、クラスタ間相互接続３９９を介してその他のクラスタ１３００ｚのＨＡグループ１６００ｙｚのノード３００ｙ〜ｚのうちのアクティブ・ノードのＤモジュール６００へ送信するようにインターフェース６９０を操作することも可能である。論じられているように、別のＨＡグループのアクティブ・ノードへのそのようなレプリカ・データ・アクセス・コマンドの送信は、クライアント・デバイス・データ１３０の格納及び／又は取り出しにおけるさらなる度合いのフォールト・トレランスを提供することができ、そのフォールト・トレランスにおいては、ノード３００ａによる元のデータ・アクセス・コマンドの実行と少なくとも部分的に並列に、別のクラスタのアクティブ・ノードによってレプリカ・データ・アクセス・コマンドが実行されることが可能である。また、プロセッサ・コンポーネント６５０は、レプリカ・データ・アクセス・コマンドの受信又は実行におけるエラーの表示に応答して、ＨＡグループ１６００ｙｚ内のノード３００ｙ〜ｚのうちの同じアクティブ・ノードへの、及び／又はＨＡグループ１６００ｙｚ内のノード３００ｙ〜ｚのうちの別の非アクティブ・ノードへのそのようなレプリカ・データ・アクセス・コマンドの送信を再試行することを行わされることが可能である。
【００５３】
ノード３００ａのＤモジュール６００と、ノード３００ｙ〜ｚのうちのアクティブ・ノードのＤモジュール６００との間におけるレプリカ・データ・アクセス・コマンド及びそれらに対する応答のそのようなやり取りをサポートして、ノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０は、メタデータ６３０ａｂ内に含まれている情報を採用して、クラスタ間相互接続３９９を通じたその他のアクティブ・ノードのＤモジュール６００とのアクティブな通信セッションを形成することができる。プロセッサ・コンポーネント６５０は、クラスタ間相互接続３９９を通じたノード３００ｙ〜ｚのうちの非アクティブ・ノードのＤモジュールとの非アクティブな通信セッションを、その非アクティブ・ノードのＤモジュール６００へのレプリカ・データ・アクセス・コマンドの送信を再試行することに備えて、さらに形成することができる。さらに、プロセッサ６５０がその非アクティブな１つのノードのＤモジュール６００へのレプリカ・データ・アクセス・コマンドの送信を再試行した場合には、プロセッサ・コンポーネント６５０は、その非アクティブ・ノードのＤモジュール６００との間で形成されている非アクティブな通信セッションの状態を非アクティブからアクティブへ変更するように作動することができる。
【００５４】
コントロール・ルーチン６４０を実行する際に、非アクティブ・ノード３００ｂのＤモジュール６００のプロセッサ・コンポーネント６５０は、ＨＡ相互接続６９９ａｂを介してノード３００ａのＤモジュール６００からメタデータ６３０ａｂ及び／又はそれに対する更新を受信するようにインターフェース６９０を操作することができる。プロセッサ・コンポーネント６５０は次いで、受信されたメタデータ６３０ａｂ及び／又は受信されたそれに対する更新を、その後の使用のためにメモリ６６０内に格納することができる。また、メタデータ６３０ａｂ及びそれに対する更新をノード３００ａによってノード３００ｂに供給することは、ノード３００ｂが、ノード３００ａ内で生じている障害に応答してノード３００ａをさらに迅速に引き継ぐこと（それによって、ＨＡグループ１６００ａｂの非アクティブ・ノードであることから、ＨＡグループ１６００ａｂのアクティブ・ノードになることへ遷移すること）を可能にする上で望ましいとみなされる場合がある。さらに具体的には、メタデータ６３０ａｂがノード３００ｂのＤモジュール６００に既に提供されていることに伴って、ノード３００ｂのＤモジュール６００のプロセッサ・コンポーネント６５０がその他のソースからメタデータ６３０ａｂを取り出すことにさらなる時間をかける必要性が軽減される。さらに正確には、プロセッサ・コンポーネントが、ノード３００ａを引き継ぐ際に、メタデータ６３０ａｂをストレージ・デバイスのセット８００ａｂから取り出す、又はメタデータの諸部分をノード３００ａ若しくは３００ｂのうちのいずれかのＭモジュール４００及び／若しくはＮモジュール５００に要求する必要性が軽減される。
【００５５】
示されているように、メタデータ６３０ａｂは、不変メタデータ６３１ａｂ及び可変メタデータ６３２ａｂを含むことができる。メタデータのどんな断片が不変メタデータ６３１ａｂ及び可変メタデータ６３２ａｂのそれぞれに含まれるかは、メタデータのそれぞれの断片が変わると予想される相対的な頻度に基づくことが可能である。例として、ストレージ・デバイスのセット８００ａｂ内におけるクライアント・デバイス・データ１３０の格納の諸側面、たとえば、ファイル・システムの選択、ＲＡＩＤレベルなどは、その他のメタデータと比べて、変わる可能性がより低い、又はより低い頻度で変わる可能性が高いとみなされている結果として、不変であるとみなされることが可能である。対照的に、ノード３００ａが相互接続３９９、５９９ａ、又は６９９ａｂのうちの１つを介して通信することができる相手のその他のノード３００ａ〜ｄ又は３００ｙ〜ｚのうちの１つのＭモジュール、Ｎモジュール、又はＤモジュールのネットワーク・アドレスは、その他のメタデータと比べて、変わる可能性がより高い、又はより高い頻度で変わる可能性が高いとみなされている結果として、可変であるとみなされることが可能である。
【００５６】
可変メタデータ６３２ａｂは、不変メタデータ６３１ａｂ内に含まれている少なくともノード３００ａのオペレーションの諸側面の表示よりも高い頻度で変わる可能性が高いとみなされる同様の表示を含むので、少なくとも可変メタデータ６３２ａｂ内に含まれている情報は、より頻繁に古くなる可能性がある。ノード３００ａのＤモジュール６００のリブートに続いて、ストレージ・デバイス８００ａｂから入手された可変メタデータ６３２ａｂ内の情報を採用して、ノード３００ａのその他のコンポーネントと、並びに／又はノード３００ｂ〜ｄ及び／若しくは３００ｙ〜ｚのうちの他のノードのコンポーネントと通信するというプロセッサ・コンポーネント６５０による試みが不成功である場合には、プロセッサ・コンポーネント６５０は、可変メタデータ６３２ａｂ内に含まれている情報の更新されたバージョンを含むメタデータ部分を求める要求を、クラスタ内相互接続５９９ａを介してＭモジュール４００及び／又はＮモジュール５００へ送信するようにインターフェース６９０を操作することができる。Ｍモジュール４００及び／又はＮモジュール５００もリブートしているかどうかに応じて、プロセッサ・コンポーネント６５０は、それらのリブートの完了を待つこと、及び次いでそれらの更新されたメタデータ部分を求める自分の要求を再送信することを行わされることが可能である。その要求を受信したことに応答して、プロセッサ・コンポーネント４５０及び／又は５５０は、コントロール・ルーチン４４０及び／又は５４０の実行によって、そのような更新されたメタデータ部分を、クラスタ内相互接続５９９ａを介してＤモジュール６００へ送信するようにインターフェース４９０及び／又は５９０をそれぞれ操作することを行わされることが可能である。更新された情報を受信すると、プロセッサ・コンポーネント６５０は次いで、その更新された情報を可変メタデータ６３２ａｂ内に組み込み、更新された可変メタデータ６３２ａｂを組み込んでいるメタデータ６３０ａｂを再び生成し、今更新されたメタデータ６３０ａｂをメモリ６６０及びストレージ・デバイスのセット８００ａｂ内に格納し、メモリ６６０内の今更新されたメタデータ６３０ａｂを採用して、ノード３００ａのその他のコンポーネントと、並びに／又はノード３００ｂ〜ｄ及び／若しくは３００ｙ〜ｚのうちの他のノードのコンポーネントと通信するという別の試みを行うようにインターフェース６９０を操作することができる。
【００５７】
いくつかの実施形態においては、今更新された可変メタデータ６３２ａｂを組み込んでいるメタデータ６３０ａｂを使用して通信を行うというプロセッサ・コンポーネント６５０による試みも不成功である場合には、プロセッサ・コンポーネント６５０は、不変メタデータ６３１ａｂを構成する情報の更新されたバージョンを求める要求をＭモジュール４００及び／又はＮモジュール５００へ送信するようにインターフェース６９０を操作することができる。不変メタデータ６３１ａｂの更新されたバージョンは、可変メタデータ６３２ａｂの更新されたバージョン内に含まれている情報を使用することと併せて必要とされるオペレーションの諸側面の表示を含む可能性がある。更新された情報を受信すると、プロセッサ・コンポーネント６５０は次いで、その更新された情報を不変メタデータ６３１ａｂ内に組み込み、更新された不変メタデータ６３１ａｂを組み込んでいるメタデータ６３０ａｂを再び生成し、今更新されたメタデータ６３０ａｂをメモリ６６０及びストレージ・デバイスのセット８００ａｂ内に格納し、今更新されたメタデータ６３０ａｂを採用して、ノード３００ａのその他のコンポーネントと、並びに／又はノード３００ｂ〜ｄ及び／若しくは３００ｙ〜ｚのうちの他のノードのコンポーネントと通信するというさらなる試みを行うことができる。
【００５８】
ノード３００ａ又は３００ｂのうちの一方が他方を引き継ぐ必要があるかどうかを特定することの一部として、ノード３００ａ及び３００ｂのうちのそれぞれのＤモジュールのプロセッサ・コンポーネント６５０同士が協力して、それらの間において延在するＨＡ相互接続６９９ａｂを介して自分のノードのステータスの表示を繰り返しやり取りすることができる。前述のように、ステータス表示のそのようなやり取りは、オペレーションを実行すること（たとえば、データ・アクセス・コマンドを実行すること）の現在の状態の繰り返す「ハートビート」信号及び／又は表示という形態を取ることができる。また、ノード３００ａ〜ｂのうちの一方のコンポーネントが機能不良に苛まれているという表示は、予期されているハートビート信号又はその他のステータス表示が、指定された時間のピリオド内に（たとえば、繰り返す時間のインターバル内に）ノード３００ａ〜ｂのうちの他方によって受信されないことであり得る。アクティブ・ノード３００ａのＤモジュール６００が、非アクティブ・ノード３００ｂ内の障害の表示を受信した場合には、ノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０（又はノード３００ａの別のコンポーネント）は、ノード３００ｂを引き継ぐためのアクションを取ることを差し控えることができる。なぜなら、ノード３００ｂは非アクティブであり、それによってノード３００ｂは、ノード３００ｂの引き継ぎを必要とするタスクを実行していない可能性があるからである。
【００５９】
しかしながら、非アクティブ・ノード３００ｂのＤモジュール６００が、アクティブ・ノード３００ａ内の障害の表示を受信した場合には、非アクティブ・ノード３００ｂのＤモジュール６００のプロセッサ・コンポーネント６５０（又は非アクティブ・ノード３００ｂの別のコンポーネント）は、ノード３００ａを引き継ぐためのアクションを取ることができる、なぜなら、ノード３００ａはアクティブであって、クライアント・デバイス１００との通信に従事し、データ・アクセス・コマンドを実行し、別のアクティブ・ノードと協力して、それらの間におけるデータ・アクセス・コマンドの少なくとも部分的な並列実行をもたらしているからである。例として、ノード３００ｂのＤモジュール６００のプロセッサ・コンポーネント６５０は、クライアント・デバイス１００のうちの１つ若しくは複数との通信を引き継ぐようにノード３００ｂのＮモジュール５００にシグナリングすることができ、及び／又はノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０によって実行されたデータ・アクセス・コマンドを実行することを開始することができる。それらのデータ・アクセス・コマンドの実行を引き継ぐ際に、ノード３００ｂのＤモジュール６００のプロセッサ・コンポーネント６５０は、ノード３００ａ及び３００ｂのうちの両方のＤモジュール６００同士がストレージ相互接続８９９ａｂを通じてストレージ・デバイスのセット８００ａｂに対して共有している結合を介して、ストレージ・デバイスのセット８００ａｂに対するアクセス及びストレージ・デバイスのセット８００ａｂのコントロールを引き継ぐことができる。
【００６０】
非アクティブ・ノード３００ｂが、アクティブ・ノード３００ａ内で生じている障害に応答してそのノード３００ａを実際に引き継ぐ場合には、ノード３００ａ及び３００ｂのアクティブな役割及び非アクティブな役割は、少なくともノード３００ａ内の障害が是正された後に、完全に逆転することが可能である。さらに具体的には、ノード３００ｂのＭモジュール４００及びＮモジュール５００は、アクティブになって、クライアント相互接続１９９を介してクライアント・デバイス１００との通信に従事して、構成情報及びストレージ・サービス要求を受信し、それによって、ノード３００ａのＭモジュール４００及びＮモジュール５００を引き継ぐことができ、その一方で、ノード３００ａのＭモジュール４００及びＮモジュール５００は、非アクティブになる。同様に、ノード３００ｂのＤモジュール６００は、アクティブになって、データ・アクセス・コマンドを実行及びレプリケートし、クラスタ間相互接続３９９を介して別のアクティブ・ノードへレプリカ・データ・アクセス・コマンドを送信して、データ・アクセス・コマンドの少なくとも部分的な並列実行をもたらし、それによって、ノード３００ａのＤモジュール６００を引き継ぐことができ、その一方で、ノード３００ａのＤモジュール６００は、非アクティブになる。しかしながら、アクティブになる際に、今非アクティブなノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０は、ノード３００ｂのＤモジュール６００のプロセッサ・コンポーネント６５０と協力して、ノード３００ｂ内で生成されたメタデータ６３０ａｂの新たなバージョンを受信し、ＨＡ相互接続６９９ａｂを介してノード３００ｂのＤモジュール６００との間でステータスの表示をやり取りして、今アクティブなノード３００ｂをノード３００ａがその後に引き継ぐべきかどうかを特定することができる。
【００６１】
ノード３００ａ及び３００ｂのうちのそれぞれのＤモジュール６００のプロセッサ・コンポーネント６５０は、メモリ６６０のうちの対応するメモリ６６０の一部分を、同期化キャッシュ６３９ａ及び６３９ｂとして指定すること、又はその他の形で使用することが可能であり、同期化キャッシュ６３９ａ及び６３９ｂはそれぞれ、ノード３００ａ〜ｄ及び／又は３００ｙ〜ｚのうちの他のノードのＤモジュール６００と通信状態にある。さらに具体的には、ノード３００ａ及び３００ｂのＤモジュール６００のプロセッサ・コンポーネント６５０は、同期化キャッシュ６３９ａ及び６３９ｂをそれぞれ採用して、それらの間においてやり取りされたメタデータ６３０ａｂ及び／又はステータス表示のバージョンをバッファすることができる。代替として、又は追加として、ノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０は、同期化キャッシュ６３９ａを保持及び採用して、別のクラスタの別のＨＡペアの別のアクティブ・ノードへ送信されたレプリカ・データ・アクセス・コマンド、及び／又はその別のアクティブ・ノードから受信されたそれらのレプリカ・データ・アクセス・コマンドの実行のステータスの表示をバッファすることができる。
【００６２】
広範には、クライアント・デバイス１００、ノード３００ａ〜ｄ及び３００ｙ〜ｚ、Ｍモジュール４００、Ｎモジュール５００、Ｄモジュール６００、並びに／又はストレージ・デバイス８００ａｂ、８００ｃｄ、及び８００ｙｚのそれぞれは、さまざまなタイプのコンピューティング・デバイスのいずれかであることが可能であり、それらのコンピューティング・デバイスは、デスクトップ・コンピュータ・システム、データ入力端末、ラップトップ・コンピュータ、ネットブック・コンピュータ、タブレット・コンピュータ、ハンドヘルド携帯情報端末、スマートフォン、スマート・メガネ、スマート腕時計、デジタル・カメラ、衣類内に組み込まれている身体装着型コンピューティング・デバイス、乗り物（たとえば、車、自転車、車いすなど）の中に統合されているコンピューティング・デバイス、サーバ、サーバのクラスタ、サーバ・ファームなどを含むが、それらには限定されない。
【００６３】
いくつかの実施形態においては、ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちの１つ又は複数は、クラスタ内相互接続５９９ａ又は５９９ｚのうちの対応するクラスタ内相互接続の物理的な実装によって結合された別々のコンピューティング・デバイスとしてそれぞれが実装される１つ又は複数のＭモジュール４００、１つ又は複数のＮモジュール５００、及び１つ又は複数のＤモジュール６００のアセンブリとして物理的に実装されることが可能である。しかしながら、その他の実施形態においては、ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちの１つ又は複数のＭモジュール４００、Ｎモジュール５００、及びＤモジュール６００のうちの複数は、共有プロセッサ・コンポーネント（たとえば、プロセッサ・コンポーネント４５０、５５０、又は６５０のうちの１つ）によるプロセスとして実行される命令のセットとして実装されることが可能である。そのようなその他の実施形態においては、ノード同士の間において延在していないクラスタ内相互接続５９９ａ又は５９９ｚの少なくとも一部分は、コントロール・ルーチン４４０、５４０、及び／又は６４０の間においてデータ・アクセス・コマンド、クライアント・デバイス・データ１３０、及びメタデータ６３０ａｂをやり取りするために採用される、共有メモリ（たとえば、メモリ４６０、５６０、又は６６０のうちの１つ）の中で定義されるバッファ又はその他のデータ構造として実装されることが可能である。
【００６４】
本明細書において提示されている例においては、クライアント・デバイス１００のうちの１つ又は複数は、クライアント・デバイス・データ１３０を生成すること、及び／又はクライアント・デバイス・データ１３０を用いて作業することを行うために１人又は複数の人によって直接操作されるコンピューティング・デバイスであることが可能であり、ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちの１つ又は複数は、そのようなクライアント・デバイス・データ１３０をリモートに格納すること、並びにそれに対するアクセスをフォールト・トレラントな様式でクライアント・デバイス１００に提供することを行うためにサーバとして機能するコンピューティング・デバイスであることが可能である。代替として、又は追加として、本明細書において提示されている例においては、クライアント・デバイス１００のうちの１つ又は複数は、クライアント・デバイス・データ１３０の少なくとも一部分を格納すること、及びクライアント・デバイス・データ１３０の少なくとも一部分に対するアクセスを提供することを行うためにサーバとして機能するコンピューティング・デバイスであることが可能であり、ノード３００ａ〜ｄ及び３００ｙ〜ｚのうちの１つ又は複数は、クライアント・デバイス１００のうちの１つ又は複数によって提供されるストレージを増補するためにさらなるサーバとして機能するコンピューティング・デバイスであることが可能である。
【００６５】
図４は、ストレージ・クラスタ・システム１０００のクラスタ１３００ａのＨＡグループ１６００ａｂの別の例示的な実施形態のブロック図をさらに詳細に示している。再び示されているように、ＨＡグループ１６００ａｂのノード３００ａ及び３００ｂのうちで、ノード３００ａは、クライアント・デバイス１００との通信に従事して、ストレージ・デバイスのセット８００ａｂ内のクライアント・デバイス・データ１３０を変更するオペレーションを実行するためにアクティブであることが可能であり、その一方でノード３００ｂは、非アクティブでいて、ノード３００ａを引き継ぐ必要性を待っていることが可能である。図４はまた、ストレージ・デバイスのセット８００ａｂ内におけるメタデータ６３０ａｂの生成、複製、及び格納のさまざまな側面をクライアント・デバイス・データ１３０と並べてさらに詳細に示している。
【００６６】
ストレージ・デバイスのセット８００ａｂ、８００ｃｄ、及び８００ｙｚのそれぞれは、さまざまなストレージ・テクノロジーのいずれかに基づくストレージ・デバイスから構成されることが可能であり、それらのストレージ・デバイスは、強磁性の「ハード」ドライブ又は「フロッピー」ドライブ、光磁気メディア・ドライブ、光メディア・ドライブ、不揮発性のソリッド・ステート・ドライブなどを含むが、それらには限定されない。示されているように、ストレージ・デバイスのセット８００ａｂは、ＬＵ８６２ｔ〜ｖを含むことができ、ＬＵ８６２ｔ〜ｖは共に操作されて、１つのそのようなアレイを形成することが可能である。いくつかの実施形態においては、ノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０は、ストレージ・デバイスのセット８００ａｂのストレージ・デバイスのそれぞれを別々のＬＵとして扱うようにストレージ・コントローラ６６５を操作することができ、及び／又はそれらのストレージ・デバイスのグループを単一のＬＵとして扱わされることが可能である。複数のＬＵは、内部でのデータの格納におけるフォールト・トレランスを与えるあるレベルのＲＡＩＤ又はその他の形態のアレイを実装するようにストレージ・コントローラ６６５を介して共に操作されることが可能である。ストレージ・デバイスのセット８００ａｂの１つ若しくは複数のストレージ・デバイスの間においてＬＵが定義される様式、及び／又は複数のＬＵが共に操作されることが可能である様式は、メタデータ６３０ａｂ内で指定されることが可能である。
【００６７】
プロセッサ・コンポーネント６５０は、単一のＬＵ内で、及び／又は、アレイを形成するように共に操作される複数のＬＵ内でさまざまな方法のいずれかでストレージ・スペースを割り当てることを行わされることが可能である。そうする際に、プロセッサ・コンポーネント６５０は、単一のＬＵ内で、及び／又は、共に操作される複数のＬＵ内でさまざまな方法のいずれかでストレージ・スペースを細分することを行わされることが可能である。例として、そのような細分は、クライアント・デバイス・データ１３０を主題に基づいて別々のカテゴリーへと整理することの一部として、クライアント・デバイス・データ１３０を、時間と共に生成された別々のバージョンへと分割することの一部として、クライアント・デバイス・データ１３０の別々の断片に対して別々のアクセス・ポリシーを実施することの一部として、といった具合にもたらされることが可能である。いくつかの実施形態においては、示されているように、ＬＵ８６２ｔ内、又はＬＵ８６２ｔ〜ｖの組合せ内によって提供されるストレージ・スペースは、アグリゲート８７２と指定されることが可能である。さらに、アグリゲート８７２は、ボリューム８７３ｐ〜ｒへと細分されることが可能である。アグリゲート及び／又はボリュームが定義される様式は、１つ又は複数の広く知られて使用されているファイル・システムの仕様に準拠するように選択されることが可能であり、それらの仕様は、ライト・エニウェア・ファイル・レイアウト（ＷＡＦＬ）を含むが、それらには限定されない。アグリゲート、及び／又はアグリゲート内のボリュームが、単一のＬＵ、又は共に操作される複数のＬＵの間において割り当てられる様式は、メタデータ６３０ａｂ内で指定されることが可能である。
【００６８】
クライアント・デバイス・データ１３０は、ボリューム８７３ｐ〜ｒのうちの１つの中に完全に格納されることが可能であり、又は（示されているように）ボリューム８７３ｐ〜ｒのうちの複数のボリュームの間で分散されることが可能である。また示されているように、メタデータ６３０ａｂは、少なくとも同じアグリゲート８７２内において、クライアント・デバイス・データ１３０と共にストレージ・デバイスのセット８００ａｂ内に格納されることも可能である。いくつかの実施形態においては、メタデータ６３０ａｂは、（示されているように）クライアント・デバイス・データ１３０と同じボリューム８７３ｐ〜ｒのうちの１つ又は複数の中に格納されることが可能である。その他の実施形態においては、メタデータ６３０ａｂは、クライアント・デバイス・データ１３０が内部に格納されることが可能であるボリューム８７３ｐ〜ｒのうちの１つ又は複数の他のボリュームとは別個のボリューム８７３ｐ〜ｒのうちの１つの中に格納されることが可能である。メタデータ６３０ａｂ及び／又はクライアント・デバイス・データ１３０がアグリゲート及び／又は値内で編成される様式は、メタデータ６３０ａｂ内で指定されることが可能である。
【００６９】
前述のように、アクティブ・ノード３００ａのＭモジュール４００は、クライアント・デバイス１００のうちの１つから構成情報を受信したことに応答して、メタデータの諸部分を、それらに対する更新を含めて、Ｎモジュール５００及び／又はＤモジュール６００に提供することができる。また、アクティブ・ノード３００ａのＮモジュール５００は、Ｎモジュール５００によって実行されたさまざまなテストの結果を示すメタデータの諸部分を、それらに対する更新を含めて、Ｄモジュール６００に提供することができる。メタデータ６３０ａｂ及び／又はその更新されたバージョンは、アクティブ・ノード３００ａのＤモジュール６００によって受信されたメタデータのこれらの部分から生成されることが可能であり、次いで、プロセッサ・コンポーネント６５０によるその後の使用のためにメモリ６６０内に、及び／又はＤモジュール６００のリブートに続くその後の取り出しのためにストレージ・デバイスのセット８００ａｂ内に格納されることが可能である。代替として、又は追加として、メタデータ６３０ａｂの複製が生成されて、複製データ６３６ａｂの一部分として同期化キャッシュ６３９ａ内に格納されることが可能であり、それによって、メタデータ６３０ａｂの複製が、インターフェース６９０及びＨＡ相互接続６９９ａｂを介して非アクティブ・ノード３００ｂのＤモジュール６００へ送信されることが可能である。ノード３００ｂのＤモジュール６００のインターフェース６９０を介して受信されると、複製データ６３６ａｂは、同期化キャッシュ６３９ｂ内に格納されることが可能であり、そこから、メタデータ６３０ａｂの複製が取り出されて、ノード３００ｂのＤモジュール６００のプロセッサ・コンポーネント６５０によるその後の使用のためにメモリ６６０内の他の場所に格納されることが可能である。
【００７０】
図５Ａ及び図５Ｂは両方とも、ストレージ・クラスタ・システム１０００のアクティブ・ノード３００ａと３００ｙとの間における相互接続の例示的な一実施形態のブロック図をさらに詳細に示している。さらに具体的には、図５Ａは、ノード３００ａと３００ｙとの間におけるデータ・アクセス・コマンドのレプリケーション及び少なくとも部分的な並列実行の諸側面をさらに詳細に示している。図５Ｂは、ノード３００ａ及び３００ｙによるそのような少なくとも部分的な並列実行によって生成された応答同士を結合及び中継することの諸側面をさらに詳細に示している。図５Ａ及び図５Ｂの両方において示されているように、ノード３００ａは、クライアント・デバイス１００との通信に従事して、ストレージ・デバイスのセット８００ａｂ内のクライアント・デバイス・データ１３０を変更するデータ・アクセス・コマンドを実行するためにアクティブであることが可能であり、その一方でノード３００ｙは、ノード３００ａとの通信に従事して、ノード３００ａと少なくとも部分的に並列にストレージ・デバイスのセット８００ｙｚ内のクライアント・デバイス１３０を変更するレプリカ・データ・アクセス・コマンドを実行するためにアクティブであることが可能である。
【００７１】
図５Ａを参照すると、前述のように、アクティブ・ノード３００ａのＮモジュール５００は、クライアント・デバイス１００のうちの１つからのクライアント・デバイス・データ１３０及び／又はストレージ・サービス要求１７０を受信することができ、それらは次いで、メモリ５６０内に一時的に格納されることが可能である。クライアント・デバイス・データ１３０を格納すること及び／又は取り出すことを行いたいというストレージ・サービス要求１７０は次いで、クライアント・デバイス・データ１３０を格納すること及び／又は取り出すことをそれぞれ行うためのデータ・アクセス・コマンド５７０へと変換されることが可能である。そのような変換に続いて、及び／又はそのような変換が生じたときに、クライアント・デバイス・データ１３０及び／又はストレージ・サービス要求１７０は、アクティブ・ノード３００ａのＤモジュール６００へ中継されることが可能であり、クライアント・デバイス・データ１３０及び／又はストレージ・サービス要求１７０は次いで、ノード３００ａのＤモジュール６００によって実行されることに備えてメモリ６６０内に一時的に格納されることが可能である。しかしながら、そのような実行に加えて、データ・アクセス・コマンド５７０がレプリケートされて、対応するレプリカ・データ・アクセス・コマンド６７０を生成することが可能であり、そのレプリカ・データ・アクセス・コマンド６７０は、レプリケーション・データ６３３ａの一部分として同期化キャッシュ６３９ａ内に格納されることが可能である。レプリケーション・データ６３３ａは、バッファとしての役割を果たすことができ、そのバッファのコンテンツは、インターフェース６９０及びクラスタ間相互接続３９９を介してアクティブ・ノード３００ｙのＤモジュール６００へ繰り返し送信される。レプリカ・データ・アクセス・コマンド６７０が、クライアント・デバイス・データ１３０の断片を格納するためのコマンドを含む場合には、そのような断片は、レプリカ・データ・アクセス・コマンド６７０と共にノード３００ｙへ送信されることになるレプリケーション・データ６３３ａの別の部分として同期化キャッシュ６３９ａ内に格納されることが可能である。
【００７２】
ノード３００ｙのＤモジュール６００のインターフェース６９０を介して受信されると、レプリケーション・データ６３３ａの繰り返し送信されたコンテンツは、レプリケーション・データ６３３ｙの一部分として同期化キャッシュ６３９ｙ内に一時的に格納されることが可能である。受信されたレプリカ・データ・アクセス・コマンド６７０、及び／又は、クライアント・デバイス・データ１３０の関連付けられている断片は次いで、レプリケーション・データ６３３ｙから取り出されて、ノード３００ｙのＤモジュール６００によるレプリカ・データ・アクセス・コマンド６７０の実行に備えてメモリ６６０内の他の場所に一時的に格納されることが可能である。ノード３００ｙのＤモジュール６００は次いで、ストレージ・デバイスのセット８００ｙｚ内にクライアント・デバイス・データ１３０を格納すること、及び／又はストレージ・デバイスのセット８００ｙｚからクライアント・デバイス・データ１３０を取り出すことを行うためのレプリカ・データ・アクセス・コマンド６７０を、同様にストレージ・デバイスのセット８００ａｂ内にクライアント・デバイス・データ１３０を格納すること、及び／又はストレージ・デバイスのセット８００ａｂからクライアント・デバイス・データ１３０を取り出すことを行うためのデータ・アクセス・コマンド５７０をノード３００ａのＤモジュール６００が実行するのと少なくとも部分的に並列に実行する。
【００７３】
図５Ｂを参照すると、レプリカ・データ・アクセス・コマンド６７０がノード３００ｙのＤモジュール６００によって実行されたときに、それらのレプリカ・データ・アクセス・コマンド６７０の実行に対するコマンド応答６７９が生成されることが可能であり、レプリケーション・データ６３３ｙの一部分として同期化キャッシュ６３９ｙ内に一時的に格納されることが可能である。コマンド応答６７９は、レプリカ・データ・アクセス・コマンド６７０の実行の成功した開始及び／若しくは完了の表示、並びに／又はレプリカ・データ・アクセス・コマンド６７０を実行する試みにおいて生じている障害の表示のうちの１つ又は複数を含むことができる。レプリケーション・データ６３３ｙは、バッファとしての役割を果たすことができ、そのバッファのコンテンツは、インターフェース６９０及びクラスタ間相互接続３９９を介してアクティブ・ノード３００ａのＤモジュール６００へ繰り返し送信される。レプリカ・データ・アクセス・コマンド６７０が、クライアント・デバイス・データ１３０の断片を取り出すためのコマンドを含む場合には、そのような断片は、コマンド応答６７９と共にノード３００ａへ返信されることになるレプリケーション・データ６３３ｙの別の部分として同期化キャッシュ６３９ｙ内に格納されることが可能である。
【００７４】
ノード３００ａのＤモジュール６００のインターフェース６９０を介して受信されると、レプリケーション・データ６３３ｙの繰り返し送信されたコンテンツは、レプリケーション・データ６３３ａの一部分として同期化キャッシュ６３９ａ内に一時的に格納されることが可能である。受信されたコマンド応答６７９、及び／又は、クライアント・デバイス・データ１３０の関連付けられている断片は次いで、レプリケーション・データ６３３ａから取り出されて、ノード３００ａのＤモジュール６００によるデータ・アクセス・コマンド５７０の実行の結果と並べて分析に備えてメモリ６６０内の他の場所に一時的に格納されることが可能である。ノード３００ａのＤモジュール６００は次いで、そのような分析からコマンド応答５７９を生成し、それらのコマンド応答５７９、及び／又は、データ１３０の関連付けられている断片をノード３００ａのＮモジュール５００へ中継し、そこでは、一方又は両方がメモリ５６０内に一時的に格納されることが可能である。コマンド応答５７９は次いで、ストレージ・サービス要求応答１７９へと変換されることが可能であり、次いでそれらの要求応答１７９、及び／又は、クライアント・デバイス・データ１３０の関連付けられている断片が、クライアント・デバイス１００のうちの１つへ返信されることが可能である。
【００７５】
図６は、１つのＨＡグループ内のメタデータの複製、及び別々のＨＡグループのノード同士の間におけるクライアント・デバイス・データ１３０に関連しているデータ・アクセス・コマンドのレプリケーションの例示的な一実施形態をさらに詳細に示している。示されているように、ノード３００ａは、クライアント相互接続１９９を介してクライアント・デバイス１００と、及びノード３００ｙと通信するためにＨＡグループ１６００ａｂ内でアクティブであることが可能であり、ノード３００ｙは、クラスタ間相互接続３９９を介してノード３００ａと通信するためにＨＡグループ１６００ｙｚ内でアクティブであることが可能である。ノード３００ｂ及び３００ｚは、非アクティブであることが可能である。なぜなら、それぞれは、ノード３００ａ又は３００ｙをそれぞれ引き継ぐ必要性を待っているからである。クライアント・デバイス１００と通信するためにノード３００ａがアクティブ状態であり、それによって、ノード３００ａのＮモジュール５００が、そうするために使用されているということは、ノード３００ａをクライアント・デバイス１００に結合しているクライアント相互接続１９９の部分が実線を用いて描かれていることによって示されており、その一方で、ノード３００ｂ及び３００ｙ〜ｚをクライアント相互接続１９９に結合するための部分は、点線を用いて描かれている。ノード３００ａ及び３００ｙの両方が互いに通信するためにアクティブ状態にあるということは、ノード３００ａ及び３００ｙを結合しているクラスタ間相互接続３９９の部分が実線を用いて描かれていることによって示されており、その一方で、ノード３００ｂ及び３００ｚをクラスタ間相互接続３９９に結合するための部分は、点線を用いて描かれている。
【００７６】
示されているように、同期化キャッシュ６３９ａ〜ｂ及び６３９ｙ〜ｚは、それぞれ、ノード３００ａ〜ｂ及び３００ｙ〜ｚのうちのそれぞれのＤモジュール６００のメモリ６６０内に形成されて、上述のメタデータの複製及び／又はデータ・アクセス・コマンドのレプリケーションを可能にすることができる。前述のように、同期化キャッシュ６３９ａ及び６３９ｂは両方とも、メタデータ６３０ａｂをやり取りするための、パートナーにされているノード３００ａ及び３００ｂのＤモジュール６００同士の間における協力を可能にすることの一部として複製データ６３６ａｂを含むことができる。しかしながら、同期化キャッシュ６３９ａ〜ｂ及び／又は複製データ６３６ａｂは、ノード３００ａ〜ｂのうちの一方を他方によって引き継ぐことを必要とする可能性がある障害の表示を探してそれぞれが他方をモニタすることの一部として、ノード３００ａ及び３００ｂのＤモジュール６００同士の間において生じているステータスをやり取りすることにおいて採用されることも可能である。同期化キャッシュ６３９ａ及び６３９ｂは、ＨＡ相互接続６９９ａｂの両方の端部においてバッファされることが可能であるノード３００ａ及び３００ｂのＤモジュール６００同士の間におけるポータルを提供するように機能的にリンクされる様式で操作されることが可能である。これらのＤモジュール６００の現在のステータスの表示、及び／又はメタデータ６３０ａｂのバージョンの複製は、そのような表示及び／又はメタデータを同期化キャッシュ６３９ａ又は６３９ｂのうちの一方の複製データ６３６ａｂへと書き込むこと、並びにそのような表示及び／又はメタデータの断片を同期化キャッシュ６３９ａ又は６３９ｂのうちの他方の複製データ６３６ａｂから取り出すことによって、やり取りされることが可能である。別の言い方をすれば、複製データ６３６ａｂのコンテンツは、同期化キャッシュ６３９ａと６３９ｂとの間において繰り返し「同期化」されることが可能である。
【００７７】
やはり前述のように、同期化キャッシュ６３９ｙは、データ・アクセス・コマンド及びそれらのレプリカを少なくとも部分的に並列に実行するためのノード３００ａ及び３００ｙのＤモジュール６００同士の間における協力の一部として同期化キャッシュ６３９ａ内のレプリケーション・データ６３３ａに対応するものとしてレプリケーション・データ６３３ｙを含むことができる。レプリケーション・データ６３３ａ及び６３３ｙは、クラスタ間相互接続３９９を介してノード３００ａ及び３００ｙのＤモジュール６００同士の間において伝達された情報をバッファすることができる。さらに具体的には、ノード３００ａのＤモジュール６００によるデータ・アクセス・コマンドのレプリケーションの現在のステータスの表示、少なくともノード３００ｙのＤモジュール６００によるレプリカ・データ・アクセス・コマンドの少なくとも部分的な並列実行の現在のステータスの表示、及び／又はレプリカ・データ・アクセス・コマンドに関するそれらの間における通信の現在のステータスの表示が、レプリケーション・データ６３３ａの一部として保持されることが可能である。代替として、又は追加として、ノード３００ｙのＤモジュール６００へ送信されたレプリカ・データ・アクセス・コマンド、それらのレプリカ・データ・アクセス・コマンドと共に伝達されたクライアント・デバイス・データ１３０の諸部分、及び／又はそれらのレプリカ・データ・アクセス・コマンドに対する応答が、レプリケーション・データ６３３ａの一部として保持されることも可能である。それに対応して、ノード３００ａのＤモジュール６００からクラスタ間相互接続３９９を介してノード３００ｙのＤモジュール６００によって受信されたレプリカ・データ・アクセス・コマンドが、それらのレプリカ・データ・アクセス・コマンドに伴うあらゆるクライアント・デバイス・データ１３０及び／又はそれに対する応答と共に、レプリケーション・データ６３３ｙ内にバッファされることが可能である。ノード３００ｙのＤモジュール６００によるそれらのレプリカ・データ・アクセス・コマンドの実行の現在のステータスの表示が、ノード３００ａのＤモジュール６００へ送信される前にレプリケーション・データ６３３ｙ内にバッファされることも可能である。
【００７８】
さらに示されているように、同期化キャッシュ６３９ｙ及び６３９ｚは、ノード３００ａ及び３００ｂのＤモジュール６００同士の間における上述とそっくり同じ様式でそれらの間においてステータス表示、及びメタデータの複製をやり取りするための、パートナーにされているノード３００ｙ及び３００ｚのＤモジュール６００同士の間における協力を可能にすることの一部として複製データ６３６ｙｚを含むことができる。別の言い方をすれば、ノード３００ｙ及び３００ｚのＤモジュール６００同士は、パートナーにされているノード３００ａ及び３００ｂがＨＡ相互接続６９９ａｂを介して信号をやり取りして互いをモニタするのと違わない様式で障害の表示を探してそれぞれが他方をモニタすることの一部としてＨＡ相互接続６９９ｙｚを介してそれらの間においてステータス表示（たとえば、「ハートビート」信号、及び／又は、さまざまなオペレーションを実行することのステータス）を繰り返しやり取りするために協力することができる。さらに、アクティブ・ノード３００ｙのＤモジュール６００は、パートナーにされているノード３００ａ及び３００ｂがメタデータのバージョンを、そのようなバージョンをストレージ・デバイスのセット８００ｙｚ内に格納することに加えてやり取りするのと違わない様式でＨＡ相互接続６９９ｙｚを介して非アクティブ・ノード３００ｚのＤモジュールへメタデータのバージョンを送信することができる。ノード３００ｙ及び３００ｚによって使用されノード３００ｙと３００ｚとの間においてやり取りされるメタデータは、ノード３００ａ及び３００ｂによって使用されノード３００ａと３００ｂとの間においてやり取りされるメタデータ６３０ａｂとは少なくとも部分的に異なる場合があるということに留意されたい。これは、ノード３００ａ〜ｂ及びノード３００ｙ〜ｚが、別々のＨＡグループに属していること、及び／又は別々のクラスタに属していることに少なくとも部分的に起因して起こる場合がある。
【００７９】
図７は、クラスタ間相互接続３９９を通じてノード３００ａ〜ｂ及び３００ｙ〜ｚの間において形成されている通信セッションのメッシュの例示的な一実施形態をさらに詳細に示している。さらに具体的には、クラスタ間相互接続３９９を通じて、ＨＡグループ１６００ａｂのノード３００ａ及び３００ｂのそれぞれは、ＨＡグループ１６００ｙｚのノード３００ｙ及び３００ｚのそれぞれとの通信セッションを形成し、それによって、ノード３００ａ〜ｂ及び３００ｙ〜ｚの間において、示されている通信セッションのメッシュを形成している。示されているように、これらの通信セッションのうちで、ノード３００ａと３００ｙとの間において延在している通信セッションは、（実線を用いて示されているように）アクティブな通信セッションであることが可能であり、その一方で、これらの通信セッションのうちのその他の通信セッションは、（点線を用いて示されているように）非アクティブな通信セッションであることが可能である。このことが反映している事実として、ノード３００ａ及び３００ｙはそれぞれ、少なくとも初めは、それぞれＨＡグループ１６００ａｂ及び１６００ｙｚのアクティブ・ノードであり、それらは、ＨＡグループ１６００ａｂと１６００ｙｚとの間におけるデータ・アクセス・コマンドの少なくとも部分的に並列な実行を可能にする目的でレプリカ・データ・アクセス・コマンド及び関連付けられているデータをやり取りするために通信に従事している。
【００８０】
したがって、ノード３００ａ及び３００ｙがアクティブ・ノードであって、ノード３００ａ又は３００ｙのいずれの中においてもエラーが生じていないストレージ・クラスタ・システム１０００の通常のオペレーション中には、ストレージ・サービスを求める要求が、クライアント・デバイス１００のうちの１つからクライアント相互接続１９９を介してノード３００ａによって受信される。ノード３００ａのＮモジュール５００によってストレージ・サービス要求をデータ・アクセス・コマンドへと変換したことに続いて、ノード３００ａのＤモジュール６００は、データ・アクセス・コマンドの実行を開始すること、及びそのデータ・アクセス・コマンドのレプリカを、ノード３００ａと３００ｙとの間におけるクラスタ間相互接続３９９を通じて形成されているアクティブな通信セッションを介してノード３００ｙへ送信することの両方が可能である。ノード３００ｙのＤモジュール６００は次いで、ノード３００ａのＤモジュール６００によるデータ・アクセス・コマンドの実行と少なくとも部分的に並列にレプリカ・データ・アクセス・コマンドを実行することができる。
【００８１】
そのような送信に備えて、ノード３００ａのＤモジュール６００は、アクティブな通信セッションの形成を要求するメッセージ及び受け入れるメッセージのやり取りを通じてノード３００ａから３００ｙへの間におけるアクティブな通信セッションを形成するためにノード３００ｙのＤモジュール６００と協力することができる。その形成に続いて、ノード３００ａ及び３００ｙのＤモジュール６００同士は、アクティブな通信セッションを、そのアクティブな通信セッションの状態をモニタするためのそこを通じたテスト信号（たとえば、テスト・メッセージ）の繰り返すやり取りによって保持するために協力することができる。
【００８２】
ノード３００ａ及び３００ｙのＤモジュール６００同士が、レプリカ・データ・アクセス・コマンドのそのようなやり取りをサポートする目的でクラスタ間相互接続３９９を通じて、示されているアクティブな通信セッションを形成及び保持するために協力することに加えて、ノード３００ａ〜ｂ及び３００ｙ〜ｚのうちのすべてのＤモジュール６００同士は、ノード３００ａ又は３００ｙのうちの１つに影響を与えるエラー状況を取り扱うことに備えてクラスタ間相互接続３９９を通じて、示されている非アクティブな通信セッションを形成及び保持するために協力することができる。さらに具体的には、テスト信号（たとえば、テスト・メッセージ）が、非アクティブな通信セッションのうちの１つ又は複数を通じてやり取りされて、それらの状態をモニタすることが可能である。
【００８３】
ノード３００ａの少なくとも一部分の障害の場合には、ノード３００ｂは、ノード３００ａを引き継ぐことができ、そうする際に、ノード３００ｂ及び３００ｙのＤモジュール６００同士の間において延在している非アクティブな通信セッションの状態をアクティブな通信セッションへと変更することができる。そうすることによって、ノード３００ｂは、ノード３００ａの代わりにレプリカ・データ・アクセス・コマンドをノード３００ｙへ送信できるようになる。それに対応して、ノード３００ｙの少なくとも一部分の障害の場合には、ノード３００ｚは、ノード３００ｙを引き継ぐことができ、そうする際に、ノード３００ａ及び３００ｚのＤモジュール６００同士の間において延在している非アクティブな通信セッションの状態をアクティブな通信セッションへと変更することができる。そうすることによって、ノード３００ｚは、ノード３００ｙの代わりにレプリカ・データ・アクセス・コマンドをノード３００ａから受信して実行できるようになる。
【００８４】
さまざまな実施形態においては、プロセッサ・コンポーネント４５０、５５０、及び６５０のそれぞれは、さまざまな市販のプロセッサのいずれかを含むことができる。また、これらのプロセッサ・コンポーネントのうちの１つ又は複数は、複数のプロセッサ、マルチスレッド・プロセッサ、マルチコア・プロセッサ（複数のコアが、同じダイ上に共存しているか、若しくは別々のダイ上に共存しているかを問わず）、及び／又は、複数の物理的に別々のプロセッサを何らかの方法でリンクさせるその他の何らかの種類のマルチ・プロセッサ・アーキテクチャーを含むことができる。
【００８５】
さまざまな実施形態においては、コントロール・ルーチン４４０、５４０、及び６４０のそれぞれは、オペレーティング・システム、デバイス・ドライバ、及び／又はアプリケーションレベル・ルーチン（たとえば、ディスク・メディア上に提供されるいわゆる「ソフトウェア・スイート」、リモート・サーバから入手される「アプレット」など）のうちの１つ又は複数を含むことができる。当業者にとっては認識可能なように、コントロール・ルーチン４４０、５４０、及び６４０のそれぞれは、それぞれを構成することができるコンポーネントを含めて、どんなタイプのプロセッサ上でも機能するように選択され、又はプロセッサは、プロセッサ・コンポーネント４５０、５５０、若しくは６５０のうちの適用可能なプロセッサ・コンポーネントを実施するように、若しくはどんなタイプのプロセッサ上でも機能するように選択されることが可能であり、又はプロセッサは、共有プロセッサ・コンポーネントを実施するように選択されることが可能である。とりわけ、オペレーティング・システムが含まれている場合には、そのオペレーティング・システムは、プロセッサ・コンポーネント４５０、５５０、若しくは６５０のうちの対応するプロセッサ・コンポーネントに適している、又は共有プロセッサ・コンポーネントに適しているさまざまな利用可能なオペレーティング・システムのいずれかであることが可能である。また、１つ又は複数のデバイス・ドライバが含まれている場合には、それらのデバイス・ドライバは、モジュール４００、５００、又は６００のうちの対応するモジュールのさまざまなその他のコンポーネントのいずれかのためのサポートを提供することができ、それらのコンポーネントが、ハードウェア・コンポーネントであるか、又はソフトウェア・コンポーネントであるかは問わない。
【００８６】
さまざまな実施形態においては、メモリ４６０、５６０、及び６６０のそれぞれは、さまざまな情報格納テクノロジーのいずれかに基づくことが可能であり、それらの情報格納テクノロジーは、場合によっては、電力の途切れない供給を必要とする揮発性のテクノロジーを含み、場合によっては、取り外し可能であってもなくてもよいマシン可読ストレージ・メディアの使用を伴うテクノロジーを含む。したがって、これらのメモリのそれぞれは、ストレージ・デバイスのさまざまなタイプ（又はタイプの組合せ）のいずれかを含むことができ、それらのタイプは、読み取り専用メモリ（ＲＯＭ）、ランダムアクセス・メモリ（ＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、ダブルデータレートＤＲＡＭ（ＤＤＲ−ＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、プログラム可能ＲＯＭ（ＰＲＯＭ）、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、ポリマー・メモリ（たとえば、強誘電ポリマー・メモリ）、オボニック・メモリ、相変化若しくは強誘電メモリ、シリコン−酸化物−窒化物−酸化物−シリコン（ＳＯＮＯＳ）メモリ、磁気カード若しくは光カード、１つ若しくは複数の個々の強磁性ディスク・ドライブ、又は、１つ若しくは複数のアレイへと編成された複数のストレージ・デバイス（たとえば、独立ディスクアレイの冗長アレイ、若しくはＲＡＩＤアレイへと編成された複数の強磁性ディスク・ドライブ）を含むが、それらには限定されない。これらのメモリのそれぞれは、単一のブロックとして示されているが、これらのうちの１つ又は複数は、別々のストレージ・テクノロジーに基づくことが可能である複数のストレージ・デバイスを含むことができるということに留意されたい。したがって、たとえば、これらの示されているメモリのうちのそれぞれの１つ又は複数は、プログラム及び／又はデータを何らかの形態のマシン可読ストレージ・メディア上に格納して伝達することができる光ドライブ又はフラッシュ・メモリ・カード・リーダと、相対的に延長されたピリオドにわたってプログラム及び／又はデータをローカルに格納するための強磁性ディスク・ドライブと、プログラム及び／又はデータに対する相対的に迅速なアクセスを可能にする１つ又は複数の揮発性ソリッド・ステート・メモリ・デバイス（たとえば、ＳＲＡＭ又はＤＲＡＭ）との組合せに相当することが可能である。これらのメモリのそれぞれは、同じストレージ・テクノロジーに基づく複数のストレージ・コンポーネントから構成されることが可能であるが、それらは、使用における特化の結果として別々に保持されることが可能である（たとえば、いくつかのＤＲＡＭデバイスが、メイン・メモリとして採用され、その一方でその他のＤＲＡＭデバイスが、グラフィックス・コントローラの別個のフレーム・バッファとして採用される）ということにも留意されたい。
【００８７】
さまざまな実施形態においては、インターフェース４９０、５９０、及び６９０は、これらのコンピューティング・デバイスが、説明されているようなその他のデバイスに結合されることを可能にするさまざまなシグナリング・テクノロジーのいずれかを採用することができる。これらのインターフェースのそれぞれは、そのような結合を可能にするための必須の機能のうちの少なくともいくつかを提供する回路を含む。しかしながら、これらのインターフェースのそれぞれは、（たとえば、プロトコル・スタック又はその他の機能を実施するために）プロセッサ・コンポーネントのうちの対応するプロセッサ・コンポーネントによって実行される命令のシーケンスを伴って少なくとも部分的に実装されることも可能である。電気的に及び／又は光学的に伝導性のケーブルが採用される場合には、これらのインターフェースは、さまざまな業界標準のいずれかに準拠するシグナリング及び／又はプロトコルを採用することができ、それらの業界標準は、ＲＳ−２３２Ｃ、ＲＳ−４２２、ＵＳＢ、イーサネット（登録商標）（ＩＥＥＥ−８０２．３）、又はＩＥＥＥ−１３９４を含むが、それらには限定されない。無線信号送信の使用を伴う場合には、これらのインターフェースは、さまざまな業界標準のいずれかに準拠するシグナリング及び／又はプロトコルを採用することができ、それらの業界標準は、ＩＥＥＥ８０２．１１ａ、８０２．１１ｂ、８０２．１１ｇ、８０２．１６、８０２．２０（一般に「モバイル・ブロードバンド無線アクセス」と呼ばれている）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ＺｉｇＢｅｅ、又はセルラー無線電話サービス、たとえば、ＧＳＭ（登録商標）ウィズ汎用パケット無線サービス（ＧＳＭ／ＧＰＲＳ）、ＣＤＭＡ／１ｘＲＴＴ、エンハンスド・データ・レート・フォー・グローバル・エボリューション（ＥＤＧＥ）、エボリューション・データ・オンリー／オプティマイズド（ＥＶ−ＤＯ）、エボリューション・フォー・データ・アンド・ボイス（ＥＶ−ＤＶ）、ハイ・スピード・ダウンリンク・パケット・アクセス（ＨＳＤＰＡ）、ハイ・スピード・アップリンク・パケット・アクセス（ＨＳＵＰＡ）、４Ｇ  ＬＴＥなどを含むが、それらには限定されない。
【００８８】
詳細に論じられているように、クライアント・デバイス・データ１３０に対して格納及びアクセスを行う際の冗長性が、地理的に分散していることが可能である別々のクラスタの別々のＨＡグループに属する少なくとも２つのノードの間におけるデータ・アクセス・オペレーションの少なくとも部分的に並列な実行をもたらすことによって提供されることが可能である。当業者にはよく知られているように、地理的に離れているロケーション同士において生じるそのような実行を調整する際には、さまざまな課題が提示され、それらの課題は、長い距離にわたってコマンドを送信する際に課される遅延を含む。そのような長い距離の送信におけるネットワークの使用によって、さらなる課題が課される場合があり、それらの課題は、コマンドの複製を、及び／又はコマンドを、それらが送信された順序とは異なる、及び／又はそれらが実行されることになる順序とは異なる順序で受信することを含む。
【００８９】
図８は、ストレージ・クラスタ・システム１０００のアクティブ・ノード３００ａと３００ｙとの間における相互接続の別の例示的な実施形態のブロック図をさらに詳細に示している。さらに具体的には、図８は、ノード３００ａ及び３００ｙのＤモジュール６００同士の間におけるデータ・アクセス・コマンドの少なくとも部分的に並列な実行及び／又はキャンセルのさらに良好な調整を可能にするために個々のデータ・アクセス・コマンドに、及び／又はデータ・アクセス・コマンドのセットに割り振られることが可能である識別子を採用することの諸側面を示している。示されているように、ノード３００ａは、クライアント・デバイス１００との通信に従事してデータ・アクセス・コマンドを実行するためにアクティブであることが可能であり、その一方でノード３００ｙは、ノード３００ａとの通信に従事してノード３００ａと少なくとも部分的に並列にレプリカ・データ・アクセス・コマンドを実行するためにアクティブであることが可能である。
【００９０】
示されているように、ノード３００ａ及び３００ｙのうちのそれぞれのＤモジュール６００内のコントロール・ルーチン６４０は、生成コンポーネント６４１、グループ化コンポーネント６４２、順序付けコンポーネント６４５、アクセス・コンポーネント６４８、及び通信コンポーネント６４９のうちの１つ又は複数を組み込むことができる。コントロール・ルーチン６４０を実行する際に、これらのＤモジュール６００のうちのそれぞれのプロセッサ・コンポーネント６５０は、コントロール・ルーチン６４０のコンポーネント６４１、６４２、６４５、６４８、又は６４９のうちの１つ又は複数を実行することができる。しかしながら、アクティブ・ノード内のプロセッサ・コンポーネント６５０によって実行されるコントロール・ルーチン６４０の諸部分と、非アクティブ・ノード内のプロセッサ・コンポーネント６５０によって実行されるコントロール・ルーチン６４０の諸部分とにおいて相違が存在する場合があるのとちょうど同じように、データ・アクセス・コマンドを実行するためにアクティブであるノード内のプロセッサ・コンポーネントによって実行されるコントロール・ルーチン６４０の諸部分と、レプリカ・データ・アクセス・コマンドを実行するためにアクティブであるノード内のプロセッサ・コンポーネントによって実行されるコントロール・ルーチン６４０の諸部分とにおいても相違が存在する場合がある。さらに具体的には、ノード３００ａのＤモジュール６００のプロセッサ・コンポーネント６５０は、コンポーネント６４１、６４２、６４８、及び６４９（実線を用いて描かれている）のうちの１つ又は複数を実行することができるが、コンポーネント６４５（点線を用いて描かれている）を実行することを差し控えることができる。対照的に、ノード３００ｙのＤモジュール６００のプロセッサ・コンポーネント６５０は、コンポーネント６４５、６４８、及び６４９（実線を用いて描かれている）のうちの１つ又は複数を実行することができるが、コンポーネント６４１及び６４２（点線を用いて描かれている）を実行することを差し控えることができる。
【００９１】
ノード３００ａ及び３００ｙのうちのそれぞれのＤモジュール６００内では、通信コンポーネント６４９は、その他のノードのコンポーネント（たとえば、その他のノードのＤモジュール６００）との間で、及び／又は同じノードのその他のコンポーネント（たとえば、同じノードのＮモジュール５００）との間でコマンド及び／又はデータをやり取りするようにインターフェース６９０を操作することができる。さらに具体的には、ノード３００ａ内では、通信コンポーネント６４９は、Ｎモジュール５００からデータ・アクセス・コマンドを受信することができ、レプリカ・データ・アクセス・コマンドのセットへと編成されたレプリカ・データ・アクセス・コマンドを、クラスタ間相互接続３９９を介してアクティブ・ノード３００ｙのＤモジュール６００へ送信することができる。それらのレプリカ・コマンド・セットをノード３００ｙへそのように送信する際に、それぞれのレプリカ・コマンド・セットは、別々のネットワーク・パケット内に含めて伝達される諸部分へと分割されて、それらの部分において送信されることが可能である。ノード３００ｙ内では、通信コンポーネント６４９は、レプリカ・コマンド・セットの諸部分を、ノード３００ａのＤモジュール６００から、それらの部分が送信された順序から外れて、及び／又はインターネットなど、クラスタ間相互接続３９９が延在できる上で経由するネットワークを通じた送信によってもたらされたいくらかの度合いの複製を伴って受信することができる。前述のように、相互接続３９９を介してレプリカ・データ・アクセス・コマンドをやり取りする際に、それぞれ、シンク・キャッシュ６３９ａ及び６３９ｙ内に保持されているレプリケーション・データ６３３ａ及び６３３ｙが、そのようなやり取りをバッファする際に採用されることが可能である。
【００９２】
ノード３００ａ及び３００ｙのうちのそれぞれのＤモジュール６００内では、アクセス・コンポーネント６４８は、それぞれ、ストレージ・デバイスのセット８００ａｂ及び８００ｙｚ内に格納されているクライアント・デバイス・データ１３０上でさまざまなデータ・アクセス・オペレーションを実行するようにストレージ・コントローラ６６５を操作することができる。さらに具体的には、ノード３００ａ内では、アクセス・コンポーネント６４８は、ストレージ・サービス要求から変換されてノード３００ａのＮモジュール５００によって提供されたデータ・アクセス・コマンドを実行することができる。ノード３００ｙ内では、アクセス・コンポーネント６４８は、ノード３００ａのＮモジュール５００によって提供されてクラスタ間相互接続３９９を介してノード３００ｙに提供されたデータ・アクセス・コマンドをレプリケートすることによってノード３００ａのＤモジュール６００によって生成されたレプリカ・データ・アクセス・コマンドを実行することができる。前述のように、データ・アクセス・コマンドと、そこから得られたレプリカ・データ・アクセス・コマンドとの実行は、少なくとも部分的に並列に生じることが可能である。
【００９３】
ノード３００ａのＤモジュール６００内では、生成コンポーネント６４１は、説明されているように、Ｍモジュール４００及び／又はＮモジュール５００から受信されたメタデータの諸部分からメタデータ６３０ａｂのバージョンを生成することができる。やはり前述のように、生成コンポーネント６４１は、ノード３００ａの少なくともＤモジュール６００のリブートに続いてストレージ・デバイスのセット８００ａｂから取り出されたメタデータ６３０ａｂを使用するという不成功の試みに応答して、メタデータ６３０ａｂを構成するメタデータの可変の断片及び／又は不変の断片を更新することが必要とされた際に、メタデータの更新された部分をＭモジュール４００及び／又はＮモジュール５００の一方又は両方に要求することができる。
【００９４】
ノード３００ａのＤモジュール６００内では、グループ化コンポーネント６４２は、Ｎモジュール５００から受信されたデータ・アクセス・コマンドのうちの複数のデータ・アクセス・コマンドをコマンド・セットへとグループ化することができ、それに対応して、データ・アクセス・コマンドからレプリケートされたレプリカ・データ・アクセス・コマンドのうちのマッチするレプリカ・データ・アクセス・コマンドを、マッチするレプリカ・コマンド・セットへとグループ化することができる。グループ化コンポーネント６４２は、データ・アクセス・コマンド及びレプリカ・データ・アクセス・コマンドのうちのマッチするデータ・アクセス・コマンド及びレプリカ・データ・アクセス・コマンドに対して、マッチするシーケンスＩＤを割り振ることができ、並びに／又はコマンド・セット及びレプリカ・コマンド・セットのうちのマッチするコマンド・セット及びレプリカ・コマンド・セットに対して、マッチするセットＩＤを割り振ることができる。グループ化コンポーネント６４２は、繰り返す時間のインターバルの経過に応答して、データ・アクセス・コマンドの特徴に応答して、及び／又は、データ・アクセス・コマンドの実行に影響を与えることが可能であるメタデータ６３０ａｂにおける変化に応答して、新たなコマンド・セット及びマッチするレプリカ・コマンド・セットを形成することができる。新たなコマンド・セットを得ることが、時間のインターバルの経過に基づくことが可能である場合には、グループ化コンポーネント６４２は、Ｄモジュール６００のクロック６５５を採用して、時間の経過をモニタすることができる。
【００９５】
ノード３００ｙのＤモジュール６００内では、順序付けコンポーネント６４５は、１つ又は複数のレプリカ・コマンド・セットを、ノード３００ｙによってノード３００ａからクラスタ間相互接続３９９を介して受信されるそれらの諸部分として再構築するためにセットＩＤ及び／又はシーケンスＩＤを採用することができる。そうする際に、順序付けコンポーネント６４５は、既に受信されているレプリカ・コマンド・セットの諸部分をどんなネットワーク・パケットが伝達しているかを特定するために少なくともセットＩＤを採用することができ、それによって、それらの部分は冗長であり、及びそれによって、それらの冗長な部分を伝達しているネットワーク・パケットは、冗長なものとして破棄されることが可能である。順序付けコンポーネント６４５は、先のレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドの実行が完了しているか否かに応じて後のレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドの実行の開始を条件付けるために少なくともセットＩＤを採用することもできる。順序付けコンポーネント６４５はさらに、ノード３００ａと少なくとも部分的に並列でのデータ・アクセス・コマンドの実行のキャンセルを調整するために少なくともセットＩＤを採用することができ、それは、実行されることにならないレプリカ・データ・アクセス・コマンドを含むレプリカ・コマンド・セットの諸部分をどんなネットワーク・パケットが伝達しているかを特定するためにセットＩＤを採用することを含み、それによって、それらの部分は冗長であり、及びそれによって、それらの冗長な部分を伝達しているネットワーク・パケットは、冗長なものとして破棄されることが可能である。
【００９６】
図９Ａ及び図９Ｂは共に、マッチするコマンド・セット及びレプリカ・コマンド・セットを生成して、マッチするセットＩＤと共に使用して、データ・アクセス・コマンド及びレプリカ・データ・アクセス・コマンドの少なくとも部分的に並列な実行及び／又は実行の少なくとも部分的に並列なキャンセルを調整することの諸側面をさらに詳細に示している。さらに具体的には、図９Ａは、データ・アクセス・コマンド５７０をコマンド・セット５７２へとグループ化することの諸側面、及びマッチするレプリカ・データ・アクセス・コマンド６７０を、マッチするレプリカ・コマンド・セット６７２へとグループ化することの諸側面を示している。図９Ａはまた、マッチするセットＩＤ５７３及び６７３を、それぞれ、コマンド・セット５７２及びレプリカ・コマンド・セット６７２のうちのマッチするコマンド・セット５７２及びレプリカ・コマンド・セット６７２に割り振ることの諸側面を示している。図９Ｂは、送信された順序から外れて受信される場合があるレプリカ・コマンド・セット６７２の諸部分をレプリカ・コマンド・セット６７２へと再構築するためにレプリカ・コマンド・セット６７２の少なくともセットＩＤ６７３を採用することの諸側面を示している。図９Ａ及び図９Ｂは両方とも、指定されたデータ・アクセス・コマンド及びマッチするレプリカ・データ・アクセス・コマンドのキャンセルを調整するために少なくともセットＩＤ５７３及び６７３を採用することの諸側面を示している。
【００９７】
図９Ａを参照すると、グループ化コンポーネント６４２は、ＩＤコンポーネント６４２１、レプリケーション・コンポーネント６４２２、及びキャンセル・コンポーネント６４２５のうちの１つ又は複数を組み込むことができる。前述のように、通信コンポーネント６４９は、ノード３００ａのＮモジュール５００からデータ・アクセス・コマンド５７０を受信するようにインターフェース６９０を操作することができ、それらのデータ・アクセス・コマンド５７０をグループ化コンポーネント６４２へ中継することができる。グループ化コンポーネント６４２は、データ・アクセス・コマンド５７０のうちの複数のデータ・アクセス・コマンド５７０を複数のコマンド・セット５７２へとグループ化することができる。コマンド・セット５７２をそのように形成する際に、グループ化コンポーネント６４２は、コマンド・セット５７２のうちのそれぞれの中に共にグループ化されるデータ・アクセス・コマンド５７０同士の間においてデータ・アクセス・コマンド５７０同士が実行されることになる順序を保存することができ、コマンド・セット５７２同士の間におけるデータ・アクセス・コマンド５７０同士の実行の順序に基づく順序でコマンド・セット５７２を形成することができる。データ・アクセス・コマンド５７０同士が実行されることになるそのような順序は、ストレージ・サービス要求をデータ・アクセス・コマンド５７０へと変換することの一部としてＮモジュール５００によって得られることが可能である。前述のように、Ｎモジュール５００によって受信された単一のストレージ・サービス要求が複数のデータ・アクセス・コマンド５７０へと変換される場合があり得る。さらに、データ・アクセス・コマンド５７０の実行のそのような順序は、データ・アクセス・コマンド５７０をＤモジュール６００に提供することの一部としてＮモジュール５００によってＤモジュール６００に示されることが可能である。たとえば、Ｎモジュール５００は、そのような順序でデータ・アクセス・コマンド５７０をＤモジュール６００に提供することができる。
【００９８】
データ・アクセス・コマンド５７０の実行の順序を保存することの一部として、ＩＤコンポーネント６４２１は、シーケンスＩＤ５７１を生成して、それぞれのデータ・アクセス・コマンド５７０に割り振ることができる。いくつかの実施形態においては、シーケンスＩＤ５７１は、それぞれのデータ・アクセス・コマンド５７０に関する値をインクリメント又はデクリメントすることによって生成されることが可能である序数（たとえば、整数）であることが可能であり、序数の昇順又は降順でデータ・アクセス・コマンド５７０同士に割り振られて、データ・アクセス・コマンド５７０同士が実行されることになる順序を示すことが可能である。したがって、それぞれのデータ・アクセス・コマンド５７０に関する新たなシーケンスＩＤ５７１を生成することは、ＩＤコンポーネント６４２１によって操作されるカウンタをインクリメント又はデクリメントすることを伴う場合がある。代替として、又は追加として、シーケンスＩＤ５７１は、現在の時刻に少なくとも部分的に基づくことが可能である。さらに具体的には、ＩＤコンポーネント６４２１は、クロック６５５から現在の時刻を繰り返し取り出すことができ、シーケンスＩＤ５７１を生成して、それぞれのデータ・アクセス・コマンド５７０に割り振ることを、それぞれがノード３００ａのＤモジュール６００によって受信された時刻に基づいて、そのシーケンスＩＤ５７１が割り振られる時刻に基づいて、及び／又はそれぞれのデータ・アクセス・コマンド５７０を含む異なるイベントが生じる時刻に基づいて行うことができる。シーケンスＩＤ５７１がそのように時刻に基づく場合には、シーケンスＩＤ５７１は、時刻及び日付を組み込んでいる序数であることが可能であり、序数の昇順で割り振られて、データ・アクセス・コマンド５７０の実行の順序を示すことが可能である。
【００９９】
Ｄモジュール６００は、本明細書においては、シーケンスＩＤ５７１を生成するものとして示され論じられているが、シーケンスＩＤ５７１がＮモジュール５００によって生成され、それによってデータ・アクセス・コマンド５７０が、シーケンスＩＤ５７１を既に割り振られた状態でＤモジュール６００によって受信されるその他の実施形態も可能であるということに留意されたい。これは、データ・アクセス・コマンド５７０が、クライアント・デバイス１００のうちの１つ又は複数から受信されたストレージ・サービス要求を変換することの一部としてＮモジュール５００によって生成されることに照らして、望ましいとみなされる場合がある。本質的には、データ・アクセス・コマンド５７０がそのように生成されたときにシーケンスＩＤ５７１をそれぞれのデータ・アクセス・コマンド５７０に割り振る方がさらに効率的であるとみなされる場合がある。
【０１００】
それぞれのデータ・アクセス・コマンド５７０に関するシーケンスＩＤ５７１が生成される正確な様式にかかわらず、いくつかの実施形態においては、コマンド・セット５７２のうちのそれぞれに関するセットＩＤ５７３は、コマンド・セット５７２のうちのそれぞれの中に含まれているデータ・アクセス・コマンド５７０のうちの１つ又は複数のシーケンスＩＤ５７１に基づくことが可能である。前述のように、データ・アクセス・コマンド５７０同士がグループ化されて、それぞれのコマンド・セット５７２内のデータ・アクセス・コマンド５７０の実行の順序が保存される様式でコマンド・セット５７２を形成することが可能であり、及び／又はコマンド・セット５７２は、データ・アクセス・コマンド５７０の実行の順序に従う順序で形成されることが可能である。たとえば、いくつかの実施形態においては、それぞれのコマンド・セット５７２のセットＩＤ５７３は、最初に実行されることになる、又は最後に実行されることになるそれぞれのコマンド・セット５７２内のデータ・アクセス・コマンド５７０のシーケンスＩＤ５７１に基づくことが可能である。これは、シーケンスＩＤ５７１が、クロック６５５から繰り返し取り出された時刻に何らかの様式で基づいている場合に当てはまることが可能である。その他の実施形態においては、セットＩＤ５７３は、それぞれのコマンド・セット５７２内のデータ・アクセス・コマンド５７０が、コマンド・セット５７２のうちのその他のコマンド・セット５７２内のデータ・アクセス・コマンド５７０と相対的に実行されることになる順序を示すために、それぞれのコマンド・セット５７２に関する値を序数の昇順又は降順でインクリメント又はデクリメントすることによって生成されることが可能である序数（たとえば、整数）であることが可能である。したがって、それぞれのコマンド・セット５７２に関する新たなセットＩＤ５７３を生成することも、ＩＤコンポーネント６４２１によって操作されるカウンタをインクリメント又はデクリメントすることを伴う場合がある。
【０１０１】
コマンド・セット５７２は、データ・アクセス・コマンド５７０の実行の順序に従う順序で、及び／又は、データ・アクセス・コマンド５７０同士を、コマンド・セット５７２のうちのそれぞれの中におけるその順序を保存する様式でグループ化することによって形成されることが可能であるので、それぞれのコマンド・セット５７２内に（実行の順序という点で）開始時及び終了時にどんなデータ・アクセス・コマンド５７０があるかをグループ化コンポーネント６４２によって特定することは、コマンド・セット５７２のうちのそれぞれへとグループ化されるデータ・アクセス・コマンド５７０に関連付けられている時間の最大インターバルに基づくことが可能である。さらに具体的には、メタデータ６３０ａｂは、コマンド・セット５７２のうちの任意のコマンド・セット５７２へとグループ化されるデータ・アクセス・コマンド５７０に関連付けられることになる時間の最大インターバルの表示を含むことができる。いくつかの実施形態においては、これは、共にグループ化されることになる多くのデータ・アクセス・コマンド５７０をＮモジュール５００から受信することができる時間の最大インターバルを指定することができ、それによって、いずれのコマンド・セット５７２も、Ｎモジュール５００からの受信を行うための時間の最大インターバルよりも長くかかったデータ・アクセス・コマンド５７０同士のグループ化を含むことはできない。その他の実施形態においては、これは、任意のコマンド・セット５７２内の多くのデータ・アクセス・コマンド５７０が実行される上で必要とされる時間の最大インターバルを指定することができる。或いは、その他の実施形態においては、メタデータ６３０ａｂは、任意のコマンド・セット５７２内に含まれることになるデータ・アクセス・コマンド５７０の最大数量を指定することができる。
【０１０２】
通信コンポーネント６４９は、ノード３００ａのＭモジュール４００及び／又はＮモジュール５００からメタデータの諸部分を受信するようにインターフェース６９０を操作することができ、通信コンポーネント６４９は、メタデータのそれらの部分を生成コンポーネント６４１へ中継することができる。メタデータの少なくともそれらの部分から、生成コンポーネント６４１は、メタデータ６３０ａｂの１つ又は複数のバージョンを生成することができる。生成コンポーネント６４１へ中継されるメタデータのそれらの部分のうちの１つ又は複数は、いずれか１つのコマンド・セット５７２へと共にグループ化されるデータ・アクセス・コマンド５７０に関連付けられることが可能である最大タイム・インターバル、及び／又はメタデータ６３０ａｂ内に含めて提供されることが可能であるいずれか１つのコマンド・セット５７２へと共にグループ化されることが可能であるデータ・アクセス・コマンド５７０の最大数量の表示を含むことができる。
【０１０３】
代替として、又は追加として、グループ化コンポーネント６４２は、それぞれのグループ化コンポーネント６４２内の１つ又は複数のデータ・アクセス・コマンド５７０を、データ・アクセス・コマンド５７０そのものの１つ又は複数の特徴に基づいてグループ化することができる。いくつかの実施形態においては、グループ化コンポーネント６４２は、２つのデータ・アクセス・コマンド５７０がクライアント・デバイス・データ１３０の同じ部分に関連付けられていることのない、及び／又は２つのデータ・アクセス・コマンド５７０がストレージ・デバイスの同じ部分にアクセスすることのないデータ・アクセス・コマンド５７０同士を共にグループ化することができる。悪影響を伴うことなく（たとえば、ストレージ・デバイスのセット８００ａｂ又は８００ｙｚのうちの１つの中に格納されているクライアント・デバイス・データ１３０の状態が、それらの多数のうちの１つの中のデータ・アクセス・コマンド５７０が実行される順序に応じて異なるという競合状態をもたらすことなく）、自らのシーケンスＩＤによって示されている順序から外れて実行されることが可能であるデータ・アクセス・コマンド５７０同士からコマンド・セット５７２同士の少なくともサブセットを形成することが望ましいとみなされる場合がある。たとえば、クライアント・デバイス・データ１３０の別々の部分を読み出すための連続した一連のデータ・アクセス・コマンド５７０は、それらのデータ・アクセス・コマンド５７０が実行される順序が、ストレージ・デバイスのセット８００ａｂ又は８００ｙｚのうちの１つの中に格納されているクライアント・デバイス・データ１３０の状態に影響を与えることはないという事実に基づいて、コマンド・セット５７２内で共にグループ化されることが可能である。
【０１０４】
また代替として、又は追加として、グループ化コンポーネント６４２は、データ・アクセス・コマンド５７０のうちのどのデータ・アクセス・コマンド５７０がメタデータ６３０ａｂの古いバージョンを伴って実行されることになるか、及びデータ・アクセス・コマンド５７０のうちのどのデータ・アクセス・コマンド５７０がメタデータ６３０ａｂの新しいバージョンを伴って実行されることになるかに基づいてデータ・アクセス・コマンド５７０同士を２つの別々のコマンド・セット５７２へとグループ化することができる。論じられているように、メタデータ６３０ａｂは、ストレージ・デバイスのセット８００ａｂ内におけるクライアント・データ１３０の格納、及び／又はそこからのクライアント・デバイス・データ１３０の諸部分の取り出しのさまざまな側面を指定することができる。結果として、メタデータ６３０ａｂの新たなバージョンは、それらの側面のうちの１つ又は複数を変更する生成コンポーネント６４１によって生成されることが可能であり、データ・アクセス・コマンド５７０のうちのいくつかは、メタデータ６３０ａｂの古いバージョンに関連付けられることが可能であり、それによってそれらは、そのような変更が有効になる前に実行されることを意図されており、その一方で、データ・アクセス・コマンド５７０のうちのその他のデータ・アクセス・コマンド５７０は、メタデータ６３０ａｂの新たなバージョンに関連付けられることが可能であり、それによってそれらは、そのような変更が有効になった後に実行されることを意図されている。それに応答して、グループ化コンポーネント６４２は、データ・アクセス・コマンド５７０のうちで、メタデータ６３０ａｂの古いバージョンに関連付けられているデータ・アクセス・コマンド５７０を、コマンド・セット５７２のうちの古い方へとグループ化する一方で、データ・アクセス・コマンド５７０のうちで、メタデータ６３０ａｂの新しいバージョンに関連付けられているその他のデータ・アクセス・コマンド５７０を、コマンド・セット５７２のうちの新しい方へとグループ化することができる。実際に、これらの２つのコマンド・セットのうちの新しい方は、これらの２つのコマンド・セットのうちの古い方の後にすぐに続くことが可能であり、それによって、それらの間における遷移は、メタデータ６３０ａｂの新しいバージョンにおいて指定されている変更が有効になるのと同時に起こる。
【０１０５】
グループ化コンポーネント６４２は、それぞれのコマンド・セット５７２が形成されたときに、それぞれのコマンド・セット５７２をアクセス・コンポーネント６４８に提供して、実行されるようにすることが可能である。コマンド・セット５７２は、データ・アクセス・コマンド５７０の実行の順序に従う順序で形成されることが可能であるので、それぞれのコマンド・セット５７２を、それらのコマンド・セット５７２が実行されるときにアクセス・コンポーネント６４８にそのように供給する結果、アクセス・コンポーネント６４８は、データ・アクセス・コマンド５７０を、それらのデータ・アクセス・コマンド５７０が実行されることになる順序で受信するはずである。それでもなお、いくつかの実施形態においては、アクセス・コンポーネント６４８は、データ・アクセス・コマンド５７０を、それらのデータ・アクセス・コマンド５７０が実行されることを意図されていた順序で実行するようにストレージ・コントローラ６６５をアクセス・コンポーネント６４８が操作することを確実にするために、それぞれのデータ・アクセス・コマンド５７０に割り振られるシーケンスＩＤを採用することができる。
【０１０６】
コマンド・セット５７２が形成され、及び／又はアクセス・コンポーネント６４８に提供されたときに、レプリケーション・コンポーネント６４２２は、コマンド・セット５７２のレプリカをレプリカ・コマンド・セット６７２の形態で生成することができる。それぞれのレプリカ・コマンド・セット６７２は、コマンド・セット５７２のうちの１つにマッチするように生成されることが可能であり、これは、コマンド・セット５７２のうちのマッチされているコマンド・セット５７２のセットＩＤ５７３にマッチするセットＩＤ６７３を有することを含む。したがって、それぞれのレプリカ・コマンド・セット６７２は、コマンド・セット５７２のうちの１つへとグループ化される多くのデータ・アクセス・コマンド５７０にマッチする多くのレプリカ・データ・アクセス・コマンド６７０を含むことができ、その多くのレプリカ・データ・アクセス・コマンド６７０は、その多くのデータ・アクセス・コマンド５７０に割り振られているシーケンスＩＤ５７１にマッチするシーケンスＩＤ６７１を割り振られることが可能である。レプリケーション・コンポーネント６４２２は、レプリカ・コマンド・セット６７２のうちのそれぞれをレプリケーション・データ６３３ａの一部分としてシンク・キャッシュ６３９ａ内に格納して、ノード３００ａのＤモジュール６００の通信コンポーネント６４９が、クラスタ間相互接続を介してノード３００ｙのＤモジュール６００へそれぞれのレプリカ・コマンド・セット６７２を送信するようにノード３００ａのインターフェース６９０を操作することを可能にすることができる。
【０１０７】
図９Ｂを参照すると、ノード３００ｙのＤモジュール６００の通信コンポーネント６４９は、ノード３００ａのＤモジュール６００からレプリカ・コマンド・セット６７２を受信するようにノード３００ｙのインターフェース６９０を操作することができ、レプリカ・コマンド・セット６７２をレプリケーション・データ６３３ｙの一部としてシンク・キャッシュ６３９ｙ内に一時的に格納することができる。順序付けコンポーネント６４５は、レプリケーション・データ６３３ｙからレプリカ・コマンド・セット６７２を取り出し、それらの取り出されたレプリカ・コマンド・セット６７２を、それらのレプリカ・コマンド・セット６７２内のレプリカ・データ・アクセス・コマンド６７０同士が実行されることになる順序に従う順序でアクセス・コンポーネント６４８に提供することができる。アクセス・コンポーネント６４８は次いで、順序付けコンポーネント６４５によってそのように提供されたそれぞれのレプリカ・コマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０を実行するようにノード３００ｙのＤモジュール６００のストレージ・コントローラ６６５を操作することができる。
【０１０８】
前述のように、クラスタ間相互接続３９９は、いくつかの実施形態においては、ネットワーク（たとえば、ネットワーク９９９）を通じてルーティングされることが可能である。そのネットワークがパケットベースのプロトコルを採用しているかどうかなど、そのネットワークのさまざまな特徴に応じて、レプリカ・コマンド・セット６７２のうちのそれぞれは、複数の部分へと分割されることが可能であり、それらの部分はそれぞれ、そのネットワークを通じて別々のネットワーク・パケット内に含めて伝達されることが可能である。したがって、ノード３００ｙのＤモジュール６００の通信コンポーネント６４９は、レプリケーション・データ６３３ｙ内のレプリカ・コマンド・セット６７２のうちのそれぞれの複数の部分を、それらの部分を伝達するネットワーク・パケットがクラスタ間相互接続３９９から受信されたときに再構築することができる。
【０１０９】
当業者にはよく知られているように、いくつかのネットワークは、別々のパケットが、ネットワークを構成している別々の接続を通じて別々の経路を取る様式で設計される場合があり、それによってパケット同士は、送信側デバイスによって送信された順序とは異なる順序で受信側デバイスにおいて受信される場合がある。パケット同士が、送信されたのとは異なる順序で受信されるというこの可能性の結果、レプリカ・コマンド・セット６７２のうちの単一のレプリカ・コマンド・セット６７２を構成しているパケット同士が、ノード３００ａのインターフェース６９０によって送信された順序から外れてノード３００ｙのインターフェース６９０に到着する場合がある。したがって、既に受信されているその単一のレプリカ・コマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０のうちの少なくともいくつかの実行は、先に実行されることを意図されているその同じレプリカ・コマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０のうちのその他のレプリカ・データ・アクセス・コマンド６７０を伝達するパケットも受信されて、レプリカ・データ・アクセス・コマンド６７０のうちのそれらのその他のレプリカ・データ・アクセス・コマンド６７０が実行されるまで遅延されることが必要となる場合がある。また、これは、レプリカ・データ・アクセス・コマンド６７０同士が実行されることになっていた順序に対応する順序でパケット同士が送信されているにもかかわらず生じる場合がある。
【０１１０】
代替として、又は追加として、パケット同士が、送信されたのとは異なる順序で受信されるというこの可能性の結果、レプリカ・コマンド・セット６７２のうちの複数のレプリカ・コマンド・セット６７２を構成するパケット同士が、順序から外れてノード３００ｙのインターフェース６９０に到着し、それによって、後で送信されたレプリカ・コマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０のうちのすべてが、先に送信されたレプリカ・コマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０のうちのすべてよりも前に受信される場合がある。先に送信されたレプリカ・コマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０が、後に送信されたレプリカ・コマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０よりも前に完全に実行されなければならないと仮定すると、後に送信された（しかし先に受信された）レプリカ・コマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０の実行は、先に送信されたレプリカ・コマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０のうちのすべてが受信及び実行の両方を行われるまで遅延されることが必要となる場合がある。
【０１１１】
順序付けコンポーネント６４５は、シンク・キャッシュ６３９ｙ内の複数のレプリカ・コマンド・セット６７２の諸部分を、クラスタ間相互接続３９９から受信されたパケットから、レプリカ・データ・アクセス・コマンド６７０同士の実行の意図されている順序に従う順序で、及びそれらのパケットが受信される順序にかかわらずに再構築するために通信コンポーネント６４９と協力することができる。ノード３００ａのＤモジュール６００の通信コンポーネント６４９は、ネットワーク・パケット内に含めて伝達されるレプリカ・コマンド・セット６７２のそれぞれの部分が属するレプリカ・コマンド・セット６７２のセットＩＤ６７３の表示を、その部分を送信するネットワーク・パケット内に含めることができる。ノード３００ｙのＤモジュール６００の通信コンポーネント６４９は次いで、それぞれの受信されたネットワーク・パケット内にそのように含まれているセットＩＤ６７３を採用して、そのネットワーク・パケット内のレプリカ・コマンド・セット６７２の伝達された部分を、再構築されている最中である可能性があるレプリカ・コマンド・セット６７２のうちの１つにマッチさせることができる。それぞれのそのようなネットワーク・パケットにおけるセットＩＤ６７３のそのような使用は、そのようなネットワーク・パケット内に含めて伝達されるそれぞれの部分の中に含まれているレプリカ・データ・アクセス・コマンド６７０のシーケンスＩＤ６７１を分析してから、次いでそれらのシーケンスＩＤ６７１を特定のレプリカ・コマンド・セット６７２にマッチさせるよりもさらに迅速にレプリカ・コマンド・セット６７２を再構築するためのメカニズムを提供することができる。
【０１１２】
やはり当業者にはよく知られているように、いくつかのネットワークは、そのようなネットワークを構成している接続から接続へネットワーク・パケットが伝達される際に冗長なネットワーク・パケットの作成をもたらす様式で設計される場合もある。冗長なネットワーク・パケットのそのような作成は、それぞれの送信されたパケットがその意図されている宛先において受信されることを確実にする際にいくらかの度合いの冗長性を提供するためのネットワークのアーキテクチャーにおける望ましい機能とみなされる場合があり、及び／又は宛先への最も速い経路を見つけ出すためのメカニズムとして、ネットワーク・パケットのうちの冗長なネットワーク・パケット同士がネットワーク内で別々の経路に沿って並列に伝達されるようにすることによってネットワーク・パケットの配信を加速するための望ましい機能とみなされる場合がある。しかしながら、この結果、レプリカ・コマンド・セット６７２の同じ部分がノード３００ｙのインターフェース６９０において複数回にわたって受信される可能性がある。
【０１１３】
順序付けコンポーネント６４５は、レプリカ・データ・アクセス・コマンド６７０のシーケンスＩＤ６７１を分析することによるよりもさらに迅速に少なくともいくつかの冗長なパケットを識別するためのメカニズムとして、それぞれのネットワーク・パケット内に含まれているセットＩＤ６７３を使用し、それによって、それらの冗長なネットワーク・パケットがさらに迅速に破棄されることを可能にするためにノード３００ｙのＤモジュール６００の通信コンポーネント６４９と協力することができる。順序付けコンポーネント６４５は、既に完全に再構築されているレプリカ・コマンド・セット６７２のセットＩＤ６７３を追跡把握することができ、それによって、そのような完全に再構築されているレプリカ・コマンド・セット６７２のセットＩＤ６７３を含む受信されるそれ以上のいずれのネットワーク・パケットも冗長にちがいなく、なぜなら、そのレプリカ・コマンド・セット６７２が完全に再構築されるのを依然として待たれているその完全に再構築されているレプリカ・コマンド・セット６７２の部分は、それ以上ないからである。代替として、又は追加として、順序付けコンポーネント６４５は、レプリカ・データ・アクセス・コマンド６７０がアクセス・コンポーネント６４８によって既に完全に実行されているレプリカ・コマンド・セット６７２のセットＩＤ６７３を追跡把握することができ、それによって、そのような完全に実行されているレプリカ・コマンド・セット６７２のセットＩＤ６７３を含む受信されるそれ以上のいずれのネットワーク・パケットも冗長にちがいない。順序付けコンポーネント６４５は、そのような完全に再構築されている及び／又は完全に実行されているレプリカ・コマンド・セット６７２のセットＩＤ６７３の表示を通信コンポーネント６４９に繰り返し伝達して、通信コンポーネント６４９が、そのような冗長なネットワーク・パケットをさらに迅速に識別して破棄することを可能にすることができる。
【０１１４】
セットＩＤ５７３及び６７３が、カウンタをインクリメント又はデクリメントすることによってＩＤコンポーネント６４２１によって（及び／又はノード３００ａのＮモジュール５００のコンポーネントによって）生成される序数である実施形態においては、順序付けコンポーネント６４５は、順序付けコンポーネント６４５によって操作される対応するカウンタをそれぞれインクリメント又はデクリメントして、ノード３００ｙのＤモジュール６００のアクセス・コンポーネント６４８によって最も新たに完全に実行されたレプリカ・コマンド・セット６７２のセットＩＤ６７３を示すことができる。順序付けコンポーネント６４５は、破棄すべき冗長なネットワーク・パケットを識別する目的で、レプリカ・コマンド・セット６７２の一部分を伝達するそれぞれの受信されたネットワーク・パケット内に含まれているセットＩＤ６７３と比較する際に使用するために、そのカウンタの現在の値をノード３００ｙのＤモジュール６００の通信コンポーネント６４９に繰り返し提供することができる。例として、セットＩＤ６７３が、カウンタをインクリメントすることによって生成される序数であり、それによって、レプリカ・データ・アクセス・コマンド６７０の実行のために正しい順序でレプリカ・コマンド・セット６７２を編成することが、レプリカ・コマンド・セット６７２同士を、それらのセットＩＤ６７３を序数の昇順で有するように順序付けることを伴う実施形態においては、ノード３００ｙのＤモジュール６００の通信コンポーネント６４９は、順序付けコンポーネント６４５によって提供された現在のカウンタ値以下の値を有しているセットＩＤ６７３を含むそれぞれの受信されたパケットを破棄することができる。また、これは、それぞれのパケット内に含めて伝達されるレプリカ・コマンド・セット６７２の諸部分の中に含めて伝達されるレプリカ・データ・アクセス・コマンド６７０のシーケンスＩＤ６７１を分析して、それらの特定のレプリカ・データ・アクセス・コマンド６７０が既に以前に受信及び／又は実行されているかどうかを特定することと比べて、どのネットワーク・パケットを冗長なものとして破棄すべきかを特定するさらに迅速なメカニズムを提供することができる。
【０１１５】
前述のように、データ・アクセス・コマンド５７０同士をコマンド・セット５７２へとグループ化することは、悪影響を伴うことなく（たとえば、競合状態をもたらすことなく）順序から外れて実行されることが可能である、共にグループ化するための連続したデータ・アクセス・コマンド５７０のセットを識別することに少なくとも部分的に基づくことが可能である。したがって、そのようなコマンド・セット５７２から得られるレプリカ・コマンド・セット６７２は、そのような悪影響を伴うことなくノード３００ｙのＤモジュール６００のアクセス・コンポーネント６４８によって順序から外れて実行されることが可能であるレプリカ・データ・アクセス・コマンド６７０のセットを含むことができる。したがって、順序付けコンポーネント６４５が、それぞれのレプリカ・コマンド・セット６７２を、内部でのレプリカ・データ・アクセス・コマンド６７０の実行の意図されている順序を保持する様式で再構築するときでさえ、及び順序付けコンポーネント６４５が、レプリカ・コマンド・セット６７２を、実行の意図されている順序に従う順序でアクセス・コンポーネント６４８に提供するときでさえ、アクセス・コンポーネント６４８は、コマンド・セット６７２のうちの個々のコマンド・セット６７２内でレプリカ・データ・アクセス・コマンド６７０同士を順序から外れて実行することができる。これは、アクセス・コンポーネント６４８が、レプリカ・データ・アクセス・コマンド６７０がストレージ・デバイスのセット８００ｙｚ上で実行されるスピードをよりよく最適化することを可能にする上で望ましいとみなされる場合がある。
【０１１６】
図１０Ａ及び図１０Ｂは共に、ネットワーク９９９を通じて少なくともノード３００ａと３００ｙとの間において延在しているクラスタ間相互接続３９９を介してレプリカ・コマンド・セット６７２を伝達するために、セットＩＤ６７３を含むネットワーク・パケット６７４を送信及び受信することの一実施形態の諸側面を示している。さらに具体的には、図１０Ａは、セットＩＤ６７３の例を含むレプリカ・コマンド・セット６７２の例をノード３００ａからクラスタ間相互接続３９９を介してノード３００ｙへ送信することを示している。図１０Ｂは、セットＩＤ６７３の例を含むレプリカ・コマンド・セット６７２の例をノード３００ａからクラスタ間相互接続３９９を介してノード３００ｙによって受信することを示している。
【０１１７】
図１０Ａを参照すると、例示的なレプリカ・コマンド・セット６７２ｊ及び６７２ｋ（それらのそれぞれは、レプリカ・コマンド・セット６７２のインスタンスである）が、レプリケーション・データ６３３ａの一部としてシンク・キャッシュ６３９ａ内で形成されている。いくつかの実施形態においては、レプリカ・コマンド・セット６７２がシンク・キャッシュ６３９ａ内で生成されてシンク・キャッシュ６３９ａから送信される様式は、ダブル・バッファに似ていると言える。さらに具体的には、レプリケーション・データ６３３ａによって占められているシンク・キャッシュ６３９ａ内のロケーション同士のペアが割り当てられることが可能であり、それによって、それらの２つの部分のうちの一方の中に新たなレプリカ・コマンド・セット６７２が形成され、その一方で、完全に形成されることになる最後のレプリカ・コマンド・セット６７２が、２つの部分のうちの他方からノード３００ｙへ送信される。したがって、示されているように、完全に形成されたレプリカ・コマンド・セット６７２ｊの諸部分は、相互接続３９９を介してネットワーク・パケット６７４内に含めてノード３００ｙへ送信されることが可能であり、その一方で、グループ化コンポーネント６４２は、次なるレプリカ・コマンド・セット６７２ｋを形成する。レプリカ・コマンド・セット６７２ｋの形成が完了すると、コマンド・セット６７２ｋの諸部分も、ネットワーク・パケット６７４内の諸部分に含めて送信されることになり、その一方で、レプリカ・データ６３３ａのうちでレプリカ・コマンド・セット６７２ｊによって占められている部分において、別のレプリカ・コマンド・セットが形成されることになる。
【０１１８】
前述のように、及び図１０Ａにおいて例示されているように、それぞれのレプリカ・コマンド・セット６７２の諸部分を伝達するネットワーク・パケット６７４同士は、それぞれのレプリカ・コマンド・セット６７２内におけるレプリカ・データ・アクセス・コマンド６７０同士の実行の意図されている順序を保持する順序でノード３００ａによって送信されることが可能である。したがって、レプリカ・コマンド・セット６７２ｊは、諸部分へと分割されることが可能であり、それらの部分は、送信されるネットワーク・パケット６７４内に含めてノード３００ａによってノード３００ｙへ、それらのネットワーク・パケット６７４内の諸部分の中でのレプリカ・データ・アクセス・コマンド６７０同士の間における実行の順序を保存する順序で、及びその他のいかなるレプリカ・コマンド・セット６７２の諸部分を伝達するネットワーク・パケット６７４も、レプリカ・コマンド・セット６７２ｊの諸部分を伝達するネットワーク・パケット６７４同士の間に散在することなく、送信されることが可能である。また示されているように、レプリカ・コマンド・セット６７２ｊに割り振られているセットＩＤ６７３ｊは、レプリカ・コマンド・セット６７２ｊの一部分を伝達するネットワーク・パケット６７４のうちのそれぞれの中に含まれている。
【０１１９】
しかしながら、やはり前述のように、図１０Ｂを参照すると、クラスタ間相互接続３９９が延在できる上で経由するネットワーク９９９のさまざまな特徴の結果、ネットワーク・パケット６７４同士が、ノード３００ｙにおいて、ノード３００ａによるそれらの送信の順序から外れる、及び／又はネットワーク・パケット６７４のうちの冗長なネットワーク・パケット６７４を含む様式で受信される場合がある。さらに具体的には、図１０Ｂにおいて例示されているように、ノード３００ａは、レプリカ・コマンド・セット６７２ｇ、６７２ｈ、及び６７２ｉの諸部分を伝達する先に送信されたすべてのネットワーク・パケット６７４を有している可能性があり、かつ、レプリカ・コマンド・セット６７２ｊの諸部分を伝達するネットワーク・パケット６７４を現在送信している可能性があるが、ノード３００ｙは、レプリカ・コマンド・セット６７２ｇ、６７２ｈ、及び６７２ｉのうちの１つ又は複数の諸部分を伝達するネットワーク・パケット６７４を依然として受信している可能性がある。したがって、レプリカ・データ６３３ａとは異なり、レプリケーション・データ６３３ｙによって占められているシンク・キャッシュ６３９ｙ内の２つよりも多いロケーションが割り当てられて、示されている例示的なレプリカ・コマンド・セット６７２ｇ、６７２ｈ、６７２ｉ、及び６７２ｊなど、２つよりも多いレプリカ・コマンド・セット６７２のための十分なバッファリングを提供することが可能である。
【０１２０】
また、レプリカ・コマンド・セット６７２はシンク・キャッシュ６３９ｙ内で完全に再構築されることが可能であるので、レプリカ・コマンド・セット６７２のうちの完全に再構築されたレプリカ・コマンド・セット６７２が、レプリカ・データ・アクセス・コマンド６７０同士の実行の意図されている順序に従う順序で、順序付けコンポーネント６４５によってノード６００ｙのＤモジュール６００のアクセス・コンポーネント６４８に提供されることが可能である。結果として、コマンド・セット６７２のうちの後に送信されたが先に受信されたコマンド・セット６７２は、コマンド・セット６７２のうちの先に送信されたコマンド・セット６７２の諸部分のすべてが受信されるまで、及びコマンド・セット６７２のうちの先に送信されたそのコマンド・セット６７２が完全に再構築されてアクセス・コンポーネント６４８に提供されるまで、アクセス・コンポーネント６４８に提供されないことが可能である。例として、レプリカ・コマンド・セット６７２ｇは、レプリカ・コマンド・セット６７２ｈのレプリカ・データ・アクセス・コマンド６７０より前に実行されることになるレプリカ・データ・アクセス・コマンド６７０を含む場合があるが、レプリカ・コマンド・セット６７２ｈは、レプリカ・コマンド・セット６７２ｇより前にシンク・キャッシュ６３９ｙ内で完全に受信されて再構築される場合がある。そのような状況においては、レプリカ・コマンド・セット６７２ｈのレプリカ・データ・アクセス・コマンド６７０のうちのすべての実行は、レプリカ・コマンド・セット６７２ｇが完全に受信されて再構築されるまで、及びレプリカ・コマンド・セット６７２ｇのレプリカ・データ・アクセス・コマンドのうちのすべてが実行されるまで遅延されなければならない。
【０１２１】
やはり前述のように、順序付けコンポーネント６４５は、どんなレプリカ・コマンド・セット６７２が完全に実行されているかの表示をノード３００ｙのＤモジュール６００の通信コンポーネント６４９に提供して、冗長である少なくともいくつかの入ってくるネットワーク・パケット６７４を通信コンポーネント６４９がさらに迅速に識別することを可能にすることができ、それによって、それらのネットワーク・パケット６７４は、破棄されることが可能である。例として、レプリカ・コマンド・セット６７２ｇ及び６７２ｈのレプリカ・データ・アクセス・コマンド６７０が既に完全に実行されている場合には、順序付けコンポーネント６４５は、その旨の表示を通信コンポーネント６４９に提供することができる。その表示を受信したことに応答して、通信コンポーネント６４９は、ネットワーク・パケット６７４のうちで、セットＩＤ６７３ｇ及び６７３ｈを含むネットワーク・パケット６７４を識別することができ、それらのセットＩＤ６７３ｇ及び６７３ｈは、それらのネットワーク・パケット６７４を、レプリカ・コマンド・セット６７２ｇ及び６７２ｈの一部分を伝達するものとして識別する。レプリカ・コマンド・セット６７２ｇ及び６７２ｈのレプリカ・データ・アクセス・コマンドは、既に完全に実行されているので、そのような完全な実行の後に受信されるレプリカ・コマンド・セット６７２ｇ及び６７２ｈのいかなる部分も、冗長な部分であり、したがって、そのような冗長な部分を伝達するいかなるネットワーク・パケット６７４も、それらのコンテンツのさらなる分析を伴わずに破棄されることが可能である冗長なパケットである。いくつかの実施形態においては、冗長なネットワーク・パケット６７４の破棄は、そのネットワーク・パケット６７４のいかなる部分もレプリケーション・データ６３３ｙの一部としてシンク・キャッシュ６３９ｙ内に格納しないことを伴うことが可能である。
【０１２２】
図９Ａに戻ると、ノード３００ａのＮモジュール５００から通信コンポーネント６４９によって受信されるデータ・アクセス・コマンド５７０のうちの１つがキャンセル・コマンドである場合があり、キャンセル・コマンドは、そのキャンセル・コマンドにおいて示されている一連の先のデータ・アクセス・コマンド５７０の実行をキャンセルするためのものである。通信コンポーネント６４９は、そのようなキャンセル・コマンドを、Ｎモジュール５００から受信されたその他のデータ・アクセス・コマンド５７０と共にグループ化コンポーネント６４２へ中継することができる。グループ化コンポーネント６４２のキャンセル・コンポーネント６４２５は、実行をキャンセルされることになる一連のデータ・アクセス・コマンド５７０の中に、先に受信されたどんなデータ・アクセス・コマンド５７０が含まれているかについてのキャンセル・コマンド内の表示を分析して、どんなシーケンスＩＤ５７１及び／又はどんなセットＩＤ５７３が、その一連の中にあるデータ・アクセス・コマンド５７０に関連付けられているかを識別することができる。少なくとも、実行をキャンセルされることになるそれらの一連のデータ・アクセス・コマンド５７０が、１つ又は複数のコマンド・セット５７２の全体を含む場合には、キャンセル・コンポーネント６４２５は、すべてのデータ・アクセス・コマンド５７０の実行がキャンセルされることになる１つ又は複数のコマンド・セット５７２のセットＩＤ５７３の表示を用いてアクセス・コンポーネント６４８に知らせることができる。
【０１２３】
グループ化コンポーネント６４２のキャンセル・コンポーネント６４２５からそのような表示を受信したことに応答して、アクセス・コンポーネント６４８は、その表示において指定されているコマンド・セット５７２のうちのすべてのデータ・アクセス・コマンド５７０の既に進行中であるいかなる実行も停止することができ、その表示において指定されているコマンド・セット５７２のうちでまだ実行されていないすべてのコマンド・セット５７２のデータ・アクセス・コマンド５７０のうちのいずれの実行も防止することができ、コマンド・セット５７２のうちでその表示において指定されているコマンド・セット５７２の全体を破棄することができる。したがって、キャンセル・コンポーネント６４２５からのそのような表示において指定されているコマンド・セット５７２のデータ・アクセス・コマンド５７０のうちのいずれもまだ実行されていない場合には、アクセス・コンポーネント６４８は、そのコマンド・セット５７２の全体を単に破棄することができる。いくつかの実施形態においては、コマンド・セット５７２のそのような破棄は、そのコマンド・セット５７２が、アクセス・コンポーネント６４８による実行のために取り出される目的でどこに格納されていようとも、そのコマンド・セット５７２が上書きされることを可能にすることを伴うことができる。
【０１２４】
しかしながら、当業者にとっては認識可能なように、１つ又は複数の特定のコマンド・セット５７２のデータ・アクセス・コマンド５７０の実行をキャンセルするためのそのような表示が、それらのデータ・アクセス・コマンド５７０の少なくともサブセットが既に実行された後にアクセス・コンポーネント６４８によって受信される場合があるという可能性が残っている。したがって、ストレージ・デバイスのセット８００ａｂ内に格納されているクライアント・デバイス・データ１３０の状態は、データ・アクセス・コマンド５７０のそのサブセットの実行の結果として既に変更されている可能性がある。
【０１２５】
いくつかの実施形態においては、メタデータ６３０ａｂにおいて示されている最大タイム・インターバル又は最大コマンド数量が、さまざまな状況のいずれかから起こるデータ破損の結果として許容可能とみなされることが可能である最大度合いのデータ損失の表示に相当することが可能である。それらの状況は、コマンド・セット５７２のうちの１つ又は複数のデータ・アクセス・コマンド５７０の実行をキャンセルするためのコマンドを、それらのデータ・アクセス・コマンド５７０の少なくともサブセットの実行を防止するには遅すぎる時点で受信することから起こる破損を含むことができる。したがって、クライアント・デバイス１００のうちの１つによってノード３００ａへそのようなキャンセル・コマンドを送信することは、そのようなキャンセルは、クライアント・デバイス・データ１３０を、データ・アクセス・コマンドのそのようなサブセットの実行の前にストレージ・デバイス８００ａｂ及び／又は８００ｙｚ内に格納されていたときにあった状態に復元することで完全に成功するとは限らない場合があるということを理解することに伴ってもたらされることが可能である。
【０１２６】
その他の実施形態においては、アクセス・コンポーネント６４８は、キャンセル・コンポーネント６４２５からアクセス・コンポーネント６４８によって受信された表示に含まれている１つ又は複数のコマンド・セット５７２内のデータ・アクセス・コマンド５７０の少なくともサブセットの実行をアンドゥするための復元コンポーネント６４８５を含むことができる。別の言い方をすれば、復元コンポーネント６４８５は、ストレージ・デバイスのセット８００ａｂ内に格納されているクライアント・デバイス・データ１３０の状態を、その表示に含まれている１つ又は複数のコマンド・セット５７２のデータ・アクセス・コマンド５７０が実行される前にクライアント・デバイス・データ１３０があった状態に復元することができる。そのような実施形態のうちのいくつかにおいては、復元コンポーネント６４８５は、バッファを保持することができ、そのバッファにおいては、１つ又は複数のコマンド・セット５７２のデータ・アクセス・コマンド５７０が、キャッシュに似ていると言える様式でキューに入れられて、それらの実行を遅延させて、Ｎモジュール５００から受信されたキャンセル・コマンドを通じて１つ又は複数のコマンド・セット５７２のデータ・アクセス・コマンドの実行を防止するための機会を可能にする。そのような実施形態のうちのその他の実施形態においては、復元コンポーネント６４８５は、バッファを保持することができ、そのバッファにおいては、コマンド・セット５７２のうちの１つ又は複数のデータ・アクセス・コマンドの実行によって、ストレージ・デバイスのセット８００ａｂ内に格納されているクライアント・デバイス・データ１３０に対して行われたあらゆる変更の表示が一時的に格納されて、それらの変更が、Ｎモジュール５００から受信されたキャンセル・コマンドに応答して元に戻されることを可能にすることができる。
【０１２７】
アクセス・コンポーネント６４８（又はノード３００ａのＤモジュール６００の別のコンポーネント）が、既に実行されているデータ・アクセス・コマンド５７０の実行を元に戻す能力を提供するかどうかにかかわらず、キャンセル・コンポーネント６４２５は、キャンセル・コマンド６７５をノード３００ｙへ送信するためにノード３００ａのＤモジュール６００の通信コンポーネント６４９とさらに協力することができる。さらに具体的には、キャンセル・コンポーネント６４２５は、キャンセル・コマンド６７５を、ノード３００ｙへ送信されることになるレプリケーション・データ６３３ａの一部としてシンク・キャッシュ６３９ａ内に格納することができる。キャンセル・コマンド６７５は、実行がキャンセルされることになるレプリカ・データ・アクセス・コマンド６７０を含むレプリカ・コマンド・セット６７２のうちの１つ又は複数の表示を含むことができる。いくつかの実施形態においては、キャンセル・コマンド６７５は、そのようなレプリカ・コマンド・セット６７２を、それらに割り振られているセットＩＤ６７３によって指定することができる。本質的には、キャンセル・コマンド６７５は、キャンセル・コンポーネント６４２５によってノード３００ａのＤモジュール６００のアクセス・コンポーネント６４８に提供される表示に類似しているキャンセルの表示をノード３００ｙのＤモジュール６００のアクセス・コンポーネント６４８に伝達することを意図されている。この方法においては、これらのアクセス・コンポーネント６４８の両方は、それぞれ、コマンド・セット５７２及び６７２のうちの対応するコマンド・セット５７２及び６７２に属しているデータ・アクセス・コマンド５７０及びレプリカ・データ・アクセス・コマンド６７０のうちの対応するデータ・アクセス・コマンド５７０及びレプリカ・データ・アクセス・コマンド６７０の実行をキャンセルするためのキャンセル表示を提供されることが可能である。したがって、この方法においては、ノード３００ａ及び３００ｙのＤモジュール６００のアクセス・コンポーネント６４８は、データ・アクセス・コマンドのうちのマッチするデータ・アクセス・コマンド同士のキャンセルを少なくとも部分的に並列にもたらすことができる。
【０１２８】
いくつかの実施形態においては、ノード３００ａのＤモジュール６００の通信コンポーネント６４９は、キャンセル・コマンド６７５を、レプリカ・コマンド・セット６７２のうちのいずれの一部分も含んでいないネットワーク・パケット内に含めて送信することができる。さらに、そのような別個のネットワーク・パケットは、レプリカ・コマンド・セット５７２の一部分を含むネットワーク・パケットよりも迅速にノード３００ｙへ伝達されることが可能である様式でノード３００ｙへ送信されることが可能であり、これが可能なのは、クラスタ間相互接続３９９が延在できる上で経由するネットワークが、ネットワーク・パケット同士を伝達する際のスピードにおけるそのような相違をサポートするプロトコルを採用している実施形態においてである。
【０１２９】
図９Ｂに戻って、キャンセル・コマンド６７５を伝達するネットワーク・パケットを受信すると、ノード３００ｙのＤモジュール６００の通信コンポーネント６４９は、キャンセル・コマンド６７５をレプリケーション・データ６３３ｙの一部としてシンク・キャッシュ６３９ｙ内に格納することができる。順序付けコンポーネント６４５は、キャンセル・コンポーネント６４５５を含むことができ、キャンセル・コンポーネント６４５５は、シンク・キャッシュ６３９ｙからキャンセル・コマンド６７５を取り出し、実行がキャンセルされることになるレプリカ・データ・アクセス・コマンド６７０を含むものとして（たとえば、セットＩＤ６７３によって）キャンセル・コマンド６７５において指定されているレプリカ・コマンド・セット６７２のうちの１つ又は複数の表示をノード３００ｙのＤモジュール６００のアクセス・コンポーネント６４８へ中継するためのものである。キャンセル・コンポーネント６４５５からそのような表示を受信したことに応答して、アクセス・コンポーネント６４８は、その表示において指定されているレプリカ・コマンド・セット６７２のうちのすべてのレプリカ・データ・アクセス・コマンド６７０の既に進行中であるいかなる実行も停止することができ、その表示において指定されているコマンド・セット５７２のうちでまだ実行されていないすべてのコマンド・セット５７２のデータ・アクセス・コマンド５７０のうちのいずれの実行も防止することができ、コマンド・セット５７２のうちでその表示において指定されているコマンド・セット５７２の全体を破棄することができる。したがって、キャンセル・コンポーネント６４５５からのそのような表示において指定されているコマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０のうちのいずれもまだ実行されていない場合には、アクセス・コンポーネント６４８は、そのレプリカ・コマンド・セット６７２の全体を単に破棄することができる。
【０１３０】
しかしながら、１つ又は複数の特定のレプリカ・コマンド・セット６７２のレプリカ・データ・アクセス・コマンド６７０の実行をキャンセルするためのそのような表示が、それらのレプリカ・データ・アクセス・コマンド６７０の少なくともサブセットが既に実行された後にアクセス・コンポーネント６４８によって受信される場合があるという可能性がやはり残っている。したがって、ストレージ・デバイスのセット８００ｙｚ内に格納されているクライアント・デバイス・データ１３０の状態は、レプリカ・データ・アクセス・コマンド６７０のうちのそのようなレプリカ・データ・アクセス・コマンド６７０の実行の結果として既に変更されている可能性がある。ノード３００ａのＤモジュール６００のアクセス・コンポーネント６４８と同様に、ノード３００ｙのＤモジュール６００のアクセス・コンポーネント６４８は、キャンセル・コンポーネント６４５５からアクセス・コンポーネント６４８によって受信された表示に含まれている１つ又は複数のレプリカ・コマンド・セット６７２内のレプリカ・データ・アクセス・コマンド６７０の少なくともサブセットの実行をアンドゥするための復元コンポーネント６４８５を含むことができる。
【０１３１】
実行されることにならないレプリカ・データ・アクセス・コマンド６７０を含むレプリカ・コマンド・セット６７２の表示をアクセス・コンポーネント６４８に提供することに加えて、順序付けコンポーネント６４５のキャンセル・コンポーネント６４５５は、同様の表示を通信コンポーネント６４９に提供することができる。ノード３００ｙのＤモジュール６００の通信コンポーネント６４９に提供されるそのような表示は、通信コンポーネント６４９が、冗長なネットワーク・パケットとしてその表示において指定されているレプリカ・コマンド・セット６７２のうちの１つの一部分を含むこれから受信される可能性があるあらゆるネットワーク・パケットを破棄することを可能にすることができる。したがって、レプリカ・データ・アクセス・コマンド６７０の実行のキャンセルをもたらすことは、キャンセル・コマンド６７５の受信後に受信されるそれらのレプリカ・コマンド・セット６７２の諸部分を冗長なネットワーク・パケットとして扱うことを含むことができる。なぜなら、それらが伝達するレプリカ・コマンド・セット６７２のそれらの部分は、それらの部分が属するレプリカ・コマンド・セット６７２内のレプリカ・データ・アクセス・コマンド６７０が実行されることはないとキャンセル・コマンド６７５が指定していることに起因して冗長とされているからである。また、ノード３００ｙの通信コンポーネント６４９は次いで、そのような冗長なネットワーク・パケットをレプリケーション・データ６３３ｙの一部としてシンク・キャッシュ６３９ｙ内に格納しないことによって、そのような破棄をもたらすことができる。
【０１３２】
前述のように、いくつかの実施形態においては、セットＩＤ５７３及び６７３は、カウンタによって保持されている値をインクリメント又はデクリメントすることによってＩＤコンポーネント６４２１によって（及び／又はノード３００ａのＮモジュール５００のコンポーネントによって）生成される序数であることが可能であり、それによって順序付けコンポーネント６４５は、対応するカウンタによって保持されている対応する値をそれぞれインクリメント又はデクリメントして、ノード３００ｙのＤモジュール６００のアクセス・コンポーネント６４８によって最も新たに完全に実行されたレプリカ・コマンド・セット６７２のセットＩＤ６７３を示すことができる。そのような実施形態においては、どんなコマンド・セット５７２及びどんなレプリカ・コマンド・セット６７２が、実行がキャンセルされることになるデータ・アクセス・コマンド５７０及びレプリカ・データ・アクセス・コマンド６７０をそれぞれ含むかの表示が、ノード３００ａ及び３００ｙのうちの両方のＤモジュール６００のアクセス・コンポーネント６４８に提供される更新されたカウンタ値として伝達されることが可能である。これらのアクセス・コンポーネント６４８は次いで、この更新されたカウンタ値を、これらのアクセス・コンポーネント６４８のいずれかによって現在実行されている、及び／又はその後に受信されるコマンド・セット５７２及びレプリカ・コマンド・セット６７２のセットＩＤ５７３及び６７３とそれぞれ比較して、コマンド・セット５７２及びレプリカ・コマンド・セット６７２のうちで破棄すべき冗長なコマンド・セット５７２及びレプリカ・コマンド・セット６７２を識別することができる。
【０１３３】
例として、セットＩＤ５７３及び６７３が、カウンタをインクリメントすることによってＩＤコンポーネント６４２１によって生成される序数である実施形態においては、両方のアクセス・コンポーネント６４８に提供される、結果として生じる更新されたカウンタ値は、実行されることにならないデータ・アクセス・コマンド５７０又はレプリカ・データ・アクセス・コマンド６７０を含むコマンド・セット５７２又はレプリカ・コマンド・セット６７２に関連付けられているセットＩＤ５７３又は６７３のうちのいずれよりも高い序数のものであるコマンド・セット５７２及びレプリカ・コマンド・セット６７２に関するセットＩＤ５７３及び６７３をそれぞれ示すことができる。ノード３００ａのＤモジュール６００のアクセス・コンポーネント６４８は、更新されたカウンタ値未満であるセットＩＤ５７３を割り振られているそのアクセス・コンポーネント６４８によって現在実行されている、又はそのアクセス・コンポーネント６４８にその後に提供されるいかなるコマンド・セット５７２も破棄することができる。それに対応して、ノード３００ｙのＤモジュール６００のアクセス・コンポーネント６４８は、更新されたカウンタ値未満であるセットＩＤ６７３を割り振られているそのアクセス・コンポーネント６４８によって現在実行されている、又はそのアクセス・コンポーネント６４８にその後に提供されるいかなるコマンド・セット６７２も破棄することができる。同様に、ノード３００ｙのＤモジュール６００の通信コンポーネント６４９も、更新されたカウンタ値を提供されることが可能であり、その更新されたカウンタ値を、通信コンポーネント６４９がクラスタ間相互接続３９９を介してノード３００ａからその後に受信するレプリカ・コマンド・セット６７２の一部分を伝達するいかなるネットワーク・パケットのセットＩＤ６７３とも比較することができる。通信コンポーネント６４９は、更新されたカウンタ値未満である値を伴うセットＩＤ６７３を含むそのようなネットワーク・パケットを破棄することができる。
【０１３４】
図１１は、ロジック・フロー２１００の一実施形態を示している。ロジック・フロー２１００は、本明細書において説明されている１つ又は複数の実施形態によって実行されるオペレーションのうちのいくつか又はすべてを代表することが可能である。さらに具体的には、ロジック・フロー２１００は、少なくともコントロール・ルーチン６４０を実行する際にプロセッサ・コンポーネント６５０によって実行される、及び／又はデータ・ストレージ・モジュール（Ｄモジュール）６００のその他のコンポーネントによって実行されるオペレーションを示すことができる。
【０１３５】
２１１０において、ストレージ・クラスタ・システムの１つのクラスタの第１のＨＡグループのアクティブ・ノードのＤモジュールのプロセッサ・コンポーネントが、そのアクティブ・ノードがクライアント相互接続を介して結合されているクライアント・デバイスからデータ・アクセス・コマンドを受信することができる。そのようなアクティブ・ノードの一例は、ストレージ・クラスタ・システム１０００のクラスタ１３００ａのＨＡグループ１６００ａｂ又は１６００ｃｄのうちの１つのノード３００ａ〜ｄのうちの１つであることが可能であり、そのようなノードは、クライアント相互接続１９９を介してクライアント・デバイス１００のうちの１つ又は複数に結合されることが可能である。
【０１３６】
２１２０において、プロセッサ・コンポーネントは、データ・アクセス・コマンドのうちのそれぞれにシーケンスＩＤを割り振ることができる。論じられているように、シーケンスＩＤは、データ・アクセス・コマンド同士が実行されることを意図されている順序を示す増加又は減少する序数の順序でデータ・アクセス・コマンドに割り振られる序数であることが可能である。
【０１３７】
２１３０において、プロセッサ・コンポーネントは、連続して実行されることを意図されているデータ・アクセス・コマンドのうちの複数のデータ・アクセス・コマンドをコマンド・セットへとグループ化することができ、データ・アクセス・コマンド同士が実行されることになる順序に従うコマンド・セット同士にわたる順序でそうすることができる。前述のように、データ・アクセス・コマンドのうちのいくつが共にグループ化されて、コマンド・セットのうちのそれぞれを形成するかは、さまざまな要因によって特定されることが可能であり、それらの要因は、単一のコマンド・セットへとグループ化されることが可能であるデータ・アクセス・コマンドを受信及び／又は実行するのに必要とされる時間の量、単一のコマンド・セット内に含まれることが可能であるデータ・アクセス・コマンドの最大数量、内部でデータ・アクセス・コマンド同士が順序から外れて実行されることが可能である少なくとも１つのコマンド・セットの形成を可能にすることができるデータ・アクセス・コマンドの特徴を含むが、それらには限定されない。
【０１３８】
２１４０において、プロセッサ・コンポーネントは、セットＩＤをコマンド・セットに割り振ることができ、それらのセットＩＤも、データ・アクセス・コマンドの実行の順序に従うコマンド・セットの順序の表示を提供することができる。シーケンシャルＩＤと同様に、セットＩＤも、コマンド・セット内のデータ・アクセス・コマンド同士が実行されることになる順序に従う増加又は減少する序数の順序でコマンド・セットに割り振られる序数であることが可能である。２１５０において、プロセッサ・コンポーネントは、コマンド・セットをレプリケートして、マッチするコマンド・セットのセットＩＤにマッチするセットＩＤを割り振られているマッチするレプリカ・コマンド・セットを生成することができ、それぞれのレプリカ・コマンド・セットは、１つ又は複数のレプリカ・データ・アクセス・コマンドを含み、それらのレプリカ・データ・アクセス・コマンドは、マッチするコマンド・セットのデータ・アクセス・コマンドにマッチし、マッチするシーケンスＩＤを割り振られている。
【０１３９】
２１６０において、プロセッサ・コンポーネントは、それぞれのレプリカ・コマンド・セットを諸部分へと分割することができ、それらの部分はそれぞれ、別々のネットワーク・パケット内に含まれて、ストレージ・クラスタ・システムの別のクラスタの第２のＨＡグループに属する別のアクティブ・ノードへ送信されることになる。そのような別のアクティブ・ノードの一例は、ストレージ・クラスタ・システム１０００のクラスタ１３００ａのＨＡグループ１６００ａｂ又は１６００ｃｄのうちの一方のノード３００ａ〜ｄのうちの別のノードであることが可能である。
【０１４０】
２１７０において、ネットワーク・パケットは、レプリカ・コマンド・セットのその含まれる部分が属するレプリカ・コマンド・セットのセットＩＤを含むように形成されることが可能である。２１８０において、ネットワーク・パケットは、その別のアクティブ・ノードへ、少なくともそれらの２つのアクティブ・ノードの間において延在しているクラスタ間相互接続を介して送信されることが可能である。前述のように、そのようなクラスタ間相互接続は、クライアント相互接続が延在する際に経由するのと同じネットワークを通じて延在することができる。
【０１４１】
２１９０において、プロセッサ・コンポーネントは、コマンド・セットのうちのそれぞれのデータ・アクセス・コマンドを実行することができる。そうする際に、プロセッサ・コンポーネントは、それぞれのコマンド・セットのすべてのデータ・アクセス・コマンドが、次なるコマンド・セットのデータ・アクセス・コマンドの実行を開始する前に完全に実行される限り、データ・アクセス・コマンド同士を、それらの実行の意図されている順序に従う順序で実行することができる。しかしながら、コマンド・セットのうちの１つ又は複数の中で、いくつかの実施形態においては、プロセッサ・コンポーネントがデータ・アクセス・コマンド同士の実行の順序に従わない場合がある。
【０１４２】
図１２は、ロジック・フロー２２００の一実施形態を示している。ロジック・フロー２２００は、本明細書において説明されている１つ又は複数の実施形態によって実行されるオペレーションのうちのいくつか又はすべてを代表することが可能である。さらに具体的には、ロジック・フロー２２００は、少なくともコントロール・ルーチン６４０を実行する際にプロセッサ・コンポーネント６５０によって実行される、及び／又はデータ・ストレージ・モジュール（Ｄモジュール）６００のその他のコンポーネントによって実行されるオペレーションを示すことができる。
【０１４３】
２２１０において、ストレージ・クラスタ・システムの１つのクラスタの第１のＨＡグループのアクティブ・ノードのＤモジュールのプロセッサ・コンポーネントが、そのアクティブ・ノードがクライアント相互接続を介して結合されているクライアント・デバイスから、指定されている一連の先に受信されたデータ・アクセス・コマンドの実行をキャンセルするためのデータ・アクセス・コマンドを受信することができる。そのようなアクティブ・ノードの一例は、ストレージ・クラスタ・システム１０００のクラスタ１３００ａのＨＡグループ１６００ａｂ又は１６００ｃｄのうちの１つのノード３００ａ〜ｄのうちの１つであることが可能であり、そのようなノードは、クライアント相互接続１９９を介してクライアント・デバイス１００のうちの１つ又は複数に結合されることが可能である。
【０１４４】
２２２０において、プロセッサ・コンポーネントは、少なくとも、データ・アクセス・コマンドのうちのすべてが、クライアント・デバイスから受信されたキャンセル・コマンドにおいて指定されているデータ・アクセス・コマンドの中にあるコマンド・セットのセットＩＤを特定し、それによって、それらのコマンド・セット及びそれらのマッチするレプリカ・コマンド・セットを識別することができる。説明されているように、それぞれのコマンド・セットごとに、マッチするレプリカ・コマンド・セットが存在することが可能であり、それらのレプリカ・コマンド・セットのそれぞれは、マッチするセットＩＤを割り振られることが可能である。
【０１４５】
２２３０において、プロセッサ・コンポーネントは、クライアント・デバイスからのキャンセル・コマンドにおいて指定されているデータ・アクセス・コマンドの現在進行中のいかなる実行も停止し、プロセッサ・コンポーネントは、２２４０において、クライアント・デバイスからのキャンセル・コマンドにおいて指定されているデータ・アクセス・コマンドに関連付けられているものとして識別されたばかりのコマンド・セットを破棄することができる。前に説明したように、コマンド・セットの破棄は、そのデータ・アクセス・コマンド（少なくとも、まだ実行されていないデータ・アクセス・コマンド）を実行することを差し控えること、及び／又はコマンド・セットが格納されているロケーションが、実行されることになるデータ・アクセス・コマンドを含む別のコマンド・セットで上書きされることを可能にすることを伴うことができる。
【０１４６】
２２５０において、プロセッサ・コンポーネントは、クラスタ間相互接続を介して、ストレージ・クラスタ・システムの別のクラスタの第２のＨＡグループに属する別のアクティブ・ノードへキャンセル・コマンドを送信することができる。このキャンセル・コマンドは、レプリカ・データ・アクセス・コマンドのうちのすべてが、クライアント・デバイスから受信されたキャンセル・コマンドにおいて指定されているデータ・アクセス・コマンドの中にあるデータ・アクセス・コマンドにマッチするレプリカ・コマンド・セットのセットＩＤの表示を含むことができる。そのような別のアクティブ・ノードの一例は、ストレージ・クラスタ・システム１０００のクラスタ１３００ａのＨＡグループ１６００ａｂ又は１６００ｃｄのうちの１つのノード３００ａ〜ｄのうちの別の１つであることが可能であり、それらの２つのアクティブ・ノードは、クラスタ間相互接続３９９を介して結合されることが可能である。
【０１４７】
図１３は、ロジック・フロー２３００の一実施形態を示している。ロジック・フロー２３００は、本明細書において説明されている１つ又は複数の実施形態によって実行されるオペレーションのうちのいくつか又はすべてを代表することが可能である。さらに具体的には、ロジック・フロー２３００は、少なくともコントロール・ルーチン６４０を実行する際にプロセッサ・コンポーネント６５０によって実行される、及び／又はデータ・ストレージ・モジュール（Ｄモジュール）６００のその他のコンポーネントによって実行されるオペレーションを示すことができる。
【０１４８】
２３１０において、ストレージ・クラスタ・システムの１つのクラスタの第２のＨＡグループのアクティブ・ノードのＤモジュールのプロセッサ・コンポーネントが、ネットワークを通じて延在しているクラスタ間相互接続を通じて、そのストレージ・クラスタ・システムの別のクラスタの第１のＨＡグループに属する別のアクティブ・ノードから、レプリカ・コマンド・セットの諸部分を伝達するネットワーク・パケットを受信することができる。そのようなアクティブ・ノードの例はそれぞれ、ストレージ・クラスタ・システム１０００のクラスタ１３００ａのＨＡグループ１６００ａｂ若しくは１６００ｃｄのうちの１つの、又はストレージ・クラスタ・システム１０００のクラスタ１３００ｚのＨＡグループ１６００ｙｚのノード３００ａ〜ｄのうちの１つであることが可能であり、そのようなノード同士は、クラスタ間相互接続３９９を介することによって結合されることが可能である。
【０１４９】
２３２０において、プロセッサ・コンポーネントは、レプリカ・コマンド・セットのその含まれている部分がどんなレプリカ・コマンド・セットに属するかを示す、それぞれのそのようなネットワーク・パケット内に含まれているセットＩＤを、レプリカ・データ・アクセス・コマンドが完全に実行されているレプリカ・コマンド・セットに関連付けられている１つ又は複数のセットＩＤの表示に照らして分析することができる。前述のように、そのような比較は、冗長であるレプリカ・コマンド・セットの一部分を含む少なくともいくつかのネットワーク・パケットの識別を可能にする。なぜなら、そのレプリカ・コマンド・セットは、既に完全に再構築されており、そのレプリカ・データ・アクセス・コマンドのうちのすべては、完全に実行されており、それによって、そのようなレプリカ・コマンド・セットの一部分を伝達しているネットワーク・パケットを冗長にしている。説明されているように、２つのアクティブ・ノードを結合しているクラスタ間相互接続がルーティングされる際に経由するネットワークのさまざまな特徴によって、それらの２つのノードの間においてやり取りされるネットワーク・パケットから冗長なネットワーク・パケットが生成される場合がある。
【０１５０】
２３３０において、プロセッサ・コンポーネントは、レプリカ・コマンド・セットの冗長な部分を伝達していることに起因して冗長と識別されるネットワーク・パケットを破棄し、２３４０において、１つ又は複数のレプリカ・コマンド・セットを再構築する際に、破棄されていないネットワーク・パケットを採用する。説明されているように、２つのアクティブ・ノードを結合しているクラスタ間相互接続がルーティングされる際に経由するネットワークのさまざまな特徴によって、ネットワーク・パケット同士が、アクティブ・ノードにおいて、他方のアクティブ・ノードがそれらのネットワーク・パケットを送信した順序とは異なる順序で受信される場合がある。結果として、レプリカ・コマンド・セットのうちの複数のレプリカ・コマンド・セットが、順序から外れて受信される可能性があるレプリカ・コマンド・セットの諸部分から再構築されている最中となる場合がある。
【０１５１】
２３５０において、プロセッサ・コンポーネントは、レプリカ・コマンド・セットのうちのそれぞれのレプリカ・データ・アクセス・コマンドを実行することができる。そうする際に、プロセッサ・コンポーネントは、それぞれのレプリカ・コマンド・セットのすべてのレプリカ・データ・アクセス・コマンドが、次なるレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドの実行を開始する前に完全に実行される限り、レプリカ・データ・アクセス・コマンド同士を、それらの実行の意図されている順序に従う順序で実行することができる。しかしながら、レプリカ・コマンド・セットのうちの１つ又は複数の中で、いくつかの実施形態においては、プロセッサ・コンポーネントがレプリカ・データ・アクセス・コマンド同士の実行の順序に従わない場合がある。
【０１５２】
２３６０において、それぞれのレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドが完全に実行されたときに、プロセッサ・コンポーネントは、それらのレプリカ・コマンド・セットのうちのそれぞれのセットＩＤを、レプリカ・データ・アクセス・コマンドが完全に実行されているレプリカ・コマンド・セットに関連付けられているセットＩＤの表示に加えることができる。この方法においては、破棄すべき冗長なネットワーク・パケットを識別するために２３２０において採用されているセットＩＤのこの表示は、更新されることが可能である。
【０１５３】
図１４は、ロジック・フロー２４００の一実施形態を示している。ロジック・フロー２４００は、本明細書において説明されている１つ又は複数の実施形態によって実行されるオペレーションのうちのいくつか又はすべてを代表することが可能である。さらに具体的には、ロジック・フロー２４００は、少なくともコントロール・ルーチン６４０を実行する際にプロセッサ・コンポーネント６５０によって実行される、及び／又はデータ・ストレージ・モジュール（Ｄモジュール）６００のその他のコンポーネントによって実行されるオペレーションを示すことができる。
【０１５４】
２４１０において、ストレージ・クラスタ・システムの１つのクラスタの第２のＨＡグループのアクティブ・ノードのＤモジュールのプロセッサ・コンポーネントが、ネットワークを通じて延在しているクラスタ間相互接続を通じて、そのストレージ・クラスタ・システムの別のクラスタの第１のＨＡグループに属する別のアクティブ・ノードから、指定されているレプリカ・コマンド・セット内のすべてのレプリカ・データ・アクセス・コマンドの実行をキャンセルするためのキャンセル・コマンドを受信することができる。そのようなアクティブ・ノードの例はそれぞれ、ストレージ・クラスタ・システム１０００のクラスタ１３００ａのＨＡグループ１６００ａｂ若しくは１６００ｃｄのうちの１つの、又はストレージ・クラスタ・システム１０００のクラスタ１３００ｚのＨＡグループ１６００ｙｚのノード３００ａ〜ｄのうちの１つであることが可能であり、そのようなノード同士は、クラスタ間相互接続３９９を介することによって結合されることが可能である。指定されるレプリカ・コマンド・セットは、キャンセル・コマンド内に含まれる、それらのレプリカ・コマンド・セットに割り振られているセットＩＤの表示によって、キャンセル・コマンド内で指定されることも可能である。
【０１５５】
２４２０において、プロセッサ・コンポーネントは、指定されているレプリカ・コマンド・セットの中にあるレプリカ・データ・アクセス・コマンドの現在進行中のいかなる実行も停止し、プロセッサ・コンポーネントは、２４３０において、指定されているコマンド・セットを破棄することができる。前に説明したように、コマンド・セットの破棄は、そのデータ・アクセス・コマンド（少なくとも、まだ実行されていないデータ・アクセス・コマンド）を実行することを差し控えること、及び／又はコマンド・セットが格納されているロケーションが、実行されることになるデータ・アクセス・コマンドを含む別のコマンド・セットで上書きされることを可能にすることを伴うことができる。
【０１５６】
２４４０において、プロセッサ・コンポーネントは、レプリカ・コマンドの一部分を含む、その他のアクティブ・ノードから受信されたそれぞれのネットワーク・パケット内に含まれているセットＩＤを、指定されているレプリカ・コマンド・セットのセットＩＤに照らして分析することができる。前述のように、そのような比較は、冗長であるレプリカ・コマンド・セットの一部分を含む少なくともいくつかのネットワーク・パケットの識別を可能にする。キャンセル・コマンドの受信の結果として、指定されているレプリカ・コマンド・セットのレプリカ・データ・アクセス・コマンドがもはや実行されることにならないとすると、指定されているレプリカ・コマンド・セットのうちの１つの一部分を伝達しているいかなるネットワーク・パケットも、事実上、冗長とされる。なぜなら、そのようなネットワーク・パケット内に含めて伝達されているそのような部分から、指定されているレプリカ・コマンド・セットのうちのいずれを再構築することによっても、何の目的も果たされないからである。２４５０において、指定されているレプリカ・コマンド・セットのうちの１つ又は複数のそのような冗長な部分を伝達しているそのような冗長なネットワーク・パケットは、破棄される。
【０１５７】
図１５は、前に説明したようなさまざまな実施形態を実施するのに適している例示的な処理アーキテクチャー３０００の一実施形態を示している。さらに具体的には、処理アーキテクチャー３０００（又はその異形）は、クライアント・デバイス１００、Ｍモジュール４００、Ｎモジュール５００、Ｄモジュール６００、又は、ストレージ・デバイスのセット８００ａｂ、８００ｃｄ、若しくは８００ｙｚのうちの１つ又は複数の一部として実装されることが可能である。処理アーキテクチャー３０００のコンポーネントは、参照番号を与えられており、それらの参照番号においては、最後の２つの数字が、モジュール４００、５００、及び６００の一部として前に示され説明されているコンポーネントのうちの少なくともいくつかの参照番号の最後の２つの数字に対応しているということに留意されたい。これは、それぞれのコンポーネント同士を相関付けることに対する補助として行われている。
【０１５８】
処理アーキテクチャー３０００は、デジタル処理において一般に採用されるさまざまな要素を含み、それらの要素は、１つ又は複数のプロセッサ、マルチコア・プロセッサ、コプロセッサ、メモリ・ユニット、チップセット、コントローラ、周辺機器、インターフェース、オシレータ、タイミング・デバイス、ビデオ・カード、オーディオ・カード、マルチメディア入力／出力（Ｉ／Ｏ）コンポーネント、電源などを含むが、それらには限定されない。本出願において使用される際には、「システム」及び「コンポーネント」という用語は、デジタル処理が実行されるコンピューティング・デバイスのエンティティーを指すことを意図されており、そのエンティティーは、ハードウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、又は実行中のソフトウェアであり、それらの例は、この示されている例示的な処理アーキテクチャーによって提供される。たとえば、コンポーネントは、プロセッサ・コンポーネント上で稼働しているプロセス、プロセッサ・コンポーネントそのもの、光及び／若しくは磁気ストレージ・メディアを採用することができるストレージ・デバイス（たとえば、ハード・ディスク・ドライブ、アレイにおける複数のストレージ・ドライブなど）、ソフトウェア・オブジェクト、実行可能な命令のシーケンス、実行のスレッド、プログラム、並びに／又はコンピューティング・デバイス全体（たとえば、コンピュータ全体）であることが可能であるが、それらには限定されない。例として、サーバ上で稼働しているアプリケーション、及びそのサーバは両方とも、コンポーネントであることが可能である。１つ又は複数のコンポーネントが１つのプロセス及び／又は実行のスレッド内に存在することが可能であり、１つのコンポーネントを１つのコンピューティング・デバイス上に局在させること、及び／又は複数のコンピューティング・デバイスの間に分散させることが可能である。さらに、コンポーネント同士は、さまざまなタイプの通信メディアによって互いに通信可能に結合されて、オペレーションを調整することが可能である。その調整は、情報の一方向の又は双方向のやり取りを含むことができる。たとえば、コンポーネント同士は、通信メディアを介して通信される信号の形態で情報を通信することができる。それらの情報は、１つ又は複数の信号線に割り当てられる信号として実装されることが可能である。メッセージ（コマンド、ステータス、アドレス、又はデータ・メッセージを含む）は、そのような信号のうちの１つであることが可能であり、又は複数のそのような信号であることが可能であり、さまざまな接続及び／又はインターフェースのうちのいずれかを通じて順次又は実質的に並列に送信されることが可能である。
【０１５９】
示されているように、処理アーキテクチャー３０００を実装する際に、コンピューティング・デバイスは、少なくとも、プロセッサ・コンポーネント９５０と、内蔵ストレージ９６０と、その他のデバイスへのインターフェース９９０と、カップリング９５９とを含む。説明されるように、意図されている使用及び／又は使用の条件を含めて、処理アーキテクチャー３０００を実装するコンピューティング・デバイスのさまざまな側面に応じて、そのようなコンピューティング・デバイスは、さらなるコンポーネントをさらに含むことができ、それらのコンポーネントは、ディスプレイ・インターフェース９８５などであるが、それらには限定されない。
【０１６０】
カップリング９５９は、１つ又は複数のバス、ポイントツーポイント相互接続、トランシーバ、バッファ、クロスポイント・スイッチ、及び／若しくはその他のコンダクタ、並びに／又は、少なくともプロセッサ・コンポーネント９５０を内蔵ストレージ９６０に通信可能に結合するロジックを含む。カップリング９５９は、プロセッサ・コンポーネント９５０を、インターフェース９９０、オーディオ・サブシステム９７０、及びディスプレイ・インターフェース９８５のうちの１つ又は複数に（これら及び／又はその他のコンポーネントのうちのどれがまた存在しているかに応じて）さらに結合することができる。プロセッサ・コンポーネント９５０がカップリング９５９によってそのように結合されている状態で、プロセッサ・コンポーネント９５０は、上で詳細に説明されているタスクのうちのさまざまなタスクを実行し、上述のコンピューティング・デバイスのうちのどのコンピューティング・デバイスに関しても、処理アーキテクチャー３０００を実施することができる。カップリング９５９は、信号を光学的に及び／又は電気的に伝達することができるさまざまなテクノロジー又はテクノロジー同士の組合せのうちのいずれかを用いて実装されることが可能である。さらに、カップリング９５９の少なくとも諸部分は、さまざまな業界標準のうちのいずれかに準拠するタイミング及び／又はプロトコルを採用することができ、それらの業界標準は、アクセラレイテッド・グラフィックス・ポート（ＡＧＰ）、カードバス、エクステンデッド・インダストリー・スタンダード・アーキテクチャー（Ｅ−ＩＳＡ）、マイクロ・チャネル・アーキテクチャー（ＭＣＡ）、ヌーバス、ペリフェラル・コンポーネント・インターコネクト（エクステンデッド）（ＰＣＩ−Ｘ）、ＰＣＩエクスプレス（ＰＣＩ−Ｅ）、パーソナル・コンピュータ・メモリ・カード・インターナショナル・アソシエーション（ＰＣＭＣＩＡ）バス、ハイパートランスポート（商標）、クイックパスなどを含むが、それらには限定されない。
【０１６１】
前述のように、プロセッサ・コンポーネント９５０（プロセッサ・コンポーネント４５０、５５０、及び６５０に対応する）は、さまざまなテクノロジーのうちのいずれかを採用している、及び複数の方法のうちのいずれかで物理的に結合されている１つ又は複数のコアとともに実装されているさまざまな市販のプロセッサのうちのいずれかを含むことができる。
【０１６２】
前述のように、内蔵ストレージ９６０（ストレージ４６０、５６０、及び６６０に対応する）は、さまざまなテクノロジー又はテクノロジー同士の組合せのうちのいずれかに基づく１つ又は複数の個別のストレージ・デバイスから構成されることが可能である。さらに具体的には、示されているように、内蔵ストレージ９６０は、揮発性ストレージ９６１（たとえば、１つ又は複数の形態のＲＡＭテクノロジーに基づくソリッド・ステート・ストレージ）、不揮発性ストレージ９６２（たとえば、コンテンツを保存するのに電力の絶え間ない供給を必要としないソリッド・ステート・ストレージ、強磁性のストレージ、又はその他のストレージ）、及び取り外し可能なメディア・ストレージ９６３（たとえば、コンピューティング・デバイス同士の間において情報を伝達することができる取り外し可能なディスク又はソリッド・ステート・メモリ・カード・ストレージ）のうちの１つ又は複数を含むことができる。内蔵ストレージ９６０を、複数の個別のタイプのストレージを含む可能性があるものとしてこのように示しているのは、コンピューティング・デバイスにおいては複数のタイプのストレージ・デバイスがよく使用されているという認識においてのことであり、１つのタイプは、相対的に高速な読み出し能力及び書き込み能力を提供して、プロセッサ・コンポーネント９５０によってデータをより高速に操作することを可能にし（ただし、電力を絶えず必要とする「揮発性」のテクノロジーを使用する可能性があり）、その一方で別のタイプは、相対的に高い密度の不揮発性ストレージを提供する（ただし、相対的に低速の読み出し能力及び書き込み能力を提供する可能性が高い）。
【０１６３】
別々のテクノロジーを採用している別々のストレージ・デバイスが別々の特徴を有している場合が多いとすると、そのような別々のストレージ・デバイスが、別々のインターフェースを通じて別々のストレージ・デバイスに結合されている別々のストレージ・コントローラを通じてコンピューティング・デバイスのその他の部分に結合されることもよくある。例として、揮発性ストレージ９６１が存在していて、ＲＡＭテクノロジーに基づいている場合には、揮発性ストレージ９６１は、おそらくは行及び列のアドレッシングを採用している揮発性ストレージ９６１への適切なインターフェースを提供するストレージ・コントローラ９６５ａを通じてカップリング９５９に通信可能に結合されることが可能であり、ストレージ・コントローラ９６５ａは、揮発性ストレージ９６１内に格納されている情報を保存する際の補助となるように行のリフレッシング及び／又はその他のメンテナンス・タスクを実行することができる。別の例として、不揮発性ストレージ９６２が存在していて、１つ又は複数の強磁性ディスク・ドライブ及び／又はソリッドステート・ディスク・ドライブを含んでいる場合には、不揮発性ストレージ９６２は、おそらくは情報のブロックの、並びに／又はシリンダ及びセクタのアドレッシングを採用している不揮発性ストレージ９６２への適切なインターフェースを提供するストレージ・コントローラ９６５ｂを通じてカップリング９５９に通信可能に結合されることが可能である。さらに別の例として、取り外し可能なメディア・ストレージ９６３が存在していて、マシン可読ストレージ・メディア９６９の１つ又は複数の断片を採用している１つ又は複数の光ディスク・ドライブ及び／又はソリッドステート・ディスク・ドライブを含んでいる場合には、取り外し可能なメディア・ストレージ９６３は、おそらくは情報のブロックのアドレッシングを採用している取り外し可能なメディア・ストレージ９６３への適切なインターフェースを提供するストレージ・コントローラ９６５ｃを通じてカップリング９５９に通信可能に結合されることが可能であり、ストレージ・コントローラ９６５ｃは、マシン可読ストレージ・メディア９６９の寿命を延ばすことに固有の様式で、読み出しオペレーション、消去オペレーション、及び書き込みオペレーションを調整することができる。
【０１６４】
揮発性ストレージ９６１又は不揮発性ストレージ９６２のうちの一方又は他方は、それぞれが基づいているテクノロジーに応じて、プロセッサ・コンポーネント９５０によって実行可能な命令のシーケンスを含むルーチンが格納されることが可能であるマシン可読ストレージ・メディアの形態の製品を含むことができる。例として、不揮発性ストレージ９６２が、強磁性ベースのディスク・ドライブ（たとえば、いわゆる「ハード・ドライブ」）を含んでいる場合には、それぞれのそのようなディスク・ドライブは典型的に、１つ又は複数の回転プラッタを採用しており、それらの回転プラッタ上には、フロッピー・ディスケットなどのストレージ・メディアに似ている様式で磁気応答性粒子のコーティングが配置され、さまざまなパターンで磁気的に配向されて、命令のシーケンスなどの情報を格納する。別の例として、不揮発性ストレージ９６２は、ソリッドステート・ストレージ・デバイスのバンクから構成されて、コンパクト・フラッシュ・カードに似ている様式で命令のシーケンスなどの情報を格納することが可能である。また、別々の時点でコンピューティング・デバイスにおいて別々のタイプのストレージ・デバイスを採用して、実行可能なルーチン及び／又はデータを格納することがよくある。したがって、プロセッサ・コンポーネント９５０によって実行されることになる命令のシーケンスを含むルーチンが、初めにマシン可読ストレージ・メディア９６９上に格納されることが可能であり、その後に、そのルーチンを長期格納のために不揮発性ストレージ９６２にコピーする際に、取り外し可能なメディア・ストレージ９６３が採用されることが可能であり、マシン可読ストレージ・メディア９６９及び／又は揮発性ストレージ９６１の継続的な存在を不要として、そのルーチンが実行される際にプロセッサ・コンポーネント９５０によるさらに迅速なアクセスを可能にする。
【０１６５】
前述のように、インターフェース９９０（場合によっては、インターフェース４９０又は５９０に対応する）は、コンピューティング・デバイスを１つ又は複数のその他のデバイスに通信可能に結合するために採用されることが可能であるさまざまな通信テクノロジーのうちのいずれかに対応するさまざまなシグナリング・テクノロジーのうちのいずれかを採用することができる。また、さまざまな形態の有線シグナリング又は無線シグナリングのうちの一方又は両方が採用されて、プロセッサ・コンポーネント９５０が、場合によってはネットワーク（たとえば、ネットワーク９９９）又はネットワーク同士の相互接続されているセットを通じて、入力／出力デバイス（たとえば、示されている例示的なキーボード９２０又はプリンタ９２５）及び／又はその他のコンピューティング・デバイスと対話することを可能にすることができる。任意の１つのコンピューティング・デバイスによってしばしばサポートされなければならない複数のタイプのシグナリング及び／又はプロトコルの特徴は大幅に異なる場合が多いという認識において、インターフェース９９０は、複数の異なるインターフェース・コントローラ９９５ａ、９９５ｂ、及び９９５ｃを含むものとして示されている。インターフェース・コントローラ９９５ａは、さまざまなタイプの有線のデジタル・シリアル・インターフェース又は無線周波数無線インターフェースのうちのいずれかを採用して、示されているキーボード９２０などのユーザ入力デバイスからの順次送信されたメッセージを受信することができる。インターフェース・コントローラ９９５ｂは、さまざまなケーブルベースの又は無線のシグナリング、タイミング、及び／又はプロトコルのうちのいずれかを採用して、示されているネットワーク９９９（おそらくは、１つ若しくは複数のリンクから構成されているネットワーク、より小さなネットワーク、又はおそらくはインターネット）を通じてその他のコンピューティング・デバイスにアクセスすることができる。インターフェース９９５ｃは、順次の又は並列な信号送信の使用を可能にするさまざまな導電性のケーブルのうちのいずれかを採用して、示されているプリンタ９２５へデータを伝達することができる。インターフェース９９０の１つ又は複数のインターフェース・コントローラを通じて通信可能に結合されることが可能であるデバイスのその他の例は、人の音をモニタして、それらの人が生み出すことができる声又はその他の音を介してそれらの人によって伝達されるコマンド及び／又はデータを受け取るためのマイクロフォン、リモコン、スタイラス・ペン、カード・リーダ、指紋リーダ、仮想現実対話グローブ、グラフィカル入力タブレット、ジョイスティック、その他のキーボード、網膜スキャナ、タッチ・スクリーンのタッチ入力コンポーネント、トラックボール、さまざまなセンサ、人の動きをモニタして、ジェスチャー及び／又は表情を介してそれらの人によって伝達されるコマンド及び／又はデータを受け取るためのカメラ若しくはカメラ・アレイ、レーザー・プリンタ、インクジェット・プリンタ、機械式ロボット、フライス盤などを含むが、それらには限定されない。
【０１６６】
コンピューティング・デバイスが、ディスプレイ（たとえば、示されている例示的なディスプレイ９８０）に通信可能に結合されている（又はおそらくは、ディスプレイを実際に組み込んでいる）場合には、処理アーキテクチャー３０００を実装するそのようなコンピューティング・デバイスは、ディスプレイ・インターフェース９８５を含むこともできる。ディスプレイに通信可能に結合する際に、より一般化されたタイプのインターフェースが採用されることが可能であるが、ディスプレイ上にさまざまな形態のコンテンツを視覚的に表示する際にしばしば必要とされるいくらか特化したさらなる処理、並びに使用されるケーブルベースのインターフェースのいくらか特化した性質によって、個別のディスプレイ・インターフェースの供給が望ましくなる場合が多い。ディスプレイ９８０の通信可能な結合においてディスプレイ・インターフェース９８５によって採用されることが可能である有線及び／又は無線のシグナリング・テクノロジーは、さまざまな業界標準のうちのいずれかに準拠するシグナリング及び／又はプロトコルを利用することができ、それらの業界標準は、さまざまなアナログ・ビデオ・インターフェース、デジタル・ビデオ・インターフェース（ＤＶＩ）、ディスプレイポートなどのうちのいずれかを含むが、それらには限定されない。
【０１６７】
より一般には、本明細書において説明され示されているコンピューティング・デバイスのさまざまな要素は、さまざまなハードウェア要素、ソフトウェア要素、又は両方の組合せを含むことができる。ハードウェア要素の例は、デバイス、ロジック・デバイス、コンポーネント、プロセッサ、マイクロプロセッサ、回路、プロセッサ・コンポーネント、回路要素（たとえば、トランジスタ、抵抗器、コンデンサ、インダクタなど）、集積回路、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル・ロジック・デバイス（ＰＬＤ）、デジタル・シグナル・プロセッサ（ＤＳＰ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、メモリ・ユニット、ロジック・ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセットなどを含むことができる。ソフトウェア要素の例は、ソフトウェア・コンポーネント、プログラム、アプリケーション、コンピュータ・プログラム、アプリケーション・プログラム、システム・プログラム、ソフトウェア開発プログラム、マシン・プログラム、オペレーティング・システム・ソフトウェア、ミドルウェア、ファームウェア、ソフトウェア・モジュール、ルーチン、サブルーチン、関数、メソッド、プロシージャー、ソフトウェア・インターフェース、アプリケーション・プログラム・インターフェース（ＡＰＩ）、命令セット、コンピューティング・コード、コンピュータ・コード、コード・セグメント、コンピュータ・コード・セグメント、ワード、値、シンボル、又はそれらの任意の組合せを含むことができる。しかしながら、一実施形態がハードウェア要素を使用して実装されるか、及び／又はソフトウェア要素を使用して実装されるかを特定することは、所与の実施態様に関する要望に応じて、所望の計算速度、電力レベル、耐熱性、処理サイクル予算、入力データ・レート、出力データ・レート、メモリ・リソース、データ・バス・スピード、及びその他の設計又は実行上の制約など、任意の数の要因に従って変わる場合がある。
【０１６８】
いくつかの実施形態は、「一実施形態」又は「実施形態」という表現をそれらの派生語と共に使用して説明されているかもしれない。これらの用語は、その実施形態に関連して記述されている特定の機能、構造、又は特徴が、少なくとも１つの実施形態に含まれているということを意味する。「一実施形態においては」というフレーズが、本明細書におけるさまざまな個所に登場しても、それらは、必ずしもすべて同じ実施形態を指しているとは限らない。さらに、いくつかの実施形態は、「結合される」及び「接続される」という表現をそれらの派生語と共に使用して説明されているかもしれない。これらの用語は、必ずしも互いにとっての同義語として意図されているわけではない。たとえば、いくつかの実施形態は、複数の要素が互いに直接の物理的な又は電気的な接触状態にあるということを示すために、「接続される」及び／又は「結合される」という用語を使用して説明されているかもしれない。しかしながら、「結合される」という用語は、複数の要素が互いに直接の接触状態にはないが、それでもなお互いに協力又は対話しているということを意味する場合もある。さらに、別々の実施形態からの態様同士又は要素同士が組み合わされることが可能である。
【０１６９】
本開示の要約書は、技術的な開示の本質を読者が迅速に確認することを可能にするために提供されているということが強調される。要約書は、特許請求の範囲の範疇又は意味を解釈又は限定するためにこの要約書が使用されることはないという理解を伴って提示されている。加えて、前述の詳細な説明においては、本開示を簡潔にする目的で、さまざまな機能が単一の実施形態において共にグループ化されているということを見て取ることができる。開示のこの方法は、特許請求されている実施形態は、それぞれの請求項において明示的に列挙されているよりも多くの機能を必要とするという意図を反映していると解釈されるべきではない。むしろ、添付の特許請求の範囲が反映しているように、発明性のある主題は、単一の開示されている実施形態のすべての機能よりも少ない中に存在する。したがって、添付の特許請求の範囲は、これによって詳細な説明へと組み込まれており、それぞれの請求項は、個別の実施形態として単独で存立している。添付の特許請求の範囲においては、「ｉｎｃｌｕｄｉｎｇ（含む）」及び「ｉｎ  ｗｈｉｃｈ」という用語はそれぞれ、「ｃｏｍｐｒｉｓｉｎｇ（含む）」及び「ｗｈｅｒｅｉｎ」というそれぞれの用語の平易な英語での同義語として使用されている。その上、「第１の」、「第２の」、「第３の」などの用語は、ラベルとして使用されているにすぎず、それらの対象に数的要件を課すことを意図されているものではない。
【０１７０】
上述されている内容は、開示されているアーキテクチャーの例を含んでいる。もちろん、コンポーネント及び／又は方法の考えられるすべての組合せを説明することは不可能であるが、当技術分野における標準的な技術者なら、多くのさらなる組合せ及び順列が可能であるということを認識することができる。したがって、この新規なアーキテクチャーは、添付の特許請求の範囲の趣旨及び範疇内に収まるすべてのそのような変更形態、修正形態、及び変形形態を包含することを意図されている。詳細な開示は次いで、さらなる実施形態に関連する例を提供することに移る。以降で提供されている例は、限定的であることを意図されているものではない。
【図１】
0006375056.tif 000002
【図２Ａ】
0006375056.tif 000003
【図２Ｂ】
0006375056.tif 000004
【図３】
0006375056.tif 000005
【図４】
0006375056.tif 000006
【図５Ａ】
0006375056.tif 000007
【図５Ｂ】
0006375056.tif 000008
【図６】
0006375056.tif 000009
【図７】
0006375056.tif 000010
【図８】
0006375056.tif 000011
【図９Ａ】
0006375056.tif 000012
【図９Ｂ】
0006375056.tif 000013
【図１０Ａ】
0006375056.tif 000014
【図１０Ｂ】
0006375056.tif 000015
【図１１】
0006375056.tif 000016
【図１２】
0006375056.tif 000017
【図１３】
0006375056.tif 000018
【図１４】
0006375056.tif 000019
【図１５】
0006375056.tif 000020