(57)【特許請求の範囲】
【請求項１】
ルーターおよびロードバランシングシステムを含むコンピューターシステムにおいて、ロードバランサー間で状態を共有する方法であって、前記ロードバランシングシステムは、ロードバランサー、１つまたは複数の他のロードバランサー、および複数の宛先ホストを含み、前記ルーターは、ネットワークに接続され、および前記ロードバランシングシステムへの進入のポイントであり、前記ネットワーク上のコンポーネントは、仮想電子アドレスを使用して前記ロードバランシングシステムと通信し、前記方法は、
前記ルーターからパケットを受信する、前記ロードバランサーの動作であって、前記パケットは、ワイドエリアネットワーク上のソースを特定するソース電子アドレス情報と、前記仮想電子アドレスを含む宛先電子アドレス情報とを含む、動作と、
前記パケットが既存のデータフローに対するものであると判定する、前記ロードバランサーの動作と、
パケットヘッダーを含む、前記パケットのコンテンツから前記既存のデータフローに対するデータフロー識別子を生成するアルゴリズムを使用する、前記ロードバランサーの動作と、
前記ロードバランサーが、前記複数の宛先ホストの中から前記既存のデータフローに対応する宛先ホストを特定するのに十分な情報が不足していると判定する、前記ロードバランサーの動作であって、
前記ロードバランサーが、前記既存のデータフローを前記複数の宛先ホストのうちの１つの宛先ホストにマッピングする、キャッシュした状態を有さないと判定する、前記ロードバランサーの動作を含む、動作と、
前記ロードバランサーが、前記既存のデータフローに対応する前記宛先ホストを特定するのに十分な情報が不足していると判定したことに応答して、
前記既存のデータフローのオーナーとして指定されたオーナーロードバランサーを特定する、前記ロードバランサーの動作であって、前記オーナーロードバランサーは、前記１つまたは複数の他のロードバランサーの中から選択される、動作と、
データフローの状態情報に関するリクエストを前記オーナーロードバランサーに送信する、前記ロードバランサーの動作と、を含む動作と、
前記オーナーロードバランサーから状態情報を受信する、前記ロードバランサーの動作であって、前記状態情報は、前記既存のデータフローに対応する前記宛先ホストを特定する、動作と、
前記受信した状態情報をキャッシュする、前記ロードバランサーの動作と
を備えることを特徴とする方法。
【請求項２】
前記複数の宛先ホストの配置が遷移中であると判定したことに応答して、
１つまたは複数の他の既存のデータフローに対するキャッシュした状態を特定する、前記ロードバランサーの動作であって、前記キャッシュした状態は、前記１つまたは複数の他の既存のデータフローを、前記複数の宛先ホストのうちの対応する宛先ホストにマッピングする、動作と、
現在の宛先ホスト配列を使用して、前記宛先ホストが現在のマッピングとは異なるデータフローを特定する、前記ロードバランサーの動作と、
これらの１つまたは複数の既存のデータフローのそれぞれに対し、
前記１つまたは複数の他のロードバランサーの中から選択される、前記既存のデータフローのオーナーとして指定されたオーナーロードバランサーを特定する、前記ロードバランサーの動作と、
前記既存のデータフローに対するキャッシュした状態を、前記既存のデータフローに対する前記オーナーロードバランサーに送信する、前記ロードバランサーの動作と
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項３】
前記ルーターからパケットを受信する、前記ロードバランサーの動作は、等価コストマルチパス（ＥＣＭＰ）アルゴリズムまたはドメインネームシステム（ＤＮＳ）のラウンドロビンアルゴリズムのうちの１つに従って、パケットを受信する、前記ロードバランサーの動作を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記既存のデータフローに対する第２のパケットを受信する、前記ロードバランサーの動作と、
キャッシュした状態情報を参照して、前記宛先ホストを前記既存のデータフローに対応するものとして特定する、前記ロードバランサーの動作と、
前記第２のパケットを前記宛先ホストに送信する、前記ロードバランサーの動作と
をさらに備えることを特徴とする請求項１に記載の方法。
【請求項５】
前記既存のデータフローに対するデータフロー識別子を生成するアルゴリズムを使用する、前記ロードバランサーの動作は、前記ソースに対するソースインターネットプロトコルアドレスおよび前記ロードバランシングシステムに対する仮想インターネットプロトコルアドレスを、データフロー識別子にハッシュするハッシュアルゴリズムを使用する、動作を含み、前記データフロー識別子は、データフローを対応する宛先ホストにマッピングする現在のマッピング配列へのインデックスを表すことを特徴とする請求項１に記載の方法。
【請求項６】
前記既存のデータフローのオーナーとして指定されたオーナーロードバランサーを特定する、前記ロードバランサーの動作は、
前記ソースインターネットプロトコルアドレスおよび前記仮想インターネットプロトコルアドレスを第２のハッシュ値にハッシュする第２のハッシュアルゴリズムを使用する動作であって、前記第２のハッシュ値は、プライマリーオーナーパーティション配列における位置を表し、前記プライマリーオーナーパーティション配列は、データフローを、前記データフローに対するキャッシュした状態を維持する、対応するロードバランサーにマッピングする、動作と、
前記プライマリーオーナーパーティション配列における前記位置を参照して、前記既存のデータフローの前記オーナーとしてマッピングされた前記ロードバランサーを特定する、動作と
を含むことを特徴とする請求項５に記載の方法。
【請求項７】
ルーターおよびロードバランシングシステムを含むコンピューターシステムにおいて、ロードバランサー間で状態を共有する方法であって、前記ロードバランシングシステムは、ロードバランサー、１つまたは複数の他のロードバランサー、および複数の宛先ホストを含み、前記ルーターは、ネットワークに接続され、およびワイドエリアネットワークから前記ロードバランシングシステムへの進入のポイントであり、前記ネットワーク上のコンポーネントは、仮想電子アドレスを使用して前記ロードバランシングシステムと通信し、前記方法は、
別のロードバランサーからカプセル化されたパケットを受信する、前記ロードバランサーの動作であって、前記パケットは、前記ネットワーク上のソースを特定するソース電子アドレス情報と、前記仮想電子アドレスを含む宛先電子アドレス情報とを含む、動作と、
前記受信したパケットが既存のデータフローに対するものであると判定する、前記ロードバランサーの動作と、
前記ロードバランサーが前記既存のデータのオーナーであると判定する、前記ロードバランサーの動作と、
前記ロードバランサーが、前記既存のデータフローに対するキャッシュした状態を有すると判定する、前記ロードバランサーの動作であって、前記キャッシュした状態は、前記既存のデータフローを、前記複数の宛先ホストのうちの１つの宛先ホストにマッピングする、動作と、
前記受信したパケットを、前記既存のデータフローにマッピングした前記宛先ホストに送信する、前記ロードバランサーの動作と、
前記既存のデータフローにおける後続のパケットを、前記１つの宛先ホストに適切に転送するのに使用するために、前記キャッシュした状態を前記他のロードバランサーに送信する、前記ロードバランサーの動作と、
を備えることを特徴とする方法。
【請求項８】
１つまたは複数の他の既存のデータフローに対するキャッシュした状態を、前記１つまたは複数の他のロードバランサーから受信する、前記ロードバランサーの動作をさらに備え、前記１つまたは複数の他のロードバランサーは、前記ロードバランサーが前記１つまたは複数の他の既存のデータフローに対するプライマリーオーナーロードバランサーであると判定していたことを特徴とする請求項７に記載の方法。
【請求項９】
別の既存のデータフローに対する状態を別のロードバランサーに送信する、前記ロードバランサーの動作であって、前記ロードバランサーは、前記別の既存のデータフローに対する状態が、現在の宛先配列において異なると判定していた、動作と、
前記他のロードバランサーが前記他の既存のデータフローのプライマリーオーナーであると判定する、前記ロードバランサーの動作と
をさらに備えることを特徴とする請求項７に記載の方法。
【請求項１０】
１つまたは複数のプロセッサーと、
システムメモリーと、
ルーターと、
ロードバランシングマネージャー、複数のマルチプレクサー、および複数の宛先ホストを表すコンピューター実行可能命令を格納している１つまたは複数のコンピューター記憶デバイスとを備え、
前記ロードバランシングマネージャーは、
前記複数の宛先ホストの配置において、前記複数の宛先ホストの変更をモニタリングするように構成され、
フローＩＤを宛先ホストにマッピングする宛先ホスト配列を維持するように構成され、
定期間隔で前記宛先ホスト配列を更新するように構成され、
各配列を更新する前に、前記宛先ホスト配列を前記宛先ホスト配列の旧バージョンに複製するように構成され、
前記宛先ホスト配列および前記宛先ホスト配列の前記旧バージョンを、前記複数のマルチプレクサーに提供するように構成され、
前記複数のマルチプレクサーの変更をモニタリングするように構成され、
フローＩＤをプライマリーオーナーマルチプレクサーにマッピングする、プライマリーオーナーシップ配列を維持するように構成され、
フローＩＤをバックアップオーナーマルチプレクサーにマッピングする、バックアップオーナーシップ配列を維持するように構成され、および
前記プライマリーオーナーシップ配列および前記バックアップオーナーシップ配列を、前記複数のマルチプレクサーに提供するように構成され、
前記複数のマルチプレクサーのそれぞれは、
前記ルーターからパケットを受信するように構成され、
前記パケットに含まれる情報に基づいて、各受信したパケットに対するフローＩＤを形成するように構成され、
前記複数の宛先ホストの中から前記パケットに対する適切な宛先ホストを特定することであって、
データフローが新たなデータフローであるかどうかを判定することと、
前記データフローが既存のデータフローであると判定されたときに、前記データフローＩＤを前記宛先ホスト配列へのインデックスとして使用して、前記パケットに対する適切な宛先ホストを特定することと、
前記宛先ホスト配列のコンテンツと前記宛先ホスト配列の前記旧バージョンのコンテンツとが一致しないとき、キャッシュした状態を参照して、前記パケットに対する前記適切な宛先ホストを特定することであって、前記マルチプレクサーにおけるキャッシュした状態を参照して、前記マルチプレクサーがフローＩＤに対する前記適切な宛先ホストのインジケーションを前もってキャッシュしたかどうかを判定することを含む、ことと
を含むように構成され、
前記インジケーションを前もってキャッシュしたかどうかを判定することは、
前記マルチプレクサーにおける前記キャッシュした状態が、フローＩＤに対する前記適切な宛先ホストのインジケーションを含むときに、前記マルチプレクサーにおいて前記キャッシュした状態にアクセスすることと、
前記マルチプレクサーにおける前記キャッシュした状態が、フローＩＤに対する前記適切な宛先ホストを含まないときに、
オーナー配列を参照して、前記フローＩＤに対するオーナーマルチプレクサーを特定し、
キャッシュした状態に対する前記特定したオーナーマルチプレクサーに問い合わせ、および
前記フローＩＤに対する前記適切な宛先ホストを示す、キャッシュした状態を、前記特定したオーナーマルチプレクサーから受信する、ことと
を含み、および
前記パケットを、特定した適切な宛先ホストに送信するように構成されている
ことを特徴とするロードバランシングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロードバランサーコンポーネント間で状態を同期する方法、システム、およびコンピュータープログラム製品に関する。
【背景技術】
【０００２】
コンピューターシステムおよび関連技術は、社会のあらゆる面に影響を及ぼしている。実際、コンピューターシステムの情報を処理する能力は、我々の生活や仕事のやり方を一変させた。コンピューターシステムは、コンピューターシステムが出現する前は手動で行っていた多くのタスク（例えば、文書処理、スケジューリング、会計など）を、今では当たり前に実行する。最近では、コンピューターシステムは、互いにおよび他の電子デバイスに結合されて、コンピューターシステムおよび他の電子デバイスが電子データを転送することができる有線コンピューターネットワークと無線コンピューターネットワークとの両方を形成している。したがって、多くのコンピューティングタスクの性能は、いくつかの異なるコンピューターシステムおよび／またはいくつかの異なるコンピューティング環境に分散される。
【０００３】
分散コンピューティングシステムにおいて、処理負荷をいくつかのコンピューターシステムで共有するのに分散ロードバランサーを使用することが多い。例えば、複数のロードバランサーを使用して、複数の処理エンドポイントを宛先とする外部通信を受信することができる。各ロードバランサーは、同一の発信元からのすべての外部通信が、同一の処理エンドポイントに向けられることを保証する、ある機構を有する。
【０００４】
ロードバランサーにとって、外部通信の宛先（例えば、処理エンドポイントへ）を正確に決定するために、ロードバランサーは、互いに状態を共有する。例えば、あるロードバランサーにおける特定の発信元に対する通信の決定を、他のロードバランサーに同期することができる。その同期した状態に基づいて、いずれのロードバランサーも、その後、特定の発信元から同一の処理エンドポイントに通信を送信することに関して正確な決定を行うことができる。
【０００５】
残念ながら、複数のロードバランサー間で同期した状態を維持するためには、複数のロードバランサー間でかなりのデータ量を交換する必要があることが多い。その結果、状態をロードバランサー間で同期することがボトルネックとなり、およびロードバランサーのスケーラビリティを制限する。
【発明の概要】
【０００６】
本発明は、ロードバランサーコンポーネント間で状態を同期する方法、システム、およびコンピュータープログラム製品に及ぶ。いくつかの実施形態において、ロードバランサーは、ルーターからパケットを受信する。パケットは、ワイドエリアネットワーク上のソースを特定するソース電子アドレス情報と、仮想電子アドレスを含む宛先電子アドレス情報とを含む。ロードバランサーは、ソース電子アドレス情報および宛先電子アドレス情報からの既存のデータフローに対するデータフロー識別子を生成するアルゴリズムを使用する。ロードバランサーは、パケットが既存のデータフローに対するものであると判定する。
【０００７】
ロードバランサーは、そのロードバランサーが、複数の宛先ホストの中から既存のデータフローに対応する宛先ホストを特定するのに十分な情報が不足していると判定する。このことは、ロードバランサーが、既存のデータフローを複数の宛先ホストにうちの１つの宛先ホストにマッピングする、キャッシュした状態を有さないことを含む。
【０００８】
その判定に応答して、ロードバランサーは、既存のデータフローのオーナーとして指定されたオーナーロードバランサーを特定する。また、その判定に応答して、ロードバランサーは、データフローの状態情報に対するリクエストを、オーナーロードバランサーに送信する。ロードバランサーは、オーナーロードバランサーから状態情報を受信する。状態情報は、既存のデータフローに対応する宛先ホストを特定する。ロードバランサーは、受信した状態情報をキャッシュする。
【０００９】
このデータフローにおける後続パケット上で、ロードバランサーは、データフローの継続を示すメッセージを、オーナーロードバランサーに返信する。この継続メッセージを、アイドル状態のタイムアウト間隔毎に一回のみ送信する必要がある。アイドル状態のタイムアウト間隔は、データフローが、いかなるパケットがなくとも、どのくらいの時間同一の宛先ホストへのマッピングを保持するかを判定する。
【００１０】
ロードバランサーは、受信したパケットが既存のデータフローに対するものであると判定する。ロードバランサーは、そのロードバランサーが既存のデータフローのオーナーではないと判定する。ロードバランサーは、そのロードバランサーが既存のデータフローに対するキャッシュした状態を有すると判定する。キャッシュした状態は、既存のデータフローを、複数の宛先ホストのうちの１つの宛先ホストにマッピングする。ロードバランサーは、既存のデータフローにマッピングされた宛先ホストに、受信したパケットを送信する。ロードバランサーは、データフロー継続メッセージをオーナーロードバランサーに送信する必要があるかどうかを判定する。ロードバランサーは、キャッシュした状態をオーナーロードバランサーに送信する。
【００１１】
本概要は、以下の発明を実施するための形態でさらに説明する概念の選択を簡易な形式で紹介するために提供される。この発明の概要は、特許請求される主題の主要な特徴または不可欠な特徴を特定することを意図せず、特許請求される主題の範囲を判定する際に補助として用いられることも意図しない。
【００１２】
本発明の追加的な特徴および利点は、後続の説明に記載され、および一部においては、その説明から明白であろうし、または本発明を実施することによって理解され得る。本発明の特徴および利点を、特に添付の特許請求の範囲において指摘される機器および組み合わせによって実現および取得することができる。本発明のこれらと他の特徴は、以下の説明および添付の特許請求の範囲からさらに十分に明白になるであろうし、または以下に記載されるような発明を実施することによって理解され得る。
【図面の簡単な説明】
【００１３】
本発明の上述したならびに他の利点および特徴を得ることができる方法を説明するために、上記で簡潔に説明した本発明のより詳細な説明は、添付図面で示される特定の実施形態を参照することによって与えられる。これらの図面は、本発明の典型的な実施形態を表しているにすぎず、従って、本発明の範囲を限定するものと見なすべきではないことを理解の上、本発明を、添付図面の使用を通じて追加的な特定性および詳細によって説明する。
【図１】ロードバランサーコンポーネント間で状態を同期することを容易にする、例示的なコンピューターアーキテクチャーを示す。
【図２】ロードバランサー間で状態を共有する例示的な方法のフローチャートを示す。
【図３】ロードバランサー間で状態を共有する例示的な方法のフローチャートを示す。
【図４Ａ】マルチプレクサー間で状態を共有する例示的なコンピューターアーキテクチャーを示す。
【図４Ｂ】マルチプレクサー間で状態を共有する例示的なコンピューターアーキテクチャーを示す。
【図５Ａ】マルチプレクサー間で状態を共有する例示的なコンピューターアーキテクチャーを示す。
【図５Ｂ】マルチプレクサー間で状態を共有する例示的なコンピューターアーキテクチャーを示す。
【図６Ａ】データフローの宛先ホストへのマッピングを維持する例示的なコンピューターアーキテクチャを示す。
【図６Ｂ】データフローの宛先ホストへのマッピングを維持する例示的なコンピューターアーキテクチャを示す。
【図６Ｃ】データフローの宛先ホストへのマッピングを維持する例示的なコンピューターアーキテクチャを示す。
【図６Ｄ】データフローの宛先ホストへのマッピングを維持する例示的なコンピューターアーキテクチャを示す。
【図７Ａ】データフローのオーナーマルチプレクサーへのマッピングを維持する例示的なコンピューターアーキテクチャーを示す。
【図７Ｂ】データフローのオーナーマルチプレクサーへのマッピングを維持する例示的なコンピューターアーキテクチャーを示す。
【発明を実施するための形態】
【００１４】
本発明は、ロードバランサーコンポーネント間で状態を同期する方法、システム、およびコンピュータープログラム製品に及ぶ。いくつかの実施形態において、ロードバランサーは、ルーターからパケットを受信する。パケットは、ワイドエリアネットワーク上のソースを特定するソース電子アドレス情報と、仮想電子アドレスを含む宛先電子アドレス情報とを含む。ロードバランサーは、ソース電子アドレス情報および宛先電子アドレス情報からの既存のデータフローに対するデータフロー識別子を生成するアルゴリズムを使用する。ロードバランサーは、パケットが既存のデータフローに対するものであると判定する。
【００１５】
ロードバランサーは、そのロードバランサーが、複数の宛先ホストの中から既存のデータフローに対応する宛先ホストを特定するのに十分な情報が不足していると判定する。このことは、ロードバランサーが、既存のデータフローを複数の宛先ホストのうちの１つの宛先ホストにマッピングする、キャッシュした状態を有さないことを含む。
【００１６】
その判定に応答して、ロードバランサーは、既存のデータフローのオーナーとして指定されたオーナーロードバランサーを特定する。また、その判定に応答して、ロードバランサーは、データフローの状態情報に対するリクエストを、オーナーロードバランサーに送信する。ロードバランサーは、オーナーロードバランサーから状態情報を受信する。状態情報は、既存のデータフローに対応する宛先ホストを特定する。ロードバランサーは、受信した状態情報をキャッシュする。
【００１７】
このデータフローにおける後続パケット上で、ロードバランサーは、データフローの継続を示すメッセージを、オーナーロードバランサーに返信する。この継続メッセージを、アイドル状態のタイムアウト間隔毎に一回のみ送信する必要がある。アイドル状態のタイムアウト間隔は、データフローが、いかなるパケットがなくとも、どのくらいの時間同一の宛先ホストへのマッピングを保持するかを判定する。
【００１８】
ロードバランサーは、受信したパケットが既存のデータフローに対するものであると判定する。ロードバランサーは、そのロードバランサーが既存のデータフローのオーナーではないと判定する。ロードバランサーは、そのロードバランサーが既存のデータフローに対するキャッシュした状態を有すると判定する。キャッシュした状態は、既存のデータフローを、複数の宛先ホストのうちの１つの宛先ホストにマッピングする。ロードバランサーは、既存のデータフローにマッピングされた宛先ホストに、受信したパケットを送信する。ロードバランサーは、データフロー継続メッセージをオーナーロードバランサーに送信する必要があるかどうかを判定する。ロードバランサーは、キャッシュした状態をオーナーロードバランサーに送信する。
【００１９】
本発明の実施形態は、以下でより詳細に説明するように、例えば、１つまたは複数のプロセッサーおよびシステムメモリーなどの、コンピューターハードウェアを含む専用コンピューターまたは汎用コンピューターを備えてもよく、または利用してもよい。本発明の範囲内の実施形態は、コンピューター実行可能命令および／もしくはデータ構造を伝送し、または記憶するための物理的および他のコンピューター可読媒体も含む。このようなコンピューター可読媒体は、汎用コンピューターシステムまたは専用コンピューターシステムによってアクセスすることができる、任意の利用可能な媒体とすることができる。コンピューター実行可能命令を記憶するコンピューター可読媒体は、物理的記憶媒体である。コンピューター実行可能命令を伝送するコンピューター可読媒体は、伝送媒体である。したがって、例として、本発明の実施形態は、少なくとも２つの明確に異なる種類のコンピューター可読媒体である、コンピューター記憶媒体（デバイス）と伝送媒体とを備えるが、これらに限定されない。
【００２０】
コンピューター記憶媒体（デバイス）は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭ、ＤＶＤ、もしくは他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または所望のプログラムコード手段をコンピューター実行可能命令またはデータ構造の形式で記憶するのに使用することができ、および汎用コンピューターもしくは専用コンピューターによってアクセスすることができるその他の媒体を含む。
【００２１】
「ネットワーク」を、電子データをコンピューターシステム、モジュールおよび／または他の電子デバイスの間で運搬することを可能にする、１つまたは複数のデータリンクとして定義する。情報がネットワークまたは別の通信接続（有線、無線、または有線もしくは無線の組み合わせのいずれか）上でコンピューターに転送または提供されるときに、コンピューターは適切に、その接続を伝送媒体と見なす。伝送媒体は、所望のプログラムコード手段を、コンピューター実行可能命令もしくはデータ構造の形式で伝送するのに使用することができ、および汎用コンピューターもしくは専用コンピューターによってアクセスすることができるネットワークおよび／またはデータリンクを含むことができる。上記の組み合わせもコンピューター可読媒体の範囲内に含まれる。
【００２２】
さらに、さまざまなコンピューターシステムコンポーネントに到達すると、コンピューター実行可能命令またはデータ構造の形式におけるプログラムコード手段を、伝送媒体からコンピューター記憶媒体（デバイス）に（またはその逆）自動的に転送することができる。例えば、ネットワークまたはデータリンク上で受信されるコンピューター実行可能命令またはデータ構造を、ネットワークインタフェースモジュール（例えば、「ＮＩＣ」）内のＲＡＭにバッファリングし、およびそれから最終的に、コンピューターシステムＲＡＭおよび／またはコンピューターシステムにおける不揮発性コンピューター記憶媒体（デバイス）に転送することができる。したがって、コンピューター記憶媒体（デバイス）をコンピューターシステムコンポーネントに含めることができ、その記憶媒体も伝送媒体を利用する（あるいは主として利用することさえできる）ことができることを理解されたい。
【００２３】
コンピューター実行可能命令は、例えば、プロセッサーで実行されるときに、汎用コンピューター、専用コンピューター、または専用処理デバイスに、ある機能もしくは機能グループを実行させる命令およびデータを備える。コンピューター実行可能命令は、バイナリー命令であってもよく、アセンブリ言語などの中間フォーマット命令であってもよく、あるいはソースコードであってもよい。発明の主題を、構造的特徴および／または方法論的動作に特有の言語で説明しているが、添付の特許請求の範囲で定義された発明の主題は、必ずしも上記説明した特徴または動作に限定されないことを理解されたい。むしろ、説明する特徴および動作を、特許請求の範囲を実装する例示的な形式として開示する。
【００２４】
本発明を、パーソナルコンピューター、デスクトップコンピューター、ラップトップコンピューター、メッセージプロセッサー、ハンドヘルドデバイス、マルチプロセッサーシステム、マイクロプロセッサーベースまたはプログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピューター、メインフレームコンピューター、モバイル電話、ＰＤＡ、ページャー、ルーター、およびスイッチなどを含む、多くの種類のコンピューターシステム構成を有するネットワークコンピューティング環境において実施してもよいことが、当業者には認識されよう。本発明を、分散システム環境において実施してもよく、当該分散システム環境では、ローカルコンピューターシステムおよびリモートコンピューターシステムを、ネットワークを通じてリンクし（有線データリンク、無線データリンクによって、または有線データリンクと無線データリンクとの組み合わせのいずれかによってリンクする）、双方がタスクを実行する。分散システム環境において、プログラムモジュールをローカルメモリー記憶デバイスとリモートメモリー記憶デバイスとの双方に配置してもよい。
【００２５】
図１は、ロードバランサーコンポーネント間で状態を同期することを容易にする例示的なコンピューターアーキテクチャー１００を示す。図１を参照すると、コンピューターアーキテクチャー１００は、ルーター１０２、ロードバランシングマネージャー１０３、マルチプレクサー１０６、および宛先ホスト１０７を含む。記述したコンピューターシステムの各々を、例えば、ローカルエリアネットワーク（「ＬＡＮ」）および／またはワイドエリアネットワーク（「ＷＡＮ」）などの、ネットワーク上（またはその一部）で互いに接続する。ルーター１０２をさらに、ネットワーク１０１に接続する。ネットワーク１０１はさらに、例えば、インターネットなどのＷＡＮとすることができる。したがって、記述したコンポーネントの各々、ならびに任意の他の接続したコンピューターシステムおよびそのコンポーネントは、上述したネットワーク上で、メッセージ関連データを生成し、およびメッセージ関連データを交換することができる（例えば、インターネットプロトコル（ＩＰ）、および伝送制御プロトコル（「ＴＣＰ」）、ハイパーテキスト転送プロトコル（「ＨＴＴＰ」）、シンプルメール転送プロトコル（「ＳＭＴＰ」）などの、インターネットプロトコル（ＩＰ）データグラムを利用する他の上位レイヤープロトコル）。
【００２６】
一般に、ルーター１０２は、ネットワーク１０１とコンピューターアーキテクチャー１００の他のコンポーネントとの間でインタフェース接続して、ネットワーク１０１とコンピューターアーキテクチャー１００の他のコンポーネントとの間でパケットを適切にルーティングする。ルーター１０２を、ネットワーク１０１からメッセージを受信し、およびそのメッセージをコンピューターアーキテクチャー１００の適切なコンポーネントに転送するように構成することができる。例えば、ルーター１０２を、仮想インターネットプロトコルアドレス（「ＶＩＰ」）に対するＩＰトラフィックを、マルチプレクサー１０６における物理的インタフェースに転送するように構成することができる。ルーター１０２は、仮想的に任意の数（例えば、４、８、１６など）のＩＰアドレスへの等価コストマルチパス（「ＥＣＭＰ」）ルーティングをサポートすることができる。したがって、複数のマルチプレクサー１０６を、アクティブなマルチプレクサーとして構成することができる。他の実施形態（例えば、ＥＣＰＭがサポートされないとき）において、１つのマルチプレクサーを、アクティブなマルチプレクサーとして構成し、および０またはそれ以上の他のマルチプレクサーを、待機マルチプレクサーとして構成することができる。
【００２７】
さらなる実施形態において、ドメインネームサービス（「ＤＮＳ」）のラウンドロビン方式を使用する。１つまたは複数のＶＩＰを割り当て、および複数のマルチプレクサー１０６間で共有する。ドメインネームサービス（「ＤＮＳ」）の名前を登録して、１つまたは複数のＶＩＰを解決する。マルチプレクサー１０６が故障した場合、そのマルチプレクサーが所有するＶＩＰは、他のマルチプレクサー１０６にフェールオーバーされる。
【００２８】
追加的な実施形態において、ＶＩＰを、各マルチプレクサーに対するネットワークインタフェースカード上で構成する。マルチプレクサーのうちの１つ（例えば、マスターノード）を、ＶＩＰに対するアドレス解決プロトコル（「ＡＲＰ」）リクエストに応答するように設定する。したがって、ルーター１０２は、ＶＩＰに対する任意のパケットを、マスターノードに送信することができる。マスターノードはそれから、現在の状態および／またはロードバランサールールに基づいて、レイヤー２転送を実行することができる。「マスターノード」の使用は、フラッディング（flooding）を軽減することができ、およびレイヤー３転送よりもずっと安価である。
【００２９】
記述したように、マルチプレクサー１０６は、マルチプレクサー１０６Ａ、１０６Ｂ、および１０６Ｃを含む、複数のマルチプレクサーを含む。宛先ホスト１０７は、宛先ホスト１０７Ａ、１０７Ｂ、および１０７Ｄを含む、複数の宛先ホストを含む。一般に、各マルチプレクサー１０６を、パケットを受信し、当該パケットに対する適切な宛先ホストを特定し、および当該パケットを適切な宛先ホストに転送するように構成する。いくつかの実施形態において、パケットに対する適切な宛先ホスト１０７を、パケットのコンテンツ、受信するマルチプレクサーにおけるキャッシュした状態、他のマルチプレクサーにおけるキャッシュした状態、パケットが既存のデータフローに対するものであるかまたは新たなデータフローに対するものであるか、および宛先ホスト１０７の構成のうちの１つまたは複数から特定する。
【００３０】
各マルチプレクサーは、ＩＤジェネレーター、オーナーディテクター、および状態マネージャーを含む。例えば、マルチプレクサー１０６Ａ、１０６Ｂおよび１０６Ｃはそれぞれ、ＩＤジェネレーター１４１Ａ、１４１Ｂおよび１４１Ｃ、オーナーディテクター１４２Ａ、１４２Ｂおよび１４２Ｃ、ならびに状態マネージャー１４３Ａ、１４３Ｂおよび１４３Ｃを含む。各ＩＤジェネレーターを、パケットのコンテンツに基づいて、パケットに対するデータフローＩＤを生成するように構成する。いくつかの実施形態において、５組の（ソースＩＰ：ポート、ＶＩＰ：ポート、ＩＰプロトコル）を使用して、データフローＩＤを表し、および／または生成する。他の実施形態において、この５組のサブセットを使用してもよい。新たなデータフローＩＤを、例えば、（宛先ホストＩＰ：ポート）によって特定される宛先ホスト１０７にマッピングすることができる。対応する状態マネージャーは、データフローＩＤおよび（宛先ホストＩＰ：ポート）をマッピングする状態をキャッシュすることができる。したがって、同一のデータフローＩＤを有する追加的なパケットを受信するときに、マルチプレクサーは、キャッシュした状態を参照して、追加のパケットのそれぞれに対する適切な宛先ホスト１０７を特定することができる。
【００３１】
いくつかの実施形態において、データフローＩＤスペースの異なる部分は、異なるマルチプレクサーによって「所有」される。各マルチプレクサーにおけるオーナーディテクターを、データフローＩＤに関するオーナーマルチプレクサーを判定するように構成する。そして、オーナーディテクターは、データフローＩＤを入力として受信し、およびオーナーマルチプレクサーに対するＩＰアドレスを出力として返すことができる。したがって、各マルチプレクサーは、各データフローＩＤに対するオーナーマルチプレクサーに状態を送信し、および／またはオーナーマルチプレクサーからの状態を要求することができる。例えば、マルチプレクサーがデータフローＩＤに対する適切な宛先ホストを特定するときに、マルチプレクサーは、（キャッシュに加えて）適切な宛先ホストを、データフローＩＤに対するオーナーマルチプレクサーに転送することができる。一方、マルチプレクサーがデータフローＩＤに対する適切な宛先ホストを特定するのに十分な情報が不足しているときに、マルチプレクサーは、オーナーマルチプレクサーに問い合わせて、適切な宛先ホストを取得することができる。
【００３２】
いくつかの実施形態において、マルチプレクサーがデータフローＩＤに対応するパケットに対する適切な宛先ホストを特定するのに十分な情報が不足しているときに、マルチプレクサーは、パケットをデータフローＩＤに対するオーナーマルチプレクサーに送信する。パケットを受信したことに応答して、オーナーマルチプレクサーは、データフローＩＤに対する適切な宛先ホストを判定する。また、オーナーマルチプレクサーは、データフローＩＤを適切な宛先ホストにマッピングする、キャッシュした状態（オーナーマルチプレクサーにおいて生成し、または他の追加のマルチプレクサーから受信したかのいずれかの状態）をマルチプレクサーに送信する。
【００３３】
他の実施形態において、マルチプレクサーがデータフローＩＤに対する適切な宛先ホストを特定するのに十分な情報が不足しているとき、マルチプレクサーは、キャッシュした状態に対する即時リクエストを、データフローＩＤに対するオーナーマルチプレクサーに送信する。即時リクエストを受信したことに応答して、オーナーマルチプレクサーは、データフローＩＤを適切な宛先ホストにマッピングする、キャッシュした状態（オーナーマルチプレクサーにおいて生成し、または他の追加のマルチプレクサーから受信したかのいずれかの状態）を、マルチプレクサーに送信する。マルチプレクサーはそして、パケットを適切な宛先ホストに送信する。
【００３４】
一般に、ロードバランシングマネージャー１０３を、遷移のために宛先ホスト１０７の配置をモニタリングするように構成する（例えば、新たな宛先ホストを追加するときに）。宛先配列ジェネレーター１０４は適宜、データフローＩＤを宛先ホストにマッピングする配列（例えば、ハッシュ関数を使用して）を形成する。ロードバランシングマネージャー１０３は、配列の現在のバージョン（例えば、新配列１０９）と配列のすぐ前のバージョン（例えば、旧配列１０８）の、配列の２つのバージョンを維持することができる。配列内の位置は、データフローＩＤに対応することができる。例えば、配列位置１は、データフローＩＤ１などに対応することができる。したがって、配列１０８および１０９に示すように、宛先ホスト１０７Ｂは、データフローＩＤ１に対する適切な宛先ホストである。
【００３５】
ロードバランシングマネージャー１０３は、配列の２つのバージョンをマルチプレクサー１０６に通信することができる。宛先ホスト１０７の配置が定常状態であるときは、配列の現在のバージョンおよびすぐ前のバージョンは一致する。そのため、定常状態では、マルチプレクサー１０６は、マッピングを参照して、指定されたデータフローＩＤに対するパケットをどこに送信するかを判定することができる（マルチプレクサーがキャッシュした状態を有さないときでさえ）。
【００３６】
一方、宛先ホスト１０７の配置が遷移中であるとき（例えば、新たな宛先ホスト１０７を追加しているときに）、配列の現在のバージョンおよびすぐ前のバージョンにおけるマッピングは異なる。例えば、新たな宛先ホスト１０７を追加するときに、データフローＩＤスペースをよりおおくの宛先ホスト１０７まで拡張して、個々の宛先ホスト１０７の負荷を減少させることができる。例えば、相違１１１は、データフローＩＤスペースの一部が、以前は宛先ホスト１０７Ｄ（例えば、データフローＩＤ３）に対応していたが、今は、宛先ホスト１０７Ｃに対応していることを示す。既存のデータフローに対するパケットが同一の宛先ホストに継続する確率を上げるために、マルチプレクサー１０６は、宛先ホスト１０７の配置が遷移中であるときに、キャッシュした状態を参照することができる（ローカルに、またはオーナーマルチプレクサーから問い合わされるかのいずれか）。
【００３７】
図２は、ロードバランサー間で状態を共有する例示的な方法２００のフローチャートを示す。方法２００を、コンピューターアーキテクチャー１００のコンポーネントおよびデータについて説明する。
【００３８】
方法２００は、ルーターからパケットを受信するロードバランサーの動作を含み、当該パケットは、ワイドエリアネットワーク上のソースを特定するソース電子アドレス情報と、仮想電子アドレスを含む宛先電子アドレス情報とを含む（動作２０１）。例えば、マルチプレクサー１０６Ａは、ルーター１０２からパケット１２１を受信することができる。パケット１２１は、ネットワーク１０１上のソースを特定するソース（例えば、ＩＰ）アドレス１２２を含む。パケット１２１はまた、宛先アドレス１２３を含む。宛先アドレス１２３を、宛先ホスト１０７とコンタクトするのに使用される仮想ＩＰアドレスにすることができる。
【００３９】
方法２００は、パケットが既存のデータフローに対するものであると判定するロードバランサーの動作を含む（動作２０２）。例えば、マルチプレクサー１０６は、パケット１２１が既存のデータフローに対するものであると判定することができる。データフローにおける第１のパケット（例えば、伝送制御プロトコル、ＴＣＰパケットに関するＳＹＮパケット）は、第１のパケットインジケーターを含むことができる。データフローにおける他のパケット（例えば、ＴＣＰに対する非ＳＹＮパケット）は、第１のパケットインジケーターを含まない。したがって、パケットが第１のパケットインジケーターを含まないとき、マルチプレクサーは、そのパケットが既存のデータフローに対するものであると推測することができる。マルチプレクサー１０６Ａは、パケット１２１が第１のパケットインジケーターを含まないと判定することができる。そのため、マルチプレクサー１０６Ａは、パケット１２１が既存のデータフローに対するものであると推測する。
【００４０】
方法２００は、ソース電子アドレス情報および宛先電子アドレス情報から既存のデータフローに対するデータフローインジケーターを生成するアルゴリズムを使用する、ロードバランサーの動作を含む（動作２０３）。例えば、ＩＤジェネレーターは、ソースアドレス１２２および宛先アドレス１２３を、フローＩＤ１４４にハッシュするハッシュ関数を使用することができる。フローＩＤ１４４は、例えば、新配列１０９のインデックス位置を表すことができる。例えば、フローＩＤ１４４は、新配列１０９における第４の位置を表すことができる。いくつかの実施形態において、ハッシュアルゴリズムを使用してソースＩＰアドレスおよびＶＩＰをデータフロー識別子にハッシュする。
【００４１】
方法２００は、ロードバランサーが、複数の宛先ホストの中から既存のデータフローに対応する宛先ホストを特定するのに十分な情報が不足していると判定するロードバランサーの動作を含む（動作２０４）。例えば、マルチプレクサー１０６Ａは、マルチプレクサー１０６Ａが宛先ホスト１０７の中からデータフロー１４４に対応する適切な宛先ホストを特定するのに十分な情報が不足していると判定することができる。
【００４２】
動作２０４は、ロードバランサーが既存のデータフローを複数の宛先ホストにおける１つの宛先ホストにマッピングする、いかなるキャッシュした状態を有していないと判定する、ロードバランサーの動作を含むことができる（動作２０５）。例えば、状態マネージャー１４３Ａは、マルチプレクサー１０６Ａが、フローＩＤ１４４を宛先ホスト１０７のうちの１つにマッピングした、キャッシュした状態を有していないと判定することができる。状態マネージャー１４３Ａは、状態１４６Ａ（キャッシュした状態）を参照して、フローＩＤ１４４に対する宛先ホストのマッピングを検査することができる。
【００４３】
動作２０４は、複数の宛先ホストの配置が遷移中であることを検出するロードバランサーの動作を含むことができる。例えば、マルチプレクサー１０６Ａは、宛先ホスト１０７の配置の遷移を検出することができる。１つまたは複数の既存のデータフロー（例えば、フローＩＤ１４４）の存続期間（lifetime）中に、宛先ホスト１０７Ｃを宛先ホスト１０７に追加することができる。宛先配列ジェネレーター１０４は、変更を検出することができる。それに応じて、宛先配列ジェネレーター１０４は、新配列１０９を生成することができる。マルチプレクサー１０６Ａは、旧配列１０８および新配列１０９を参照することができる。少なくとも相違１１１により記述したように、マルチプレクサー１０６Ａは、遷移を検出する。つまり、現在、データフローＩＤスペースの一部を、宛先ホスト１０７Ｃに割り振っている。
【００４４】
方法２００は、ロードバランサーが、既存のデータフローに対応する宛先ホストを特定するのに十分な情報が不足していると判定したことに応答して、既存のデータフローのオーナーとして指定されたオーナーロードバランサーを特定するロードバランサーの動作を含み、当該オーナーロードバランサーを、１つまたは複数の他のロードバランサーの中から選択する（動作２０６）。例えば、マルチプレクサー１０６Ａは、マルチプレクサー１０６ＢをフローＩＤ１４４のオーナーとして特定することができる。オーナーディテクター１４２Ａは、フローＩＤ１４４を入力として受信し、およびマルチプレクサー１０６Ｂに対するＩＰアドレスを、フローＩＤ１４４のオーナーとして出力することができる。
【００４５】
いくつかの実施形態において、マルチプレクサー１０６Ａは、ソースアドレス１２２および宛先アドレス１２３を第２のハッシュ値にハッシュする第２のハッシュアルゴリズムを使用する。第２のハッシュ値は、オーナー配列におけるインデックス位置を表す（例えば、図７Ａおよび７Ｂにおいて記述した）。オーナー配列は、データフローを対応するオーナーマルチプレクサーにマッピングし、そのマルチプレクサーは、遷移が検出されたときに、マッピングしたデータフローに対する状態を維持する。したがって、マルチプレクサー１０６Ａは、オーナー配列におけるフローＩＤ１４４に対するインデックス位置を参照して、マルチプレクサー１０６ＢをフローＩＤ１４４のオーナーとして特定することができる。
【００４６】
ロードバランシングマネージャー１０３は、マルチプレクサー１０６をモニタリングし、およびマルチプレクサーが追加され、および／またはマルチプレクサー１０６から除去されるときに、データフローに対するプライマリーオーナーの配列およびバックアップオーナーの配列を調整することができる。ロードバランシングマネージャー１０３は、データフローに対するオーナーシップを分散して、プライマリーおよびバックアップオーナーシップをマルチプレクサー１０６にわたって（ある程度）均等化することができる。
【００４７】
方法２００はまた、既存のデータフローに対応する宛先ホストを特定するのに十分な情報が不足していると判定したことに応答して、データフロー状態情報に関するリクエストを、オーナーロードバランサーに送信するロードバランサーの動作を含む（動作２０７）。例えば、マルチプレクサー１０６Ａは、パケット１２１をマルチプレクサー１０６Ｂに送信することができる。代わりに、マルチプレクサー１０６Ａは、パケット１２１を保持し、およびフローＩＤ１４４に対するデータフロー状態情報に関する即時リクエストをマルチプレクサー１０６Ｂに送信することができる。
【００４８】
マルチプレクサー１０６Ｂは、マルチプレクサー１０６Ａからパケット１２１を受信することができる。一旦、パケット１２１を受信すると、ＩＤジェネレーター１４１Ｂは、ソースアドレス１２２および宛先アドレス１２３からフローＩＤ１４４を生成することができる。オーナーディテクター１４２Ｂはそして、マルチプレクサー１０６ＢがフローＩＤ１４４に対するオーナーであると判定することができる。状態マネージャー１４３Ｂは、状態１４６Ｂを参照して、状態１２６にアクセスすることができる。状態１２６は、フローＩＤ１４４を宛先ホスト１０７Ｂにマッピングすることができる。状態が見つからない場合、マルチプレクサー１０６Ｂは、現在の宛先配列を使用して、新たな状態１２６を生成することができる。マルチプレクサー１０６Ｂは、パケット１２１を宛先ホスト１０７Ｂに送信することができる。マルチプレクサー１０６Ｂまたは、状態１２６をマルチプレクサー１０６Ａに返すことができる。マルチプレクサー１０６Ｂはまた、このフローに対応するバックアップオーナーに状態１２６を送信することができる。
【００４９】
代わりに、マルチプレクサー１０６Ｂは、マルチプレクサー１０６Ａから、フローＩＤ１４４についてのデータフロー状態情報に対する即時リクエストを受信することができる。オーナーディテクター１４２Ｂは、マルチプレクサー１０６ＢがフローＩＤ１４４に関するオーナーであると判定することができる。状態マネージャー１４３Ｂは、状態１４６Ｂを参照して、状態１２６にアクセスすることができる。マルチプレクサー１０６Ｂは、状態１２６をマルチプレクサー１０６Ａに返すことができる。
【００５０】
方法２００は、オーナーロードバランサーから状態情報を受信するロードバランサーの動作を含み、その状態情報は、既存のデータフローに対応する宛先ホストを特定する（動作２０８）。例えば、マルチプレクサー１０６Ａは、マルチプレクサー１０６Ｂから状態１２６を受信することができる。方法２００は、受信した状態情報をキャッシュするロードバランサーの動作を含む（動作２０９）。例えば、マルチプレクサー１０６Ａは、状態１２６を状態１４６Ａにキャッシュすることができる。即時リクエストに応答してマルチプレクサー１０６Ａが状態１２６を受信するときに、マルチプレクサー１０６Ａはそれから、パケット１２１を宛先ホスト１０７Ｂに送信することができる。
【００５１】
さらに、フローＩＤ１４４に対する後続パケットを受信するときに（マルチプレクサー１０６Ｂがパケット１２１を宛先ホスト１０７Ｂに送信する場合でさえ）、マルチプレクサー１０６Ａは、宛先ホスト１０７Ｂを、その後続パケットに対する適切な宛先ホストとして特定することができる。例えば、マルチプレクサー１０６Ａは、パケット１３２を受信することができる。パケット１３２は、ソースアドレス１２２および宛先アドレス１２３を含む。ＩＤジェネレーター１４１Ｂは、パケット１３２がフローＩＤ１４４に対応すると判定することができる。状態マネージャー１４３Ｂは、状態１４６Ａを参照して、宛先ホスト１０７ＢがフローＩＤ１４４に対する適切な宛先ホストであると特定することができる。マルチプレクサー１０６Ａはそれから、パケット１３２を宛先ホスト１０７Ｂに送信することができる。
【００５２】
他のマルチプレクサーはまた、フローＩＤ１４４に対するパケットを受信することができる。これらの他のマルチプレクサーがフローＩＤ１４４に対するキャッシュした状態を有している場合（自己生成したか、別のマルチプレクサーから問い合わされたかのいずれか）、それらのマルチプレクサーは、パケットを宛先ホスト１０７Ｂに送信することができる。例えば、マルチプレクサー１０６Ｃは、パケット１３１を受信することができる。パケット１３１は、ソースアドレス１２２および宛先アドレス１２３を含む。ＩＤジェネレーター１４１Ｃは、パケット１３２がフローＩＤ１４４に対応すると判定することができる。状態マネージャー１４３Ｃは、状態１４６Ｃを参照して、宛先ホスト１０７ＢがフローＩＤ１４４に対する適切な宛先ホストであると特定することができる。マルチプレクサー１０６Ｃはそれから、パケット１３１を宛先ホスト１０７Ｂに送信することができる。
【００５３】
さらに、宛先ホストの配置が遷移中であるとき、旧宛先配列および新宛先配列において異なる宛先ホストを有する、既存のデータフローに対する状態を備えるマルチプレクサーは、その状態をデータフローに対するオーナーマルチプレクサーに送信することができる。例えば、それは、宛先ホスト１０７Ｃの追加によって宛先ホスト１０７を遷移させることであってもよい。一旦、遷移を検出すると、マルチプレクサー１０６Ｃは、例えば、マルチプレクサー１０６Ａおよび／またはマルチプレクサー１０６Ｂなどの、他のマルチプレクサーがオーナーである、１つまたは複数の既存のデータフローに対する状態を有することができる。遷移を検出したことに応答して、マルチプレクサー１０６は、旧宛先配列および新宛先配列において異なる宛先ホストを有する既存のデータフローに対する状態を、適切なオーナーマルチプレクサーに送信することができる。例えば、マルチプレクサー１０６Ｃは、フローＩＤ１４４に対する状態をマルチプレクサー１０６Ｃ（図示せず）に送信することができる。遷移中、適切なオーナーマルチプレクサーは、他のマルチプレクサーから状態を受信することができる。例えば、マルチプレクサー１０６Ａは、マルチプレクサー１０６Ｃ（図示せず）からフローＩＤ１４４に対する状態を受信することができる。
【００５４】
図３は、ロードバランサー間で状態を共有する例示的な方法３００のフローチャートを示す。方法３００を、コンピューターアーキテクチャー１００のコンポーネントおよびデータについて説明する。
【００５５】
方法３００は、１つまたは複数の他のロードバランサーに含まれる別のロードバランサーからパケットを受信するロードバランサーの動作を含み、当該パケットは、ワイドエリアネットワーク上のソースを特定するソース電子アドレス情報と、仮想電子アドレスを含む宛先電子アドレス情報とを含む（動作３０１）。例えば、マルチプレクサー１０６Ｂは、マルチプレクサー１０６Ａからパケット１２１を受信することができる。方法３００は、受信したパケットが既存のデータフローに対するものであると判定するロードバランサーの動作を含む（動作３０２）。例えば、ＩＤジェネレーター１４１は、パケット１２１がフローＩＤ１４４に対応すると判定することができる。方法３００は、ロードバランサーが既存のデータフローのオーナーであると判定する、ロードバランサーの動作を含む（動作３０３）。例えば、オーナーディテクター１４２Ｂは、マルチプレクサー１０６ＢがフローＩＤ１４４のオーナーであると判定することができる。
【００５６】
方法３００は、ロードバランサーが既存のデータフローに対するキャッシュした状態を有すると判定するロードバランサーの動作を含み、キャッシュした状態は、既存のデータフローを複数の宛先ホストのうちの１つの宛先ホストにマッピングする（動作３０４）。例えば、状態マネージャー１４３Ｂは、状態１４６Ｂを参照して、状態１２６にアクセスすることができる。状態１２６は、フローＩＤ１４４が宛先ホスト１０７Ｂに対応すると示すことができる。代わりに、状態マネージャー１４３Ｂは、状態１２６を生成することができる。
【００５７】
方法３００は、受信したパケットを、既存のデータフローがマッピングされる宛先ホストに送信するロードバランサーの動作を含む（動作３０５）。例えば、マルチプレクサー１０６Ｂは、パケット１２１を宛先ホスト１０７Ｂに送信することができる。方法３００は、キャッシュした状態を他のロードバランサーに送信する、ロードバランサーの動作を含む（動作３０６）。例えば、マルチプレクサー１０６Ｂは、状態１２６をマルチプレクサー１０６Ａに返すことができる。
【００５８】
代わりに、マルチプレクサー１０６Ｂは、フローＩＤ１４４を適切な宛先ホスト１０７にマッピングする状態に関する即時リクエストを、マルチプレクサー１０６Ａから受信することができる。それに応じて、状態マネージャー１４３Ｂは、状態１４６Ｂを参照して、状態１２６にアクセスすることができる。状態１２６は、フローＩＤ１４４が宛先ホスト１０７Ｂに対応すると示すことができる。マルチプレクサー１０６Ｂは、状態１２６をマルチプレクサー１０６Ａに返すことができる。マルチプレクサー１０６Ａはそれから、状態１２６におけるマッピングに基づいて、パケット１２１を宛先ホスト１０７Ｂに送信することができる。
【００５９】
図４Ａおよび図４Ｂは、マルチプレクサー間で状態を共有する例示的なコンピューターアーキテクチャー４００を示す。記述したように、コンピューターアーキテクチャー４００は、マルチプレクサー４０１Ａおよび４０１Ｂ、ならびに宛先ホスト４０２Ａ、４０２Ｂおよび４０２Ｃを含む。図４Ａにおいて、マルチプレクサー４０１Ｂは、パケット４２１を受信する。マルチプレクサー４０１Ｂは、適切な宛先ホストを特定するのに十分な情報が不足していると判定する。それに応じて、マルチプレクサー４０１Ｂは、パケット４２１をマルチプレクサー４０１Ａ（オーナーマルチプレクサー）に送信する。マルチプレクサー４０１Ａは、マルチプレクサー４０１Ｂからパケット４２１を受信する。マルチプレクサー４０１Ａは、状態４２６を特定し、および状態４２６をマルチプレクサー４０１Ｂに返す。状態４２６は、パケット４２１に対するデータフローを宛先ホスト４０２Ｂにマッピングする。マルチプレクサー４０１Ａはまた、パケット４２１を宛先ホスト４０２Ｂに転送する。その次に、マルチプレクサー４０１Ｂは、パケット４２１と同一のデータフローに対するパケット４２２およびパケット４２３を受信する。状態４２６に基づいて、マルチプレクサー４０１Ｂは、パケット４２２およびパケット４２３を宛先ホスト４０２Ｂに送信する。
【００６０】
図４Ｂにおいて、マルチプレクサー４０１Ａは、パケット４３１を受信する。マルチプレクサー４０１Ｂは、適切な宛先ホストを特定するのに十分な情報が不足していると判定する。それに応じて、マルチプレクサー４０１Ｂは、パケット４３１をマルチプレクサー４０１Ａ（オーナーマルチプレクサー）に送信する。マルチプレクサー４０１Ａは、マルチプレクサー４０１Ｂからパケット４３１を受信する。マルチプレクサー４０１Ａは、状態４３６を特定し、および状態４３６をマルチプレクサー４０１Ｂに返す。状態４３６は、パケット４３１に対するデータフローを宛先ホスト４０２Ｂにマッピングする。マルチプレクサー４０１Ａは、パケット４３１を宛先ホスト４０２Ｂに送信する。
【００６１】
しかしながら、状態４３６を受信する前に、マルチプレクサー４０１Ｂは、パケット４３１と同一のデータフローに対するパケット４３２を受信する。マルチプレクサー４０１Ｂがまだ状態４３６を受信していないので、マルチプレクサー４０１Ｂは、適切な宛先ホストを特定するのに十分な情報が不足していると判定する。それに応じて、マルチプレクサー４０１Ｂはまた、パケット４３２をマルチプレクサー４０１Ａに送信する。マルチプレクサー４０１Ａは、マルチプレクサー４０１Ｂからパケット４３２を受信する。マルチプレクサー４０１Ａは、状態４３６をマルチプレクサー４０１Ｂに送信したと判定する。マルチプレクサー４０１Ａは、パケット４３２を宛先ホスト４０２Ｂに送信する。続いて、マルチプレクサー４０１Ｂは、パケット４３１と同一のデータフローに対するパケット４３３を受信する。状態４３６に基づいて、マルチプレクサー４０１Ｂは、パケット４３３を宛先ホスト４０２Ｂに送信する。したがって、本発明の実施形態は、マルチプレクサー間で状態を交換する際の遅延を補償することができる。
【００６２】
図５Ａおよび図５Ｂは、マルチプレクサー間で状態を共有する例示的なコンピューターアーキテクチャー５００を示す。記述したように、コンピューターアーキテクチャー５００は、マルチプレクサー５０１Ａ、５０１Ｂおよび５０１Ｃ、ならびに宛先ホスト５０２Ａ、５０２Ｂおよび５０２Ｃを含む。
【００６３】
図５Ａにおいて、マルチプレクサー５０１Ａは、パケット５２１およびパケット５２２（パケット５２１およびパケット５２２は、ＳＹＮパケットではない）を含む既存のデータフローに対するプライマリーオーナーである。マルチプレクサー５０１Ｃは、パケット５２１およびパケット５２２を含むデータフローに対するバックアップオーナーである。
【００６４】
マルチプレクサー５０１Ａは、パケット５２１を受信する。マルチプレクサー５０１Ａは、マルチプレクサー５０１Ａが既存のデータフローのオーナーであり、および適切な宛先ホストを特定するのに十分な情報が不足している（即ち、マルチプレクサー５０１Ａは、既存のデータフローに対するキャッシュした状態を欠いている）と判定する。それに応じて、マルチプレクサー５０１Ａは、現在の宛先配列（例えば、新配列１０９）を参照して、宛先ホスト５０２Ａを適切な宛先ホストと特定する。マルチプレクサー５０１Ａはまた、既存のデータフローに対する状態５２６をトラッキングすることを開始する。後続の遷移後、および状態５２６が新配列とは異なると判定した後、マルチプレクサー５０１Ａは、状態５２６をマルチプレクサー５０１Ｃに送信する。マルチプレクサー５０１Ｃは、マルチプレクサー５０１Ａから状態５２６を受信し、および状態５２６をキャッシュする。状態５２６は、既存のデータフローを宛先ホスト５０２Ａにマッピングする。したがって、マルチプレクサー５０１Ａに障害が発生すると、マルチプレクサー５０１Ｃは、状態５２６を提供することにおいて、他のマルチプレクサーに引き継ぐことができる。
【００６５】
図５Ｂにおいて、マルチプレクサー５０１Ａは、パケット５３１およびパケット５３２（パケット５３１およびパケット５３２は、ＳＹＮパケットではない）を含む既存のデータフローに対するプライマリーオーナーである。マルチプレクサー５０１Ｃは、パケット５３１およびパケット５３２を含むデータフローに対するバックアップオーナーである。
【００６６】
マルチプレクサー５０１Ｂは、パケット５３１およびパケット５３２を受信する。マルチプレクサー５０１Ｂは、宛先ホスト５０２Ａが既存のデータフローに対する適切な宛先ホストであると判定するのに十分な情報を有する（即ち、新たなフローまたはマルチプレクサーのいずれかがフローに関するキャッシュした情報を有する）。マルチプレクサー５０１Ｂはまた、マルチプレクサー５０１Ａが既存のデータフローのプライマリーオーナーであると判定する。宛先配列において変更があると、マルチプレクサー５０１Ｂは、遷移を検出し、および状態５３６をマルチプレクサー５０１Ａに送信する。マルチプレクサー５０１Ａは、マルチプレクサー５０１Ｂから状態５３６を受信する。状態５３６は、既存のデータフローを宛先ホスト５０２Ａにマッピングする。
【００６７】
同一のフローに属するさらなるパケットが、マルチプレクサー５０１Ｂに到達し続ける場合、マルチプレクサー５０１Ｂは、バッチ更新５３８（マルチプレクサー５０１Ａがオーナーである状態５３６および他の状態を含む）をオーナーマルチプレクサー５０１Ａに随時送信し続けて、オーナーマルチプレクサーが、それがオーナーであるすべてのフローに関する現在の状態を常に有するようにする。
【００６８】
随時、マルチプレクサー５０１Ａは、バッチ状態の更新を他のバックアップオーナーに送信することができる。例えば、マルチプレクサー５０１Ａは、状態５３７をマルチプレクサー５０１Ｃに送信することができる。マルチプレクサー５０１Ｃは、マルチプレクサー５０１Ａから状態５３７を受信することができる。状態５３７は、マルチプレクサー５０１Ａによってトラッキングされるアクティブなフローに対する状態更新（状態５３６を含む）のバッチとすることができる。
【００６９】
図６Ａ、図６Ｂ、図６Ｃおよび図６Ｄは、データフローの宛先ホストへのマッピングを維持する例示的なコンピューターアーキテクチャー６００を示す。図６Ａは、宛先ホストＡ６０１、宛先ホストＢ６０２、および宛先ホストＣ６０３の配置を定常状態で記述する。したがって、旧配列６０８および新配列６０９は、互いに一致する。定常状態では、マルチプレクサーは、配列を参照して、データフローに対する適切な宛先ホストを判定することができる。
【００７０】
図６Ｂは、宛先ホストＡ６０１、宛先ホストＢ６０２、および宛先ホストＣ６０３の配置を記述し、そこでは宛先ホストＣ６０３が除去される。宛先ホストの除去を、基本的に瞬時に行うことができる。そのため、宛先ホストの除去は、必ずしも宛先ホストの配置における遷移を示す必要はない。したがって、宛先ホストが除去されると、マルチプレクサーは、引き続き配列を参照して、データフローに対する適切な宛先ホストを判定することができる。
【００７１】
図６Ｃは、宛先ホストＡ６０１、宛先ホストＢ６０２、宛先ホストＣ６０３および宛先ホスト６０４Ｄの配置を記述し、そこでは宛先ホストＣ６０３が宛先ホスト６０４Ｄに置き換えられる。宛先ホストの置換もまた、基本的に瞬時に行うことができる。そのため、宛先ホストの置換は、必ずしも宛先ホストの配置における遷移を示す必要はない。したがって、宛先ホストが置換されると、マルチプレクサーは、引き続き配列を参照して、データフローに対する適切な宛先ホストを判定することができる。
【００７２】
図６Ｄは、宛先ホストＡ６０１、宛先ホストＢ６０２、宛先ホストＣ６０３および宛先ホスト６０４Ｄの配置を記述し、そこでは宛先ホストＣ６０３を追加する。宛先ホストの追加は、遷移期間を含むことができ、したがって、宛先ホストの配置における遷移を含むことができる。遷移期間中、旧配列６０８および新配列６０９におけるマッピングは異なることができる（一部のデータフローが宛先ホストＤに再度割り振られて、作業負荷が均等されるため）。異なるマッピングを検出した場合、マルチプレクサーは、データフロー状態をトラッキングし、および交換することができる。すべてのオーナーマルチプレクサーが、それらが所有するフローに関する決定を行うのに十分な情報を有するときに、宛先ホストの配置は、定常状態に戻り、および旧配列６０８および新配列６０９が再度一致する。
【００７３】
図７Ａおよび図７Ｂは、データフローのオーナーマルチプレクサーへのマッピングを維持する例示的なコンピューターアーキテクチャー７００を示す。図７Ａは、マルチプレクサーＡ７０１、マルチプレクサーＢ７０２、マルチプレクサーＣ７０３およびマルチプレクサーＤ７０４を記述する。プライマリーオーナー配列７０８は、データフローをプライマリーオーナーマルチプレクサーにマッピングする。バックアップオーナー配列７０９は、データフローをバックアップオーナーマルチプレクサーにマッピングする。配列におけるインデックス位置は、データフローＩＤに対応することができる。例えば、データフローＩＤ６に対するプライマリーオーナーは、マルチプレクサーＢ７０２である。同様に、データフローＩＤ６に対するバックアップオーナーは、マルチプレクサーＣ７０３である。いくつかの実施形態において、オーナーディテクター（例えば、１４２Ａ、１４２Ｂ、１４２Ｃなど）は、データフローＩＤを配列へのインデックス位置として使用し、およびインデックス位置において特定されたマルチプレクサーに状態の更新を送信する。
【００７４】
マルチプレクサーに障害が発生するときに、そのマルチプレクサーに対するプライマリーオーナーシップおよびバックアップオーナーシップのレスポンシビリティ（responsibility）を再度割り振る。図７Ｂは、マルチプレクサーＣ７０３の障害を記述する。障害に応答して、インデックス位置（データフローＩＤ）９−１２に対するプライマリーオーナーシップおよびインデックス位置（データフローＩＤ）５−８に対するバックアップオーナーシップを、残りのマルチプレクサーに再度割り振る。
【００７５】
したがって、本発明の実施形態は、新たな接続をどのように負荷分散するべきかを決定する一貫性のあるハッシュアルゴリズムを使用するロードバランサーを含む。一貫性のあるハッシュアルゴリズムの使用により、ロードバランサーが、交換する必要がある状態の量を最小限にすることが可能になる。特に、ハッシュおよび宛先配列を使用して判定することができないフロー状態のみを同期すればよい。ロードバランサーは、着信パケットに対するフロー状態の情報（所与のフローに対する宛先アドレス）を保持する。それが必要な場合、即ち、例えば、宛先ホスト構成における変更を検出するときに、選択した状態情報をロードバランサー間で決定論的に共有し、それによって、権限のあるロードバランサー（例えば、オーナーロードバランサー）が所与のフローに対する正確な宛先ホストを選択することが可能になる。各ロードバランサーは、権限のあるロードバランサーに到達して、ローカルに判定することができないフローについて理解することができる。
【００７６】
本発明を、本発明の精神または本質的な特徴から逸脱することなく他の特定の形式で具体化してもよい。説明した実施形態は、すべての点において単に例示的であり、および制限されるものではないと見なされる。したがって、本発明の範囲を、上記の説明によってではなく、添付の特許請求の範囲によって示す。特許請求の範囲と等価の意味および範囲に入るすべての変更は、それらの範囲内に含まれるものとする。
【図１】
0005889914.tif 000002
【図２】
0005889914.tif 000003
【図３】
0005889914.tif 000004
【図４Ａ】
0005889914.tif 000005
【図４Ｂ】
0005889914.tif 000006
【図５Ａ】
0005889914.tif 000007
【図５Ｂ】
0005889914.tif 000008
【図６Ａ】
0005889914.tif 000009
【図６Ｂ】
0005889914.tif 000010
【図６Ｃ】
0005889914.tif 000011
【図６Ｄ】
0005889914.tif 000012
【図７Ａ】
0005889914.tif 000013
【図７Ｂ】
0005889914.tif 000014