(57)【特許請求の範囲】
【請求項１】
コンピューターアーキテクチャ内に、前記コンピューターアーキテクチャがアプリケーションの複数のインスタンスおよび前記アプリケーションのアプリケーション・ロード・バランサーを含み、アプリケーション・ロード・バランシングが前記アプリケーションの一部であり、前記アプリケーションのインスタンスがマシンのファーム中のマシン上実行されて、前記アプリケーションの負荷を前記アプリケーションの前記複数のインスタンスにわたってバランスを取る方法であって、
アプリケーション・ロード・バランサーが、前記アプリケーションに送信される第１のクライアント開始メッセージを受信する動作であって、前記アプリケーション・ロード・バランサーは、前記アプリケーション・ロード・バランサーが前記アプリケーションと同じセキュリティモデルにおいてメッセージコンテンツにアクセスすることができるよう前記アプリケーションの一部として統合されており、前記第１のクライアント開始メッセージが、メッセージシーケンスに含まれる複数のメッセージのうち最初のメッセージである、動作と、
前記アプリケーション・ロード・バランサーが、指定された識別子を、前記第１のクライアント開始メッセージの特性に基づいて、前記メッセージシーケンスに含まれる前記複数のメッセージに割り当てる動作と、
前記アプリケーション・ロード・バランサーが、前記割り当てられた識別子を前記アプリケーションのインスタンスにマッピングしないことを決定する動作と、
前記アプリケーション・ロード・バランサーが、前記指定された識別子を、前記アプリケーションの負荷を前記アプリケーションの前記複数のインスタンスにわたってバランスを取るロード・バランシング・アルゴリズムに従って前記アプリケーションの指定されたインスタンスにマッピングする動作と、
前記アプリケーション・ロード・バランサーが、前記第１のクライアント開始メッセージを前記アプリケーションの指定されたインスタンスに送信する動作と、
前記アプリケーション・ロード・バランサーが、前記第１のクライアント開始メッセージの受信に引き続く前記メッセージシーケンスに含まれる第２のクライアント開始メッセージを受信する動作と、
前記アプリケーション・ロード・バランサーが、前記指定された識別子を、前記第２のクライアント開始メッセージの特性に基づいて前記第２のクライアント開始メッセージに割り当てる動作と、
前記アプリケーション・ロード・バランサーが、前記第２のクライアント開始メッセージを、前記指定された識別子を前記アプリケーションの指定されたインスタンスにマッピングすることに基づいて前記第１のクライアント開始メッセージと相関させる動作と、
前記アプリケーション・ロード・バランサーが、前記第２のクライアント開始メッセージを、前記相関に応答して前記アプリケーションの指定されたインスタンスに送信する動作と
を備えたことを特徴とする方法。
【請求項２】
前記第１のクライアント開始メッセージを、前記第１のクライアント開始メッセージのコンテンツに基づいてメッセージセッションと相関させることをさらに備えたことを特徴とする、請求項１に記載の方法。
【請求項３】
前記指定された識別子を前記第１のクライアント開始メッセージに割り当てる動作は、アフィニティＩＤを前記第１のクライアント開始メッセージに割り当てて、前記第１のクライアント開始メッセージを前記アプリケーションに送信される他のメッセージと関連付ける動作を含むことを特徴とする、請求項１に記載の方法。
【請求項４】
前記アフィニティＩＤを前記第１のクライアント開始メッセージに割り当てる動作は、アフィニティＩＤを、１または複数のトランスポートセッション、プロトコルセッション、メッセージコンテンツ、および第１のクライアント開始メッセージと関連するメッセージセッションに基づいて前記第１のクライアント開始メッセージに割り当てる動作を含むことを特徴とする、請求項３に記載の方法。
【請求項５】
前記アプリケーション・ロード・バランサーが前記指定された識別子を前記第２のクライアント開始メッセージに割り当てる動作は、前記アフィニティＩＤを前記第２のクライアント開始メッセージに割り当てる動作を含むことを特徴とする、請求項３に記載の方法。
【請求項６】
前記アプリケーション・ロード・バランサーが前記指定された識別子を前記アプリケーションの指定されたインスタンスにマッピングする動作は、前記指定された識別子を、前記ロード・バランシング・アルゴリズムに従って、前記アプリケーションの指定されたインスタンスにマッピングする動作を含むことを特徴とする、請求項１に記載の方法。
【請求項７】
前記アプリケーション・ロード・バランサーが、前記第１のクライアント開始メッセージの認証情報を検査して、クライアント認証をする動作と、
前記アプリケーションインスタンスが承認チェックのためにセキュリティクレームを使用することができるよう前記セキュリティクレームをシリアライズする動作と
をさらに備えたことを特徴とする、請求項１に記載の方法。
【請求項８】
前記アプリケーション・ロード・バランサーは、キュー、データベース、および外部ストアの中から選択されるポーリング・トランスポート・セッションからクライアント開始メッセージを受信することを特徴とする、請求項１に記載の方法。
【請求項９】
コンピューターアーキテクチャ内に、前記コンピューターアーキテクチャがアプリケーションの複数のインスタンスおよび前記アプリケーションのアプリケーション・ロード・バランサーを含み、アプリケーション・ロード・バランシングが前記アプリケーションの一部であり、前記アプリケーションの各インスタンスが、対応する別個のマシン上実行されて、前記アプリケーションの負荷を前記アプリケーションの前記複数のインスタンスにわたってバランスを取る方法であって、
アプリケーション・ロード・バランサーが、アプリケーションインスタンス開始メッセージを、前記アプリケーションの複数のインスタンスのうち指定されたインスタンスから受信する動作であって、前記アプリケーションインスタンス開始メッセージが、前記アプリケーションの複数のインスタンスの外部にある別のアプリケーションに送信される、動作と、
前記アプリケーション・ロード・バランサーが、指定された識別子を、前記アプリケーションインスタンス開始メッセージの特性に基づいて前記アプリケーションインスタンス開始メッセージに割り当てる動作と、
前記アプリケーション・ロード・バランサーが、前記指定された識別子を前記アプリケーションの指定されたインスタンスにマッピングして、前記アプリケーションの負荷を前記アプリケーションの前記複数のインスタンスにわたってバランスを取る動作と、
前記アプリケーション・ロード・バランサーが、返信メッセージを前記アプリケーションに送信されるその他のアプリケーションから受信する動作と、
前記アプリケーション・ロード・バランサーが、前記指定された識別子を、前記返信メッセージの特性に基づいて前記返信メッセージに割り当てる動作と、
前記アプリケーション・ロード・バランサーが、前記返信メッセージを、前記指定された識別子を前記アプリケーションの指定されたインスタンスにマッピングすることに基づいて前記アプリケーションインスタンス開始メッセージと相関させる動作と、
前記アプリケーション・ロード・バランサーが、前記返信メッセージを前記アプリケーションの指定されたインスタンスに送信する動作と
を備えたことを特徴とする方法。
【請求項１０】
前記アプリケーションインスタンス開始メッセージを、前記アプリケーションインスタンス開始メッセージのコンテンツに基づいてメッセージセッションと相関させることをさらに備えたことを特徴とする、請求項９に記載の方法。
【請求項１１】
前記指定された識別子を前記アプリケーションインスタンス開始メッセージに割り当てる動作は、アフィニティＩＤを前記アプリケーションインスタンス開始メッセージに割り当てて、前記アプリケーションインスタンス開始メッセージを前記アプリケーションインスタンスに送信される他のメッセージと関連付ける動作を含むことを特徴とする、請求項９に記載の方法。
【請求項１２】
前記アフィニティＩＤを前記アプリケーションインスタンス開始メッセージに割り当てる動作は、アフィニティＩＤを、１または複数のトランスポートセッション、プロトコルセッション、およびアプリケーションインスタンス開始メッセージと関連するメッセージセッションに基づいて前記アプリケーションインスタンス開始メッセージに割り当てる動作を含むことを特徴とする、請求項１１に記載の方法。
【請求項１３】
前記アプリケーション・ロード・バランサーが、前記返信メッセージの認証情報を検査して、クライアント認証をする動作と、
前記アプリケーションインスタンスが承認チェックのためにセキュリティクレームを使用することができるよう前記セキュリティクレームをシリアライズする動作と
をさらに備えたことを特徴とする、請求項９に記載の方法。
【請求項１４】
アプリケーションの負荷を前記アプリケーションの複数のインスタンスにわたってバランスを取るためのロード・バランシング・システムであって、
少なくとも１つのコンピューターシステムと、
システムメモリと、
アプリケーションを表現するコンピューター実行可能命令を格納する１または複数のコンピューター読み取り可能な記録媒体であって、前記アプリケーションが、異なるマシン上実行される前記アプリケーションの複数のインスタンスおよび異なるマシン上実行されるアプリケーション・ロード・バランサーを含み、前記アプリケーション・ロード・バランサーが、負荷を前記アプリケーションの前記複数のインスタンスにわたってバランスを取る、コンピューター読み取り可能な記録媒体と
を備え、
前記アプリケーションの各インスタンスは、
通信スタックを通じて前記アプリケーション・ロード・バランサーと通信して、
シリアライズされたセキュリティのクレームヘッダーをデシリアライズして、
セキュリティクレームをデシリアライズされたセキュリティクレームヘッダーから再構成して、
前記アプリケーションインスタンスの正常性に関連するヘルスステート情報を提供して、
アプリケーションインスタンスにおけるステータス変更に関連するライフサイクルイベントを提供する
よう構成され、
前記アプリケーション・ロード・バランサーは、
前記アプリケーションに送信されるメッセージを受信して、
メッセージの特性に基づいて識別子をメッセージに割り当てて、
ライフサイクルイベントを前記複数のアプリケーションインスタンスの各々から受信して、ヘルスステート情報を前記複数のアプリケーションインスタンスを実行する対応するコンピューターシステムから受信して、
割り当てられた識別子をアプリケーションインスタンスにマッピングしないことを決定して、
同じ特性を有する一連のメッセージを互いに相関させることができるよう割り当てられた識別子をアプリケーションインスタンスにマッピングしないことを決定することに応答して、割り当てられた識別子を、受信されたヘルスステート情報および受信されたライフサイクルイベントに基づいてアプリケーションインスタンスにマッピングして、
割り当てられた識別子をアプリケーションインスタンスにマッピングすることを決定して、
前記割り当てられた識別子を前記アプリケーションインスタンスにマッピングすることを決定することに応答して、受信されたメッセージを、割り当てられた識別子に基づいて一連のメッセージの１または複数の以前に受信されたメッセージと相関させて、
前記アプリケーションの負荷を前記アプリケーションの複数のインスタンスにわたってバランスを取るために、受信されたメッセージをアプリケーションインスタンスに送信する
よう構成されることを特徴とするロード・バランシング・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サービスのロードバランシングに関する。
【背景技術】
【０００２】
コンピューターシステムおよびコンピューター関連技術は、社会の多くの側面に影響を及ぼす。確かに、コンピューターシステムの性能は、我々の生活および仕事のやり方を変えた。今日、コンピューターシステムは、コンピューターシステムの出現より前に手で実行された多数のタスク（例えば、文書処理、スケジューリング、アカウンティング等）を普通に実行する。ごく最近、コンピューターシステムを、互いに連結して、他の電子デバイスを連結して、有線と無線との両方のコンピューターネットワークを形成し、それらを介してコンピューターシステムおよび他の電子デバイスが電子コンテンツを転送できる。従って、多くのコンピューティングタスクのパフォーマンスは、多数の異なるコンピューターシステムおよび／または多数の異なるコンピューティングコンポーネントにわたって分散される。
【０００３】
多くの環境において、複数のリモートユーザーは、集中化されたリモートロケーションを通じてアプリケーションおよびデータにアクセスする。例えば、多数のクライアントマシンは、インターネットによってウェブサービスにアクセスできる。多くの環境において、特に作業負荷が増大したサービス（または他のアプリケーション）に対して、サービス（またはアプリケーション）の複数のインスタンスを生成して、より良いユーザー体験を提供する。しかしながら、全般的な作業負荷がサービスの複数のインスタンスにわたり比較的均等に分散されない場合、サービスの複数のインスタンスを有することは、ほとんど利点がない。例えば、１つのインスタンス（またはインスタンスの小さいサブセット）が過剰であり、同時に他のインスタンスが十分に利用されてない場合、複数のインスタンスを有する利点は、著しく縮小される。
【０００４】
従って、通常、複数のインスタンスサーバ環境は、サービスのインスタンス間にわたる作業負荷をより均等に分散させるあるタイプのロードバランシング技術を含む。例えば、サービスの通信が受信されると、ロードバランサーは、その通信をサービスのインスタンスにルーティングして、負荷を減らすことができる。従って、サービスの全般的な作業負荷を、サービスの複数のインスタンスにわたって、より均等に分散することができる。
【０００５】
しかしながら、新しく受信された通信をどのようにルーティングするかを決定することは、主として、新しい通信が受信された時点におけるインスタンスの作業負荷に基づく。例えば、クライアントが、サービスの進行中の使用に関連したサービスの個別のインスタンスとの通信を以前に行っていたかもしれない。しかしながら、クライアントがそのサービスの進行中の使用に関連した新しい通信を送信すると、新しい通信は、単に新しい通信が受信された時点における作業負荷に本質的に基づいてサービスの異なるインスタンスにルーティングされることがある。このことは、より長い実行および／またはステートフルな（stateful）サービスについて最適とはいえない。
【０００６】
クライアントとステートフルサービスとの間の通信は、一連の要求／応答シーケンスを含むことができる。各要求／応答シーケンス間におけるサービスは、例えば、さらなるクライアント要求を待つ間に中間値を保持すること等、通信に関連したあるステートを持続できる。しかしながら、ステートが持続されたサービスのインスタンスが要求／応答シーケンス間において後続の高い作業負荷を受ける場合、ロードバランサーは、さらなるクライアント要求をサーバの異なるインスタンスに送信することがある。残念ながら、通信がサービスのあるインスタンスからサービスの別のインスタンスに切り替わると、サービスのその他のインスタンスは、通信に対して持続されたステートに気づくことができない。このように、その他のインスタンスは、持続されたステートを再計算するように要求される。
【０００７】
新しいインスタンスにおいて（すでに持続された）ステートをリロードすることは、ステートが持続されたインスタンスに、通信の次のクライアント要求を処理することを可能にするよりも多くのリソースを消費する。従って、通信を新しいインスタンスへ 迂回することは、サービスの全般的な作業負荷をむだに増加することがある。さらに、ステートが持続されたインスタンスのメモリリソースは、持続されたステートがクライアントとのさらなる通信に使用されないので、本質的に浪費される。
【発明の概要】
【０００８】
本発明は、サービスのロードバランシングのための方法、システム、およびコンピュータープログラム製品に及ぶ。いくつかの実施形態において、アプリケーション・ロード・バランサーは、アプリケーションに送信される第１のクライアント開始メッセージを受信する。第１のクライアント開始メッセージは、メッセージシーケンスに含まれる複数のメッセージのうち最初のメッセージ（例えば、アクティベーションメッセージ）である。アプリケーション・ロード・バランサーは、指定された識別子を、第１のクライアント開始メッセージの特性に基づいて、メッセージシーケンスに含まれる複数のメッセージに割り当てる。アプリケーション・ロード・バランサーは、割り当てられた識別子を、アプリケーションのインスタンスにマッピングしないことを決定する。
【０００９】
アプリケーション・ロード・バランサーは、指定された識別子を、ロード・バランシング・アルゴリズムに従って、アプリケーションの指定されたインスタンスにマッピングする。マッピングは、アプリケーションの負荷を、アプリケーションの複数のインスタンスにわたってバランスを取ることを援助する。アプリケーション・ロード・バランサーは、メッセージを、アプリケーションの指定されたインスタンスに送信する。
【００１０】
アプリケーション・ロード・バランサーは、第１のクライアント開始メッセージの受信に引き続く、アプリケーションに送信される第２のクライアント開始メッセージを受信する。アプリケーション・ロード・バランサーは、指定された識別子を、第２のクライアント開始メッセージの特性に基づいて第２のクライアント開始メッセージに割り当てる。アプリケーション・ロード・バランサーは、第２のクライアント開始メッセージを、指定された識別子をアプリケーションの指定されたインスタンスにマッピングすることに基づいて、第１のクライアント開始メッセージと相関させる（例えば、アクティベーションメッセージと相関させる相関メッセージに帰着する）。アプリケーション・ロード・バランサーは、第２のクライアント開始メッセージを、相関に応答してアプリケーションの指定されたインスタンスに送信する。
【００１１】
他の実施形態において、アプリケーション・ロード・バランサーは、アプリケーションの複数のインスタンスのうち指定されたインスタンスから、アプリケーションインスタンス開始メッセージを受信する。アプリケーションインスタンス開始メッセージは、別のアプリケーションに送信される。アプリケーション・ロード・バランサーは、指定された識別子を、アプリケーションインスタンス開始メッセージの特性に基づいてアプリケーションインスタンス開始メッセージに割り当てる。アプリケーション・ロード・バランサーは、指定された識別子をアプリケーションの指定されたインスタンスにマッピングして、アプリケーションの負荷を、アプリケーションの複数のインスタンスにわたってバランスを取る。マッピングは、アプリケーションの負荷を、アプリケーションの複数のインスタンスにわたってバランスを取ることを援助する。
【００１２】
アプリケーション・ロード・バランサーは、メッセージを、その他のアプリケーションに送信する。アプリケーション・ロード・バランサーは、アプリケーションに送信される、その他のアプリケーションからの返信メッセージを受信する。アプリケーション・ロード・バランサーは、指定された識別子を、返信メッセージの特性に基づいて返信メッセージに割り当てる。アプリケーション・ロード・バランサーは、返信メッセージを、指定された識別子をアプリケーションの指定されたインスタンスにマッピングすることに基づいて、アプリケーションインスタンス開始メッセージと相関させる。アプリケーション・ロード・バランサーは、返信メッセージをアプリケーションの指定されたインスタンスに送信する。
【００１３】
本概要は、以下の発明を実施するための形態においてさらに説明される簡易な形式において概念の一つの選択を導入するために与えられる。本概要は、特許請求の範囲の対象の主な特徴または不可欠な特徴を特定することを意図せず、特許請求の範囲の対象の範囲を決定するのに役立つものとして使用されることも意図しない。
【００１４】
本発明の付加的な特徴および利点は、本明細書において以下に説明され、ある程度、本明細書から明らかになるであろうし、または本発明の実施によって習得されることができる。本発明の特徴および利点を、特に添付の特許請求の範囲において指示された手段および組み合わせによって実現させて得ることができる。本発明のこれらと他の特徴は、以下の明細書および添付の特許請求の範囲からさらに十分に明らかになるであろうし、または後述のとおり本発明の実施によって習得されることができる。
【００１５】
本発明の上述および他の利点および特徴を得ることができる方法を説明するために、簡単に上述した本発明のさらに詳細な説明は、添付の図面に示されたそれらの特定の実施形態を参照することによって与えられるであろう。それらの図面は、本発明の典型的な実施形態を表しているにすぎず、従って本発明の範囲を限定するものとみなすべきでないことを理解した上で、本発明を、添付の図面の使用を通じて付加的な特定性および詳細を用いて説明していく。
【図面の簡単な説明】
【００１６】
【図１】サービスのロードバランシングを容易にする例示的なコンピューターアーキテクチャの概観を示す図である。
【図２】サービスのロードバランシングを容易にする例示的なコンピューターアーキテクチャの概観を示す図である。
【図３】サービスのロードバランシングのための例示的な方法のフローチャートを示す図である。
【図４】サービスのロードバランシングのための例示的な方法のフローチャートを示す図である。
【発明を実施するための形態】
【００１７】
本発明は、サービスのロードバランシングのための方法、システム、およびコンピュータープログラム製品に及ぶ。いくつかの実施形態において、アプリケーション・ロード・バランサーは、アプリケーションに送信される第１のクライアント開始メッセージを受信する。第１のクライアント開始メッセージは、メッセージシーケンスに含まれる複数のメッセージのうち最初のメッセージ（例えば、アクティベーションメッセージ）である。アプリケーション・ロード・バランサーは、指定された識別子を、第１のクライアント開始メッセージの特性に基づいて、メッセージシーケンスに含まれる複数のメッセージに割り当てる。アプリケーション・ロード・バランサーは、割り当てられた識別子を、アプリケーションのインスタンスにマッピングしないことを決定する。
【００１８】
アプリケーション・ロード・バランサーは、指定された識別子を、ロード・バランシング・アルゴリズムに従って、アプリケーションの指定されたインスタンスにマッピングする。マッピングは、アプリケーションの負荷を、アプリケーションの複数のインスタンスにわたってバランスを取ることを援助する。アプリケーション・ロード・バランサーは、メッセージを、アプリケーションの指定されたインスタンスに送信する。
【００１９】
アプリケーション・ロード・バランサーは、第１のクライアント開始メッセージの受信に引き続く、アプリケーションに送信される第２のクライアント開始メッセージを受信する。アプリケーション・ロード・バランサーは、指定された識別子を、第２のクライアント開始メッセージの特性に基づいて第２のクライアント開始メッセージに割り当てる。アプリケーション・ロード・バランサーは、第２のクライアント開始メッセージを、指定された識別子をアプリケーションの指定されたインスタンスにマッピングすることに基づいて、第１のクライアント開始メッセージと相関させる（例えば、アクティベーションメッセージと相関させる相関メッセージに帰着する）。アプリケーション・ロード・バランサーは、第２のクライアント開始メッセージを、相関に応答してアプリケーションの指定されたインスタンスに送信する。
【００２０】
他の実施形態において、アプリケーション・ロード・バランサーは、アプリケーションの複数のインスタンスのうち指定されたインスタンスから、アプリケーションインスタンス開始メッセージを受信する。アプリケーションインスタンス開始メッセージは、別のアプリケーションに送信される。アプリケーション・ロード・バランサーは、指定された識別子を、アプリケーションインスタンス開始メッセージの特性に基づいてアプリケーションインスタンス開始メッセージに割り当てる。アプリケーション・ロード・バランサーは、指定された識別子をアプリケーションの指定されたインスタンスにマッピングして、アプリケーションの負荷を、アプリケーションの複数のインスタンスにわたってバランスを取る。マッピングは、アプリケーションの負荷を、アプリケーションの複数のインスタンスにわたってバランスを取ることを援助する。
【００２１】
アプリケーション・ロード・バランサーは、メッセージをその他のアプリケーションに送信する。アプリケーション・ロード・バランサーは、アプリケーションに送信される、その他のアプリケーションからの返信メッセージを受信する。アプリケーション・ロード・バランサーは、指定された識別子を、返信メッセージの特性に基づいて返信メッセージに割り当てる。アプリケーション・ロード・バランサーは、返信メッセージを、指定された識別子をアプリケーションの指定されたインスタンスにマッピングすることに基づいて、アプリケーションインスタンス開始メッセージと相関させる。アプリケーション・ロード・バランサーは、返信メッセージを、アプリケーションの指定されたインスタンスに送信する。
【００２２】
本発明の実施形態は、以下により詳細に説明するように、コンピューターハードウェアを含む専用または汎用コンピューターを備えるまたは使用することができる。本発明の範囲内における実施形態は、コンピューター実行可能命令および／またはデータ構造を伝達または格納するための物理および他のコンピューター読み取り可能な媒体も含む。そのようなコンピューター読み取り可能な媒体は、汎用または専用コンピューターシステムによってアクセスすることができるあらゆる利用可能な媒体とすることができる。コンピューター実行可能命令を格納するコンピューター読み取り可能な媒体は、物理ストレージ媒体である。コンピューター実行可能命令を伝達するコンピューター読み取り可能な媒体は、送信媒体である。従って例を挙げると、発明の実施形態は、少なくとも２つの明確に異なる種類のコンピューター読み取り可能な媒体、即ち、物理ストレージ媒体と送信媒体とを備えることができるが、これに限らない。
【００２３】
物理ストレージ媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、またはコンピューター実行可能命令またはデータ構造の形式で所望のプログラムコード手段を格納するのに使用することができて、汎用または専用コンピューターによってアクセスすることができるその他の媒体を含む。
【００２４】
本明細書および以下の特許請求の範囲において、「ネットワーク」は、コンピューターシステムおよび／またはモジュールおよび／または他の電子デバイス間で、電子データの移送を実現させる１または複数のデータリンクとして定義される。情報がネットワークまたは別の通信接続（有線、無線、または有線または無線の組み合わせのいずれか）を介してコンピューターに転送または提供されると、適切に、コンピューターは、接続を送信媒体とみなす。送信媒体は、コンピューター実行可能命令またはデータ構造の形式で所望のプログラムコード手段を伝達するのに使用することができて、汎用または専用コンピューターによってアクセスすることができるネットワークおよび／またはデータリンクを含むことができる。上記の組み合わせも、コンピューター読み取り可能な媒体の範囲内に含まれなければならない。
【００２５】
さらに、さまざまなコンピューターシステムコンポーネントに到達すると、コンピューター実行可能命令またはデータ構造の形式のプログラムコード手段を、送信媒体から物理ストレージ媒体に（逆の場合も同じ）自動的に転送することができることを理解されたい。例えば、ネットワークまたはデータリンクを介して受信されたコンピューター実行可能命令またはデータ構造を、ネットワーク・インターフェース・モジュール（例えば、「ＮＩＣ」）内のＲＡＭにバッファして、その後最終的には、コンピューターシステムにおけるコンピューターシステムＲＡＭおよび／または不揮発性の物理ストレージ媒体に転送することができる。従って、物理ストレージ媒体を、送信媒体も（またはそれを主に）使用するコンピューターシステムコンポーネントに含むことができることを理解されたい。
【００２６】
コンピューター実行可能命令は、例えば、汎用コンピューター、専用コンピューター、または専用処理デバイスにいくつかの機能または機能群を実行させる命令およびデータを備える。コンピューター実行可能命令を、例えば、バイナリ、アセンブリ言語等の中間フォーマット命令、さらにはソースコードとすることができる。本発明の対象を、構造的特徴および／または方法論的動作に特有の言語で説明してきたが、添付の特許請求の範囲に定義される本発明の対象は、上述の特有の特徴または動作に必ずしも限定されないことを理解されたい。むしろ、上述の特有の特徴および動作は、特許請求の範囲を実装する例示的な形態として開示される。
【００２７】
本発明を、パーソナルコンピューター、デスクトップコンピューター、ラップトップコンピューター、メッセージプロセッサ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブルな家電、ネットワークＰＣ、ミニコンピューター、メインフレームコンピューター、携帯電話、ＰＤＡ、ページャ、ルータ、交換機等を含む多くの種類のコンピューターシステム構成を用いたネットワークコンピューティング環境において実施できることを当業者は認識するであろう。本発明を、（有線データリンク、無線データリンク、または有線データリンクと無線データリンクの組み合わせのいずれかによって）ネットワークにリンクされたローカルコンピューターシステムとリモートコンピューターシステムとの両方がタスクを実行する、分散システム環境において実施することもできる。分散システム環境において、プログラムモジュールをローカルメモリストレージデバイスとリモートメモリストレージデバイスとの両方に置くことができる。
【００２８】
図１は、サービスのロードバランシングを容易にする例示的なコンピューターアーキテクチャ１００を示す。図に示すように、コンピューターアーキテクチャ１００は、アプリケーション・ロード・バランサー１０１とコンテナー１１２を含む。垂直の省略記号１４１は、１または複数の他のコンテナーもコンピューターアーキテクチャ１００に含まれることを表す。コンピューターアーキテクチャ１００は、アプリケーション・ロード・バランサー１０１、コンテナー１１２、および１または複数の他のコンテナーを包むコンテナーグループを表すことができる。各々のコンポーネントを、システムバス経由および／または、例えば、ローカル・エリア・ネットワーク（「ＬＡＮ」）、ワイド・エリア・ネットワーク（「ＷＡＮ」）等のネットワーク経由（またはその一部として）、さらにインターネット経由で互いに接続することができる。それによって、図示されたそれぞれのコンポーネントだけでなくその他の接続されたコンポーネントも、メッセージに関連するデータと交換メッセージに関連するデータ（例えば、インターネットプロトコル（「ＩＰ」）データグラムと、伝送制御プロトコル（「ＴＣＰ」）、ハイパーテキスト転送プロトコル（「ＨＴＴＰ」）、簡易メール転送プロトコル（「ＳＭＴＰ」）等のＩＰデータグラムを使用する他の上位層プロトコル）をネットワーク経由で生成することができる。
【００２９】
アプリケーション・ロード・バランサー１０１は、サービスバインディング１０２、アフィニティゼーション（affinitization）モジュール１０４、クレームシリアライザー１０５、ロード・バランサー・バインディング１０６、コンフィギュレーションマネージャー１０７、アクティブ・インスタンス・マネージャー１０８、ノードマネージャー１０９、およびアフィニティゼーションステート１１１をさらに含む。一般に、サービスバインディング１０２は、アプリケーション・ロード・バランサー１０１用のメッセージを提供する通信スタックである。サービスバインディング１０２内の相関モジュール１０３は、メッセージを、メッセージコンテンツに基づいて相関させるように構成されて、相関識別子をメッセージに挿入して（例えば、メッセージヘッダーに挿入する）相関メッセージを示す。
【００３０】
一般に、アプリケーション・ロード・バランサー１０１は、サービスの一部として、または同じコンテナーグループに包まれた、ロードバランスされるアプリケーションとして構成される。このように、アプリケーション・ロード・バランサー１０１は、アプリケーションと同じセキュリティモデルを有する。従って、アプリケーション・ロード・バランサー１０１は、アプリケーションと同じ権限を用いてアプリケーションのメッセージ部分にアクセスできる。アプリケーション・ロード・バランサー１０１を、アプリケーションが設計されるときに、設計するまたはアプリケーションに組み込むことができる。あるいはまた、アプリケーション・ロード・バランサー１０１を、例えば、アプリケーションがコンピューターアーキテクチャ１００において開始されるときに、アプリケーションに統合させることができる。
【００３１】
アフィニティゼーションモジュール１０４は、メッセージ（例えば、メッセージヘッダー）を検査してメッセージがどのようにサービスインスタンスに発送されるかを決定する。アフィニティゼーションモジュール１０４は、トランスポートセッション、プロトコルセッション、メッセージセッション（例えば、相関モジュール１０３からの相関識別子）、メッセージコンテンツ等を含むさまざまな異なるピボット上でメッセージをアフィニタイズ（affinitize）することができる。アフィニタイズすることは、シーケンス内のメッセージまたは連続メッセージをサービスインスタンスに「ピンで留める（pin）」、またはどのサービスインスタンスがメッセージを受信するかを決定するアフィニティ（affinity）ＩＤを作成することを含む。アフィニティゼーションを使用することにより、同じセッション内のメッセージを、互いに相関させて、同じサービスインスタンスに発送させることができる可能性の著しい増加がある。
【００３２】
一般に、アプリケーション・ロード・バランサー１０１は、アフィニティゼーションのエラーから学習することができる。アプリケーション・ロード・バランサー１０１をコンテナーグループ１１２（サービスインスタンス１１４を含むコンテナーグループ）に含むことができるので、アプリケーション・ロード・バランサー１０１は、コンテナー１１２によって投入された例外を理解することができる。従って、メッセージがアフィニタイズされて異なるバックエンドコンテナーに発送されて、そのコンテナーのインスタンスが現在アクティブオンである場合、異なるバックエンドコンテナーによって投入された例外は、そのインスタンスが他の場所で現在アクティブオンであることを示すデータを包む。
【００３３】
例えば、アプリケーション・ロード・バランサー１０１は、バックエンドアプリケーションによって返信されるリダイレクトされた例外を理解することができる。リダイレクトされた例外は、アプリケーションインスタンスが現在どこで実行しているかについての情報を包むことができる。この情報は、アプリケーション・ロード・バランサー１０１によって、そのメッセージを新しい宛先に再送信するのに使用される。
【００３４】
クレームシリアライザー１０５は、メッセージ認証情報を検査して、メッセージから生じたあらゆるセキュリティクレームをメッセージヘッダーにシリアライズするように構成される。次に、メッセージヘッダーは、メッセージに含まれる。従って、メッセージ内のクレームを、サービスインスタンスにおいて再シリアライズして、承認チェックを実行することができる。
【００３５】
ロード・バランサー・バインディング１０６は、アプリケーション・ロード・バランサー１０１とコンテナー１１２との間の通信スタックである。ノードマネージャー１０９は、アプリケーション・ロード・バランサー１０１がバランスを取るサービスインスタンスについての動的および静的情報にアクセスするように構成される。例えば、ノードマネージャーは、ヘルスレポート１３３からサービスインスタンス１１４の動的および静的情報にアクセスすることができる。アフィニティゼーションモジュール１０３は、動的および静的情報を使用して、メッセージがどのように発送されるかを決定することを援助できる。アクティブ・インスタンス・マネージャー１０８は、ロードバランスされたサービスに対して現在アクティブであるサービスインスタンスおよびそのロードバランスされたサービスの各サービスインスタンスの位置についての情報にアクセスするように構成される。例えば、アクティブ・インスタンス・マネージャー１０８は、インスタンスステータス変更１３４からサービスインスタンス１１４の情報にアクセスすることができる。アクティブ・インスタンス・マネージャー１０８は、この情報をアフィニティゼーションステート１１１に格納することができる。
【００３６】
コンフィギュレーションマネージャー１０７は、アプリケーション・ロード・バランサー１０１をそのコンフィギュレーションに提供するように構成される。コンフィギュレーションマネージャー１０７は、例えば、例としてアプリケーション・ロード・バランサー１０１用のコンフィギュレーションをロードするコンフィギュレーションデータ１３６等の、コンフィギュレーションデータを処理することができる。コンフィギュレーションデータは、スロットリングまたはサービスのサービスインスタンスに適用できるサービスの他の挙動を指定することができる。
【００３７】
コンテナー１１２は、ロード・バランサー・バインディング１１６、クレームデシリアライザー１１３、サービスインスタンス１１４、コンテナー管理サービス１２１、およびインスタンス・ライフサイクル・レポーティング１２２を含む。サービスインスタンス１１４は、例えば、例として長時間実行および／またはステートフルな（例えば、ウィンドウズファンデーション（「ＷＦ」）またはウィンドウズ・コミュニケーション・ファンデーション（「ＷＣＦ」）テクノロジーに基づく）ウェブサービス等のサービスのインスタンスである。サービスインスタンス１１４を、サービスの複数のインスタンスの１つとすることができる。サービスの他のインスタンスを、垂直の省略記号１４１によって表された他のコンテナー上で実行させることができる。
【００３８】
ロード・バランサー・バインディング１１６は、アプリケーション・ロード・バランサー１０１とコンテナー１１２との間において使用される通信スタックである。
【００３９】
クレームデシリアライザー１１３は、シリアライズされたクレームヘッダーを検査して、承認を実行するためにセキュリティクレームを再構成するように構成される。さらに、クレームデシリアライザーは、アプリケーション・ロード・バランサー１０１を認証して、セキュリティクレームがアプリケーション・ロード・バランサー１０１から送信されるようにして、ある保証（例えば、アンチスプーフィングメカニズム）を提供するように構成される。さらに、クレームデシリアライザー１１３は、例えば、アプリケーション・ロード・バランサー１０１がメッセージを転送した結果としてメッセージに追加されたアプリケーション・ロード・バランサー１０１のクレームを除去するように構成される。従って、クライアント認証を、ロードバランサー１０１において実行するのに続いて、コンテナー１１２においてクライアント承認を実行することができる。
【００４０】
コンテナー管理サービス１２１は、サービスインスタンス１１４を実行するコンピューターシステムの正常性についてのヘルス情報を提供するように構成される。コンピューターシステムの正常性を、例えば、例としてメモリ、ＣＰＵ等のさまざまな環境条件から決定することができる。コンテナー管理サービス１２１は、例えば、例としてヘルスレポート１３３においてヘルス情報を出力することができる。
【００４１】
インスタンス・ライフサイクル・レポーティング・サービス１２２は、例えば、例としてサービスインスタンス１１４が完了する、または退避する／パッシベートする（passivate）ときに等の、サービスインスタンス１１４のステートが変化するときにイベントを提供するように構成される。例えば、これらの２つのイベントのうちどちらか一方は、アクティブ・インスタンス・マネージャー１０８によって使用されて、そのインスタンス・アフィニティ・マップ（アフィニティゼーションステート１１１に格納される）をクリーンアップすることができる。インスタンス・ライフサイクル・レポーティング・サービス１２２は、例えば、例としてインスタンスステータス変更１３４においてイベントを出力することができる。
【００４２】
クライアントとサービスインスタンスとの間の通信を、クライアントかサービスインスタンスかにおいて開始できる。図３は、クライアントが開始する通信による実施形態における、サービスのロードバランシングのための例示的な方法３００のフローチャートを示す。方法３００を、コンピューターアーキテクチャ１００におけるコンポーネントおよびデータに関して説明する。
【００４３】
方法３００は、アプリケーションに送信された第１のクライアント開始メッセージを受信するアプリケーション・ロード・バランサーの動作を含み、第１のクライアント開始メッセージは、メッセージシーケンスに含まれる複数のメッセージのうち最初のメッセージである（動作３０１）。例えば、アプリケーション・ロード・バランサー１０１は、コンテンツ１４１を含む、メッセージ１３１をクライアントから受信することができる。メッセージ１３１は、メッセージ１３２と、１または複数の他のメッセージとを含むメッセージのシーケンスのうち最初のメッセージであるとすることができる。従って、メッセージ１３１を、メッセージシーケンスのロードバランシングをアクティベートするためのアクティベーションメッセージとみなすことができる。先に説明したように、アプリケーション・ロード・バランサー１９１を、アプリケーションの一部として統合させることができる。従って、アプリケーション・ロード・バランサーを、サービスインスタンス１１４がインスタンスであるアプリケーションの一部として統合させることができる。従って、アプリケーション・ロード・バランサー１０１は、サービスインスタンス１１４と同じセキュリティモデルのもとにメッセージコンテンツにアクセスできる。
【００４４】
方法３００は、アプリケーション・ロード・バランサーが、指定された識別子を、第１のクライアント開始メッセージの特性に基づいて、メッセージシーケンスに含まれる複数のメッセージに割り当てる動作を含む（動作３０２）。例えば、アフィニティゼーションモジュール１０４は、アフィニティＩＤを、メッセージ１３１を含むメッセージシーケンスに割り当てることができる。例えば、アフィニティＩＤを、相関モジュール１０３、コンテンツ１４１等によって決定される、指定されたメッセージセッションへの相関に基づいて割り当てることができる。
【００４５】
方法３００は、アプリケーション・ロード・バランサーが、割り当てられた識別子を、アプリケーションのインスタンスにマッピングしないことを決定する動作を含む（動作３０３）。例えば、アクティブ・インスタンス・マネージャー１０４は、メッセージ１３１に割り当てられたアフィニティＩＤを、アフィニティゼーションステート１１１に含まないことを決定できる。方法３００は、アプリケーション・ロード・バランサーが、指定された識別子を、ロード・バランシング・アルゴリズムに従ってアプリケーションの指定されたインスタンスにマッピングする動作を含む（動作３０４）。例えば、アフィニティゼーションモジュール１０４は、割り当てられたアフィニティＩＤを、ロード・バランシング・アルゴリズムに従ってサーバインスタンス１１４にマッピングできる。事実上、あらゆるロード・バランシング・アルゴリズムを使用できる。いくつかの実施形態において、ラウンド・ロビン・アルゴリズムは、メッセージを、指定されたアプリケーションインスタンスを実行するコンピューターシステムのアプリケーションインスタンスおよびヘルスステート情報のライフサイクルに基づいてアプリケーションインスタンスに割り当てる。例えば、アフィニティゼーションモジュール１０４は、割り当てられたアフィニティＩＤを、省略記号１９１によって表された他のコンテナー内の他のサービスインスタンスの同様の情報と共に、サービスインスタンス１１４ベースの（サービスインスタンス１１４０を実行するコンピューターシステムの）ヘルスレポート１３３および（サービスインスタンス１１４の）インスタンスステータス変更１３４にマッピングすることができる。
【００４６】
方法３００は、アプリケーション・ロード・バランサーが、第１のクライアント開始メッセージを、アプリケーションの指定されたインスタンスに送信する動作を含む（動作３０５）。例えば、アプリケーション・ロード・バランサー１０１は、メッセージ１３１をコンテナー１１２に送信できる。
【００４７】
方法３００は、アプリケーション・ロード・バランサーが、第１のクライアント開始メッセージの受信に引き続くメッセージシーケンスに含まれる第２のクライアント開始メッセージを受信する動作を含む（動作３０６）。例えば、アプリケーション・ロード・バランサー１０１は、メッセージ１３２をクライアントから受信することができる。方法３００は、アプリケーション・ロード・バランサーが、指定された識別子を、第２のクライアント開始メッセージの特性に基づいて第２のクライアント開始メッセージに割り当てる動作を含む（動作３０７）。例えば、アフィニティゼーションモジュール１０４は、メッセージ１３１のアフィニティＩＤを、例えば、メッセージ１３１と同一指定のメッセージセッションへの相関に基づいてメッセージ１３２に割り当てて、メッセージ１３１、コンテンツ１４２等のメッセージシーケンスに含むことができる。
【００４８】
方法３００は、アプリケーション・ロード・バランサーが、第２のクライアント開始メッセージを、指定された識別子をアプリケーションの指定されたインスタンスにマッピングすることに基づいて第１のクライアント開始メッセージと相関させる動作を含む（動作３０８）。例えば、アクティブ・インスタンス・サービス・マネージャー１０４は、メッセージ１３２に割り当てられたアフィニティＩＤが、（アフィニティＩＤをメッセージ１３１に割り当てることによって）アフィニティゼーションステート１１１にすでに含まれていて、サービスインスタンス１１４にマッピングされていることを決定することができる。このように、メッセージ１３２をメッセージ１３１と相関される相関メッセージとみなすことができて、アクティベーションメッセージとみなすことができる。方法３００は、アプリケーション・ロード・バランサーが、第２のクライアント開始メッセージを、相関に応答してアプリケーションの指定されたインスタンスに送信する動作を含む（動作３０９）。例えば、アプリケーション・ロード・バランサー１０１は、メッセージ１３２をコンテナー１１２に送信できる。
【００４９】
図４は、サービスインスタンスが開始する通信による実施形態における、サービスのロードバランシングのための例示的な方法４００のフローチャートを示す。方法４００は、コンピューターアーキテクチャ１００におけるコンポーネントおよびデータに関して説明する。
【００５０】
方法４００は、アプリケーション・ロード・バランサーが、アプリケーションインスタンス開始メッセージを、アプリケーションの複数のインスタンスのうち指定されたインスタンスから受信して、そのアプリケーションインスタンス開始メッセージは、アプリケーションの複数のインスタンスの外部にある別のアプリケーションに送信される、の動作を含む（動作４０１）。例えば、アプリケーション・ロード・バランサー１０１は、メッセージ１５１をコンテナー１１２から受信できる。メッセージ１５１を、コンピューターアーキテクチャ１００において、コンテナー１１２およびアプリケーション・ロード・バランサー１０１の外部にある別のアプリケーションに送信できる。例えば、メッセージ１５１を、有線または無線のネットワーク接続によって、アプリケーション・ロード・バランサーに接続されるアプリケーションに送信できる。方法４００は、アプリケーション・ロード・バランサーが、指定された識別子を、アプリケーションインスタンス開始メッセージの特性に基づいてアプリケーションインスタンス開始メッセージに割り当てる動作を含む（動作４０２）。例えば、アフィニティゼーションモジュール１０４は、アフィニティＩＤを、メッセージ１５１のメッセージセッション、プロトコルセッション、トランスポートセッション、コンテンツ１６１等に基づいてメッセージ１５１に割り当てることができる。
【００５１】
方法４００は、アプリケーション・ロード・バランサーが、指定された識別子を、アプリケーションの指定されたインスタンスにマッピングして、アプリケーションの負荷を、アプリケーションの複数のインスタンスにわたってバランスを取る動作を含む（動作４０３）。例えば、アクティブ・インスタンス・マネージャー１０８は、メッセージ１５１用のアフィニティＩＤを、メッセージがコンテナー１１２から生じるのでサービスインスタンス１１４にマッピングできる。この実施形態において、メッセージ１５１を、アクティベーションメッセージとみなすことができる。方法４００は、アプリケーション・ロード・バランサーが、メッセージを、その他のアプリケーションに送信する動作を含む（動作４０４）。例えば、アプリケーション・ロード・バランサー１０１は、メッセージ１５１をクライアントに送信できる。
【００５２】
方法４００は、アプリケーション・ロード・バランサーが、アプリケーションに送信される、その他のアプリケーションからの返信メッセージを受信する動作を含む（動作４０５）。例えば、アプリケーション・ロード・バランサー１０１は、メッセージ１３２をクライアントから受信できる。方法４００は、アプリケーション・ロード・バランサーが、指定された識別子を、返信メッセージの特性に基づいて返信メッセージに割り当てる動作を含む（動作４０６）。例えば、アフィニティゼーションモジュール１０４は、相関ＩＤを、例えば、メッセージ１５１、コンテンツ１４２、またはメッセージシーケンス等に含まれるもの等と同一、指定のメッセージセッションへの相関に基づいてメッセージ１３２に割り当てることができる。
【００５３】
方法４００は、アプリケーション・ロード・バランサーが、返信メッセージを、指定された識別子をアプリケーションの指定されたインスタンスにマッピングすることに基づいてアプリケーションインスタンス開始メッセージと相関させる動作を含む（動作４０７）。例えば、アクティブインスタンスサービスマネージャー１０４は、アフィニティゼーションステート１１１を参照して、相関ＩＤを、メッセージ１５１に割り当てられたアフィニティＩＤにマッピングすることができる。本質的に、これは、配信用のメッセージ１３２をサービスインスタンス１１４にマッピングする。このように、メッセージ１３２を、メッセージ１５１と相関される相関メッセージとみなすことができて、アクティベーションメッセージとみなすことができる。方法４００は、アプリケーション・ロード・バランサーが、返信メッセージを、アプリケーションの指定されたインスタンスに送信する動作を含む（動作４０８）。例えば、アプリケーション・ロード・バランサー１０１は、メッセージ１３２をコンテナー１１２に送信できる。
【００５４】
アプリケーション・ロード・バランサーを、アプリケーション・ロード・バランサーがバランスを取るサービスを組み立てるのに使用されるのと同じインフラストラクチャを使用して組み立てることができる。さらに、アプリケーション・ロード・バランサーをサービスと共にグローバルコンテナーに含むことができるので、アプリケーション・ロード・バランサーは、サービスのあらゆるトランスポートチャネルからメッセージを受信することができる。このように、アプリケーション・ロード・バランサーを、例えば、例としてキュー、データベース、外部ストア等のポーリングトランスポートからのメッセージを受信するように構成できる。従って、本発明の実施形態は、サービスをより簡単にスケールアウトさせることを可能にする。さらに、同じグローバルコンテナーに含めることによって、アプリケーション・ロード・バランサーを、アプリケーションと同じセキュリティモデルのもとに、アプリケーションに送信されるメッセージのコンテンツにアクセスさせることを可能にする。
【００５５】
例えば、図２は、サービスのロードバランシングを容易にする例示的なコンピューターアーキテクチャ２００の概観を示す。図に示すように、コンピューターアーキテクチャ２００は、コンテナーグループ２０１とコンテナーグループ２０２とを含む。コンテナーグループ２０１は、（マシン２５１において）ロードバランサー２７１とロードバランサー２７２とを含み、マシン２５２においてローカルコンテナー２６１を含む。コンテナーグループ２０２は、マシン２５６においてロードバランサー２７３を含み、マシン２５４においてローカルコンテナー２６３を含む。マシン２５３は、ロケーションコンテナー２６１とロケーションコンテナー２６３とを含む。ローカルコンテナー２６１は、コンテナーグループ２０１に含まれて、ローカルコンテナー２６３は、コンテナーグループ２０２に包まれる。
【００５６】
コンピューターアーキテクチャ２００内において、最後が文字で終わる参照記号は、その参照記号の各数字にそれぞれ一致するサービスのインスタンスを表す。従って、サービスインスタンス２１１Ａおよび２１１Ｂは、サービス２１１のインスタンスを表し、サービスインスタンス２１２Ａおよび２１２Ｂは、サービス２１２のインスタンスを表し、サービスインスタンス２１３Ａおよび２１３Ｂは、サービス２１３のインスタンスを表す。従って、コンピューターアーキテクチャ２００において図に示すように、各サービスは、それ自体に対応するロードバランサーを有する。即ち、ロードバランサー２７１は、少なくともサービスインスタンス２１１Ａとサービスインスタンス２１１Ｂとの間でバランスを取り、ロードバランサー２７２は、少なくともサービスインスタンス２１２Ａとサービスインスタンス２１２Ｂとの間でバランスを取り、ロードバランサー２７３は、少なくともサービスインスタンス２１３Ａとサービスインスタンス２１３Ｂとの間でバランスを取る。
【００５７】
各々のロードバランサーは、メッセージを受信するのに対応するサービスバインディングを有する。即ち、ロードバランサー２７１は、サービスバインディング２２１を含み、ロードバランサー２７２は、サービスバインディング２２２を含み、ロードバランサー２７３は、サービスバインディング２２３を含む。さらに、各々のロードバランサーは、サービスインスタンスとの通信のためのロード・バランサー・バインディングを含む。即ち、ロードバランサー２７１は、ロード・バランサー・バインディング２３１を含み、ロードバランサー２７２は、ロード・バランサー・バインディング２３２を含み、ロードバランサー２７３は、ロード・バランサー・バインディング２３３を含む。
【００５８】
さらに、各サービスインスタンスは、それに対応するロードバランサーとの通信のためのロード・バランサー・バインディングを含む。例えば、サービスインスタンス２１１Ａおよび２１１Ｂは、ロードバランサー２７１との通信のためのロード・バランサー・バインディング２４１Ａおよび２４１Ｂを含む。サービスインスタンス２１２Ａおよび２１２Ｂは、ロードバランサー２７２との通信のためのロード・バランサー・バインディング２４２Ａおよび２４２Ｂを含む。サービスインスタンス２１３Ａおよび２１３Ｂは、ロードバランサー２７３との通信のためのロード・バランサー・バインディング２４３Ａおよび２４３Ｂを含む。従って、各サービスインスタンスのエンドポイントに対して、アプリケーション・ロード・バランサーにおいて対応するエンドポイントがある。
【００５９】
したがって、本発明の実施形態は、メッセージのアフィニティゼーションに基づいて、サービスのインスタンス間におけるロードバランシングを容易にする。例えば、同じセッション内のメッセージを、同じサービスのインスタンスに発送させることができる。長時間実行および／またはステートフルなサービスと関連したシーケンスまたは一連の関連メッセージは、サービスの同じインスタンスに、より発送されやすい。従って、サービスインスタンスがクライアントステートを持続した場合、持続されたクライアントステートを利用する可能性の増加があり、そのクライアントステートを再生成する別のサービスインスタンスを有さない可能性の増加がある。
【００６０】
さらに、本発明の実施形態は、メッセージを、サーバファーム内に展開されるサービスに分散することを容易にする。例えば、実施形態は、相関メッセージを、サービスのキャッシュされたインメモリのインスタンスにアフィニタイズして、サービスを短時間または長時間実行させることができる。相関メッセージの分散およびアフィニティゼーションを容易にするために、ロードバランサーは、アプリケーションの一部として動作し、承認を実行する実アプリケーションにセキュリティ情報を渡す前に、必要な復号およびメッセージの承認を実行する。相関がコンテンツに基づき、メッセージのコンテンツが基本的にアプリケーションの変更に従うので、アプリケーション・ロード・バランサーは、実アプリケーションのあらゆる種類のバージョニング（versioning）に関与する。すなわち、アプリケーション・ロード・バランサーは、新しいメッセージコントラクトを有する（従って、異なるメッセージコンテンツになる）アプリケーションの新しいバージョンがある場合でさえ、その職務を実行することができる。
【００６１】
本発明を、その精神または本質的特性から逸脱することなく、他の特定の形態において実施することができる。説明した実施形態は、すべての点において単に例示的と見なされ、限定されるものではない。本発明の範囲は、従って、上述の説明よってではなく、むしろ添付の特許請求の範囲によって示される。特許請求の範囲と同等の意味および範囲におけるすべての変更も、その範囲内に包含される。
【図１】
0005485993.tif 000002
【図２】
0005485993.tif 000003
【図３】
0005485993.tif 000004
【図４】
0005485993.tif 000005