(57)【要約】  セグメントルーティングを使用して分散ストレージ操作の待ち時間を短縮するためのシステム、方法、およびコンピュータ可読媒体。いくつかの例では、方法は、クライアントから、分散ストレージ環境でデータを格納するか、または取り出す意図を特定するメッセージを受信すること、およびデータを格納するか、または取り出すためのストレージノード候補を特定するセグメントルーティング（ＳＲ）リストをクライアントに送信することを伴い得る。本方法は、クライアントからデータ要求を、要求に関連付けられたセグメントルーティングヘッダ（ＳＲＨ）に基づいて、ＳＲリストによって定義されたパスを通って誘導することを伴い、ＳＲＨは、ストレージノード候補の中のストレージノードが要求を受け入れるまで、パスを通って要求を誘導するように構成されている。本方法は、ストレージノードが要求を受け入れたことを示す応答をクライアントデバイスに送信すること、および要求を受け入れたストレージノードでデータを格納するか、または取り出すことをさらに伴い得る。【選択図】図１
2021534663.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
クライアントデバイスから、分散ストレージ環境でデータ操作を実施する意図を特定する電子メッセージを受信することと、
前記分散ストレージ環境から前記データ操作に関して選択された複数のストレージノード候補を特定するセグメントルーティング（ＳＲ）リストを前記クライアントデバイスに送信することと、
前記クライアントデバイスから受信されたデータ操作要求を、前記データ操作要求に関連付けられたセグメントルーティングヘッダ（ＳＲＨ）に基づいて、前記ＳＲリストによって定義されたパスを通って誘導することであって、前記ＳＲＨが、前記複数のストレージノード候補の中のストレージノードが前記データ操作要求を受け入れるまで、前記パスを通って前記データ操作要求を誘導するように構成されており、前記ＳＲＨが前記ＳＲリストを含む、誘導することと、
前記データ操作要求への応答を前記クライアントデバイスに送信することであって、前記応答が、前記ストレージノードが前記クライアントデバイスからの前記データ操作要求を受け入れたことを示す、送信することと、
前記データ操作要求を受け入れた前記ストレージノードで前記データ操作を実施することと、を含む、方法。
【請求項２】
前記データ操作要求が、前記分散ストレージ環境にデータを格納するためのストレージ要求を含み、前記方法が、
前記データを格納するための一次ストレージノードプール、および前記データのある数の複製を格納するための１つ以上の二次ストレージノードプールを選択することであって、前記一次ストレージノードプールが、前記複数のストレージノード候補を含む、選択することをさらに含む、請求項１に記載の方法。
【請求項３】
前記電子メッセージが、格納される前記データの複製の前記ある数を示す複製係数を含み、前記１つ以上の二次ストレージノードプールが、前記複製係数に基づいて選択される、請求項２に記載の方法。
【請求項４】
前記１つ以上の二次ストレージノードプールの１つ以上のそれぞれのＳＲリストを取得することであって、各それぞれのＳＲリストが、前記それぞれのＳＲリストに関連付けられたそれぞれの二次ストレージノードプール内のそれぞれの複数のストレージノード候補を特定する、取得することと、
前記データ操作要求を受け入れた前記ストレージノードによって、かつ前記１つ以上の二次ストレージノードプールの各々に、前記ある数の複製のそれぞれの部分を前記それぞれの二次ストレージノードプール内の前記それぞれの複数のストレージノード候補のうちの１つ以上に格納するためのそれぞれの要求を送信することであって、前記それぞれの要求が、前記それぞれの二次ストレージノードプールに関連付けられた前記それぞれのＳＲリストを含むそれぞれのＳＲＨを含み、前記それぞれのＳＲＨが、前記それぞれの複数のストレージノード候補のうちの１つ以上が前記それぞれの要求を受け入れるまで、前記それぞれの要求が前記それぞれのＳＲリストを含むそれぞれのパスを通って送られることを引き起こすように構成されている、送信することと、をさらに含む、請求項２または３に記載の方法。
【請求項５】
前記それぞれの二次ストレージノードプール内の前記それぞれの複数のストレージノード候補のうちの少なくとも１つから前記それぞれの要求の受け入れを受信することと、
前記受け入れに基づいて、前記ある数の複製の前記それぞれの部分を、前記それぞれの二次ストレージノードプール内の前記それぞれの複数のストレージノード候補のうちの前記少なくとも１つに格納することと、をさらに含む、請求項４に記載の方法。
【請求項６】
前記１つ以上の二次ストレージノードプールの１つ以上のＳＲリストを前記クライアントデバイスに送信することであって、各それぞれのＳＲリストが、前記それぞれのＳＲリストに関連付けられたそれぞれの二次ストレージノードプール内のそれぞれの複数のストレージノード候補を特定する、送信することと、
前記ストレージ要求のそれぞれのコピーを、前記それぞれの二次ストレージノードプール内の前記それぞれの複数のストレージノード候補に送信することであって、前記それぞれのコピーが、前記それぞれの二次ストレージノードプールに関連付けられた前記それぞれのＳＲリストを含むそれぞれのＳＲＨを含み、前記それぞれのコピーが、前記ストレージ要求に関連付けられたＳＲスプレーポリシーを介して送信されている、送信することと、
前記１つ以上の二次ストレージノードプール内の２つ以上のストレージノードが前記ストレージ要求の前記それぞれのコピーに関連付けられた前記ストレージ要求を受け入れたという指示を受信することに応答して、前記２つ以上のストレージノードと前記クライアントデバイスとの間の並行接続を確立することと、
前記並行接続を介して前記２つ以上のストレージノードに前記データを格納することと、をさらに含む、請求項２〜５のいずれかに記載の方法。
【請求項７】
前記複数のストレージノード候補の中の前記ストレージノードが、前記ストレージノードの現在の操作条件に基づいて前記データ操作要求を受け入れる、請求項１〜６のいずれかに記載の方法。
【請求項８】
前記データ操作が前記分散ストレージ環境上のデータを取り出す操作を含み、前記データ操作要求が前記分散ストレージ環境から前記データを取り出す要求を含み、前記ＳＲリスト内で特定された前記複数のストレージノード候補が、前記データのコピーが格納されている前記分散ストレージ環境内のストレージノードのセットを含み、前記データ操作を実施することが、前記データ操作要求を受け入れた前記ストレージノードからの前記データを前記クライアントデバイスに提供することを含む、請求項１〜７のいずれかに記載の方法。
【請求項９】
前記クライアントデバイスから、前記分散ストレージ環境でデータコンテンツを取り出す第２の意図を特定する第２の電子メッセージを受信することと、
前記分散ストレージ環境上の前記データコンテンツのコピーに関連付けられた複数のインターネットプロトコル（ＩＰ）アドレスを特定する特定のＳＲリストを前記クライアントデバイスに送信することと、
前記クライアントデバイスから受信されたデータ要求を、前記データ要求に関連付けられた特定のＳＲＨに基づいて、前記特定のＳＲリストを含む第２のパスを通って誘導することであって、前記特定のＳＲＨが、前記データコンテンツのコピーをホストしているそれぞれのストレージノードが前記データ要求を受け入れるまで、前記第２のパスを通って前記データ要求を誘導するよう構成されている、誘導することと、
前記データコンテンツの前記コピーをホストしている前記それぞれのストレージノードが前記クライアントデバイスからの前記データ要求を受け入れたという指示を前記クライアントデバイスに送信することと、
前記データコンテンツの前記コピーをホストしている前記それぞれのストレージノード上の前記データコンテンツを前記クライアントデバイスに提供することと、をさらに含む、請求項１〜８のいずれかに記載の方法。
【請求項１０】
前記電子メッセージが、前記分散ストレージ環境に関連付けられた複数のメタデータサーバを特定するメタデータサーバＳＲリストを含む第２のＳＲＨを含み、前記第２のＳＲＨが、関連付けられた接続要求が前記複数のメタデータサーバのうちの１つによって受け入れられるまで、前記電子メッセージが前記メタデータサーバＳＲリストを含む第２のパスを通って送られることを引き起こす、請求項１〜９のいずれかに記載の方法。
【請求項１１】
前記データ操作要求が、前記分散ストレージ環境にデータを格納するためのストレージ要求を含み、前記ＳＲリストが、前記分散ストレージ環境に格納される前記データの複製のある数を示す複製係数を特定し、前記方法が、
前記データ操作要求を受け入れた前記ストレージノードによって、かつ前記ＳＲリスト内の各残りのセグメントに、前記残りのセグメントを含むそれぞれのストレージノード上の前記ある数の複製の中のそれぞれの複製を格納するためのそれぞれの要求を送信することであって、前記それぞれの要求が、前記ＳＲリストを含む前記ＳＲＨを含み、前記ＳＲＨが、ある数のストレージノード候補が前記それぞれの要求を受け入れるまで、前記それぞれの要求が前記パスを通って送られることを引き起こすように構成されており、ストレージノード候補の前記ある数が複製の前記ある数に等しい、送信することと、
前記ある数のストレージノード候補が前記それぞれの要求を受け入れるときに、前記ある数の複製を前記それぞれの要求を受け入れた前記ある数のストレージノード候補に格納することと、をさらに含む、請求項１〜１０のいずれかに記載の方法。
【請求項１２】
システムであって、
クライアントデバイスから、分散ストレージ環境でデータ操作を実施する意図を特定する電子メッセージを受信することと、
前記分散ストレージ環境から前記データ操作に関して選択された複数のストレージノード候補を特定するセグメントルーティング（ＳＲ）リストを前記クライアントデバイスに送信することと、
前記クライアントデバイスから受信されたデータ操作要求を、前記データ操作要求に関連付けられたセグメントルーティングヘッダ（ＳＲＨ）に基づいて、前記ＳＲリストを含むパスを通って誘導することであって、前記ＳＲＨが、前記複数のストレージノード候補の中のストレージノードが前記データ操作要求を受け入れるまで、前記パスを通って前記データ操作要求を誘導するように構成されている、誘導することと、
前記クライアントデバイスに、前記ストレージノードが前記クライアントデバイスからの前記データ操作要求を受け入れたことを示す応答を送信することと、
前記データ操作要求を受け入れた前記ストレージノードで前記データ操作を実施することと、を行うように構成された、システム。
【請求項１３】
前記データ操作要求が、前記分散ストレージ環境にデータを格納するためのストレージ要求を含み、前記システムが、
前記データを格納するための一次ストレージノードプール、および前記データのある数の複製を格納するための１つ以上の二次ストレージノードプールを選択することであって、前記一次ストレージノードプールが、前記複数のストレージノード候補を含み、前記１つ以上の二次ストレージノードプールが、格納される複製の前記ある数を特定する複製係数に基づいて選択される、選択すること行うようにさらに構成されている、請求項１２に記載のシステム。
【請求項１４】
前記システムが、
前記１つ以上の二次ストレージノードプールの１つ以上のそれぞれのＳＲリストを取得することであって、各それぞれのＳＲリストが、前記それぞれのＳＲリストに関連付けられたそれぞれの二次ストレージノードプール内のそれぞれの複数のストレージノード候補を特定する、取得することと、
前記ある数の複製のそれぞれの部分を前記それぞれの二次ストレージノードプール内の前記それぞれの複数のストレージノード候補のうちの１つ以上に格納するためのそれぞれの要求を前記１つ以上の二次ストレージノードプールの各々に送信することであって、前記それぞれの要求が、前記それぞれの二次ストレージノードプールに関連付けられた前記それぞれのＳＲリストを含むそれぞれのＳＲＨを含み、前記それぞれのＳＲＨが、前記それぞれの複数のストレージノード候補のうちの１つ以上が前記それぞれの要求を受け入れるまで、前記それぞれの要求が前記それぞれのＳＲリストを含むそれぞれのパスを通って送られることを引き起こすように構成されている、送信することと、
前記それぞれの二次ストレージノードプール内の前記それぞれの複数のストレージノード候補のうちの前記１つ以上から前記それぞれの要求の受け入れを受信することに応答して、前記ある数の複製の前記それぞれの部分を前記それぞれの複数のストレージノード候補のうちの前記１つ以上に格納することと、を行うようにさらに構成されている、請求項１３に記載のシステム。
【請求項１５】
前記データ操作要求が、前記分散ストレージ環境にデータを格納するためのストレージ要求を含み、前記ＳＲリストが、前記分散ストレージ環境に格納される前記データの複製のある数を示す複製係数を特定し、前記システムが、
前記データ操作要求を受け入れた前記ストレージノードによって、かつ前記ＳＲリスト内の各残りのセグメントに、前記残りのセグメントを含むそれぞれのストレージノード上の前記ある数の複製の中のそれぞれの複製を格納するためのそれぞれの要求を送信することであって、前記それぞれの要求が、前記ＳＲリストを含む前記ＳＲＨを含み、前記ＳＲＨが、ある数のストレージノード候補が前記それぞれの要求を受け入れるまで、前記それぞれの要求が前記パスを通って送られることを引き起こすように構成されており、ストレージノード候補の前記ある数が複製の前記ある数に等しい、送信することと、
前記ある数のストレージノード候補が前記それぞれの要求を受け入れるときに、前記ある数の複製を前記それぞれの要求を受け入れた前記前記ある数のストレージノード候補に格納することと、を行うようにさらに構成されている、請求項１２〜１４のいずれかに記載のシステム。
【請求項１６】
前記データ操作がデータを取り出す操作を含み、前記データ操作要求が前記分散ストレージ環境から前記データを取り出す要求を含み、前記ＳＲリスト内で特定された前記複数のストレージノード候補が、前記データのコピーが格納されている前記分散ストレージ環境内のストレージノードのセットを含み、前記データ操作を実施することが、前記データ操作要求を受け入れた前記ストレージノードからの前記データを前記クライアントデバイスに提供することを含む、請求項１２〜１５のいずれかに記載のシステム。
【請求項１７】
コンピュータシステムの１つ以上のプロセッサによって実行されると、前記コンピュータシステムに、
クライアントデバイスから、分散ストレージ環境でデータ操作を実施する意図を特定する電子メッセージを受信することと、
前記分散ストレージ環境から、前記データ操作に関して選択された複数のストレージノード候補を特定するセグメントルーティング（ＳＲ）リストを前記クライアントデバイスに送信することと、
前記クライアントデバイスから受信されたデータ操作要求を、前記データ操作要求に関連付けられたセグメントルーティングヘッダ（ＳＲＨ）に基づいて、前記ＳＲリストを含むパスを通って誘導することであって、前記ＳＲＨが、前記複数のストレージノード候補の中のストレージノードが前記データ操作要求を受け入れるまで、前記パスを通って前記データ操作要求を誘導するように構成されている、誘導することと、
前記クライアントデバイスに、前記ストレージノードが前記クライアントデバイスからの前記データ操作要求を受け入れたことを示す応答を送信することと、
前記データ操作要求を受け入れた前記ストレージノードで前記データ操作を実施することと、を行わせる命令を中に格納している、コンピュータ可読記憶媒体。
【請求項１８】
前記１つ以上のプロセッサによって実行されると、前記コンピュータシステムに、
前記データを格納するための一次ストレージノードプール、および前記データのある数の複製を格納するための１つ以上の二次ストレージノードプールを選択することであって、前記一次ストレージノードプールが、前記複数のストレージノード候補を含み、前記１つ以上の二次ストレージノードプールが、格納される複製の前記ある数を特定する複製係数に基づいて選択される、選択することと、
前記１つ以上の二次ストレージノードプールの１つ以上のそれぞれのＳＲリストを取得することであって、各それぞれのＳＲリストが、前記それぞれのＳＲリストに関連付けられたそれぞれの二次ストレージノードプール内のそれぞれの複数のストレージノード候補を特定する、取得することと、
前記１つ以上の二次ストレージノードプールの各々に、前記ある数の複製のそれぞれの部分を前記それぞれの二次ストレージノードプール内の前記それぞれの複数のストレージノード候補のうちの１つ以上に格納するためのそれぞれの要求を送信することであって、前記それぞれの要求が、前記それぞれの二次ストレージノードプールに関連付けられた前記それぞれのＳＲリストを含むそれぞれのＳＲＨを含み、前記それぞれのＳＲＨが、前記それぞれの複数のストレージノード候補のうちの１つ以上が前記それぞれの要求を受け入れるまで、前記それぞれの要求が前記それぞれのＳＲリストを含むそれぞれのパスを通って送られることを引き起こすように構成されている、送信することと、
前記それぞれの二次ストレージノードプール内の前記それぞれの複数のストレージノード候補のうちの少なくとも１つから前記それぞれの要求の受け入れを受信することに応答して、前記ある数の複製の前記それぞれの部分を前記それぞれの二次ストレージノードプール内の前記それぞれの複数のストレージノード候補のうちの前記少なくとも１つに格納することと、を行わせる命令を格納している、請求項１７に記載のコンピュータ可読記憶媒体。
【請求項１９】
前記複数のストレージノード候補が一次ストレージノードプールに関連付けられており、前記コンピュータ可読記憶媒体が、前記１つ以上のプロセッサによって実行されると、前記コンピュータシステムに、
１つ以上の二次ストレージノードプールの１つ以上のＳＲリストを前記クライアントデバイスに送信することであって、各それぞれのＳＲリストが、前記それぞれのＳＲリストに関連付けられたそれぞれの二次ストレージノードプール内のそれぞれの複数のストレージノード候補を特定する、送信することと、
ストレージ要求のそれぞれのコピーを、前記それぞれの二次ストレージノードプール内の前記それぞれの複数のストレージノード候補に送信することであって、前記それぞれのコピーが、前記それぞれの二次ストレージノードプールに関連付けられた前記それぞれのＳＲリストを含むそれぞれのＳＲＨを含み、前記それぞれのコピーが、前記ストレージ要求に関連付けられたＳＲスプレーポリシーを介して送信されている、送信することと、
前記１つ以上の二次ストレージノードプール内の２つ以上のストレージノードが前記ストレージ要求の前記それぞれのコピーに関連付けられた前記ストレージ要求を受け入れたという指示を受信することに応答して、前記２つ以上のストレージノードと前記クライアントデバイスとの間の並行接続を確立することと、
前記並行接続を介して前記２つ以上のストレージノードに前記データを格納することと、を行わせる命令を格納する、請求項１７または１８に記載のコンピュータ可読記憶媒体。
【請求項２０】
前記１つ以上のプロセッサによって実行されると、前記コンピュータシステムに、
前記クライアントデバイスから、前記分散ストレージ環境でデータコンテンツを取り出す第２の意図を特定する第２の電子メッセージを受信することと、
前記分散ストレージ環境上の前記データコンテンツのコピーに関連付けられた複数のインターネットプロトコル（ＩＰ）アドレスを特定する特定のＳＲリストを前記クライアントデバイスに送信することと、
前記クライアントデバイスから受信されたデータ要求を、特定のＳＲＨに基づいて、前記特定のＳＲリストを含む特定のパスを通って誘導することであって、前記特定のＳＲＨが、前記データコンテンツのコピーをホストしているそれぞれのストレージノードが前記データ要求を受け入れるまで、前記特定のパスを通って前記データ要求を誘導するよう構成されている、誘導することと、
前記データコンテンツの前記コピーをホストしている前記それぞれのストレージノードが前記クライアントデバイスからの前記データ要求を受け入れたという指示を前記クライアントデバイスに送信することと、
前記クライアントデバイスに、前記データコンテンツの前記コピーをホストしている前記それぞれのストレージノード上の前記データコンテンツを提供することと、を行わせる命令を格納している、請求項１７〜１９のいずれかに記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１８年９月４日に出願され、「ＲＥＤＵＣＩＮＧ  ＤＩＳＴＲＩＢＵＴＥＤ  ＳＴＯＲＡＧＥ  ＯＰＥＲＡＴＩＯＮ  ＬＡＴＥＮＣＹ  ＵＳＩＮＧ  ＳＥＧＭＥＮＴ  ＲＯＵＴＩＮＧ  ＴＥＣＨＮＩＱＵＥＳ」と題された米国非仮特許出願第１６／１２１，５２５号の利益および優先権を主張し、全体を参照することにより、その内容がここに明示的に援用される。
【０００２】
本技術は、分散ストレージシステムに関し、より具体的には、セグメントルーティング技術を使用して分散ストレージ操作の待ち時間を短縮することに関係する。
【背景技術】
【０００３】
インターネット対応デバイスの普及により、インターネットサービスおよびコンテンツに対する膨大な需要が生まれている。様々な意味で、ユーザのネットワークサービスおよびコンテンツへの依存度が高まっているコネクティッド社会を迎えている。このインターネット接続革命は、パフォーマンスの期待を下回ることが多い一方で、大量のクライアント要求を処理するのに苦労しているコンテンツプロバイダに重大な課題をもたらした。例えば、コンテンツプロバイダは典型的に、ユーザからのネットワークおよびコンテンツ要求に対応するために、大規模かつ複雑なデータセンターを必要とする。これらのデータセンターには、特定のコンテンツおよびサービスをホストするように構成されたサーバファームが装備されていることが多く、コンテンツ要求を送り、かつ処理するように構成された多数のネットワークデバイスが含まれている。多くの場合、特定のデータセンターにより数百万のトラフィックフローおよびサービス要求を処理することが期待される。
【０００４】
当然のことながら、このような大量のデータは管理が難しく、パフォーマンスが大幅に低下し、課題をもたらす可能性がある。場合によっては、パフォーマンスおよびサービスの信頼性を向上させるために、負荷分散ソリューションが実装されることがある。ただし、現在の負荷分散ソリューションはノード障害が発生しやすく、ネットワークの動的な変化および変動を適切に考慮できないことが多く、待ち時間およびボトルネックの影響を受けやすい場合がある。追加のリソースを購入して実装すると、ネットワークの容量を増やして、待ち時間を短縮し、パフォーマンスの問題を減らすことができる。残念ながら、この手法はコストがかかり、ネットワークがさらに複雑になり、ネットワークの変動の影響を受けやすくなる。これにより、過負荷状態による待ち時間、負荷不足状態による無駄、およびパフォーマンスの大きな変動をもたらす可能性がある。
【図面の簡単な説明】
【０００５】
本開示の上記および他の利点および特徴を得ることができる様式を説明するために、添付の図面に示されるその特定の実施形態を参照することにより、上記で簡単に説明した原理のより具体的な説明を行う。これらの図面が本開示の例示的な実施形態のみを描写し、したがって、その範囲を限定すると見なされるべきではないことを理解して、本明細書の原理は、以下の添付の図面を使用することにより、追加の特定事項および詳細と共に記載および説明される。
【０００６】
【図１】様々な実施形態による、例示的な分散ストレージ環境を示す。
【図２】様々な実施形態による、セグメントルーティングおよび負荷分散技術を使用して分散ストレージ環境内でストレージ操作を実施するための例示的なフローの図を示す。
【図３Ａ】様々な実施形態による、ストレージ操作要求のための例示的なセグメントルーティングパケットを示す。
【図３Ｂ】様々な実施形態による、パケットのＩＰｖ６ヘッダ内の宛先アドレスフィールドの例示的な構成を示す。
【図３Ｃ】様々な実施形態による、パケットのＩＰｖ６ヘッダ内の宛先アドレスフィールドの別の例示的な構成を示す。
【図４Ａ】様々な実施形態による、対応するＩＰｖ６およびセグメントルーティングヘッダに基づくストレージ操作要求の例示的なフローを示す。
【図４Ｂ】様々な実施形態による、ストレージ操作要求への応答の例示的なフローを示す。
【図５Ａ】様々な実施形態による、セグメントルーティングおよび負荷分散技術を使用して分散ストレージ環境内にデータおよび複製を格納するための例示的なフローの図を示す。
【図５Ｂ】様々な実施形態による、セグメントルーティングスプレーポリシーを使用して分散ストレージ環境内にデータを格納するための例示的なフローの図を示す。
【図６Ａ】様々な実施形態による、コンテンツに割り当てられたアドレスに対応するセグメントルーティングセグメントを使用して、分散ストレージ環境内のコンテンツにデータ要求を直接送るための例示的なフローの図を示す。
【図６Ｂ】様々な実施形態による、コンテンツに割り当てられたアドレスに対応するセグメントルーティングセグメントを使用して、コンテンツにデータ要求を直接送るための別の例示的なフローの図を示す。
【図７】様々な実施形態による、セグメントルーティングを使用して、メタデータサーバプール内のメタデータサーバ間でクライアント要求を負荷分散するための例示的なフローを示す。
【図８Ａ】様々な実施形態による、セグメントルーティングおよび負荷分散を使用して分散ストレージ環境にデータを格納するための例示的な方法を示す。
【図８Ｂ】様々な実施形態による、セグメントルーティングおよび負荷分散を使用して分散ストレージ環境内でデータを取り出すための例示的な方法を示す。
【図８Ｃ】様々な実施形態による、セグメントルーティングおよび負荷分散を使用して、データ要求をデータに割り当てられたアドレスに直接送るための例示的な方法を示す。
【図９】様々な実施形態による、例示的なネットワークデバイスを示す。
【図１０】様々な実施形態による、例示的なコンピューティングデバイスを示す。
【０００７】
例示的な実施形態の説明
本開示の様々な実施形態について、以下で詳細に考察する。特定の実装形態について考察するが、これは例証を目的として行われることを理解されたい。関連技術の当業者は、本開示の趣旨および範囲から離れることなく、他の構成要素および構成を使用することができることを認識するであろう。
【０００８】
概要
本開示の追加の特徴および利点は、以下の説明に記載され、一部は説明から明らかであるか、または本明細書に開示された原理の実践によって学ぶことができる。本開示の特徴および利点は、添付の特許請求の範囲で特に指摘されている機器および組み合わせによって実現および取得することができる。本開示のこれらおよび他の特徴は、以下の説明および添付の特許請求の範囲からより完全に明らかになるか、または本明細書に記載の原理の実践によって学ぶことができる。
【０００９】
本明細書に開示されるのは、セグメントルーティング技術を使用して分散ストレージ操作の待ち時間を短縮するためのシステム、方法、およびコンピュータ可読媒体である。少なくとも１つの例によれば、セグメントルーティング技術を使用して分散ストレージ操作の待ち時間を短縮するための方法が提供される。本方法は、クライアントデバイスから、分散ストレージ環境（例えば、分散ストレージネットワーク）でデータ操作（例えば、データの読み取り、データの書き込みなど）を実施する意図を特定するメッセージ（例えば、パケットなどの電子メッセージ）を受信すること、および、データ操作を実施するために選択された複数のストレージノード候補を特定するセグメントルーティング（ＳＲ）リストをクライアントデバイスに送信することを含むことができる。例えば、場合によっては、分散ストレージ環境上のメタデータサーバは、クライアントデバイスから、分散ストレージ環境でデータを格納するか、または取り出すことを要求する電子メッセージを受信することができる。クライアントデバイスからのメッセージに応答して、メタデータサーバは、データを格納するか、または取り出すための分散ストレージ環境内のストレージノード候補を選択するか、または特定し、ストレージノード候補を特定するＳＲリストをクライアントデバイスに送信することができる。クライアントデバイスは、ＳＲリストを使用して、セグメントルーティング（例えば、ＳＲｖ６）を使用して、ストレージノード候補を介してデータ操作要求を送るか、または誘導することができる。
【００１０】
本方法は、クライアントデバイスから受信されたデータ操作要求を、データ操作要求に関連付けられたセグメントルーティングヘッダ（ＳＲＨ）に基づいて、ＳＲリストによって定義されたパスを通って誘導することを含むことができる。例えば、クライアントデバイスは、ストレージノード候補を特定するＳＲリストを有するＳＲＨを含むデータ操作要求パケットを送信することができる。ＳＲＨは、ストレージノード候補の中のストレージノードがデータ操作要求を受け入れるまで、ストレージノード候補を含むパスを通ってデータ操作要求パケットを誘導することができる。データ操作要求パケットは、ＳＲリスト内の第１のストレージノード候補に送ることができ、ＳＲリストは、データ操作要求パケットを受信すると、データ操作要求を受け入れるか、または拒否するかを判定する。第１のストレージノードがデータ操作要求を拒否する場合、データ操作要求パケットをＳＲリスト内の次のストレージノード候補に向けて転送する。同様に、次のストレージノード候補は、データ操作要求パケットを受信すると、データ操作要求を受け入れるか、または拒否するかを判定し、データ操作要求を拒否することを判定した場合、データ操作要求パケットをＳＲリスト内の次のストレージノード候補に転送する。データ操作要求パケットは、データ操作要求がストレージノード候補によって受け入れられるまで、ＳＲリスト内のストレージノード候補のパスを通ってトラバースし続ける。各ストレージノード候補は、現在の帯域幅、現在の負荷、現在の容量、リソースの可用性など、ストレージノード候補での操作条件に基づいて、データ操作要求を受け入れるか、または拒否するかを判定できる。場合によっては、ＳＲリスト内の最後のストレージノード候補は、データ操作要求が完全に拒否されるか、またはドロップされることを回避するために、要求を受け入れるように要求され得る。
【００１１】
ストレージノードがデータ操作要求を受け入れるとき、本方法は、ストレージノードがクライアントデバイスからのデータ操作要求を受け入れたことを示すデータ操作要求への応答をクライアントデバイスに送信することをさらに含むことができる。ストレージノードがデータ操作要求を受け入れると、クライアントデバイスおよびストレージノードは接続を確立し、ストレージノードでデータを格納するか、または取り出すことができる。ここで、本方法は、データ操作要求を受け入れたストレージノードにデータを格納すること、またはストレージノードからデータを取り出すことを含むことができる。前述のように、ストレージノードはストレージノードでの操作条件に基づいてデータ操作要求を受け入れることができる。これは、データ操作要求がその特定の瞬間に適切な帯域幅および容量を有するストレージノードによって処理される可能性を高め、データ操作要求が低帯域幅または過負荷状態で処理される可能性を低下させることによって、ストレージの待ち時間を短縮するのに役立ち得る。
【００１２】
別の例では、セグメントルーティング技術を使用して分散ストレージ操作の待ち時間を短縮するためのシステムが提供される。本システムは、１つ以上のプロセッサ、ならびに１つ以上のプロセッサによって実行されると、システムに、上述の例示的な方法を実施させる命令をその中に格納した少なくとも１つのコンピュータ可読記憶媒体を含み得る。例えば、命令は、１つ以上のプロセッサによって実行されると、システムに、クライアントデバイスから、分散ストレージ環境でデータ操作（例えば、読み取り操作、書き込み操作など）を実施する意図を特定するメッセージを受信することと、データ操作を実施するために選択された複数のストレージノード候補を特定するＳＲリストをクライアントデバイスに送信することと、クライアントデバイスから受信したデータ操作要求を、ＳＲリストを含むことができ、かつ複数のストレージノード候補の中のストレージノードがデータ操作要求を受け入れるまで、パスを通ってデータ操作要求を誘導するように構成することができる、データ操作要求内のＳＲＨに基づいて、ＳＲリストを含むパス（すなわち、ＳＲリスト内の複数のストレージノード候補を含むパス）を通って誘導することと、ストレージノードがクライアントデバイスからのデータ操作要求を受け入れたことを示す応答をクライアントデバイスに送信することと、データ操作要求を受け入れたストレージノードでデータ操作を実施する（例えば、ストレージノードにデータを格納する、ストレージノードからデータを取り出すなど）ことと、を行わせることができる。
【００１３】
別の例では、セグメントルーティング技術を使用して分散ストレージ操作の待ち時間を短縮するための非一時的なコンピュータ可読記憶媒体が提供される。非一時的なコンピュータ可読記憶媒体は、１つ以上のプロセッサによって実行されると、１つ以上のプロセッサに前述の方法および／または動作を実施させる命令を格納することができる。例えば、命令は、１つ以上のプロセッサに、クライアントデバイスから、分散ストレージ環境でデータ操作を実施する意図を特定するメッセージを受信することと、データ操作に関して選択された複数のストレージノード候補を特定するＳＲリストをクライアントデバイスに送信することと、クライアントデバイスから受信したデータ操作要求を、ＳＲリストを含むことができ、かつ複数のストレージノード候補の中のストレージノードがデータ操作要求を受け入れるまで、パスを通ってデータ操作要求を誘導するように構成することができる、データ操作要求内のＳＲＨに基づいて、ＳＲリストを含むパス（すなわち、ＳＲリスト内のストレージノード候補を含むパス）を通って誘導することと、ストレージノードがクライアントデバイスからのデータ操作要求を受け入れたことを示す応答をクライアントデバイスに送信することと、データ操作要求を受け入れたストレージノードでデータ操作を実施する（例えば、ストレージノードにデータを格納する、ストレージノードからデータを取り出すなど）ことと、を行わせることができる。
【００１４】
説明
開示された技術は、セグメントルーティング技術を使用して分散ストレージ操作の待ち時間を短縮するためのシステム、方法、およびコンピュータ可読媒体を伴う。本技術は、以下の開示において以下のように説明される。議論は、セグメントルーティングおよびインターネットプロトコルバージョン６（ＩＰｖ６）を使用した負荷分散ストレージ操作の概要から始まる。次に、図１に示されるような例示的な分散ストレージ環境の説明、および図２〜図８Ｃに示されるようなセグメントルーティングおよび負荷分散技術を使用して分散ストレージ操作の待ち時間を短縮するための例示的な方法および技術の説明が続く。議論は、図９に示されるように例示的なネットワークデバイス、ならびに図１０に示されるように、ストレージおよびコンピューティング操作を実施するのに好適な例示的なハードウェア構成要素を含む、例示的なコンピューティングデバイスアーキテクチャの説明で終了する。ここで、本開示は、セグメントルーティングおよびＩＰｖ６を使用したストレージ操作の負荷分散の概要に移る。
【００１５】
本明細書の手法は、セグメントルーティング（ＳＲ）を利用して、要求を処理するためにメタデータサーバによって選択された複数のストレージノード候補に向けて接続または通信要求（例えば、データ読み取り、および書き込み要求）を誘導することができる。本明細書で説明するように、ストレージノード候補は、そのような要求を受信し、現在および将来の負荷、ストレージノード機能、リソースの可用性、パフォーマンス要件、および他の操作条件などの１つ以上の要因に基づいて要求を受け入れるか、または拒否することができる。要求は、ストレージノードが要求を受け入れるまで、パケットのＳＲヘッダ（ＳＲＨ）内で特定されたストレージノード候補をトラバースする。
【００１６】
これらの手法は、クライアントによってストレージノードに格納されたデータの複製を効率的に格納するために同様に実装することができる。例えば、ストレージ要求を受け入れてクライアントからのデータを格納するストレージノードは、ＳＲを使用して、複製ストレージ要求を他のストレージノードまたはストレージノードのプールに向かって誘導することができる。複製ストレージ要求は、ストレージノードの１つ以上のプールからストレージノード候補を特定するＳＲリストを有するＳＲＨを含むことができる。ＳＲリスト、ストレージノード候補、およびストレージノードの１つ以上のプールは、分散ストレージ環境内のストレージノードに関する情報を格納するメタデータサーバによって特定することができるか、または選択することができる。ＳＲＨは、要求が格納されるある数の複製に対応し得るある数のストレージノード候補によって受け入れられるまで、ストレージノード候補を介して複製ストレージ要求を誘導することができる。ストレージノード候補は、そのような要求を受信し、前述の１つ以上の要因に基づいて要求を受け入れるか、または拒否することができる。ストレージノードは、要求を受け入れるそれらのストレージノード候補に複製を効率的に格納できる。
【００１７】
例えば、クライアントデバイスが分散ストレージ環境でデータを格納するか、または読み取りたい場合、メタデータサーバ（または本明細書で説明するメタデータサーバのプール）にメッセージを送信でき、メタデータサーバは、クライアントデバイスに、データのストレージノード候補のリストを送信することができる。複数のストレージノード候補を使用すると、信頼性、パフォーマンス、および負荷分散の公平性を向上させることができる。クライアントデバイスは、メタデータサーバによって特定されたストレージノード候補に通信要求（例えば、データを読み取るまたは格納するために）を送信することができる。要求は、ストレージノード候補を特定するＳＲリスト、およびストレージノード候補を介してパケットを送るための順序を含むパケット内のＳＲＨに基づくセグメントルーティングを使用して送ることができる。ＳＲリスト内の第１のストレージノード候補は、要求を受信し、現在の負荷、将来の負荷、予測された負荷、リソース（例えば、帯域幅、ストレージ、コンピュートなど）可用性、ストレージノードの状態、パフォーマンス要件、予想される応答待ち時間、および／またはストレージノードでの任意の操作条件などの１つ以上の要因に基づいて要求を受け入れるか、または拒否するかを判定することができる。
【００１８】
ＳＲリスト内の残りのストレージノード候補は、第１のストレージノード候補が要求を受け入れることができない場合のバックアップストレージ候補として機能することができる。第１のストレージノード候補は要求を拒否した場合、ＳＲリスト内の次のストレージノード候補にパケットを転送し、ＳＲリストは、同様に要求を受け入れるか、または拒否するかを判定する。要求は、ストレージノード候補が要求を受け入れるまで、または要求がＳＲリスト内の最後のストレージノード候補に到達するまでＳＲリストをトラバースし続け、ＳＲリストは要求を受け入れることを強制される場合がある。
【００１９】
説明のために、ストレージ操作要求のパケットは、要求のために選択されたｎ個のストレージノード候補に対応するセグメント特定子（ＳＩＤ）を有するＳＲリストを有するＳＲＨを含むことができる。ＩＰｖ６ヘッダは、クライアントに関連付けられた送信元アドレス（ＳＡ）、第１のストレージノード候補に対応する宛先アドレス（ＤＡ）を含むことができ、ＳＲＨはＳＲリスト（ＳＮ３、ＳＮ２、ＳＮ１）を含み、ＳＮ１、ＳＮ２、およびＳＮ３は、要求に対して選択されたストレージノード候補である。ＳＲリストは、ＳＲＨ内のセグメントのリストであり得、セグメントは、要求に対して選択されたストレージノード候補を特定し、それらのストレージノード候補に要求を誘導するために使用することができる。ストレージノードの候補者は、要求を受信したときに要求を受け入れるか、または拒否するかを判定することができる。このように、ＩＰｖ６およびセグメントルーティング技術を使用して、ストレージ操作を負荷分散し、分散ストレージ環境内のストレージ操作の待ち時間を短縮することができる。ＩＰｖ６およびセグメントルーティングの概念の詳細については、以下で提供される。
【００２０】
ＩＰｖ６環境
ＩＰｖ６環境では、ストレージノードまたはメタデータサーバなどのノードには、ＩＰｖ６アドレスまたはプレフィックスを介して到達することができる。ＩＰｖ６パケットには、パケットの送信元セグメントおよび宛先セグメントを特定するＩＰｖ６ヘッダを含むことができ、ＩＰｖ６ヘッダ内の１つ以上のセグメントによって適用される関数を含むことができる。場合によっては、ノードに格納されたデータにＩＰｖ６またはプレフィックスを割り振ることもでき、これを使用して、そのデータを特定し、かつアクセスすることができる。例えば、データのブロックを格納する１つ以上のノードにＩＰｖ６プレフィックスを割り振ることができ、データのブロックの各インスタンスにＩＰｖ６プレフィックス内のＩＰｖ６アドレスを割り振ることができる。データのブロックのＩＰｖ６アドレスを使用して、データのブロックにアクセスすることができる。このスキームにより、データのＩＰｖ６アドレスにアドレス指定されたデータの要求が、データを含み、ＩＰｖ６プレフィックスに関連付けられた適切なノード（複数可）に送られるようにすることができる。
【００２１】
セグメントルーティング（ＳＲ）
ＳＲは、セグメントのリストまたはＳＲリストによって定義された、事前定義されたパスをパケットがたどることを可能にするソースルーティングパラダイムである。本明細書における手法は、ＳＲおよびＩＰｖ６技術を活用して、正確かつ効率的なストレージ操作の負荷分散および待ち時間の短縮を実現する。
【００２２】
ＳＲおよびＩＰｖ６は、ＩＰｖ６ヘッダおよびＳＲＨをパケットに実装することで一緒に活用することができる。例えば、場合によっては、ＩＰｖ６拡張ヘッダを実装して、ＳＲ用のセグメントのリスト、およびパケットの最終宛先が到達するまで処理される残りのセグメントの数を示すカウンタであるＳｅｇｍｅｎｔｓＬｅｆｔを特定することができる。ＳＲパケットでは、ＩＰｖ６宛先アドレスをＳＲリスト内の次のセグメントのアドレスで上書きすることができる。このようにして、パケットは、次の目的のＳＲセグメントまたはホップに到達するまで、ＳＲ非認識ルータまたはノードを横切ることができる。ＳＲパケットを受信すると、ＳＲ認識ルータまたはノードは宛先アドレスをＳＲリスト内の次のセグメントのアドレスに設定し、Ｓｅｇｍｅｎｔｓ  Ｌｅｆｔ（ＳＬ）カウンタを減らす。パケットが最後のＳＲホップ、またはＳＲリスト内のセグメントに到達すると、パケットの最終宛先がＩＰｖ６宛先アドレスフィールドにコピーされる。ヘッダ内のフラグの値に応じて、ＳＲＨは、宛先がｖａｎｉｌｌａ  ＩＰｖ６パケットを受信するように最後のＳＲホップまたはセグメントにより削除され得る。
【００２３】
本明細書におけるセグメントルーティングおよびＩＰｖ６の概念は、ストレージ操作の負荷分散および待ち時間の短縮を実施するために実装することができる。例えば、クライアントがストレージノードとの接続を確立してストレージ操作（例えば、読み取りまたは書き込み）を実施する場合、クライアントはメタデータサーバと通信して、ストレージ操作のストレージノード候補のリストを取得することができる。メタデータサーバは、ストレージノードに関する情報を分散ストレージ環境に格納して、クライアントからのこのような要求に応答することができる。したがって、メタデータサーバは、クライアントから要求を受信すると、ストレージノード候補のセットを選択し、ストレージノード候補のリストをクライアントに提供することができる。次に、クライアントはパケットをストレージノード候補に送信することができ、ストレージノード候補は、メタデータサーバによって選択されたストレージノード候補のリストを特定するＳＲリストを含むパケットに挿入されたＳＲＨに基づいて送ることができる。ＳＲＨは、パケットをストレージノード候補を介して連続して誘導することを可能にする。
【００２４】
パケットをＳＲリスト内のストレージノード候補に単に転送するのではなく、パケットが第１のストレージノード候補に到達すると、ストレージノード候補は、接続を受け入れるか、または接続を拒否するかをローカルで判定し、パケットをＳＲリスト内の次のストレージに転送することができる。場合によっては、ストレージノード候補は、ストレージノード候補のポリシーおよび／またはローカル操作条件に基づいてそのような判定を行うことができる。ストレージノード候補が接続を拒否した場合、ＳＲリスト内の次のセグメント（すなわち、次のストレージノード候補）にパケットを転送することができ、候補が接続を受け入れるか、またはパケットがＳＲリスト内の最後のセグメントに到達するまで、パケットはＳＲリスト内のストレージノード候補をトラバースすることができる。すべての要求が確実に満たされるようにするために、ＳＲリスト内の最後のストレージノード候補が接続を受け入れることを要求される場合がある。接続を受け入れると、受け入れるストレージノード候補はクライアントとの接続を確立し、クライアントによって要求されたストレージ操作を実施することができる。
【００２５】
この機構により、利用可能である、または接続を受け入れることができるストレージノード候補が見つかるまで、接続要求をいくつかのストレージノード候補に透過的に配信することが可能である。接続を受け入れるか、または拒否するかの判定は、分散型の方法で、個々のストレージノード候補によってローカルで行うことができる。この機構により、操作認識が分散ストレージ環境に直接もたらされ、分散ストレージ環境全体の負荷分散およびストレージ操作のパフォーマンスが向上する。
【００２６】
クライアントによってストレージノードに格納されたデータの複製は、本明細書におけるセグメントルーティング技術を使用して同様に送り、かつ負荷分散することができる。例えば、ストレージノードは、データのブロックを格納し、その後、データのブロックの複製を他のストレージノードに分散するために、１つ以上のストレージノード候補にパケットを送信することができる。パケットは、複製のストレージノード候補を特定するＳＲリストを有するＳＲＨを含むことができる。ストレージノード候補は、いくつかの例では、複製用に選択されたストレージノードの１つ以上のプールの一部である可能性がある。ＳＲＨは、ＳＲリスト内のセグメントを介してパケットを誘導することができるため、複製用に選択されたストレージノード候補がパケットを受信ですることがきる。パケットを受信すると、各ストレージノード候補は、複製を格納する要求を受け入れるか、または要求を拒否してＳＲリスト内の次のストレージノード候補に転送するかを判定することができる。したがって、ストレージノード候補は、要求を受け入れ、それぞれの操作条件に基づいて複製を格納するかどうかについて、ローカルで判定を下すことができる。
【００２７】
ここで、本開示は、いくつかの例による、分散ストレージ環境１０２の例示的なアーキテクチャ１００を示す図１に移る。この例では、分散ストレージ環境１０２は、分散ストレージ環境１０２にデータを格納するためのストレージノード候補１３２〜１３６、１４２〜１４６、１５２〜１５６を含む。データは、例えば、ファイル、オブジェクト、データブロックもしくはチャンク、コンテンツアイテム、生データ、データ複製、および／または任意の他のタイプのデーもしくは情報アイテムを含むことができるが、これらに限定されない。
【００２８】
ストレージノード候補１３２〜１３６、１４２〜１４６、１５２〜１５６は、分散ストレージ環境１０２のハードウェアおよび／または仮想ストレージインフラストラクチャを表すことができる。ストレージノード候補１３２〜１３６、１４２〜１４６、１５２〜１５６は、１つ以上の物理ストレージサーバ、１つ以上の仮想ストレージサーバ（例えば、仮想マシン（ＶＭ）、ソフトウェアコンテナなど）、１つ以上の物理ストレージサーバおよび／もしくは論理ストレージ構成要素（例えば、ストレージドライブ、論理ボリューム、ストレージパーティション、ストレージアレイなど）、ならびに／または任意の他の物理的ならびに／または仮想／論理ストレージ要素を含むことができる。ストレージノード候補１３２〜１３６、１４２〜１４６、１５２〜１５６は、複数のストレージ要素をまたぐか、またはそれらをまたいで分散することができ、分散ストレージインフラストラクチャを提供することができる。場合によっては、ストレージノードは複数の物理または仮想ストレージ要素をまたぐことができる。例えば、ストレージノードは、２つ以上の物理サーバおよび／またはストレージデバイスから作成された仮想ストレージデバイス、コンテナ、または場所を表すことができる。
【００２９】
ストレージノード候補１３２〜１３６、１４２〜１４６、１５２〜１５６は、ストレージノードプール１３０、１４０、１５０にグループ化することができる。例えば、ストレージノード候補１３２〜１３６は、ストレージノードプール１３０にグループ化することができ、ストレージノード候補１４２〜１４６は、ストレージノードプール１４０にグループ化することができ、ストレージノード候補１５２〜１５６は、ストレージノードプール１５０にグループ化することができる。ストレージノード候補１３２〜１３６、１４２〜１４６、１５２〜１５６は、１つ以上の共通の特性などの１つ以上の要因に基づいて、ストレージノードプール１３０、１４０、１５０にグループ化することができる。例えば、ストレージノード候補１３２〜１３６、１４２〜１４６、１５２〜１５６は、ストレージタイプ、データのタイプ（例えば、格納するデータのタイプ）、基盤となるストレージプラットフォーム、物理的または仮想的の場所、容量、構成設定またはアーキテクチャ、ストレージの役割、優先順位、ネットワークセグメント（ＩＰプレフィックスまたはサブネットなど）、共有リソース、操作条件などによって、ストレージノードプール１３０、１４０、１５０にグループ化することができる。
【００３０】
場合によっては、ストレージノードプール（例えば、１３０、１４０、および／または１５０）を、単一のストレージノードまたは分散ストレージとして機能するように構成することができる。他の場合には、ストレージノードプール（例えば、１３０、１４０、および／または１５０）は、別々におよび／または個別に操作することができるストレージノードの集合を単に表すことができる。例えば、ストレージノードプール１３０は、データの一部を格納するか、またはデータ要求を処理するための一次ストレージノードプールとして選択されたストレージノードプールを表すことができ、ストレージノードプール１４０および１５０は、バックアップストレージノードプール（例えば、一次ストレージノードプールでエラーまたは障害が発生した場合に使用するため、負荷分散で使用するためなど）として機能するように選択されたストレージノードプール、またはデータの一部のバックアップもしくは複製を格納するため、またはデータの一部のバックアップもしくは複製を処理するための二次ストレージノードプールデータを表すことができる。
【００３１】
場合によっては、ストレージノードプール１３０、１４０、１５０は、ストレージノードプール１３０、１４０、１５０内のストレージノードが動的に、または時間の経過とともに変化することができるように動的であり得る。例えば、ストレージノードプール１３０は、ストレージ操作または要求を処理するためにメタデータサーバ（例えば、１１２、１１４、１１６、１２２、１２４、および／または１２６）によって選択されたストレージノードのグループを表すことができる。説明のために、メタデータサーバ１１２は、ストレージ操作またはクライアント１０４からの要求を処理するための候補としてストレージノード候補１３２、１３４、１３６を選択し、ストレージノード候補１３２、１３４、１３６をストレージノードプール１３０によって表される候補のグループにグループ化してもよい。メタデータサーバ１１２は、前述のように、１つ以上の要因または共有特性に基づいて、ストレージノードプール１３０のストレージノード候補１３２、１３４、１３６を選択してもよい。例えば、この場合、メタデータサーバ１１２は、ストレージノード候補１３２、１３４、１３６がすべてクライアント１０４によって要求されているデータの一部を格納するので、ストレージノードプール１３０のためにストレージノード候補１３２、１３４、１３６を選択してもよい。
【００３２】
しかしながら、将来のストレージ操作または要求のために、メタデータサーバ１１２は、ストレージノード候補の異なるセットを選択して、ストレージノードプール１３０を形成することができる。例えば、メタデータサーバ１１２は、（例えば、ストレージノード候補１４２〜１４６および／または１５２〜１５６のうちの１つ以上を追加することによって）ストレージノードプール１３０内のストレージノードの数を増加させるか、（例えば、ストレージノード候補１３２、１３４、および１３６のうちの１つ以上を削除することによって）ストレージノードプール１３０内のストレージノードの数を減少させるか、またはストレージノードプール１３０のために完全に異なるストレージノードのセットを選択することができる。
【００３３】
メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６は、ストレージノード候補１３２、１３４、１３６、１４２、１４４、１４６、１５２、１５４、１５６およびストレージノードプール１３０、１４０、１５０に関する情報を分散ストレージ環境１０２内に格納し、かつ／または分散ストレージ環境１０２内でアクティビティを追跡することができる。例えば、メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６は、分散ストレージ環境１０２内のどこにデータが格納されているか、どこに特定のストレージノードが配置されているか、どのストレージノードまたはストレージノードプールがストレージ操作もしくは要求を処理しているか、またはストレージ操作または要求に対して選択されているか、分散ストレージ環境１０２内のストレージノード、ストレージノードプール、および／またはデータのアドレス（例えば、ＩＰｖ６アドレス、ＩＰｖ６プレフィックスなど）、ストレージノードの容量または可用性、ストレージノードに関連付けられたデータまたはストレージのタイプ、ならびに／または分散ストレージ環境１０２内のデータ、ストレージノード、およびストレージノードプールに関する任意の他の情報を追跡することができる。場合によっては、異なるメタデータサーバが、分散ストレージ環境１０２内の異なる情報またはアクティビティを格納するか、または追跡することができる。例えば、メタデータサーバのあるセットは、ストレージノードおよび／またはデータの特定のセットに関する情報を格納し、かつ追跡することができ、メタデータサーバの別のセットは、ストレージノードおよび／またはデータの異なるセットに関する情報を格納し、かつ追跡することができる。これは、例えば、メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６上のストレージおよび／または計算の負担を軽減し、分散ストレージ環境１０２などの包括的な情報を保持するために必要なメタデータサーバの数を削減するために行うことができる。
【００３４】
メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６は、この情報を使用して、分散ストレージ環境１０２内のストレージ操作もしくは要求のためのストレージノード候補および／またはストレージノードプールを特定するか、または選択することができる。例えば、メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６は、この情報を使用して、どのストレージノード（例えば、１３２、１３４、１３６、１４２、１４４、１４６、１５２、１５４、１５６）がデータの特定の一部を格納するかを特定し、かつそのようなノードを選択して、そのデータの特定の一部の要求を処理することができる。別の例として、メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６は、この情報を使用して、データの一部および１つ以上の複製を格納するためのストレージノード候補および／またはストレージノードプールを特定し、かつ選択することができる。説明のために、メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６は、この情報を使用して、ストレージ要求に関連付けられたデータを格納するための一次ストレージノードプール（例えば、１３０）、およびデータの複製を格納するための二次ストレージノードプール（例えば、１４０および／または１５０）を選択することができる。
【００３５】
いくつかの例では、クライアント１０４、１０６、１０８が分散ストレージ環境１０２からデータを格納したいか、または取り出したいとき、それらはメタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６と通信して、データを格納するか、または取り出すための候補ストレージノードのリストを取得することができる。メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６は、要求された操作のための候補ストレージノードのセットを特定するか、または選択し、選択された候補ストレージノードのリストをクライアント１０４、１０６、１０８の各々に提供することができる。場合によっては、リストは、選択された候補ストレージノードに対応するセグメントを有するＳＲリストである可能性がある。他の場合には、リストは、クライアント１０４、１０６、１０８がＳＲリストを生成するために使用することができるリストであり得る。
【００３６】
クライアント１０４、１０６、１０８は、受信したリストを使用して、それぞれの接続を確立し、リストからの特定のストレージノードで要求された操作を完了することができる。クライアント１０４、１０６、１０８は、候補ストレージノードが要求を受け入れるまで、リスト内の候補ストレージノードを通って連続的に移動するように構成されたパケットを送信することによって、接続を確立し、それぞれのストレージノードで要求された操作を実施するように要求することができる。パケットは、選択された候補ストレージノードに対応するセグメントを含むＳＲリストを有するＳＲＨを含むことができる。ＳＲリストは、メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６によって提供されたリスト、またはメタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６によって提供されたリストに基づいて作成されたＳＲリストであり得る。パケット内のＳＲＨは、ＳＲ認識ノードまたはデバイスが、ＳＲリストから候補ストレージノードを介してパケットを誘導することを可能にし得る。
【００３７】
ＳＲリスト内の候補ストレージノードがパケットを受信すると、例えば、候補ストレージノードでの操作条件（例えば、帯域幅、負荷、リソースの可用性、容量など）に基づいて、要求を受け入れるか、または拒否するかをローカルで判定することができる。候補ストレージノードが要求を受け入れると、要求元のクライアントは、要求されたストレージ操作（例えば、データの格納、データの取り出しなど）のためにそのストレージノードとの接続を確立できる。（例えば、ストレージノードの操作条件のために）候補ストレージノードが要求を拒否した場合、候補ストレージノードはＳＲＨを使用して、ＳＲリスト内の次のホップまたはセグメント（例えば、次の候補ストレージノード）にパケットを転送することができる。パケットを受信する各ストレージノードは、同様にパケットを受け入れるか、または拒否するかを判定し、そのストレージノードが要求を受け入れたか、または拒否したかによって、要求元のクライアントとの接続を確立するか、またはＳＲリスト内の次のホップまたはセグメント（例えば、次の候補ストレージノード）にパケットを転送することができる。
【００３８】
場合によっては、メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６は、メタデータサーバプール１１０、１２０にグループ化することができ、これを使用して、クライアント１０４、１０６、１０８からの要求を負荷分散することができる。例えば、メタデータサーバ１１２、１１４、および１１６は、メタデータサーバプール１１０にグループ化することができ、メタデータサーバ１２２、１２４、および１２６は、メタデータサーバプール１２０にグループ化することができる。メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６のグループ化は、メタデータサーバプール１１０、１２０を作成するために使用することができる。メタデータサーバプール１１０、１２０は、共有メタデータサーバ属性、メタデータサーバ条件、負荷分散要因、予想されたメタデータサーバ負荷、メタデータサーバ１１２、１１４、１１６、１２２、１２４、１２６によって格納され、かつ／または追跡された情報などの１つ以上の要因に基づいて作成することができる。例えば、メタデータサーバプール１１０は、ストレージノード、ストレージノードプール、および／またはデータの特定のセットに関する情報を有するメタデータサーバを含むように構成することができ、メタデータサーバプール１２０は、異なるストレージノードのセット、ストレージノードプール、および／またはデータに関する情報を有するメタデータサーバを含むように構成することができる。別の例では、メタデータサーバプール１１０、１２０は、各々がランダムに選択されたある数のメタデータサーバを含むように構成することができる。
【００３９】
場合によっては、メタデータサーバプール１１０、１２０は静的であり得る。例えば、メタデータサーバプール１１０、１２０は、同じそれぞれのグループまたはいくつかのメタデータサーバを含むように構成することができる。他の場合には、メタデータサーバプール１１０、１２０は動的であり得る。例えば、メタデータサーバプール１１０、１２０内のメタデータサーバの数および／またはアイデンティティは、時間、ストレージ操作要求、メタデータサーバの操作条件（例えば、帯域幅、可用性、負荷、待ち時間など）、ストレージ需要、トラフィック変動、パフォーマンス設定、優先度、パフォーマンス統計、ネットワークパターン、ストレージノードの変更、データストレージの調整、環境の変更などの１つ以上の要因に基づいて変化し得る。説明のために、いくつかの例では、メタデータサーバプール１１０は、メタデータサーバ１１２、１１４、１１６を一定期間、または１つ以上の特定のストレージ操作要求を処理するために実装し、その後、より多くの、より少ない、または異なるメタデータサーバを異なる期間、異なるストレージ操作要求のセットに無期限に、または異なるプール調整トリガもしくは基準が検出されるまで、実装することができる。
【００４０】
クライアント１０４、１０６、１０８が分散ストレージ環境１０２からデータを格納したいか、または取り出したいとき、それらは１つ以上のメタデータサーバプール（例えば、１１０および／または１２０）にメッセージを送信して、データを格納するか、または取り出すための候補ストレージノードのリストを取得することができる。例えば、クライアント１０４は、メタデータサーバプール１１０にメッセージを送信して、データを格納するか、または取得するための候補ストレージノードのリストを取得することができる。メッセージは、メタデータサーバプール１１０内のメタデータサーバ１１２、１１４、１１６に送信することができ、メタデータサーバプール１１０内のメタデータサーバは、操作条件に基づいて要求を受け入れ、候補ストレージノードのリストで応答することができる。場合によっては、クライアント１０４、１０６、１０８からメタデータサーバプール１１０、１２０へのパケットは、候補ストレージノードのストレージ操作要求を送り、かつ負荷分散するための上記の手法と同様のセグメントルーティング負荷分散手法を使用して処理することができる。
【００４１】
例えば、クライアント１０４からメタデータサーバプール１１０への要求は、メタデータサーバプール１１０内のメタデータサーバ１１２、１１４、１１６を特定するＳＲリストを含むＳＲＨを有するパケットを含むことができる。ＳＲＨに基づいて、パケットは、ＳＲリスト内のメタデータサーバが要求を受け入れるまで、ＳＲリストによって特定されたメタデータサーバ１１２、１１４、１１６を通って連続的に移動することができる。ＳＲリスト内のメタデータサーバがパケットを受信すると、メタデータサーバでの操作条件（帯域幅、負荷、リソースの可用性、容量など）に基づいて、要求を受け入れるか、または拒否するかをローカルで判定することができる。メタデータサーバは要求を受け入れる場合、要求されたストレージ操作に関して選択された候補ストレージノードのリストでクライアント１０４に応答することができる。（例えば、メタデータサーバの操作条件のために）メタデータサーバが要求を拒否した場合、メタデータサーバはＳＲＨを使用して、ＳＲリスト内の次のホップまたはセグメント（例えば、次のメタデータサーバ）にパケットを転送することができる。パケットを受信する各メタデータサーバは、同様にパケットを受け入れるか、または拒否するかを判定し、そのメタデータサーバが要求を受け入れたか、または拒否したかによって、クライアント１０４に応答するか、またはＳＲリスト内の次のホップまたはセグメント（例えば、次のメタデータサーバ）にパケットを転送することができる。このようにして、クライアント１０４は、候補ストレージノードのリストを取得し、本明細書で説明するように、候補ストレージノードのうちの１つでデータを格納するか、または取り出すことができる。
【００４２】
場合によっては、クライアント要求の候補ストレージノードを選択するときに、メタデータサーバ（１１２、１１４、１１６、１２２、１２４、１２６）は要求の単一のストレージノードプール（例えば、１３０）または複数のストレージノードプール（例えば、１３０、１４０、および／または１５０）を選択することができる。例えば、メタデータサーバ１１２が、分散ストレージ環境１０２にデータを格納する意図を示すクライアント１０４からの要求を受信し、かつ受け入れたと仮定する。次に、メタデータサーバ１１２は、データを格納する要求のための一次ストレージノードプールとしてストレージノードプール１３０を、およびデータのための二次ストレージノードプールとしてストレージノードプール１４０ならびに１５０を選択することができる。データの複製を格納するために、二次ストレージノードプールを選択することができる。メタデータサーバ１１２は、ストレージ要求を受け入れるストレージノードプール１３０からのクライアント１０４および／またはストレージノードに、ストレージノードプール１４０内の候補ストレージノードのリストおよびストレージノードプール１５０内の候補ストレージノードのリストを提供することができる。
【００４３】
ストレージ要求を受け入れるストレージノードプール１３０からのストレージノードは、ストレージノードプール１４０および１５０からの候補ストレージノードのリストを使用して、ストレージノードプール１４０および１５０に複製を格納することができる。例えば、ストレージノード候補１３４がクライアント１０４からのストレージ要求を受け入れ、クライアント１０４から受信したデータを格納すると仮定する。ストレージノード候補１３４は、ストレージノードプール１４０内のストレージノード候補１４２、１４４、１４６を特定するＳＲリストを有するＳＲＨを含むストレージノードプール１４０にパケットを、およびストレージノードプール１５０内のストレージノード候補１５２、１５４、１５６を特定するＳＲリストを有するＳＲＨを含むストレージノードプール１５０にパケットを送信することができる。パケット内のＳＲＨは、パケットに関連付けられたそれぞれのストレージノードプール内のストレージノードを介してパケットを連続的に誘導することができる（例えば、１つのパケット用のストレージノードプール１４０および他のパケット用のストレージノードプール１５０）。ストレージノード候補１３４からパケットを受信する各ストレージノードは、その操作条件に基づいて複製を格納することを受け入れるか、または拒否することができる。ストレージノードは要求を受け入れると、ストレージノード候補１３４から複製を取得して格納することができる。ストアノードが要求を拒否する場合、ＳＲリスト内の次のホップまたはセグメント（例えば、ＳＲリスト内の次のストレージノード）にパケットを転送することができる。このようにして、ストレージノード候補１３４は、複製を二次ストレージノードプール（例えば、１４０および１５０）に効率的に伝播することができる。
【００４４】
場合によっては、メタデータサーバ１１２は、ストレージノードプール１３０からの候補ストレージノードのリストとともに、ストレージノードプール１４０および１５０からの候補ストレージノードのリストをクライアント１０４に提供することができる。クライアント１０４は、ストレージノードプール１４０および１５０からの候補ストレージノードのリストを使用して、複製ストレージ要求をどこに送信するかをストレージノード候補１３４に通知することができる。次に、ストレージノード候補１３４は、リストを使用して、前述のように、ストレージノードプール１４０および１５０に複製を格納することができる。
【００４５】
さらに、場合によっては、クライアント１０４は、ストレージノードプール１３０、１４０、および１５０からの候補ストレージノードのリストを使用して、それらのストレージノードとのストレージ操作を実施するために、複数のストレージノードとの並行接続を確立することができる。例えば、クライアント１０４は、ＳＲスプレーポリシーまたは操作を使用して、ストレージノードプール１３０、１４０、および１５０からの候補ストレージノードのリストに対応する複数のＳＲリストにパケットを複製することができる。例えば、クライアント１０４は、メタデータサーバ１１２から、ストレージノードプール１３０、１４０、および１５０のリストを受信することができる。クライアント１０４は、リストを使用して、パケットのコピーを、ストレージノードプール１３０内のストレージノード候補１３２、１３４、１３６を含む第１のＳＲリスト、ストレージノードプール１４０内のストレージノード候補１４２、１４４、１４６を含む第２のＳＲリスト、およびストレージノードプール１５０内のストレージノード候補１５２、１５４、１５６を含む第３のＳＲリストに送信することができる。パケットのコピーおよび前述の負荷分散手法に基づいて、クライアント１０４は接続を確立し、ストレージノードプール１３０、１４０、および１５０からのストレージノードとのストレージ操作を実施することができる。クライアント１０４は、そのような接続を並行して確立し、確立された接続を使用して、クライアント１０４からのストレージ要求を受け入れたストレージノードプール１３０、１４０、および１５０からのそれらのストレージノードにデータのコピーを格納することができる。
【００４６】
他の例では、ストレージノード候補１３４は、ストレージノードプール１４０および１５０からの候補ストレージノードのリストを使用して、２つ以上のストレージノードとの並行接続を確立し、それらのストレージノードに複製を格納することができる。例えば、ストレージノード候補１３４は、ＳＲスプレーポリシーまたは操作を使用して、ストレージノードプール１４０および１５０からの候補ストレージノードのリストに対応する複数のＳＲリストにパケットを複製することができる。説明のために、ストレージノード候補１３４は、メタデータサーバ１１２またはクライアント１０４からストレージノードプール１４０および１５０のリストを取得することができる。ストレージノード候補１３４は、リストを使用して、パケットのコピーを、ストレージノードプール１４０内のストレージノード候補１４２、１４４、１４６を含む第１のＳＲリスト、およびストレージノードプール１５０内のストレージノード候補１５２、１５４、１５６を含む第２のＳＲリストに送信することができる。パケットのコピーおよび前述の負荷分散手法に基づいて、ストレージノード候補１３４は接続を確立し、ストレージノードプール１４０、および１５０からのストレージノードとの複製ストレージ操作を実施することができる。ストレージノード候補１３４は、そのような接続を並行して確立し、確立された接続を使用して、ストレージノード候補１３４からの要求を受け入れたストレージノードプール１４０および１５０からのそれらのストレージノードに複製を格納することができる。
【００４７】
図２は、セグメントルーティングおよび負荷分散技術を使用して分散ストレージ環境１０２内でストレージ操作を実施するための例示的なフロー２００の図を示す。この例では、クライアント１０４は、要求２０２をメタデータサーバ１１２に送信する。要求２０２は、クライアント１０４が分散ストレージ環境１０２でデータを取り出すか、または格納することを意図していることを示すことができる。メタデータサーバ１１２は、要求２０２を受信し、ストレージ操作の候補ノードとしてストレージノード候補１３２、１３４、１３６を選択する。メタデータサーバ１１２は、ストレージノード候補１３２、１３４、１３６を特定するＳＲリスト２０４で要求２０２に応答する。ＳＲリスト２０４は、セグメントルーティングパケットの第１のセグメントとしてストレージノード候補１３２、第２のセグメントとしてストレージノード候補１３４、および第３のセグメントとしてストレージノード候補１３６を特定することができる。
【００４８】
クライアント１０４は、ＳＲリスト２０４を受信し、要求２０６をストレージノード候補１３２、１３４、１３６に送信することができる。要求２０６は、クライアント１０４が特定のデータを格納するか、または取り出すための接続を確立することを望んでいることを示すことができる。要求２０６は、ストレージノード候補１３２、１３４、１３６をパケットのセグメントルーティングセグメントとして特定するＳＲリスト２０４を含むＳＲＨに基づいて、ストレージノード候補１３２、１３４、１３６に送ることができる。要求２０６を受信する各ＳＲ認識または対応ノードまたはルータは、ＳＲＨおよびＳＲリスト２０４を使用して、パケットをストレージノード候補１３２、１３４、１３６に向かって誘導することができる。
【００４９】
ストレージノード候補１３２は、ＳＲリスト２０４内の第１のセグメントであるため、要求２０６を受信する第１のストレージノードになる。要求２０６を受信すると、ストレージノード候補１３２は、その操作条件（例えば、帯域幅、負荷、容量、リソースの可用性、ステータスなど）に基づいて、要求２０６を受け入れるか、または拒否するかを判定することができる。この例では、ストレージノード候補１３２は、要求２０６を拒否する２０８。要求２０６を拒否した後、ストレージノード候補１３２は、要求２０６をＳＲリスト２０４内の次のセグメント（この例ではストレージノード候補１３４）に転送することができる。ストレージノード候補１３４は、同様に、要求２０６を受け入れるか、または拒否するかを判定することができる。この例では、ストレージノード候補１３４は、要求２０６を拒否し（２１０）、要求２０６を、ＳＲリスト２０４内の最後のセグメントであるストレージノード候補１３６に転送する。
【００５０】
ストレージノード候補１３６は、要求２０６を受信し、要求２０６を受け入れる（２１２）。ストレージノード候補１３６は、その操作条件に基づいて要求２０６を受け入れることができる。例えば、ストレージノード候補１３６は、ストレージノード候補１３６が十分な（例えば、閾値内、負荷またはパフォーマンス要件内など）容量、帯域幅、リソース可用性を有するか、または他の方法で、制限された遅延で、もしくは閾値パフォーマンス内で要求２０６を処理することができるという判定に基づいて、要求２０６を受け入れることができる。場合によっては、ＳＲリスト内の最後のセグメントが、受信した要求を受け入れるように強制され、そのような要求が完全に拒否されることを回避することができる。この例では、ストレージノード候補１３６はＳＲリスト２０４内の最後のセグメントであるため、その操作条件にかかわらず、要求２０６を受け入れるように強制され得る。
【００５１】
ストレージノード候補１３６は要求２０６を受け入れると、ストレージノード候補１３６が要求２０６を受け入れたことを示す応答２１４をクライアント１０４に送信することができる。応答２１４に基づいて、クライアント１０４は、ストレージノード候補１３６との接続を確立することができ、クライアント１０４の意図に応じて、ストレージノード候補１３６に要求２０６に関連付けられたデータを格納するか、または取り出すことができる。クライアント１０４およびストレージノード候補１３６が接続を確立すると、要求２０６に関連付けられた後続の通信は、クライアント１０４とストレージノード候補１３６との間で直接送信することができる。すなわち、そのような通信は、ストレージノード候補１３２および１３４を介して送られる必要はない。
【００５２】
図３Ａは、要求２０６に対する例示的なＳＲｖ６パケット３００を示す。ＳＲｖ６パケット３００は、ペイロード３０２、ＩＰｖ６ヘッダ３０４、およびＳＲＨ３０６を含む。ＳＲＨ３０６は、セグメントフィールド３０６Ａ内にＳＲリスト２０４を含むことができる。ＳＲリスト２０４は、要求２０６の候補としてメタデータサーバ１１２によって選択されたストレージノード候補１３２（ＳＮ１）、１３４（ＳＮ２）、および１３６（ＳＮ３）を含む、ＳＲｖ６パケット３００を送るためのセグメントのリストを含む。場合によっては、ＳＲリスト２０４はまた、図３Ｂを参照して以下でさらに説明するように、各セグメント用のそれぞれの関数を含むことができる。
【００５３】
ＳＲＨ３０６内のＳＲリスト２０４をＳＲ対応または認識ノードまたはルータによって使用して、ＳＲｖ６パケット３００をＳＲリスト２０４内の宛先ストレージノード（例えば、１３２、１３４、１３６）に誘導することができる。ＳＲリスト２０４は、ＳＲｖ６パケット３００のパスに沿ったＳＲセグメント（例えば、ＳＲ対応ノード）を特定する。各ＳＲ対応ノードは、ノードでインスタンス化されたＳＲセグメントのリストを維持することができる。ＳＲ対応ノードは、ＳＲセグメントのリストを使用して、パケットをＳＲリスト２０４内の次のセグメントに送ることができる。
【００５４】
セグメントフィールド３０６Ａはまた、アクティブなセグメントを特定するＳｅｇｍｅｎｔｓＬｅｆｔ（ＳＬ）カウンタとして知られるカウンタを含むことができる。カウンタの値は、ＳＲｖ６パケット３００がネットワークを通って移動するときに、ＳＲ対応ノードによって受信されるたびに１ずつ減少する。
【００５５】
ＩＰｖ６ヘッダ３０４は、送信元アドレスフィールド３１０および宛先アドレスフィールド３０８を含むことができる。送信元アドレスフィールド３１０は、ＳＲｖ６パケット３００の送信元を特定することができ、送信元は、この例では、クライアント１０４である。送信元アドレスフィールド３１０は、ＳＲｖ６パケット３００の元の送信元のネットワークアドレス、ＳＲｖ６パケット３００の戻り宛先、および／またはＳＲｖ６パケット３００の現在の送信元もしくは送信者を含むことができる。ソースフィールド３１０はまた、以下でさらに説明するように送信元フィールド３１０内で特定されたノードによって実装されるコマンドまたは関数を含むことができる。
【００５６】
宛先アドレスフィールド３０８は、ＳＲリスト２０４から次のセグメントまたはノードを特定することができる。この例では、宛先アドレスフィールド３０８は、ＳＲリスト２０４内の第１の宛先ノードであるストレージノード候補１３２（ＳＮ１）を特定する。宛先アドレスフィールド３０８は、ＳＲｖ６パケット３００を次の宛先に誘導するために使用することができる。ＩＰｖ６ヘッダ３０４内の宛先アドレスフィールド３０８は、ＳＲｖ６パケット３００がＳＲ非認識ノードをトラバースする場合でも、ＳＲｖ６パケット３００を送ることを可能にすることができる。
【００５７】
宛先アドレスフィールド３０８は、特定されたノードまたはセグメントのインターネットプロトコル（ＩＰ）アドレスまたはプレフィックスを含むことができる。例えば、宛先アドレスフィールド３０８は、ストレージノード候補１３２（ＳＮ１）のＩＰｖ６アドレスまたはプレフィックスを含むことができる。これは、ＳＲｖ６パケット３００が、ＳＲｖ６パケット３００の第１の宛先として、そのノードまたはセグメントに送信されることを確実にし得る。宛先アドレスフィールド３０８内のストレージノード候補１３２（ＳＮ１）は、ＳＲｖ６パケット３００を受信して処理した後、ＳＲｖ６パケット３００をＳＲリスト２０４内の次のセグメント（この例ではストレージノード候補１３４（ＳＮ２））に転送することができる。パケットを転送するとき、ストレージノード候補１３２（ＳＮ１）は、ＩＰｖ６ヘッダ３０４上で宛先アドレスフィールド３０８を上書きして、ストレージノード候補１３４（ＳＮ２）を宛先として特定し、ＳＲｖ６パケット３００がＳＲ非認識ノードをトラバースする場合でも、ＳＲｖ６パケット３００がストレージノード候補１３４（ＳＮ２）に送られることを確実にし得る。したがって、ストレージノード候補１３４（ＳＮ２）は、宛先アドレスフィールド３０８およびＳＲリスト２０４に基づいてＳＲｖ６パケット３００を受信することができる。このようにして、ＳＲＨ３０６内のＳＲリスト２０４、およびＩＰｖ６ヘッダ３０４内の宛先アドレスフィールド３０８を使用して、ＳＲｖ６パケット３００をＳＲリスト２０４内の宛先ノードにプッシュすることができる。
【００５８】
さらに説明されるように、ＳＲリスト２０４および／または宛先アドレスフィールド３０８は、関連付けられたノードまたはセグメントによって実装される関数またはコマンド（以下、「ＳＲ関数」）を含むことができる。例えば、宛先アドレスフィールド３０８は、ストレージノード候補１３２（ＳＮ１）を特定し、例えば、接続関数など、ストレージノード候補１３２（ＳＮ１）によって適用される関数を含むことができる。宛先アドレスフィールド３０８は、パケットの次の宛先、送信元または戻りノード、およびそのようなノードまたはセグメントのための任意のコマンドまたは関数を含む、ＳＲｖ６パケット３００の状態を含むことができる。
【００５９】
同様に、ＳＲリスト２０４は、ＳＲリスト２０４内のセグメントのためのコマンドまたは関数を含むことができる。例えば、ＳＲリスト２０４は、セグメントの接続関数、ＳＲリスト２０４内の最後のセグメントの強制接続関数、１つ以上のセグメント（例えば、リソース特定子、フロー特定子など）の１つ以上のパラメータ、状態情報などを含むことができる。
【００６０】
ＳＲ関数は、ノードにより取られるアクションを、ＳＲＨ３０６および／またはＩＰｖ６ヘッダ３０４内で直接コード化することができる。ＳＲ関数は、ＳＲ対応ノードによってローカルで実行される。例示的なＳＲ関数は、Ｅｎｄ関数（すなわち、エンドポイント関数）、Ｅｎｄ．Ｘ関数（すなわち、レイヤ３クロスコネクトを有するエンドポイント関数）、Ｅｎｄ．Ｔ関数（すなわち、特定のＩＰｖ６テーブルルックアップを有するエンドポイント関数）、Ｅｎｄ．Ｓ関数（すなわち、テーブルＴ内のターゲットを取り出すエンドポイント）、Ｅｎｄ．Ｂ６関数（すなわち、ＳＲｖ６ポリシーにバインドされたエンドポイント）などが含まれるが、これらに限定されない。例えば、ｓ：：ｃｊを含むＳＲヘッダ（３０６）内では、ｓ：：ｃｊはノードｓへのパスおよび隣接ｊへのｘ接続関数（関数ｃ）を示す。
【００６１】
場合によっては、ストレージノード（例えば、１３２、１３４、１３６、１４２、１４４、１４６、１５２、１５４、１５６）、ストレージノードプール（例えば、１３０、１４０、１５０）、メタデータサーバ（例えば、１１２、１１４、１１６、１２２、１２４、１２６）、および／または分散ストレージ環境１０２内のメタデータサーバプール（例えば、１１０、１２０）には、全体のＩＰｖ６プレフィックスを割り振ることができる。さらに、プレフィックス内の下位バイトを使用して、ＳＲ関数を指定することができる。場合によっては、ＳＲ関数は、ＳＲリスト２０４内の第１のセグメントのアドレス（例えば、関数の「送信者」）に依存し得る。説明のために、物理プレフィックスがｓであるノードが、（ｘ、．．．，ｓ：：ｆ，．．．）を含むＳＲＨ３０６を有するパケットを受信すると、ＳＲＨ３０６は、ノードｓをトリガして、ｓ．ｆ（ｘ）で示された引数ｘを有する関数ｆを実施する。
【００６２】
図３Ｂは、ＩＰｖ６ヘッダ３０４内の宛先アドレスフィールド３０８の例示的な構成３２０を示す。宛先アドレスフィールド３０８は、１２８ビットを含むことができ、この例では、ノードロケータ３２４の第１の６４ビットからの第１のセグメント３２２Ａ、およびＳＲ関数３２６の次の６４ビットからの第２のセグメント３２２Ｂを含むようにセグメント化することができる。ノードロケータ３２４は、パケット内の次のセグメントまたはノード（例えば、３００）のＩＰアドレスまたはプレフィックスを含むことができる。ＳＲ関数３２６は、ノードロケータ３２４に関連付けられたコマンドまたは関数を含むことができる。
【００６３】
この例は、６４ビットの２つのセグメントにセグメント化された宛先アドレスフィールド３０８を示しているが、宛先アドレスフィールド３０８は、柔軟なビット選択を可能にし、これにより、他の方式でセグメント化され得ることに留意されたい。例えば、図３Ｃは、ＩＰｖ６ヘッダ３０４内の宛先アドレスフィールド３０８の別の例示的な構成３３０を示す。この例では、１２８ビットを含む宛先アドレスフィールド３０８は、ノードロケータ３２４の第１の６４ビットからの第１のセグメント３３２、ＳＲ関数３２６の次の３２ビットからの第２のセグメント３３４、および次の３２ビットからの第３のセグメント３３６を含むようにセグメント化し、ＳＲ関数３２６の任意の引数３２８を含む。
【００６４】
場合によっては、第３のセグメント３３６は、ＳＲ関数３２６の引数を含むことができるサブセグメントにさらにセグメント化され得る。引数を使用して、ＳＲ関数３２６の特定のパラメータを渡すことができる。
【００６５】
図４Ａは、対応するＩＰｖ６およびＳＲｖ６ヘッダ４０２、４０４、４０６に基づく要求２０６（例えば、パケット３００）の例示的なフロー４００を示す。この例では、クライアント１０４は、要求２０６（例えば、パケット３００）をストレージノード候補１３２（ＳＮ１）に送信する。要求２０６は、クライアント１０４を送信元アドレスとして、ストレージノード候補１３２（ＳＮ１）を要求２０６の宛先アドレスとして特定することができる。ヘッダ４０２内のＳＲｖ６ヘッダは、ストレージノード候補１３２、１３４、１３６を宛先セグメントとして特定するＳＲリスト２０４を含むことができる。ＳＲｖ６ヘッダは、ヘッダ４０２内に、ＳＲリスト２０４内の残りのセグメントまたはホップの数を特定するセグメントレフト（ＳＬ）カウンタ４０８を含むこともできる。
【００６６】
ストレージノード候補１３２（ＳＮ１）は、要求２０６を受信し、要求２０６を受け入れるか、または拒否するかを判定することができる。ストレージノード候補１３２（ＳＮ１）が要求２０６を拒否する場合、要求２０６をＳＲリスト２０４上の次のセグメント（この例ではストレージノード候補１３４（ＳＮ２））に転送することができる。ストレージノード候補１３２（ＳＮ１）はまた、ＳＲリスト２０４内の残りのセグメントまたはホップの数を特定するＳＬカウンタ４０８を減少させることができる。
【００６７】
ストレージノード候補１３４（ＳＮ２）は、ストレージノード候補１３２（ＳＮ１）から要求２０６を受信し、要求２０６を受け入れるか、または拒否するかを判定することができる。ストレージノード候補１３４（ＳＮ２）が要求２０６を拒否する場合、ＳＲリスト２０４内の最後のセグメントであるストレージノード候補１３６（ＳＮ３）に要求２０６を転送することができる。ストレージノード候補１３４（ＳＮ２）は、ＳＲリスト２０４内の残りのセグメントまたはホップの数を特定するＳＬカウンタ４０８を再び減少させることができる。
【００６８】
ストレージノード候補１３６（ＳＮ３）は、ストレージノード候補１３４（ＳＮ２）から要求２０６を受信し、それを処理することができる。ストレージノード候補１３６（ＳＮ３）は、ＳＲリスト２０４内の最後のセグメントである。したがって、ストレージノード候補１３６（ＳＮ３）は、パケットを別の宛先に転送することなく、ＳＬカウンタ４０８をゼロに減少させることができる。
【００６９】
図４Ｂは、要求２０６への応答２１４の例示的なフロー４２０を示す。ストレージノード候補１３６（ＳＮ３）は、クライアント１０４によって送信された要求２０６を受信して受け入れると、応答２１４をクライアント１０４に送信して、クライアント１０４とストレージノード候補１３６（ＳＮ３）との間に直接接続４２２を確立する。直接接続４２２は、クライアント１０４およびストレージノード候補１３６（ＳＮ３）が、ストレージノード候補１３２および１３４を介してそれらの通信を送ることなく通信することを可能にする。クライアント１０４への応答２１４は、応答２１４のデータまたはペイロードを含み、ストレージノード候補１３６（ＳＮ３）を送信元アドレスとして特定し、クライアント１０４を宛先アドレスとして特定するパケット４２４を含むことができる。
【００７０】
図５Ａは、セグメントルーティングおよび負荷分散技術を使用して分散ストレージ環境１０２内にデータおよび複製を格納するための例示的なフロー５００の図を示す。この例では、データおよび複製ストレージプロセスは、ストレージノードプール１３０、１４０、１５０内の候補ストレージノード（例えば、１３２、１３４、１３６、１４２、１４４、１４６、１５２、１５４、１５６）間でデータおよび複製ストレージ操作を負荷分散するためのストレージノードプール１３０、１４０、１５０を実装する。
【００７１】
図示のように、クライアント１０４は、要求２０２をメタデータサーバ１１２に送信する。要求２０２は、クライアント１０４が分散ストレージ環境１０２にデータを格納することを望んでいることを示すことができる。場合によっては、要求２０２は、分散ストレージ環境１０２に格納されるデータの複製のある数を特定する複製係数を含むことができる。メタデータサーバ１１２は、要求２０２を受信し、ストレージノード候補１３２、１３４、１３６を有するストレージノードプール１３０、ストレージノード候補１４２、１４４、１４６を有するストレージノードプール１４０、および要求２０２のストレージノード候補１５２、１５４、１５６を有するストレージノードプール１５０を選択する。この例では、ストレージノードプール１３０は、データを格納するためのクライアント１０４の一次ストレージノードプールとして選択され、ストレージノードプール１４０および１５０は、データの複製を格納するための二次ストレージノードプールとして選択される。
【００７２】
メタデータサーバ１１２は、ストレージノードプールの数（例えば、１３０、１４０、１５０）、特定のストレージノードプール（例えば、１３０、１４０、１５０）、ストレージノードプール内のストレージノード候補の数および／もしくはタイプ、ならびに／または分散ストレージ環境１０２上の現在または予測された負荷もしくはトラフィックの量、クライアント１０４が格納したいデータの量、サイズ、もしくはタイプ、クライアント１０４からのデータを格納するためのパフォーマンスもしくはサービス品質（ＱｏＳ）要件、データ用に格納されるある数の複製、ストレージ操作に関連付けられた優先度、ポリシー、分散ストレージ環境１０２内でのストレージノードの可用性、ストレージ操作の任意の特定の処理要件、アルゴリズムもしくは負荷分散スキーム、クライアント１０４の場所、選択されるべきストレージノードプールおよび／もしくはストレージノード候補の数（例えば、最小、最大、デフォルト、または他の任意の数）および／もしくはタイプを定義する１つ以上のルールもしくはパラメータ、クライアント１０４からの命令もしくは要求、データのフォールトトレランスもしくは冗長性の要件、および／もしくは任意の他の基準もしくはスキームなどの１つ以上の要因に基づく要求２０２の特定のストレージノード候補を選択することができる。場合によっては、メタデータサーバ１１２は、単に数および／または特定のストレージノードプールおよび／またはストレージノード候補をランダムに選択することができる。
【００７３】
メタデータサーバ１１２は、メタデータサーバ１１２によって選択された、または特定されたストレージノードプールおよびストレージノード候補を特定するＳＲリスト２０４で要求２０２に応答する。この例では、ＳＲリスト２０４は、ストレージノード候補１３２、１３４、１３６に対応するセグメントを含む一次ストレージノードプール（１３０）、ストレージノード候補１４２、１４４、１４６に対応するセグメントを含む二次ストレージノードプール１４０、およびストレージノード候補１５２、１５４、１５６に対応するセグメントを含む二次ストレージノードプール１５０を特定するリスト５０２のセットを含む。ＳＲリスト２０４で応答する代わりに、場合によっては、メタデータサーバ１１２は、メタデータサーバ１１２によって選択された、または特定されたストレージノードプールおよびストレージノード候補を特定するメッセージで応答することができ、これらは、クライアント１０４またはメタデータサーバ１１２からのメッセージ内で特定されたストレージノードプールおよびストレージノード候補に基づいてＳＲリスト２０４を含むＳＲＨを作成するための別のデバイス（例えば、ＳＲ対応ルータまたはノード）によって使用され得る。
【００７４】
次に、クライアント１０４は、一次ストレージノードプール（１３０）内のストレージノード候補１３２、１３４、１３６に要求２０６を送信することができる。要求２０６は、ＳＲリスト２０４を含むＳＲＨに基づいて、一次ストレージノードプール（１３０）内のストレージノード候補１３２、１３４、１３６に送ることができる。ＳＲリスト２０４は、前述のように、一次ストレージノードプール（１３０）内のストレージノード候補１３２、１３４、１３６を介してパケットを誘導することができる。
【００７５】
場合によっては、クライアント１０４はまた、リスト５０２のセットを使用して、データの複製を格納するために、要求２０６を受け入れる一次ストレージノードプール（１３０）内のストレージノードに、ストレージノード候補１４２、１４４、１４６を含むストレージノードプール１４０、およびストレージノード候補１５２、１５４、１５６を含むストレージノードプール１５０が選択されているか、または使用される予定であることを通知することもできる。例えば、クライアント１０４は、要求２０６内に、リスト５０２のセット、または複製を格納するために選択されたリスト５０２のセットからのストレージノードプールおよびストレージノード候補の指示を含むことができる。
【００７６】
しかしながら、いくつかの例示的な実装形態では、メタデータサーバ１１２は、クライアント１０４に二次ストレージノードプール（例えば、１４０および１５０）のリストもしくは情報を提供しないか、またはストレージノードプール１４０および１５０がまた、複製を格納するために選択されたクライアント１０４に特定しない場合があることに留意されたい。例えば、場合によっては、メタデータサーバ１１２は、リスト５０２のセットをクライアント１０４、または二次ストレージノードプール（例えば、１４０および１５０）に対応するリスト５０２のセット内のリストに提供しないことがある。代わりに、メタデータサーバ１１２は、ストレージノードプール１３０およびストレージノードプール１３０内のストレージノード候補（例えば、１３２、１３４、１３６）を特定するリストをクライアント１０４に提供してもよい。ここで、ＳＲリスト２０４は、ストレージノードプール１３０内のストレージノード候補１３２、１３４、１３６に対応するセグメントの１つのリストのみを含み得る。そのような例示的な実装形態では、メタデータサーバ１１２は、代わりに、二次ストレージノードプール（例えば、１４０および１５０）のリストを、ストレージノードプール１３０内のストレージノードに提供することができ、ストレージノードプール１３０は、クライアント１０４からの要求２０６を最終的に受け入れ、次に、ストレージノードは、二次ストレージノードプール（例えば、１４０および１５０）からのある数のストレージノード候補内に複製を格納するために、それらを使用できる。したがって、複製の格納を、最終的にクライアント１０４からの要求２０６を受け入れるストレージノードプール１３０内のストレージノードにオフロードするとき、二次ストレージノードプール（例えば、１４０および１５０）のＳＲリストを、（例えば、要求２０６などのメッセージ内の）クライアント１０４によって、またはメタデータサーバ１１２自体によってのいずれかで、そのストレージノードに提供することができる。
【００７７】
クライアント１０４が要求２０６を送信した後、要求２０６は、ＳＲリスト２０４に基づくセグメントルーティングを使用して送られる。ストレージノード候補１３２は、ＳＲリスト２０４の第１のセグメントであるため、要求２０６を受信するストレージノードプール１３０内の第１のストレージノード候補となる。要求２０６を受信すると、ストレージノード候補１３２は、その操作条件（例えば、帯域幅、負荷、容量、リソースの可用性、ステータスなど）に基づいて、要求２０６を受け入れるか、または拒否するかを判定することができる。この例では、ストレージノード候補１３２は、要求２０６を拒否する。ストレージノード候補１３２は、例えば、過負荷である、要求２０６を処理するための帯域幅または容量が制限されている、他の操作もしくは要求の処理でビジーである、要求２０６に関連付けられたデータを格納するための特定のパフォーマンスもしくは他の要件を満たすことができない、かつ／または要求２０６に関連付けられたデータを格納するためのパフォーマンスもしくは容量に影響を与える可能性のある任意の他の理由もしくは条件ために、要求２０６を拒否することができる。
【００７８】
要求２０６を拒否した後、ストレージノード候補１３２は、要求２０６をＳＲリスト２０４内の次のセグメント（この例ではストレージノード候補１３４）に転送する。ストレージノード候補１３４は、同様に、要求２０６を受け入れるか、または拒否するかを判定することができる。この例では、ストレージノード候補１３４は、要求２０６を受け入れる。ストレージノード候補１３４は、その操作条件に基づいて要求２０６を受け入れることができる。例えば、ストレージノード候補１３４は、ストレージノード候補１３４が十分な（例えば、閾値内、負荷、またはパフォーマンス要件内など）容量、帯域幅、リソース可用性を有するか、または他の方法で、制限された遅延で、もしくは閾値パフォーマンス内で、もしくは１つ以上の特定の要件（例えば、ＱｏＳ要件、優先度、設定など）要求２０６を処理できるという判定に基づいて、要求２０６を受け入れることができる。ストレージノード候補１３４は要求２０６を受け入れたので、ＳＲリスト２０４内の次のセグメント（この例ではストレージノード候補１３６）に要求２０６を転送する必要はない。
【００７９】
ストレージノード候補１３４は要求２０６を受け入れると、ストレージノード候補１３４が要求２０６を受け入れたことを示す応答をクライアント１０４に送信することができる。クライアント１０４およびストレージノード候補１３４は、ストレージノード候補１３４にデータを格納するための接続を確立することができる。要求２０６を受け入れると、ストレージノード候補１３４はまた、データの複製を二次ストレージノードプール（１４０および１５０）内に格納するためのプロセスを開始することができる。
【００８０】
データの複製を二次ストレージノードプール（１４０および１５０）に格納するために、ストレージノード候補１３４は、複製要求５０４をストレージノードプール１４０に、複製要求５０６をストレージノードプール１５０に送信する。複製要求５０４は、ストレージノードプール１４０内のストレージノード候補１４２、１４４、１４６を特定するＳＲリストを有するＳＲＨを含むことができる。このＳＲリストは、前述のように、セグメントルーティングを使用して、ストレージノード候補１４２、１４４、１４６を介して複製要求５０４を誘導するために使用することができる。同様に、複製要求５０６は、ストレージノードプール１５０内のストレージノード候補１５２、１５４、１５６を特定するＳＲリストを有するＳＲＨを含むことができ、これは、セグメントルーティングを使用して、ストレージノード候補１５２、１５４、１５６を介して複製要求５０６を誘導するために使用することができる。
【００８１】
ストレージノード候補１３４が複製要求５０４を送信すると、複製要求は、複製要求５０４に関連付けられたＳＲリスト内の第１のセグメントに送られる。ストレージノード候補１４２は、複製要求５０４に関連付けられたＳＲリストの第１のセグメントであるため、複製要求５０４を受信するストレージノードプール１４０内の第１のストレージノード候補となる。複製要求５０４を受信すると、ストレージノード候補１４２は、その操作条件（例えば、帯域幅、負荷、容量、リソースの可用性、ステータスなど）に基づいて、複製要求５０４を受け入れるか、または拒否するかを判定することができる。この例では、ストレージノード候補１４２は、（例えば、低帯域幅、高負荷、不十分な容量、リソースの可用性の欠如、特定のステータスなどのため）その操作条件に基づいて複製要求５０４を拒否する。複製要求５０４を拒否した後、ストレージノード候補１４２は、複製要求５０４をＳＲリスト内の次のセグメント（この例ではストレージノード候補１４４）に転送する。ストレージノード候補１４４は、同様に、その操作条件に基づいて、複製要求５０４を受け入れるか、または拒否するかを判定することができる。この例では、ストレージノード候補１４４は、複製要求５０４を受け入れる。
【００８２】
場合によっては、ストレージノード候補１４４が複製要求５０４を受け入れたので、ＳＲリスト内の次のセグメント（この例ではストレージノード候補１４６）に複製要求５０４を転送しない場合がある。しかしながら、他の場合において、ストレージノード候補１４４は、ストレージノードプール１４０内に追加の複製を格納することを試みるために、複製要求５０４のコピーを依然としてＳＲリスト内の次のセグメント（例えば、ストレージノード候補１４６）に転送してもよい。例えば、複製要求５０４は、２つの複製がストレージノードプール１４０に格納されるべきであることを示し得る。したがって、ストレージノード候補１４４は、別の複製をストレージノードプール１４０に格納する必要があると判定することができる。例えば、ストレージノード候補１４４は、（例えば、ストレージノード候補１３２からの複製要求５０４などのメッセージ内の情報に基づいて、ストレージノード候補１４４による、ストレージノード候補１３２および／またはストレージノード候補１３４へのクエリに基づいて）それが、複製を格納することを受け入れたストレージノードプール１４０内の唯一のストレージノードであり、第２の複製が、ストレージノードプール１４０内の別のストレージノードに格納されるべきであると判定することができる。
【００８３】
場合によっては、ストレージノード候補１４４は複製要求５０４を受け入れると、ストレージノード候補１４４が複製要求５０４を受け入れたことを示す応答をストレージノード候補１３４に送信する。ストレージノード候補１３４およびストレージノード候補１４４は、ストレージノード候補１４４に複製を格納するための接続を確立することができる。
【００８４】
さらに、ストレージノード候補１３４が複製要求５０６をストレージノードプール１５０に送信すると、複製要求５０６は、複製要求５０６に関連付けられたＳＲリスト内の第１のセグメントに送られる。ストレージノード候補１５２は、複製要求５０６に関連付けられたＳＲリストの第１のセグメントであるため、複製要求５０６を受信するストレージノードプール１５０内の第１のストレージノード候補となる。複製要求５０６を受信すると、ストレージノード候補１５２は、その操作条件（例えば、帯域幅、負荷、容量、リソースの可用性、ステータスなど）に基づいて、複製要求５０６を受け入れるか、または拒否するかを判定することができる。この例では、ストレージノード候補１５２は、複製要求５０６を拒否する。複製要求５０６を拒否した後、ストレージノード候補１５２は、複製要求５０６をＳＲリスト内の次のセグメント（この例ではストレージノード候補１５４）に転送する。ストレージノード候補１５４は、同様に、その操作条件に基づいて、複製要求５０６を受け入れるか、または拒否するかを判定することができる。この例では、ストレージノード候補１５４は、複製要求５０６を拒否し、したがって、複製要求５０６をＳＲリスト内の次のセグメント（この例ではストレージノード候補１５６）に転送する。
【００８５】
次に、ストレージノード候補１５６は、複製要求５０６を受信し、その操作条件に基づいて、複製要求５０６を受け入れるか、または拒否するかを判定する。この例では、ストレージノード候補１５６は、複製要求５０６を受け入れる。場合によっては、要求のＳＲリスト内の最後のセグメント（例えば、複製要求５０６）は要求を受け入れるように強制され得る。したがって、ストレージノード候補１５６は、複製要求５０６に関連付けられたＳＲリスト内の最後のセグメントであるため、そのような実装形態では、複製要求５０６を受け入れるように強制され得る。ここで、ストレージノード候補１５６は、その操作条件に関係なく、複製要求５０６を受け入れることができる。
【００８６】
場合によっては、ストレージノード候補１５６は複製要求５０６を受け入れると、ストレージノード候補１５６が複製要求５０６を受け入れたことを示す応答をストレージノード候補１３４に送信する。ストレージノード候補１３４およびストレージノード候補１５６は、ストレージノード候補１５６に複製を格納するための接続を確立することができる。
【００８７】
フロー５００が完了すると、クライアント１０４からの要求２０６に関連付けられたデータは、ストレージノードプール１３０内のストレージノード候補１３４に格納され、データの複製は、ストレージノード１４０内のストレージノード候補１４４およびストレージノードプール１５０内のストレージノード候補１５６に格納される。ＳＲリストおよびセグメントルーティングを使用してデータおよび複製を格納することによって、および各ストレージノード候補がその操作条件に基づいてストレージ操作をローカルで受け入れるか、または拒否することを可能にすることで、この機構は、分散ストレージ環境１０２内でのデータの格納および複製の待ち時間を短縮し、分散ストレージ環境１０２内でのリソースの使用を最大化し、ストレージ操作および要求のパフォーマンスおよび処理を最適化することができる。
【００８８】
図５Ｂは、ＳＲスプレーポリシー５４４を使用して分散ストレージ環境１０２内にデータを格納するための例示的なフロー５４０の図を示す。この例では、ＳＲスプレーポリシー５４４は、クライアント１０４によって使用されて、ストレージノードプール１３０、１４０、１５０内の複数のストレージノード（例えば、１３２、１３４、１３６、１４２、１４４、１４６、１５２、１５４、１５６）内にデータのコピーを格納するための、ストレージノードプール１３０、１４０、１５０内の複数のストレージノードとの並行接続を確立する。しかしながら、他の例では、ＳＲスプレーポリシー５４４などのＳＲスプレーポリシーは、代わりに、クライアント１０４からのデータを格納する要求を受け入れるストレージノードによって実装されて、クライアント１０４からのデータの複製を格納するための複数のストレージノードとの並行接続を確立することができる。ストレージノードによってＳＲスプレーポリシーを使用して並行接続を確立し、複製を格納するためのフローは、以下に説明するように、クライアント１０４によって実装されたフロー５４０と同様であり得る。
【００８９】
図示のように、クライアント１０４は、要求２０２をメタデータサーバ１１２に送信し、クライアント１０４が分散ストレージ環境１０２にデータを格納したいことを示す。場合によっては、要求２０２は、分散ストレージ環境１０２に格納されるデータのコピーのある数を特定する複製係数を含むことができる。メタデータサーバ１１２は、要求２０２を受信し、ストレージノード候補１３２、１３４、１３６を有するストレージノードプール１３０、ストレージノード候補１４２、１４４、１４６を有するストレージノードプール１４０、および要求２０２のストレージノード候補１５２、１５４、１５６を有するストレージノードプール１５０を選択する。
【００９０】
メタデータサーバ１１２は、メタデータサーバ１１２によって選択された、または特定されたストレージノードプールおよびストレージノード候補を特定するＳＲリスト５４２で要求２０２に応答する。この例では、ＳＲリスト５４２は、ＳＲスプレーポリシー５４４ならびにＳＲリスト５４６、５４８、および５５０を含む。ＳＲスプレーポリシー５４４は、複数のストレージノードとの並行接続を確立し、それらのストレージノードで要求されたストレージ操作を実施するために、ストレージ操作要求の複製コピーをＳＲリスト５４６、５４８、および５５０に送るための命令を提供することができる。
【００９１】
ＳＲリスト５４６、５４８、および５５０は、ストレージノードプール１３０内のストレージノード候補１３２、１３４、１３６に対応するセグメントを含む、ストレージノードプール１３０、ストレージノードプール１４０内のストレージノード候補１４２、１４４、１４６に対応するセグメントを含む、ストレージノードプール１４０、およびストレージノードプール１５０内のストレージノード候補１５２、１５４、１５６に対応するセグメントを含む、ストレージノードプール１５０をそれぞれ特定することができる。ＳＲリスト５４６、５４８、および５５０で応答する代わりに、場合によっては、メタデータサーバ１１２は、メタデータサーバ１１２によって選択された、または特定されたストレージノードプールおよびストレージノード候補を特定するメッセージで応答することができ、これらは、クライアント１０４またはＳＲスプレーポリシー５４４のためのＳＲリスト５４６、５４８、および５５０を含むＳＲＨを作成するための別のデバイス（例えば、ＳＲ対応ルータまたはノード）によって使用され得る。
【００９２】
クライアント１０４は、メタデータサーバ１１２から応答を受信すると、要求５５２Ａ、５５２Ｂ、５５２Ｃをストレージノードプール１３０、１４０、および１５０に送信することができる。例えば、クライアント１０４は、ＳＲスプレーポリシー５４４に基づいて複製することができる要求パケットを送信して、ストレージノードプール１３０、１４０、および１５０に対する要求５５２Ａ、５５２Ｂ、５５２Ｃを形成することができる。次に、要求５５２Ａ、５５２Ｂ、５５２Ｃは、それぞれのＳＲリスト（例えば、ＳＲリスト５４６、５４８、５５０）に基づいて、ストレージノードプール１３０、１４０、および１５０に送ることができる。例えば、要求５５２Ａは、ＳＲリスト５４６を含むＳＲＨに基づいてストレージノードプール１３０に送ることができ、要求５５２Ｂは、ＳＲリスト５４８を含むＳＲＨに基づいてストレージノードプール１４０に送ることができ、要求５５２Ｃは、ＳＲリスト５５０を含むＳＲＨに基づいてストレージノードプール１５０に送ることができる。
【００９３】
要求５５２Ａは、ＳＲリスト５４６内の第１のセグメントであるストレージノードプール１３０内のストレージノード候補１３２によって最初に受信される。次に、ストレージノード候補１３２は、その操作条件に基づいて、要求５５２Ａを受け入れるか、または拒否するかを判定することができる。ストレージノード候補１３２は要求５５２Ａを拒否する場合、それをＳＲリスト５４６内の次のセグメント（この場合はストレージノード候補１３４）に転送する。次に、ストレージノード候補１３４は、要求５５２Ａを受け入れるか、または拒否するかを判定する。ストレージノード候補１３４は要求５５２Ａを拒否する場合、それをＳＲリスト５４６内の次のセグメント（この場合はストレージノード候補１３６）に転送する。ストレージノード候補１３６は、ＳＲリスト５４６内の最後のセグメントであるため、場合によっては、要求５５２Ａを受け入れるように強制され得る。
【００９４】
要求５５２Ｂは、ＳＲリスト５４８の第１のセグメントであるストレージノードプール１４０内のストレージノード候補１４２によって最初に受信される。次に、ストレージノード候補１４２は、その操作条件に基づいて、要求５５２Ｂを受け入れるか、または拒否するかを判定することができる。ストレージノード候補１４２は要求５５２Ｂを拒否する場合、それをＳＲリスト５４８内の次のセグメント（この場合はストレージノード候補１４４）に転送する。次に、ストレージノード候補１４４は、要求５５２Ｂを受け入れるか、または拒否するかを判定する。ストレージノード候補１４４は要求５５２Ｂを拒否する場合、それをＳＲリスト５４８内の次のセグメント（この場合はストレージノード候補１４６）に転送する。ストレージノード候補１４６は、ＳＲリスト５４８の最後のセグメントであるため、場合によっては、要求５５２Ｂを受け入れるように強制され得る。
【００９５】
要求５５２Ｃは、ＳＲリスト５５０の第１のセグメントであるストレージノードプール１５０内のストレージノード候補１５２によって最初に受信される。次に、ストレージノード候補１５２は、その操作条件に基づいて、要求５５２Ｃを受け入れるか、または拒否するかを判定することができる。ストレージノード候補１５２は要求５５２Ｃを拒否する場合、それをＳＲリスト５５０内の次のセグメント（この場合はストレージノード候補１５４）に転送する。次に、ストレージノード候補１５４は、要求５５２Ｃを受け入れるか、または拒否するかを判定する。ストレージノード候補１５４は要求５５２Ｃを拒否する場合、それをＳＲリスト５５０内の次のセグメント（この場合はストレージノード候補１５６）に転送する。ストレージノード候補１５６は、ＳＲリスト５５０内の最後のセグメントであるため、場合によっては、要求５５２Ｃを受け入れるように強制され得る。
【００９６】
上記の例では、要求５５２Ａ内のＳＲリスト５４６、要求５５２Ｂ内のＳＲリスト５４８、および要求５５２Ｃ内のＳＲリスト５５０は、各要求に関連付けられたそれぞれのストレージノードプール（例えば、１３０、１４０、１５０）内の各ストレージノードに対応するそれぞれのセグメントを含む。しかしながら、他の実装形態では、要求内のＳＲリスト（例えば、要求５５２Ａ内のＳＲリスト５４６、要求５５２Ｂ内のＳＲリスト５４８、および／または要求５５２Ｃ内のＳＲリスト５５０）は、マルチキャストアドレスまたは要求に関連付けられた特定のストレージノードプール内の複数（またはすべて）のストレージノード候補（例えば、ストレージノードプール１３０内のストレージノード候補１３２、１３４、１３６）に関連付けられたプレフィックスを含むことができる。
【００９７】
例えば、場合によっては、要求５５２ＡのＳＲリスト５４６は、ストレージノードプール１３０および／またはストレージノードプール１３０内のストレージノード候補１３２、１３４、１３６に関連付けられたマルチキャストアドレスまたはＩＰｖ６プレフィックスに対応する最後のセグメントに要求を誘導するためのＳＲ対応ノードまたはルータに対応する１つ以上のセグメントを含むことができる。このようにして、要求５５２ＡがＳＲリスト５４６内の最後から２番目のセグメントに到達し、そのセグメントに対応するＳＲ対応ノードまたはルータが要求を最後のセグメントに転送すると、要求５５２Ａは、マルチキャストアドレスまたはＩＰｖ６プレフィックスに関連付けられたすべてのストレージノード（例えば、ストレージノードプール１３０内のストレージノード候補１３２、１３４、１３６）に送信される。次に、ストレージノード（例えば、ストレージノードプール１３０内のストレージノード候補１３２、１３４、１３６）は、要求５５２Ａを受信することができ、各ストレージノードは、要求を受け入れるか、または拒否するかを判定することができる。場合によっては、複数のストレージノードが要求を受け入れる場合、クライアント１０４は、それらのストレージノードへの接続を確立し、それらのストレージノードにデータのコピーを格納することができる。
【００９８】
図６Ａは、コンテンツに割り当てられたアドレスに対応するＳＲセグメントを使用して、分散ストレージ環境１０２内のコンテンツにデータ要求を直接送るための例示的なフロー６００の図を示す。この例では、コンテンツアイテム６１０のコピーは、ストレージノード候補１３２、１３４、および１３４に格納され、各コピーは、特定のネットワークアドレスを割り振るか、または割り当てている。例えば、ストレージノード候補１３２に格納されたコンテンツアイテム６１０のコピーはネットワークアドレス６０２を有し、ストレージノード候補１３４に格納されたコンテンツアイテム６１０のコピーはネットワークアドレス６０４を有し、ストレージノード候補１３６に格納されたコンテンツアイテム６１０のコピーはネットワークアドレス６０６を有する。ネットワークアドレス６０２、６０４、６０６は、例えば、ＩＰｖ６アドレスであり得る。ストレージノード候補１３２、１３４、および１３４は、同様に対応するネットワークアドレス（例えば、６１４、６２０、６２６）を有することができる他のコンテンツ（例えば、６１２、６１８、６２４）を格納することもできる。
【００９９】
クライアント１０４からの要求２０６内のＳＲＨ３０６は、要求２０６のセグメントのリストを表すネットワークアドレス６０２、６０４、６０６を含むことができる。ストレージノード候補１３２のコンテンツアイテム６１０に対応するネットワークアドレス６０２は、第１のセグメントを表すことができ、ストレージノード候補１３４のコンテンツアイテム６１０に対応するネットワークアドレス６０４は、第２のセグメントを表すことができ、ストレージノード候補１３６のコンテンツアイテム６１０に対応するネットワークアドレス６０６は、最後のセグメントを表すことができる。要求２０６のＩＰｖ６ヘッダ３０４内の宛先アドレス３０８は、ＳＲＨ３０６内の第１のセグメント（この例ではネットワークアドレス６０２）に設定することができる。
【０１００】
ＳＲＨ３０６内のセグメントのリストに基づいて、要求２０６は、最初に、ストレージノード候補１３２上のコンテンツアイテム６１０に対応するネットワークアドレス６０２に送られる。この例では、ストレージノード候補１３２は、それに割り振られた、または割り当てられたプレフィックス６０８を有し、これを使用して、ネットワークトラフィックをストレージノード候補１３２に送ることができる。ネットワークアドレス６０２は、プレフィックス６０８内、またはプレフィックス６０８内のＩＰアドレスの範囲内にあり得る。したがって、ネットワークアドレス６０２に送信された要求２０６などの通信は、ストレージノード候補１３２に送られ、ストレージノード候補１３２が、ストレージノード候補１３２上のコンテンツアイテム６１０のネットワークアドレス６０２にアドレス指定された通信を受信し、かつ処理することを可能にする。したがって、要求２０６がＳＲＨ３０６に基づいてネットワークアドレス６０２に転送されるとき、ストレージノード候補１３２は、要求２０６を受信し、ストレージノード候補１３２の操作条件に基づいて要求２０６を受け入れるか、または拒否するかを判定することができる。
【０１０１】
この例では、ストレージノード候補１３２は、要求２０６を拒否し、したがって、それをＳＲＨ３０６内の次のセグメント（この例では、ストレージノード候補１３４上のコンテンツアイテム６１０に対応するネットワークアドレス６０４である）に転送する。ストレージノード候補１３４は、プレフィックス６１６を割り当てられるか、または割り振られる。ネットワークアドレス６０４は、プレフィックス６１６内、またはプレフィックス６１６内のＩＰアドレスの範囲内にあり得る。したがって、ネットワークアドレス６０４に送信された要求２０６などの通信は、ストレージノード候補１３４に送られ、ストレージノード候補１３４が、ストレージノード候補１３４上のコンテンツアイテム６１０のネットワークアドレス６０４にアドレス指定された通信を受信し、かつ処理することを可能にする。したがって、要求２０６がストレージノード候補１３２によってネットワークアドレス６０４に転送されるとき、ストレージノード候補１３４は、要求２０６を受信し、ストレージノード候補１３４の操作条件に基づいて要求２０６を受け入れるか、または拒否するかを判定することができる。
【０１０２】
この例では、ストレージノード候補１３４は、要求２０６を拒否し、したがって、それをＳＲＨ３０６内の最後のセグメント（この例では、ストレージノード候補１３６上のコンテンツアイテム６１０に対応するネットワークアドレス６０６である）に転送する。ストレージノード候補１３６は、プレフィックス６２２を割り当てられるか、または割り振られる。ネットワークアドレス６０６は、プレフィックス６２２内、またはプレフィックス６２２内のＩＰアドレスの範囲内にあり得る。したがって、ネットワークアドレス６０６に送信された要求２０６などの通信は、ストレージノード候補１３６に送られ、ストレージノード候補１３６が、ストレージノード候補１３６上のコンテンツアイテム６１０のネットワークアドレス６０６にアドレス指定された通信を受信し、かつ処理することを可能にする。したがって、要求２０６がストレージノード候補１３４によってネットワークアドレス６０６に転送されるとき、ストレージノード候補１３６は、要求２０６を受信し、ストレージノード候補１３６の操作条件に基づいて要求２０６を受け入れるか、または拒否するかを判定することができる。場合によっては、ネットワークアドレス６０６がＳＲＨ３０６内の最後のセグメントであるため、ストレージノード候補１３６は、要求２０６を受け入れるように強制され得る。
【０１０３】
図６Ｂは、コンテンツに割り当てられたアドレスに対応するＳＲセグメントを使用して、データ要求をコンテンツに直接送るための別の例示的なフロー６４０の図を示す。この例では、ストレージノード候補１３２、１３４、および１３６は、ストレージノードプール１３０にグループ化され、ストレージノードプール１３０には、プレフィックス６４２が割り振られる。さらに、要求２０６は、ストレージノードプール１３０内のストレージノード候補１３２、１３４、１３６上のコンテンツアイテム６１０に対応するネットワークアドレス６０２、６０４、６０６にアドレス指定される。ストレージノード候補１３２上のコンテンツアイテム６１０に対応するネットワークアドレス６０２は、要求２０６のＳＲＨ３０６上のセグメントのリスト内の第１のセグメントである。したがって、要求２０６は、最初に、ストレージノード候補１３２（例えば、ネットワークアドレス６０２）上のコンテンツアイテム６１０に送られる。
【０１０４】
ネットワークアドレス６０２は、プレフィックス６４２内、またはプレフィックス６４２内のＩＰアドレスの範囲内にあり得る。場合によっては、ストレージノード候補１３２、１３４、および１３６はまた、プレフィックス６４２と重複するプレフィックスを割り振られるか、または割り当てられ得る。したがって、プレフィックス６４２は、例えばスーパーネットを形成できる。ネットワークアドレス６０２に送信された要求２０６などの通信は、結果的に、ストレージノード候補１３２に送られ、ストレージノード候補１３２が、ストレージノード候補１３２上のコンテンツアイテム６１０のネットワークアドレス６０２にアドレス指定された通信を受信し、かつ処理することを可能にする。したがって、要求２０６がネットワークアドレス６０２に転送されるとき、ストレージノード候補１３２は、要求２０６を受信し、ストレージノード候補１３２の操作条件に基づいて要求２０６を受け入れるか、または拒否するかを判定することができる。
【０１０５】
この例では、ストレージノード候補１３２は、要求２０６を拒否し、したがって、それをＳＲＨ３０６内の次のセグメント（この例では、ストレージノード候補１３４上のコンテンツアイテム６１０に対応するネットワークアドレス６０４である）に転送する。ストレージノード候補１３４は、プレフィックス６１６を割り当てられるか、または割り振られる。ネットワークアドレス６０４は、プレフィックス６４２内、またはプレフィックス６４２内のＩＰアドレスの範囲内にあり得る。したがって、ネットワークアドレス６０４に送信された要求２０６は、ストレージノード候補１３４に送られ得、ストレージノード候補１３４が、ネットワークアドレス６０４に送信された要求２０６を受信し、かつ処理することを可能にする。したがって、要求２０６がストレージノード候補１３２によってネットワークアドレス６０４に転送されるとき、ストレージノード候補１３４は、要求２０６を受信し、ストレージノード候補１３４の操作条件に基づいて要求２０６を受け入れるか、または拒否するかを判定することができる。
【０１０６】
この例では、ストレージノード候補１３４は、要求２０６を拒否し、したがって、それをＳＲＨ３０６内の最後のセグメント（この例では、ストレージノード候補１３６上のコンテンツアイテム６１０に対応するネットワークアドレス６０６である）に転送する。ネットワークアドレス６０６は、プレフィックス６４２内、またはプレフィックス６４２内のＩＰアドレスの範囲内にあり得る。したがって、ネットワークアドレス６０６に送信された要求２０６は、ストレージノード候補１３６に送られ、ストレージノード候補１３６が、要求２０６を受信し、かつ処理することを可能にする。したがって、要求２０６がストレージノード候補１３４によってネットワークアドレス６０６に転送されるとき、ストレージノード候補１３６は、要求２０６を受信し、ストレージノード候補１３６の操作条件に基づいて要求２０６を受け入れるか、または拒否するかを判定することができる。場合によっては、ネットワークアドレス６０６が要求２０６のＳＲＨ３０６内の最後のセグメントであるため、ストレージノード候補１３６は、要求２０６を受け入れるように強制され得る。
【０１０７】
図７は、セグメントルーティングを使用して、メタデータサーバプール１１０内のメタデータサーバ１１２、１１４、１１６間で要求２０２を負荷分散するためのフロー７００を示す。この例では、クライアント１０４は、要求２０２をメタデータサーバプール１１０に送信する。要求２０２は、メタデータサーバプール１１０内のメタデータサーバ１１２、１１４、１１６に対応するセグメントを特定するＳＲリストを含むことができる。
【０１０８】
要求２０２は、要求２０２内のＳＲリストの第１のセグメント（この例ではメタデータサーバ１１２）に送られ、受信される。メタデータサーバ１１２は、要求２０２を受信し、その操作条件に基づいて要求２０２を受け入れるか、または拒否するかを判定する。この例では、メタデータサーバ１１２は、要求２０２を拒否し、したがって、それをＳＲリスト内の次のセグメント（この例ではメタデータサーバ１１４）に転送する。
【０１０９】
メタデータサーバ１１４は、要求２０２を受信し、同様に、要求２０２を受け入れるか、または拒否するかを判定する。この例では、メタデータサーバ１１４は、要求２０２を拒否し、それをＳＲリスト内の次のセグメント（この例ではメタデータサーバ１１６）に転送する。メタデータサーバ１１６は、ＳＲリストの最後のセグメントであり、要求２０２を受け入れるように強制され得る。したがって、メタデータサーバ１１６は、要求２０２を受け入れ、要求２０２に応答してＳＲリスト２０４をクライアント１０４に送信する。前述のように、ＳＲリスト２０４は、１つ以上のストレージノードプールおよび／またはストレージノード候補を特定でき、クライアント１０４は、これらを使用して、本明細書で説明するストレージ操作要求（例えば、要求２０６）を送信することができる。
【０１１０】
例示的なシステムおよび概念を説明したので、本開示は、次に、図８Ａ〜図８Ｃに示される例示的な方法８００、８２０、８４０に移る。明確にするために、方法８００、８２０、８４０のステップは、図１に示されたクライアント１０４、１０６、１０８および分散ストレージ環境１０２を参照して説明される。
【０１１１】
図８Ａは、セグメントルーティングおよび負荷分散を使用して分散ストレージ環境１０２内にデータを格納するための例示的な方法８００を示す。ステップ８０２で、メタデータサーバ１１２は、クライアント（例えば、１０４、１０６、１０８）から、分散ストレージ環境１０２にデータを格納する意図を特定するメッセージ（例えば、要求２０２）を受信することができる。ステップ８０４で、メタデータサーバ１１２は、クライアント（例えば、１０４、１０６、１０８）に、データを格納するための複数のストレージノード候補（例えば、１３２、１３４、１３６、１４２、１４４、１４６、１５２、１５４、１５６）を特定するＳＲリスト（例えば、ＳＲリスト２０４）を送信することができる。例えば、場合によっては、メタデータサーバ１１２は、分散ストレージ環境１０２にデータを格納することを要求するクライアントからのメッセージを受信することができる。クライアントからのメッセージに応答して、メタデータサーバ１１２は、分散ストレージ環境１０２にデータを格納するためのストレージノード候補を選択するか、または特定し、ストレージノード候補を特定するＳＲリストをクライアントに送信することができる。クライアントは、ＳＲリストを使用して、セグメントルーティング（ＳＲｖ６など）を使用して、ストレージノード候補を介してストレージ要求を送るか、または誘導できる。
【０１１２】
ステップ８０６で、本方法は、ストレージ要求に関連付けられたセグメントルーティングヘッダ（ＳＲＨ）に基づいて、ＳＲリスト（例えば、ＳＲリスト２０４）によって定義されたパスを通ってクライアントによって送信されたストレージ要求（例えば、要求２０６）を誘導すること、または送ることを含み得る。例えば、クライアントは、ストレージノード候補を特定するＳＲリストを有するＳＲＨを含むストレージ要求パケットを送信することができる。ＳＲＨは、ストレージノード候補の中のストレージノードがストレージ要求を受け入れるまで、ストレージノード候補を含むパスを通ってストレージ要求パケットを誘導することができる。ストレージ要求パケットを受信する各ＳＲ対応ノードまたはルータは、ＳＲリスト内の次のセグメントにパケットを転送することができる。
【０１１３】
例えば、ストレージ要求パケットは、ＳＲリスト内の第１のストレージノード候補に送ることができ、これは、ＳＲリスト内の第１のセグメント、および／または他のストレージノード候補に対応するセグメントに関連するＳＲリストの第１のセグメントを参照する。ストレージ要求パケットを受信すると、第１のストレージノードはストレージ要求パケットからの要求を受け入れるか、または拒否するかを判定する。第１のストレージノードは、ローカルの操作条件（例えば、帯域幅、容量、負荷、ステータス、機能、リソースの可用性など）、要求のタイプ、要求に関連付けられたデータのタイプ、要求に関連付けられた設定または要件（ＱｏＳ要件、優先度など）などの１つ以上の要因に基づいて、要求を受け入れるか、または拒否するかを判定することができる。
【０１１４】
第１のストレージノードは要求を拒否した場合、ストレージ要求パケットをＳＲリスト内の次のセグメント（次のストレージノード候補）に転送する。同様に、次のストレージノード候補は、操作条件などの１つ以上の要因に基づいて、ストレージ要求を受け入れるか、または拒否するかを判定する。次のストレージノードは要求を拒否した場合、ストレージ要求パケットをＳＲリスト内の別のセグメント（別のストレージノード候補）に転送する。ストレージ要求パケットは、要求がストレージノード候補によって受け入れられるまで、ＳＲリスト内のストレージノード候補のパスをトラバースし続ける。各ストレージノード候補は、ローカルの操作条件（例えば、帯域幅、容量、負荷、ステータス、機能、リソースの可用性など）、要求のタイプ、要求に関連付けられたデータのタイプ、要求に関連付けられた設定または要件（例えば、ＱｏＳ要件、優先度など）などの１つ以上の要因に基づいて、ストレージ要求を受け入れるか、または拒否するかを判定できる。場合によっては、要求が受け入れられることなく最後のストレージノード候補（例えば、ＳＲリスト内の最後のセグメント）に到達した場合、最後のストレージノード候補は、要求が完全に拒否されるか、またはドロップされることを回避するために、要求を受け入れるように要求され得る。
【０１１５】
ステップ８０８で、ストレージノード（例えば、１３２、１３４、１３６、１４２、１４４、１４６、１５２、１５４、または１５６）が要求を受け入れるとき、ストレージノードは、クライアントに、ストレージノードがクライアントからの要求を受け入れたことを示す要求に対する応答（例えば、応答２１４）を送信できる。ストレージノードが要求を受け入れると、クライアントおよびストレージノードは接続を確立し、データをストレージノードに格納できる。ステップ８１０で、要求を受け入れたストレージノードは、次に、クライアントからのデータを格納することができる。前述のように、ストレージノードはストレージノードでの操作条件に基づいてストレージ要求を受け入れることができる。これは、要求がその特定の要求に適切な帯域幅および容量を有するストレージノードによって処理される可能性を高め、要求が例えば低帯域幅または過負荷状態で処理される可能性を低下させることによって、ストレージの待ち時間を短縮するのに役立ち得る。
【０１１６】
場合によって、メタデータサーバ１１２がステップ８０２でクライアントからメッセージを受信すると、メタデータサーバ１１２は、分散ストレージ環境１０２にデータを格納するための１つ以上のストレージノードプール（例えば、１３０、１４０、および／または１５０）を選択することができる。例えば、メタデータサーバ１１２は、データを格納するための一次ストレージノードプール（例えば、１３０）、および、データのある数の複製を格納するための１つ以上の二次ストレージノードプール（例えば、１４０および／または１５０）を選択することができる。一次ストレージノードプールは、例えば、前述のＳＲリスト内の複数のストレージノード候補を含むことができる。１つ以上の二次ストレージノードプールおよび／または１つ以上の二次ストレージノードプール内のある数のストレージノード候補は、格納されるデータのある数の複製に基づいて選択することができる。ある数の複製は、例えば、複製係数に基づいて判定することができる。複製係数は、データ用に格納するある数の複製を特定するか、または要求することができる。場合によっては、複製係数は、クライアントから受信されたメッセージ内で提供されるか、またはデータのタイプ、データの優先度、利用可能なリソース、フォールトトレランスもしくは冗長性ルール、デフォルトの複製ルール、最小および／もしくは最大の複製ルール、データのＱｏＳ要件などの１つ以上の基準に基づいてメタデータサーバ１１２によって判定することができる。
【０１１７】
いくつかの例では、メタデータサーバ１１２は、一次ストレージノードプールおよび１つ以上の二次ストレージノードプールに関連付けられた複数のＳＲリスト（例えば、５０２）を生成するか、または取得することができる。例えば、メタデータサーバ１１２は、一次ストレージノードプール（例えば、１３０）内のストレージノード候補を特定する第１のリスト、第１の二次ストレージノードプール（例えば、１４０）内のストレージノード候補を特定する第２のリスト、および、第２の二次ストレージノードプール（１５０など）内のストレージノード候補を特定する第３のリストを作成する。第２および第３のリストを使用して、第１および第２の二次ストレージノードプール（例えば、１４０および１５０）に複製を格納する要求を送ることができる。例えば、メタデータサーバ１１２は、第１および第２の二次ストレージノードプール（例えば、１４０および１５０）内のストレージノード候補を特定し、複製の格納に使用するためのストレージ要求を受け入れたストレージノードに第２および第３のリストを提供することができる。場合によっては、メタデータサーバ１１２は、第２および第３のリストをクライアントに提供することができ、クライアントは、（例えば、ストレージ要求自体を介して、または別個のメッセージものを介して）ストレージ要求を受け入れるストレージノードに第２および第３のリストを提供することができる。
【０１１８】
クライアントからの要求を受け入れたストレージノードは、第２および第３のリストに対応するセグメントを特定するＳＲＨで複製ストレージ要求（例えば、５０４および５０６）を送信することができる。複製ストレージ要求は、ＳＲＨに基づいて第１および第２の二次ストレージノードプールを介して送られ、前述のように各受信者ストレージノード候補によって処理される（例えば、受け入れられるか、または拒否される）。例えば、クライアントからの要求を受け入れたストレージノードは、第１の二次ストレージノードプール（例えば、１４０）に、第１の複製要求（例えば、複製要求５０４）を送信して、ある数の複製の第１の部分を、第１の二次ストレージノードプール内のストレージノード候補の１つ以上のに格納することができる。ストレージノードはまた、第２の二次ストレージノードプール（例えば、１５０）に、第２の複製要求（例えば、複製要求５０６）を送信して、ある数の複製の第２の部分を、第２の二次ストレージノードプール内のストレージノード候補のうつちの１つ以上のに格納することができる。
【０１１９】
第１の複製要求は、第１の二次ストレージノードプール（例えば、１４０）内のストレージノード候補を特定するＳＲリスト（例えば、第２のリスト）を有するＳＲＨを含むことができ、第２の複製要求は、第２の二次ストレージノードプール（例えば、１５０）内のストレージノード候補を特定するＳＲリスト（例えば、第３のリスト）を有するＳＲＨを含むことができる。第１の複製要求内のＳＲＨは、第１の二次ストレージノードプール内の１つ以上のストレージノード候補が要求を受け入れるまで、第１の要求が、ＳＲＨ内のＳＲリストを含むパス（すなわち、第１の二次ストレージノードプール内の各ストレージノード候補を通るパス）を介して送られることを引き起こし得る。同様に、第２の複製要求内のＳＲＨは、第２の二次ストレージノードプール内の１つ以上のストレージノード候補が要求を受け入れるまで、第２の複製要求が、ＳＲＨ内のＳＲリストを含むパス（すなわち、第２の二次ストレージノードプール内の各ストレージノード候補を通るパス）を介して送られることを引き起こし得る。
【０１２０】
ストレージノードは、第１の二次ストレージノードプール内の１つ以上のストレージノード候補からの第１の複製要求の受け入れ、および第２の二次ストレージノードプール内の１つ以上のストレージノード候補からの第２の複製要求の受け入れを受信することができる。例えば、ストレージノードは、第１および第２の複製要求を受け入れた第１および第２の二次ストレージノードプール内のそれらのストレージノード候補から第１および第２の複製要求の受け入れを受信することができる。ストレージノードは、第１および第２の複製要求を受け入れたストレージノードとの接続を確立し、複製の第１の部分を、第１の複製要求を受け入れた第１の二次ストレージノードプール内のそれらのストレージノードに、および複製の第２の部分を、第２の複製要求を受け入れた第２の二次ストレージノードプール内のそれらのストレージノードに格納できる。したがって、ストレージノードは、メタデータサーバ１１２によって選択されたストレージノード候補の第２および第３のリストを使用して、二次ストレージノードプール上のストレージノードとの接続を確立し、それらのストレージノードにある数の複製を格納することができる。
【０１２１】
他の例では、クライアントからの要求を受け入れたストレージノードは、ステップ８０６で説明するように、クライアントから受信した要求（例えば、要求２０６）に関連付けられた同じＳＲリスト（例えば、ＳＲリスト２０４）を使用して、他のストレージノードにデータを複製することができる。例えば、ストレージノードは複製係数を使用して、格納する複製の数を判定することができる。複製係数は、格納する複製のある数を示すことができる。複製係数は、ストレージノードに既知であり、別のデバイス（例えば、クライアントまたはメタデータサーバ）から受信され、または（例えば、ＳＲリスト内のアドレスまたはセグメント内でコーディングすることによって）ＳＲリスト内に明示的に示され得る。
【０１２２】
ストレージノードはクライアントからの要求を受け入れると、第１の複製を作成して格納することができる。次に、ストレージノードは、ＳＲリスト内の残りのセグメント（例えば、クライアントからの要求を受信していない、またはアクティブなセグメントではなかったストレージノードの後のＳＲリスト内のセグメント）を、ある数の複製を格納するためのストレージノード候補のリストとして使用することができる。ストレージノードは、前述のようにセグメントルーティングを使用して、ある数の複製を格納するためのストレージノード候補のリスト内の各ストレージノード候補（すなわち、リスト内の各セグメント）に複製要求を転送することができる。複製要求を受信する各ストレージノード候補は、本明細書において説明するように複製要求を受け入れるか、または拒否するかを判定し、そのストレージノードが複製要求を拒否する場合は、複製要求をリスト内の次のセグメントに転送することができる。
【０１２３】
複製係数は既知である（またはＳＲリスト内でコード化されている）ため、不要または求められない複製の作成を回避するために、複製が作成されたことを示す情報（例えば、クライアントからの要求を受け入れたストレージノードによって作成された複製）および／または複製係数は、ある数の複製を格納するために特定されたストレージノード候補のリスト内の任意のストレージノード候補（例えば、クライアントからの要求内のＳＲリストからの残りのセグメント）に渡すことができる。このようにして、ストレージノード候補が複製要求は受信すると、ある数の複製すべてがそれぞれのストレージノードに格納されているかどうかを判定することができ、格納されている場合、ストレージノードは複製要求を拒否して複製係数によって定義された複製の数を超えることを回避することができる。
【０１２４】
さらに、場合によっては、クライアントからの要求からのＳＲリスト内のストレージノード候補のいずれも、ＳＲリスト内に残っているセグメントの数が、複製係数によって定義された複製の数と等しくなる時間までにクライアントからの要求を受け入れない場合、それらのセグメントに対応するストレージノード候補（すなわち、ＳＲリスト内に残っているある数のセグメント）は、ある数の複製が複製係数で特定されたとおりに格納されるように、要求を受け入れるように強制され得る。同様に、場合によっては、ストレージノードがクライアントからの第１の要求を受け入れ、その後、他のストレージノードにある数の複製を格納するための複製ストレージ要求を送信すると、ある数の複製を格納するために特定されたストレージノード候補のリスト内の１つ以上のストレージノード候補（例えば、クライアントからの要求内のＳＲリストからの残りのセグメント）は、複製要求を受け入れるように強制され得、必要に応じて複製係数によって定義されたある数の複製を格納できる。例えば、複製ストレージ要求はＳＲリスト内の残りのセグメントを介して送られるため、ＳＲリスト内の残りのストレージノード候補の数（すなわち、ＳＲリスト内の残りのセグメント）が格納される残りの複製の数と等しい場合、複製係数が満たされるようにするために、ＳＲリスト内のある数の残りのストレージノード候補は、複製格納要求を受け入れるように強制され得る。
【０１２５】
場合によっては、分散ストレージ環境１０２にデータ複製を格納するために、本方法は、ＳＲスプレー操作またはポリシー（例えば、５４４）を使用して、複製ストレージ要求を異なるストレージノード候補および／またはプールに複製し、複数のストレージノードとの並行接続を確立することを含み得る。例えば、メタデータサーバ１１２は、前述のようにストレージノード候補の複数のリストを特定し、クライアントまたはクライアントからの要求を受け入れたストレージノードにリストを提供することができる。複数のリストは、第１の二次ストレージノードプール（例えば、１４０）内のストレージノード候補を特定する第２のＳＲリストを含むことができる。場合によっては、複数のリストはまた、第２の二次ストレージノードプール（例えば、１５０）内のストレージノード候補を特定する第３のＳＲリストを含むこともできる。クライアントまたはストレージノードは、ＳＲスプレー操作またはポリシーを使用してデータ複製を格納するために、第２および／または第３のＳＲリストを使用することができる。
【０１２６】
説明のために、クライアントまたはストレージノードは、ＳＲスプレー操作またはポリシーに基づいて複製されたパケットを送信して、ストレージ要求の第１のコピーおよびストレージ要求の第２のコピーを形成することができる。ＳＲスプレー操作またはポリシーは、第１および第２のコピーを第２および第３のＳＲリストに送るための命令を含むことができる。第１のコピーは、第２のＳＲリストを有するＳＲＨを含むことができ、第２のコピーは第３のＳＲリストを有するＳＲＨを含むことができる。第１のコピーは、ＳＲＨ内の第２のＳＲリストに基づいて第１の二次ストレージノードプール内のストレージノード候補に送ることができ、第２のコピーは、ＳＲＨ内の第３のＳＲリストに基づいて第２の二次ストレージノードプール内のストレージノード候補に送ることができる。
【０１２７】
ＳＲスプレー操作またはポリシーは、第１および第２のコピーを第１および第２の二次ストレージノードプール内のストレージノード候補を介して連続的に送るか、または第１および第２のコピーを、第１および第２のＳＲリスト内の第１のそれぞれのホップに送り、第１および第２のコピーを、それぞれ第１および第２の二次ストレージノードプールにマルチキャストするように第１のそれぞれのホップに命令するように、第２および第３のＳＲリストを構成できる。
【０１２８】
クライアントまたはストレージノードは、第１または第２のコピーを受信し、第１または第２のコピー内で要求を受け入れた第１および／または第２の二次ストレージノードプール内のそれらのストレージノードからストレージ要求の受け入れを受信することができる。次に、クライアントまたはストレージノードは、それらのストレージノードとの並行接続を確立して、それらのストレージノードでデータ複製を格納できる。
【０１２９】
図８Ｂは、セグメントルーティングおよび負荷分散を使用して分散ストレージ環境１０２内のデータを取り出すための例示的な方法８２０を示す。ステップ８２２で、メタデータサーバ１１２は、クライアント（例えば、１０４、１０６、または１０８）から、分散ストレージ環境１０２のデータコンテンツを取り出す意図を特定するメッセージ（例えば、要求２０２）を受信することができる。メタデータサーバ１１２は、データの各コピーが分散ストレージ環境１０２内のどこに格納されているかを追跡し、その情報を使用して、どのストレージノードがクライアントによって要求されたデータコンテンツのコピーを有しているかを特定することができる。例えば、メタデータサーバ１１２は、分散ストレージ環境１０２上のどのストレージノードが要求されたデータコンテンツのコピーを有するかの記録を維持し、その情報を使用して、クライアントからのデータコンテンツ要求のストレージノード候補を選択することができる。
【０１３０】
ステップ８２４で、メタデータサーバ１１２は、データコンテンツを含むストレージノードのセットを特定するＳＲリスト（例えば、２０４）をクライアントに送信することができる。例えば、メタデータサーバは、クライアントが取り出すことができ得るデータコンテンツのコピーを有する分散ストレージ環境１０２内のストレージノードの少なくとも一部を含む、データコンテンツ要求のためにメタデータサーバ１１２によって選択されたストレージノード候補のセットに対応するセグメントのリストを、クライアントに送信することができる。
【０１３１】
次に、ステップ８２６で、本方法は、データ要求内のＳＲＨに基づいて、ストレージノードのセットを特定するＳＲリストを含むパスを通ってクライアントからのデータ要求（例えば、２０６）を誘導することを含み得る。ＳＲＨはＳＲリストを含むことができ、ストレージノードのセットのうちの１つがデータ要求を受け入れるまでパスを通ってデータ要求を誘導するように構成することができる。データ要求がストレージノードのセットを通って移動するとき、前述のように、各受信ストレージノードはストレージノードの操作条件に基づいてデータ要求を受け入れるか、または拒否するかを判定することができる。
【０１３２】
ステップ８２８で、ストレージノードは、データ要求を受け入れると、クライアントに、ストレージノードがクライアントからのデータ要求を受け入れたという指示（例えば、応答２１４）を送信する。次に、クライアントおよびストレージノードは、クライアントがストレージノードからデータコンテンツを取り出すための接続を確立できる。したがって、ステップ８３０で、ストレージノードは、要求されたデータコンテンツをクライアントに提供することができる。
【０１３３】
図８Ｃは、セグメントルーティングおよび負荷分散を使用して、データ要求をデータに割り当てられたアドレスに直接送るための例示的な方法８４０を示す。ステップ８４２で、メタデータサーバ１１２は、クライアント（例えば、１０４、１０６、または１０８）から、分散ストレージ環境１０２のデータコンテンツを取り出す意図を特定するメッセージ（例えば、要求２０２）を受信することができる。前述のように、メタデータサーバ１１２は、データの各コピーが分散ストレージ環境１０２内のどこに格納されているかを追跡することができる。さらに、例示的な方法８４０では、分散ストレージ環境１０２内のデータは、それに割り当てられたネットワークアドレス（例えば、ＩＰｖ６アドレス、ＩＰｖ６プレフィックスなど）を有することができ、これを使用して、分散ストレージ環境１０２上のそのデータを特定し、かつそれにアクセスすることができる。メタデータサーバ１１２は、どのネットワークアドレスデータが任意の特定のコピーに割り当てられているかを特定し、その情報を使用して、クライアントによって要求されたデータコンテンツのコピーに対応する候補ネットワークアドレスのリストをクライアントに提供することができる。場合によっては、クライアントからのメッセージ自体が、ネットワークアドレスまたは要求されたデータコンテンツのアドレスを特定できる。
【０１３４】
ステップ８４４で、メタデータサーバ１１２は、分散ストレージ環境１０２上のデータコンテンツのコピーに関連付けられたネットワークアドレス（例えば、ＩＰアドレスまたはプレフィックス）を特定するＳＲリストをクライアントに送信することができる。例えば、メタデータサーバ１１２は、要求されたデータコンテンツの異なるコピーに割り振られたＩＰｖ６アドレスのセットを含むＳＲリストを送信することができる。クライアントは、こデータコンテンツの要求を、セグメントルーティングを使用してデータコンテンツのコピーのＩＰｖ６アドレスに送るためにのＳＲリストを使用することができる。
【０１３５】
ステップ８４６で、本方法は、データ要求内のＳＲＨに基づいて、ネットワークアドレスを特定するＳＲリストを含むパスを通って、クライアントからのデータ要求（例えば、２０６）を誘導すること、または送ることを含むことができる。ＳＲＨはＳＲリストを含めることができ、データコンテンツのコピーをホストしているそれぞれのストレージノードがデータ要求を受け入れるまで、パスを通って（例えば、ＳＲリスト内の各ネットワークアドレスを介して）データ要求を誘導するように構成され得る。データ要求がＳＲリスト内のセグメントに関連付けられたネットワークアドレス（すなわち、ＳＲリスト内のセグメントに対応するデータコンテンツのコピーのネットワークアドレス）に送られると、そのネットワークアドレスに関連付けられたコピーをホストしているストレージノードは、データ要求を受信し、本明細書において説明されているように要求を受け入れるか、または拒否するかを判定することができる。
【０１３６】
ステップ８４８で、データコンテンツのコピーをホストしているストレージノードは、データ要求を受信して受け入れると、ストレージノードがデータ要求を受け入れたという指示（例えば、応答２１４）をクライアントに送信する。次に、ストレージノードおよびクライアントは、クライアントがデータコンテンツのコピーに割り振られたネットワークアドレスを使用して、ストレージノードからデータコンテンツのコピーを取り出すための接続を確立することができる。したがって、ステップ８５０で、ストレージノードは、ストレージノード上のデータコンテンツのコピーをクライアントに提供することができる。
【０１３７】
場合によっては、方法８００、８２０、および／または８４０は、セグメントルーティングを使用して、メタデータサーバ（例えば、メタデータサーバプール１１０および／または１２０）のプール（または複数のプール）へのクライアント要求を同様に負荷分散することができる。これは、メタデータサーバの過負荷または帯域幅の制限によって引き起こされる待ち時間を短縮するのに役立ち得る。例えば、クライアントは、分散ストレージ環境１０２にデータを格納するか、または取り出す意図を特定するメッセージを送信することができる。メッセージは、メタデータサーバの１つ以上のプール（１１０、１２０など）からメタデータサーバを特定するＳＲリストを含むＳＲＨを含むことができる。ＳＲＨは、関連付けられた要求がＳＲリスト内のメタデータサーバのうちの１つによって受け入れられるまで、クライアントからのメッセージがＳＲリスト内のメタデータサーバのパスを通って送られることを引き起こすことができる。メッセージを受信すると、各メタデータサーバは、メタデータサーバでの操作条件に基づいて、関連付けられた要求を受け入れるか、または拒否するかを判定することができる。したがって、例えば、高負荷または制限された容量／帯域幅を有するメタデータサーバは、待ち時間の問題を回避するために要求を拒否することができ、低負荷または高い容量／帯域幅を有するメタデータサーバは、要求を受け入れて、それにより潜在的な待ち時間の問題を低減することができる。
【０１３８】
次に、本開示は、スイッチ、ルータ、ロードバランサ、クライアントデバイスなどの例示的なネットワークデバイスおよびコンピューティングデバイスを示す図９および図１０に移る。
【０１３９】
図９は、スイッチング、ルーティング、負荷分散、および他のネットワーキング操作を実施するのに好適な例示的なネットワークデバイス９００を示す。ネットワークデバイス９００は、中央処理装置（ＣＰＵ）９０４、インターフェース９０２、およびバス９１０（例えば、ＰＣＩバス）を含む。適切なソフトウェアまたはファームウェアの制御下で動作する場合、ＣＰＵ９０４は、パケット管理、エラー検出、および／またはルーティング関数を実行する責任を負う。ＣＰＵ９０４は、好ましくは、オペレーティングシステムおよび任意の適切なアプリケーションソフトウェアを含むソフトウェアの制御下でこれらすべての機能を達成する。ＣＰＵ９０４は、マイクロプロセッサのＩＮＴＥＬ  Ｘ８６ファミリからのプロセッサなどの１つ以上のプロセッサ９０８を含み得る。場合によっては、プロセッサ９０８は、ネットワークデバイス９００の操作を制御するために特別に設計されたハードウェアであり得る。場合によっては、メモリ９０６（例えば、不揮発性ＲＡＭ、ＲＯＭなど）はまた、ＣＰＵ９０４の一部を形成する。ただし、メモリをシステムに結合することができる多くの異なる方式がある。
【０１４０】
インターフェース９０２は、典型的に、モジュラーインターフェースカード（「ラインカード」と称されることもある）として提供される。一般に、それらはネットワークを介したデータパケットの送受信を制御し、ネットワークデバイス９００で使用される他の周辺機器をサポートする場合がある。提供され得るインターフェースの中には、イーサネットインターフェース、フレームリレーインターフェース、ケーブルインターフェース、ＤＳＬインターフェース、トークンリングインターフェースなどがある。加えて、高速トークンリングインターフェース、ワイヤレスインターフェース、イーサネットインターフェース、ギガビットイーサネットインターフェース、ＡＴＭインターフェース、ＨＳＳＩインターフェース、ＰＯＳインターフェース、ＦＤＤＩインターフェース、ＷＩＦＩインターフェース、３Ｇ／４Ｇ／５Ｇセルラーインターフェース、ＣＡＮ  ＢＵＳ、ＬｏＲＡなど、様々な非常に高速なインターフェースが提供される場合がある。一般に、これらのインターフェースには、適切な媒体との通信に適したポートが含まれている場合がある。場合によっては、独立したプロセッサと、場合によっては揮発性ＲＡＭも含まれることがある。独立したプロセッサは、パケット交換、媒体制御、信号処理、暗号処理、管理などの通信集約型タスクを制御することができる。通信集約型タスクのために別個のプロセッサを提供することにより、これらのインターフェースは、マスターＣＰＵ（例、９０４）がルーティング計算、ネットワーク診断、セキュリティ機能などを効率的に実施することを可能にする。
【０１４１】
図９に示されるシステムは、本技術の１つの特定のネットワークデバイスであるが、本技術が実装され得る唯一のネットワークデバイスアーキテクチャであることを意味するものではない。例えば、通信ならびにルーティング計算などを処理する単一のプロセッサを備えるアーキテクチャがよく使用される。さらに、他のタイプのインターフェースおよび媒体もまた、ネットワークデバイス９００とともに使用され得る。
【０１４２】
ネットワークデバイスの構成に関係なく、本明細書で説明するローミング、ルート最適化、およびルーティング関数のための汎用ネットワーク操作および機構のためのプログラム命令を格納するように構成された１つ以上のメモリまたはメモリモジュール（メモリ９０６を含む）を使用することができる。プログラム命令は、例えば、オペレーティングシステムおよび／または１つ以上のアプリケーションの操作を制御することができる。メモリ（複数可）はまた、モビリティバインディング、登録、および関連付けテーブルなどのテーブルを格納するように構成され得る。メモリ９０６はまた、様々なソフトウェアコンテナおよび仮想化実行環境およびデータを保持することができる。
【０１４３】
ネットワークデバイス９００はまた、ルーティングおよび／またはスイッチング操作を実施するように構成され得る特定用途向け集積回路（ＡＳＩＣ）を含むことができる。ＡＳＩＣは、バス９１０を介してネットワークデバイス９００内の他の構成要素と通信して、データおよび信号を交換し、例えば、ルーティング、スイッチング、および／またはデータストレージ操作などのネットワークデバイス９００による様々なタイプの操作を調整することができる。
【０１４４】
図１０は、データ操作および要求を処理し、データコンテンツおよび／またはメタデータを格納し、かつ他のコンピューティング操作を実施するために使用することができるシステム１０００の例示的なコンピューティングシステムアーキテクチャを示す。この例では、システム１０００の構成要素は、バスなどの接続１００５を使用して互いに電気的に通信している。システム１０００は、処理ユニット（ＣＰＵまたはプロセッサ）１０１０、ならびに読み取り専用メモリ（ＲＯＭ）１０２０およびランダムアクセスメモリ（ＲＡＭ）１０２５などのメモリ１０１５を含む様々なシステム構成要素をプロセッサ１０１０に結合する接続１００５を含む。システム１０００は、プロセッサ１０１０に直接接続されているか、近接しているか、またはプロセッサ１０１０の一部として統合されている高速メモリのキャッシュを含むことができる。システム１０００は、プロセッサ１０１０による迅速なアクセスのために、メモリ１０１５および／またはストレージデバイス１０３０からキャッシュ１０１２にデータをコピーすることができる。このようにして、キャッシュは、データを待機している間のプロセッサ１０１０の遅延を回避するパフォーマンス向上を提供することができる。これらの、また他のモジュールは、様々なアクションを実施するために、プロセッサ１０１０を制御するか、または制御するように構成され得る。他のメモリ１０１５も同様に使用可能であり得る。メモリ１０１５は、異なるパフォーマンス特性を有する複数の異なるタイプのメモリを含むことができる。プロセッサ１０１０は、任意の汎用プロセッサ、プロセッサ１０１０を制御するように構成されたストレージデバイス１０３０内に格納された第１サービス１０３２、第２サービス１０３４、および第３サービス１０３６のようなハードウェアまたはソフトウェアサービス、ならびにソフトウェア命令が実際のプロセッサ設計に組み込まれている専用プロセッサを含むことができる。プロセッサ１０１０は、複数のコアまたはプロセッサ、バス、メモリコントローラ、キャッシュなどを含む完全に自己完結型のコンピューティングシステムであり得る。マルチコアプロセッサは、対称または非対称であり得る。
【０１４５】
コンピューティングデバイス１０００とのユーザインタラクションを可能にするために、入力デバイス１０４５は、スピーチ用のマイクロフォン、ジェスチャまたはグラフィック入力用のタッチセンシティブスクリーン、キーボード、マウス、モーション入力、スピーチなどの任意の数の入力機構を表すことができる。出力デバイス１０３５はまた、当業者に既知のある数の出力機構のうちの１つ以上であり得る。場合によっては、マルチモーダルシステムは、ユーザがコンピューティングデバイス１０００と通信するために複数のタイプの入力を提供することを可能にし得る。通信インターフェース１０４０は、一般に、ユーザ入力およびシステム出力を統治し、かつ管理することができる。特定のハードウェア構成での操作に制限はないため、ここでの基本機能は、開発時に改善されたハードウェアまたはファームウェア構成に簡単に置き換えることができる。
【０１４６】
ストレージデバイス１０３０は、不揮発性メモリであり、磁気カセット、フラッシュメモリカード、ソリッドステートメモリデバイス、デジタル多用途ディスク、カートリッジ、ランダムアクセスメモリ（ＲＡＭ）１０２５、読み取り専用メモリ（ＲＯＭ）１０２０、およびそれらのハイブリッドなど、コンピュータがアクセス可能なデータを格納することができるハードディスクまたは他のタイプのコンピュータ可読媒体であり得る。
【０１４７】
ストレージデバイス１０３０は、プロセッサ１０１０を制御するためのサービス１０３２、１０３４、１０３６を含むことができる。他のハードウェアまたはソフトウェアモジュールが企図される。ストレージデバイス１０３０は、接続１００５に接続することができる。一態様では、特定の機能を実行するハードウェアモジュールは、その機能を実行するために、プロセッサ１０１０、接続１００５、出力デバイス１０３５などの必要なハードウェア構成要素に関連して、コンピュータ可読媒体に格納されたソフトウェア構成要素を含むことができる。
【０１４８】
説明を明確にするために、場合によっては、本技術は、ソフトウェアで具体化される方法におけるデバイス、デバイス構成要素、ステップもしくはルーチン、またはハードウェアとソフトウェアの組み合わせを含む機能ブロックを含む個々の機能ブロックを含むものとして提示され得る。
【０１４９】
いくつかの実施形態では、コンピュータ可読ストレージデバイス、媒体、およびメモリは、ビットストリームなどを含むケーブルまたは無線信号を含むことができる。しかしながら、言及される場合、非一時的コンピュータ可読記憶媒体は、エネルギー、搬送波信号、電磁波、および信号自体などの媒体を明示的に除外する。
【０１５０】
上記の例による方法は、コンピュータ可読媒体に格納されているか、他の場合にはそれから利用可能であるコンピュータ実行可能命令を使用して実装することができる。そのような命令は、例えば、特定の機能または機能のグループを実行するために、汎用コンピュータ、専用コンピュータ、または専用処理デバイスを引き起こすか、あるいは構成する命令およびデータを含むことができる。使用されるコンピュータリソースの部分は、ネットワーク経由でアクセス可能であり得る。コンピュータの実行可能命令は、例えば、バイナリ、アセンブリ言語、ファームウェア、またはソースコードなどの中間フォーマット命令であり得る。命令、使用される情報、および／または説明された例による方法中に作成された情報を格納するために使用され得るコンピュータ可読媒体の例には、磁気ディスクまたは光ディスク、フラッシュメモリ、不揮発性メモリを備えたＵＳＢデバイス、ネットワークストレージデバイスなどが含まれる。
【０１５１】
これらの開示による方法を実装するデバイスは、ハードウェア、ファームウェア、および／またはソフトウェアを含むことができ、様々なフォームファクタのいずれかを取ることができる。このようなフォームファクタの典型的な例には、ラップトップ、スマートフォン、スモールフォームファクタのパーソナルコンピュータ、携帯情報端末、ラックマウントデバイス、スタンドアロンデバイスなどが挙げられる。本明細書で説明される機能はまた、周辺機器またはアドインカードで具体化され得る。このような機能は、さらなる例として、単一のデバイスで実行される異なるチップまたは異なるプロセスの間の回路基板上に実装することもできる。
【０１５２】
命令、そのような命令を伝達するための媒体、それらを実行するためのコンピューティングリソース、およびそのようなコンピューティングリソースをサポートするための他の構造は、これらの開示に記載された機能を提供するための手段である。
【０１５３】
添付の特許請求の範囲の範疇の態様を説明するために、様々な例および他の情報を使用したが、当業者であれば、多種多様な実装形態を導出するために、これらの例を使用することができるように、かかる例における特定の特徴または構成に基づいて、特許請求の範囲のいかなる制限も示唆されるべきではない。さらに、いくつかの主題は、構造的特徴および／または方法ステップの例に固有の言語で説明されている場合があるが、添付の特許請求の範囲で定義される主題は、必ずしもこれらの説明された特徴または行為に限定されないことを理解されたい。例えば、かかる機能は、ここで特定されている構成要素以外の構成要素で、異なって配布し、または実施することができる。むしろ、説明された特徴およびステップは、添付の特許請求の範囲の範疇のシステムおよび方法の構成要素の例として開示される。
【０１５４】
「少なくとも１つ」のセットと記載される特許請求項の文言は、セットの１つのメンバーまたはセットの複数のメンバーが特許請求項を満たしていることを示す。例えば、「ＡおよびＢのうちの少なくとも１つ」と記載される特許請求項の文言は、Ａ、Ｂ、またはＡおよびＢを意味する。
【図１】
2021534663.tif 000003
【図２】
2021534663.tif 000004
【図３Ａ】
2021534663.tif 000005
【図３Ｂ】
2021534663.tif 000006
【図３Ｃ】
2021534663.tif 000007
【図４Ａ】
2021534663.tif 000008
【図４Ｂ】
2021534663.tif 000009
【図５Ａ】
2021534663.tif 000010
【図５Ｂ】
2021534663.tif 000011
【図６Ａ】
2021534663.tif 000012
【図６Ｂ】
2021534663.tif 000013
【図７】
2021534663.tif 000014
【図８Ａ】
2021534663.tif 000015
【図８Ｂ】
2021534663.tif 000016
【図８Ｃ】
2021534663.tif 000017
【図９】
2021534663.tif 000018
【図１０】
2021534663.tif 000019
【国際調査報告】
2021534663.tif 000020
2021534663.tif 000021
2021534663.tif 000022