(57)【要約】  本発明は、一般に、サブスクライバサービス及びパブリッシャサービスの通信に使用される抽象化及びファイルモデルに関連する。抽象化とファイルモデルにより、基礎となる通信メカニズムを動的に変更し、サブスクライバ又はパブリッシャコードへの変更を要せず、キャッシュ（待ち時間の削減）やバッチ処理（帯域幅使用率の向上）等の最適化を透過的に導入できる。抽象化は、さらに中間ライトウェイトメッセージ指向ミドルウェアの導入を促進し、透過的なスケーリング通信を提供する。
2020510919.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
サブスクライバサービスとプロキシサーバを有するサブスクライバサーバにおいて、
第１サービス要求をサブスクライバサービスから前記プロキシサーバに送信することと、前記サービス要求はパブリッシャサービスに対応するアイデンティティ情報に関連付けられており、
前記第１サービス要求を前記パブリッシャサービスに通信することと、前記通信することは、前記プロキシサーバを介して通信することを含み、前記プロキシサーバは、前記パブリッシャサービスと通信するためにネットワーク通信データを含む可変構成データを使用し、
前記パブリッシャサービスから前記第１サービス要求に対する第１応答を受信することと、
前記ネットワーク通信データへの変更を示す情報を取得することと、
前記ネットワーク通信データへの前記変更を示す前記情報に基づいて、前記可変構成データを更新構成データに更新することと、
第２サービス要求をサブスクライバサービスから前記プロキシサーバに送信することと、前記サービス要求は前記パブリッシャサービスに対応するアイデンティティ情報に関連付けられており、
前記第２サービス要求を前記パブリッシャサービスに通信することと、前記通信することは、前記プロキシサーバを介して通信することを含み、前記プロキシサーバは、前記パブリッシャサービスと通信するために前記更新構成データを使用し、
前記パブリッシャサービスからの前記第２サービス要求に対する第２応答を受信すること、
とを具備する方法。
【請求項２】
前記第２サービス要求を前記パブリッシャサービスに通信することは、前記サブスクライバサービスのコードを変更することなく行われ、ここにおいて、前記プロキシサーバは前記パブリッシャサービスと通信するために、前記更新構成データを使用する、請求項１に記載の方法。
【請求項３】
前記ネットワーク通信データへの変更を示す前記情報を取得することは、通信ポリシー、通信方法、プロトコル、又は実装に対応する変更データを受信することを含む、請求項１に記載の方法。
【請求項４】
前記ネットワーク通信データへの変更を示す前記情報を取得することは、ネットワーク状態データの変更に対応する変更データを受信することを含む、請求項１に記載の方法。
【請求項５】
前記第１サービス要求を前記パブリッシャサービスに通信することは、ミドルウェアを介して通信することをさらに含む、請求項１に記載の方法。
【請求項６】
前記ネットワーク通信データへの変更を示す前記情報を取得することは、ミドルウェアの動作若しくは実装の変更、又はミドルウェアの動作及び実装の変更に対応する変更データを受信することを含む、請求項５に記載の方法。
【請求項７】
ネットワーク状態データの変化を検出すること、及び、前記変化の検出に基づいて、前記ミドルウェアの動作若しくは実装、又はその両方を変更することをさらに含む、請求項６に記載の方法。
【請求項８】
リポジトリから前記ミドルウェアの動作若しくは実装、又はその両方を制御することと、及び、前記リポジトリにおいて前記ネットワーク通信データへの変更を示す前記情報を提供することをさらに含む、請求項６に記載の方法。
【請求項９】
システムであって、
パブリッシャサービスに結合されたリポジトリと、
登録されたパブリッシャサービス及び前記登録されたパブリッシャサービス各々の通信データを含む、前記リポジトリの情報を保持するデータストアと、
前記リポジトリに結合された状態検出ロジックと、前記状態検出ロジックは、状態変化の検出に基づいて少なくとも１つのパブリッシャサービスが使用する通信データを変更し、
サブスクライバサービスに結合された前記リポジトリとを具備し、監視のためサブスクライバサービスが前記リポジトリに登録した、パブリッシャサービスの通信データへの変更に従って、情報を前記サブスクライバサービスに通信することを含む、
システム。
【請求項１０】
パブリッシャサービスの通信データへの前記変更は、プロトコル、永続キューイング、一度だけの通信、少なくとも一度の通信、リモートプロシージャコール通信、同期／非同期イベントメッセージング、ライトウェイトメッセージ指向ミドルウェア、メッセージバッチ処理、メッセージキャッシュ、サブスクライバとパブリッシャ間のケイパビリティベース認証と承認、トランザクション通信、又はセキュリティプロトコルの少なくとも１つへの変更を含む、請求項９に記載のシステム。
【請求項１１】
前記サブスクライバサービスは、前記パブリッシャサービスの通信データへの前記変更が前記リポジトリを介して通信されるまで、通信データの第１セットを使用し、前記パブリッシャサービスの通信データへの前記変更が前記リポジトリを介して通信された後は、通信データの第２セットを使用するように構成される、請求項９に記載のシステム。
【請求項１２】
前記状態検出ロジックは、パブリッシャサービスを介して前記リポジトリに結合される、請求項９に記載のシステム。
【請求項１３】
前記状態検出ロジックは、ミドルウェアを介して前記リポジトリに結合される、請求項９に記載のシステム。
【請求項１４】
前記サブスクライバサービスは、前記パブリッシャサービスの通信データへの前記変更が前記リポジトリを介して通信されるまで、第１パブリッシャサービスとして、前記パブリッシャサービスと通信するために通信データの第１セットを使用し、前記第１パブリッシャサービスの前記通信データへの前記変更が前記リポジトリを介して通信された後は、第２の異なるパブリッシャサービスを使用するように構成される、請求項９に記載のシステム。
【請求項１５】
実行時にステップを実行する機械実行可能命令を有する１又は複数の機械可読記憶媒体であって、
プロキシサーバを介して、サブスクライバサービスとパブリッシャサービスとの間でサービスリクエストの第１セットと対応する応答を通信することと、前記通信することは、前記プロキシサーバにおいて、前記パブリッシャサービスと通信するためにネットワーク通信データの第１セットを使用することを含み、
前記ネットワーク通信データの第１セットへの変更に基づいて、前記ネットワーク通信データの第１セットを更新ネットワーク通信データに更新することと、
前記プロキシサーバを介してサブスクライバサービスと前記パブリッシャサービス間でサービスリクエストの第２セットと対応する応答を通信することと、を備え、前記通信することは、前記プロキシサーバにおいて、前記パブリッシャサービスと通信するために前記更新ネットワーク通信データを使用することを含む、
１又は複数の機械可読記憶媒体。
【請求項１６】
前記ネットワーク通信データの第１セットへの前記変更について前記データストアを監視することを含むさらなる命令を有する、請求項１５に記載の１又は複数の機械可読記憶媒体。
【請求項１７】
前記ネットワーク通信データの第１セットへの変更に基づいて、前記ネットワーク通信データの第１セットを更新ネットワーク通信データに更新することは、前記サブスクライバサービスのコードを変更せず、通信プロトコル、永続キューイング、一度だけの通信、少なくとも一度の通信、リモートプロシージャコール通信、同期／非同期イベントメッセージング、ライトウェイトメッセージ指向ミドルウェア、メッセージバッチ処理、メッセージキャッシュ、サブスクライバとパブリッシャ間のケイパビリティベース認証と承認、トランザクション通信、又はセキュリティプロトコルの少なくとも１つを更新することを含む、請求項１５に記載の１又は複数の機械可読記憶媒体。
【請求項１８】
前記パブリッシャサービスにサービスリクエストの前記第１セットを通信することは、ミドルウェアを介して通信することをさらに含む、請求項１５に記載の１又は複数の機械可読記憶媒体。
【請求項１９】
前記ネットワーク通信データの第１セットへの変更に基づいて、前記ネットワーク通信データの第１セットを更新ネットワーク通信データに更新することは、ミドルウェアの動作の変更に基づいて更新することを含む、請求項１８に記載の１又は複数の機械可読記憶媒体。
【請求項２０】
前記ネットワーク通信データの第１セットへの変更に基づいて、前記ネットワーク通信データの第１セットを更新ネットワーク通信データに更新することは、前記パブリッシャサービスによる変更に基づいて更新することを含む、請求項１５に記載の１又は複数の機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  分散コンピューティングシステムでは、サブスクライバサービスは、パブリッシャサービスと呼ばれる別のサービスの使用を欲するサービス／ネットワークアプリケーションを含み、サブスクライバサービスが望むいくつかの機能をエクスポートする。大規模な分散システムでのサービスディスカバリは、一般に、サブスクライビングサービスを公開サービスの正しいバージョンにマッチングさせることを目的としている。
【背景技術】
【０００２】
[0002]  マッチングされると、同時期の（contemporary）サブスクライバサービスとパブリッシャサービスは静的な方法で通信する。サービス通信ポリシー、メソッド、及び／又は実装（例えば、バージョン）の変更等、通信関連の変更が必要な場合は、サブスクライバサービス及び／又はパブリッシャサービスコードについてのコード変更が必要である。
【発明の概要】
【０００３】
[0003]  本概要では、以下の詳細な説明でさらに説明される代表的な概念の内容を簡略化された形で説明する。本概要は、請求された（claimed）主題の主要な特徴又は本質的な特徴を特定することを意図しておらず、請求された主題の範囲を制限するいかなる方法での使用を意図していない。
【０００４】
[0004]  簡潔に言えば、ここで説明する技術の１又は複数の態様は、動的な通信変更を可能にするパブリッシャサービス及びサブスクライバサービス通信で使用される抽象化及びデータモデルを対象とする。１又は複数の態様は、プロキシサーバを介してサブスクライバサービスとパブリッシャサービスとの間でサービス要求の第１セットとその応答を通信することを含み、プロキシサーバにおいて、ネットワーク通信データの第１セットを使用してパブリッシャサービスと通信することを含む。ネットワーク通信データの第１セットに対する変更に基づいて、ネットワーク通信データの第１セットは更新ネットワーク通信データに更新される。サービス要求の第２のセットとその応答は、プロキシサーバを介してサブスクライバサービスとパブリッシャサービス間で通信され、プロキシサーバにおいて、更新ネットワーク通信データを使用してパブリッシャサービスと通信する。
【０００５】
[0005]  他の利点は、図面と併せて以下の詳細な説明において理解され得る。
【０００６】
[0006]  ここで説明する技術は、例として示されており、添付の図面に限定されない。図面では、同様の参照番号は同様の要素を示す。
【図面の簡単な説明】
【０００７】
[0007]
【図１】図１は、１又は複数の実装例による、再構成可能なデータへの変更に基づいて通信が変更され（modified）得るパブリッシャサービス／サブスクライバサービス環境の例示的なブロック図である。  [0008]
【図２】図２は、１又は複数の実装例による、パブリッシャサービスと通信するための可変構成データを使用するサブスクライバサービスの例示的なブロック図である。  [0009]
【図３】図３は、１又は複数の実装例による、新たなパブリッシャサービスが異なる通信関連データを有する場合を含めて、依然として作動中である場合に、サブスクライバサービスが、パブリッシャサービスを変更する方法の例示的なブロック図である。  [0010]
【図４】図４は、１又は複数の実装例による、サブスクライバサーバの通信を動的に変更するために、ネットワーク状態の変化に対応するような、状態検出を使用する方法の例示的なブロック図である。  [0011]
【図５】図５は、１又は複数の実装例による、パブリッシャサービスが異なる通信関連データを有する場合を含めて、依然として作動中である場合に、パブリッシャサービスが、通信データを変更する方法の例示的なブロック図である。  [0012]
【図６】図６は、１又は複数の実装例による、ミドルウェアが存在する場合を含めて、ネットワーク通信を動的に変更するために、ネットワーク状態の変化に対応するような、状態検出を使用する方法の例示的なブロック図である。  [0013]
【図７Ａ】図７Ａは、１又は複数の実装例による、状態変化が検出されたときにキーバリューストアを介して通信パラメータを変更するために実行され得る例示的なステップを示すフロー図である。  [0014]
【図７Ｂ】図７Ｂは、１又は複数の実装例による、ネットワーク状態の変化が発生したときにキーバリューストアを介して通信パラメータを変更するために実行され得る例示的なステップを示すフロー図である。  [0015]
【図８】図８は、１又は複数の実装例による、通信データを変更するためにサブスクライバサービスのサイドキックプロセスによって実行され得る例示的なステップを示すフロー図である。  [0016]
【図９】図９は、ここで説明される主題の態様が組み込まれ得るコンピューティング環境例を表すブロック図である。
【発明を実施するための形態】
【０００８】
[0017]  ここで説明する技術の様々な態様は、一般に、サブスクライバサービスとパブリッシャサービスとの間の通信に使用される通信メカニズム及びポリシーを抽象化することに向けられている。この抽象化により、パブリッシャサービスとのサブスクライバサービス通信は、サブスクライバ及び／又はパブリッシャサービスコードを通信ポリシー、パラメータ、プロトコル、及び実装に関連させることなく、抽象化された名前で行うことができる。サブスクライバは、ターゲットパブリッシャと通信するための「方法」及び／又は最適な「方法」ではなく、「どのような（what）」サービスを欲するかを問い合わせることで、パブリッシャのサービスを要求できる。これは、基礎となる動的に構成されたデータ（本出願の譲受人に譲渡され、その全体が参照により本明細書に組み込まれる米国特許出願第１５／２９１，８１６号に記載されている）及びエンドポイント抽象化の実装に委ねられる。
【０００９】
[0018]  抽象化により、ネットワーク及び／又は通信エンティティを最適化することを含め、通信パラメータ及び／又はネットワークへの変更を透過的及び／又は動的に行うことがさらに可能となる。例えば、基礎となるネットワーク通信ポリシーと、キャッシュやバッチ処理等の最適化は、サブスクライバサービスコード又はパブリッシャサービスコードを変更せずに変更され得る。同様に、永続キューイング等の通信メカニズムは、事実上任意の基準に従って、永続キューのサイズを確立するだけでなく、選択的にオン又はオフにされ得る。
【００１０】
[0019]  前述の米国特許出願第１５／２９１，８１６号に記載され、一般的に基づく、１又は複数の実装において、構成ファイルに保持されているパラメータデータは、（静的構成を介してコールを行う代わりに）パブリッシャサービスへのサブスクライバサービスのコールを行うために使用される。このような可変パラメータデータを使用した結果、サブスクライバサービスの観点から、パブリッシャサービスは、サブスクライバサービスコードがサービス要求を行う名称（アイデンティティ）に抽象化されたエンドポイントになる。その結果、サブスクライバサービスコードは、基礎となる通信データや、通信に必要な他のポリシー、プロトコル、又は実装を知る必要がない。このようにして、通信パラメータデータとパブリッシャサービス、及び他のネットワークエンティティ（ミドルウェア、キャッシュ等）に対して透過的な変更を行うことができ、その結果サブスクライバサービスのコードを変更することなく、通信（ポリシーや他の操作等）が変更される。
【００１１】
[0020]  （前述の米国特許出願第１５／２９１，８１６号に記載されているように）サブスクライバサーバは、動的に構成可能な通信パラメータを使用してサブスクライバサービスに代わって通信するプロキシサーバで構成される。動的構成ファイルデータを使用すると、表１に記載されているものを含め、クライアントに対して透過的なポリシー、メソッド、実装を含む「ネットワーク通信データ」が使用できる。
【表１】
2020510919.tif 000003
【００１２】
[0021]  例えば、パブリッシャサービスに関連する状態変化を検出し（おそらくネットワーク状態変化のようなものの検出に応答して、パブリッシャサービスによってなされた変化であり得る）、状態変化がリポジトリに示されている場合、サブスクライバサービスによって使用される構成情報は、状態変化に基づいて、変更された構成情報に動的かつリアルタイムで変更され得る。変更された構成情報は、プロキシサーバとパブリッシャサービス間の通信に使用され、パブリッシャサービスのコード又はサブスクライバサービスのコードの変更を伴わず変更が行われる。
【００１３】
[0022]  同様に、パブリッシャ、サブスクライバ、ミドルウェア、及び／又は、リポジトリのエンティティによって検出されるかどうかにかかわらず、高遅延条件等のネットワーク状態変化が検出され得る。これが発生した時、例えば、パブリッシャサービスとサブスクライバサービスの通信を高速化するために、メッセージキャッシュがオンにされてもよい。
【００１４】
[0023]  本明細書の例はいずれも非限定的である。例えば、いくつかの例では、ある特徴とケイパビリティを備えたプロキシサーバとサイドキックプロセスを参照している。ただし、ここで説明する技術は、コンポーネントの特定の構成に依存せず、特注（custom-written）コンポーネントを含む、適切なコンポーネント又はコンポーネントのセットを使用できる。従って、ここで説明される実施形態、態様、概念、構造、機能、又は例のいずれも非限定的であり、本技術は、データ通信及びデータ処理において一般的に利益及び利点を提供する様々な方法で使用され得る。
【００１５】
[0024]  図１の実装例に一般的に表されるように、例示されたパブリッシャサーバ１０２（１）〜１０２（ｎ）は各々、パブリッシャサービス１０４（１）〜１０４（ｎ）として示される、いくつかのサービス機能をエクスポートするパブリッシャサービスをそれぞれ含む。典型的なシナリオでは、数千のパブリッシャサービス（及び数千のサブスクライバサービス）が存在する場合がある。サービスは早期に失敗する可能性があり、一時的、揮発性、及び／又は動的であり得る。サーバ及び／又はサービスは、同じ仮想マシン及び／又は物理マシンで共有テナント化（co-tenanted）してもよい。ここで、プロセス、スレッド、コルーチン、コンテナ等が存在しうるため、仮想マシンは配備（deployment）の最小単位である場合とそうでない場合がある。サービスの複数のバージョンの複数のインスタンスは、同時に実行され得る。配備されたサービスへの地域間アクセス及びマルチデータセンタが存在し得る。１又は複数の実装において、ワークロードのピークに対応する自動スケーリングをサポートするための迅速な配備と、サービスインスタンス間の統合ロードバランシングが利用可能である。
【００１６】
[0025]  ここで説明されるように、パブリッシャサーバ１０２（１）〜１０２（ｎ）の各々は、パブリッシャサイドキックプロセス１０６（１）〜１０６（ｎ）として示される、パブリッシャサイドキックプロセスとして実行するパブリッシャサービスレジストレーションコンポーネントをそれぞれ含む。パブリッシャサイドキックプロセス１０６（１）〜１０６（ｎ）の各々は、ヘルスチェック関連操作等の他の操作を実行するとともに、リポジトリ１０８へのサービス登録を提供する。
【００１７】
[0026]  一般に、リポジトリ１０８は、パブリッシャサービスの登録を維持するデータベース１１０を含む高可用性の分散リポジトリである。ここで説明されるように、リポジトリ１０８は、更に、登録されたパブリッシャサービス１０４（１）〜１０４（ｎ）に関連する変更について監視され得るキーバリューストア１１２（又は複数のキーバリューストア）を含むサービスレジストリを含むか又は結合される。１又は複数の実装において、リポジトリは、従来理解されているようなデータベースではなく、その代わりにキーバリューストア１１２を含む。いくつかのリポジトリは、データの整理に階層ファイルシステムを使用するが、他のリポジトリは、アイテムへのディレクトリパスをキーとして格納することにより、フラットキーバリューストアで階層をシミュレートしてもよい。
【００１８】
[0027]  データベース１０８及び／又はキーバリューストア１１２は、パブリッシャサイドキックプロセス１０６（１）〜１０６（ｎ）によって更新され得る。データベース１１０及び／又はキーバリューストア１１２を含むリポジトリ１０８は、管理者、自動化プロセス等の外部構成ソース１１４によって構成／更新／実装されてもよい。リポジトリ１０８を更新する別の方法は、待ち時間等を含む現在のネットワーク状態データ等の状態情報１１５を用いるものである。当然のことながら、任意の状態データを使用して、時刻、強化されたセキュリティ運用状態等を含む、任意のパブリッシャ又はパブリッシャのグループが任意のサブスクライバ又はサブスクライバのグループと通信する方法を変更し得る。
【００１９】
[0028]  図１は、サブスクライバサービスプロセス１１８、サブスクライバサイドキックプロセス１２０、及びプロキシサーバ１２２を含むサブスクライバサーバ１１６を示す。ここで説明するように、サブスクライバサービスプロセス１１８は、図１にパブリッシャサービス１０４（１）として例示される、発見されたパブリッシャサービスと通信するために構成ファイル１２４（及び／又はプロキシサーバ１２２によるメモリ内アクセスを含む他の適切なデータ構造）を使用する、プロキシサーバ１２２を通じてサービスコールを行う。複数のプロキシサーバ及び／又は複数の構成ファイルが存在し得る。
【００２０】
[0029]  ここで説明される技術は、サービスパブリッシャが他のサービスへのサブスクライバになること、及びその逆を可能にする。これにより、例えばサービスＡがサービスＢを呼び出し、サービスＢがサービスＣを呼び出し、サービスＣがサービスＤを呼び出すといった、サービス間コールの連鎖が可能となる。
【００２１】
[0030]  図１に例示される環境におけるサービスディスカバリは、一般に、最新の分散アーキテクチャのサービスディスカバリパターンに従い得る。しかし、例えば、パブリッシャケーパビリティをサブスクライバにより望ましいものに一致させるために、パブリッシャサイドキックプロセス（例えば、１０６（１））は強化型汎用サービス登録を提供し、サブスクライバサイドキックプロセス１２０は、強化型サービスディスカバリを提供し得る。パブリッシャサイドキックプロセス（例えば、１０６（１））及びサブスクライバサイドキックプロセス１２０は、ヘルスチェックにも携わる。それにより、一般に、システムから不健全な、及び／又は通信しないパブリッシャサービスを削除する。リポジトリ１０８は、アプリケーションの帯域外でのサービスディスカバリを処理する。サービスディスカバリコンポーネントは、周知のポートでマシン上でローカルに実行される。サービスディスカバリは、ディスカバリサービスパブリッシャバインディングを見つけることを要せず抽象化される。
【００２２】
[0031]  図２の実装例に一般的に表されるように、一旦、発見され通信されると、操作中、サブスクライバサービスは、発見されたパブリッシャサービスのアイデンティティ（名称）に向けられた要求を提供する。プロキシサーバ２２２は、適切な構成データ２２４を使用して、パブリッシャにサービスコールしを行う。（サービスコールの例には、／ｗｈｏａｒｅｙｏｕ、／ｖｅｒｓｉｏｎ、／ｔｒｏｕｂｌｅ、／ｃｌｅａｒＳｋｉｅｓ、／ｓｅｔＤｅｌａｙ？ｍｓ  ＝  ．．．、／ｓｈｕｔｄｏｗｎ．．．等のリクエストが含まれる。）このようにして、サブスクライバサービス２１８は、パブリッシャサービスのアイデンティティ以外の情報を必要としない。
【００２３】
[0032]  図２は、例えば、それぞれが関連する構成データのセットを有するといった、複数のプロキシサーバを有するケーパビリティを示す。例えば、同じパブリッシャサービスの複数のインスタンスのために、２つ以上のプロキシサーバが同じ構成データのセットを共有することが可能である。また、例えば、アイデンティティ１に関連付けられた要求は構成データセット１を使用し、アイデンティティ２に関連付けられた要求は構成データセット２を使用するというように、１つのプロキシサーバが、関連する構成データの複数のセットを有することも可能である。
【００２４】
[0033]  一般に、サブスクライバサイドキックプロセスは、プロキシサーバによってアクセスされるメモリ等に構成データを書き込む。この方法では、動的な変更は許可されるが、変更が書き込まれているときに、プロキシサーバが一貫性のないデータを使用しないように、すべての変更はトランザクショナルである必要があり得る。
【００２５】
[0034]  図３は、パブリッシャサーバ３０２（１）及びそのサービス３０４（１）がダウンしたとき（状態変化の一種である）、サブスクライバサービス３１８が重大な中断なく動作を継続できるという１つの状態を示す。この例では、サブスクライバサイドキックプロセス３２０がヘルスチェック処理に携わっており、パブリッシャサービスが失敗したことを認識、又は、例えばリポジトリを介してその失敗が通知されたとする。この場合、サブスクライバサイドキックプロセスは、例えば、パブリッシャサービス３０４（２）とパブリッシャサーバ３０４（１）といった、代替パブリッシャサービスに対し、問い合わせをする。
【００２６】
[0035]  例えば、パブリッシャサービス３０４（２）が異なるバージョンであるか、異なるプロトコルを使用するか、又は表１に記載された他の通信パラメータを実質的に使用するとする。サブスクライバサービス３１８がパブリッシャサービス３０４（２）の通信パラメータを使用できる場合、構成データ３２４が更新され、要求が代替パブリッシャサーバに送信される。サブスクライバコードに組み込まれた簡単な変更である、アイデンティティのみの変更でもよく、又は、サブスクライバサーバ３１６内のエンティティを介してアイデンティティを再マッピングしてもよい。例えば、プロキシサーバは、特に逆の指示がない限り、ＮＡＭＥ２をＮＡＭＥ１要求に代用するように指示されてもよい。
【００２７】
[0036]  このようにして、異なる通信パラメータを有する完全に新しいパブリッシャサービスが、（再マッピングにより同じ結果とならない限り、おそらく名称変更をサブスクライバサービスに通知する以外に）サブスクライバサービスコードへの変更なしに透過的に使用され得る。しかし、すべてのパブリッシャサービスを使用できるわけではない。例えば、パブリッシャサービスが１回だけの通信セマンティクスを有し、サブスクライバサービスが少なくとも１回の通信が必要とする場合、サブスクライバサイドキックプロセスはそのパブリッシャを代替として選択しない。
【００２８】
[0037]  図４は、サブスクライバコードへの変更がされず、異なる通信データが使用される結果となる変更の別の例を示している。図４の例では、高遅延状態等のネットワーク状態が変更されたとする。ルール／変更ロジック４４０は、この状態で１又は複数のキーバリューエントリを書き込むか又は更新してもよい。例えば、あるパブリッシャエンティティは、キャッシュ及び／又はバッチ処理を有効にして、高遅延に対処し得る。その場合、そのようなパブリッシャは、この１又は複数の変更を行うよう通知され得る。あるいは、キャッシュ及び／又はバッチ処理を使用する新しいパブリッシャが、少なくともいくつかのサブスクライバのために他のパブリッシャサービスの置換を開始してもよい。
【００２９】
[0038]  図５に示すように、パブリッシャサービス５０４は、少なくともいくつかの可変構成データ５２５を有してもよく、プロキシサーバ５０７を使用してもよい。別の方法としては、そのような変更を容易にするためにパブリッシャサービスコードを作成することであるが、コードではなくデータを変更することには既知の利点があり、データ駆動型の動作と挙動が知られている。
【００３０】
[0039]  ある変更は、サブスクライバサービス構成データに反映される必要はない。例えば、パブリッシャサービスがキャッシュを有効にしているかどうかは、サブスクライバサービスとは無関係であり得る。しかし、基本的に、パブリッシャへのそのような変更はそのパブリッシャサービスの失敗であると考え、サブスクライバサイドキックプロセスは、変更について知ることを必要としてもよく、変更を許可しないことを選択してもよい。例えば、特定のサブスクライバサービスシナリオでは古いデータが受け入れられない等の理由で、サブスクライバサービスがキャッシュを許可できない場合、そのサブスクライバサービスはパブリッシャをキャッシュで使用できない。従って、サブスクライバサイドキックプロセスは、キャッシュを使用しないか、又はキャッシュをバイパスできるパブリッシャサービスを要求し、キャッシュを使用するように変更されたすべてのパブリッシャサービスからサブスクライバサービスを分離する必要がある。さらに別の方法としては、サブスクライバサービスがキャッシュを許可できるが、サブスクライバサービスが制御する一定の時間フレーム内でキャッシュを更新するようパブリッシャサービスに指示すること、及び／又は返されたキャッシュデータに有効期限のタイムスタンプを提供する必要があり、それにより、サブスクライバサービスはデータを使用できるかどうかを決定できる。
【００３１】
[0040]  図６は、ネットワークの変更により、サブスクライバとパブリッシャの動作が変更される可能性のある別のシナリオを示す。この例では、ミドルウェア６６０はサブスクライバサーバ６１６とパブリッシャサーバ６０２の間に存在する。ネットワーク状態データ又は、場合によっては手動の再構成等を使用して、キャッシュ６６２を使用するかどうか等、ミドルウェア６６０の動作を変更できる。さらに、サブスクライバサーバ６１６（及び場合によってはパブリッシャサーバ６０２のパブリッシャサービス）はそのような変更について知る必要があり得るため、情報はキーバリューストア１１２に書き込まれてもよい。ミドルウェアは何らかの方法でリポジトリに通知する必要がある。別の方法としては、リポジトリはミドルウェアの動作の制御を行ってもよい。例えば、状態変化により、リポジトリがミドルウェアでキャッシュをオンにするとともに、サイドキックモニタリング等を介してサブスクライバ（又はパブリッシャ）に変更を通知する。
【００３２】
[0041]  ミドルウェア６６０及びその利用可能な機能は、単一のソフトウェアコンポーネントに限定されない。その代わりに、複数のミドルウェア実装オプションが存在してもよく、図示されているミドルウェア６６０は、通信挙動の変更に関与する可能性がある任意の数のライブラリ及び／又はサービスを含んでもよい。このようなオプションから選択することは、サブスクライバ又はパブリッシャの実装に依存しないが、選択は構成データを介して明示されるポリシー選択である。  
【００３３】
[0042]  図７Ａは、検出された状態変化に対応する変更を行うためにパブリッシャ又はリポジトリによって行われ得る例示的なステップを示している。図７Ａにおいて、ステップ７０２で状態変化が検出される。ステップ７０４で、状態変化をキーバリューストアに書き込む必要があるとルール等が決定した場合、ステップ７０６で適切な変化情報を書き込む。従って、例えば、（サブスクライバからの要求であり得る検出されたなんらかの状態変化又はその他の状態変化を介して）パブリッシャがトランザクションメッセージング（transactional messaging）をオンにしたい場合、ステップ７０６はこの変化をキーバリューストアに書き込み、それによって、このパブリッシャサービスの任意のサブスクライバは通知を受け、適切なアクションを実行してもよい。ステップ７０４では、状態変化を無視できる。例えば、パブリッシャ又はリポジトリは、ネットワークの待ち時間が長いが、アクションを実行するのに十分なほど長くないことを示す状態変化を受け取り得る。
【００３４】
[0043]  図７Ｂは、例えばミドルウェア又はパブリッシャによって要求された、ネットワーク構成の変更に対応する変更を行うためにリポジトリによって実行され得る例示的なステップを示す。例えば、図６のミドルウェア６６０が上記のようにキャッシュをオンにする等、ネットワーク構成になんらかの変更を加えることを要求したとする。ステップ７１２は、この変更が許可されているかどうかを判断し、許可されている場合、関連する１又は複数のレコードにおいてキーバリューストアを変更して、それらのレコードの変更を監視するために登録されたリスナー（サブスクライバ及び／又はパブリッシャ）を更新する。ステップ７１６は、関連する１又は複数のネットワークエンティティにネットワーク変更を行うよう指示する。
【００３５】
[0044]  図８は、パブリッシャインスタンスが発見されるステップ８０２から始まる、サブスクライバサイドキックプロセスによって取られ得る例示的なステップを示すフロー図である。ステップ８０４は、パブリッシャサービスインスタンスに関連する構成データの変更を監視するために登録することを表す。ステップ８０６は、プロキシサーバにインスタンスの使用を開始するよう指示すること、例えば、インスタンスを負荷分散ローテーションに追加することを表す。
【００３６】
[0045]  ステップ８０８は、サブスクライバのシャットダウンを検出することを表す。これが発生した場合、ステップ８２０で監視をキャンセルしてもよい。
【００３７】
[0046]  ステップ８１０は、１又は複数の実装において、リポジトリからの（ステップ８１０からの「分岐／ループ」ではなく）イベント／通知である変更通知の評価を表す。変更が発生した場合、ステップ８１２は、変更データの取得を表す（これは、別個の読み取り動作であってもよく、通知の一部として含まれてもよい）。
【００３８】
[0047]  ステップ８１４で評価されるように、変更が許可されるものである場合、ステップ８１６は構成変更を行い、プロキシサーバ／ロードバランサはここで説明されるように使用を開始する。そうでない場合、サブスクライバはパブリッシャの使用を停止し（ステップ８１８）、ステップ８２０でこのパブリッシャの監視をキャンセルする。
＜コンピューティングデバイスの例＞
【００３９】
[0048]  ここで説明される技術は、プログラム及びプロセスを実行することができる任意のデバイス又はデバイス（マシン）のセットに適用することができる。従って、物理マシン及び／又は仮想マシン、パーソナルコンピュータ、ラップトップ、ハンドヘルド、ポータブル、その他のコンピューティングデバイスを含むサーバ、及び携帯電話、タブレット／スレートコンピュータ、ゲーム／エンターテイメントコンソール等を含む様々種類のコンピューティングオブジェクトが、ここに例示されるものを含む様々な実装に関連して使用され得る。従って、図９を参照して以下に説明する汎用コンピューティングメカニズムは、コンピューティングデバイスの一例にすぎない。
【００４０】
[0049]  実装は、デバイス又はオブジェクトのサービスの開発者が使用するために、オペレーティングシステムを介して部分的に実装でき、及び／又はここで説明する様々な実装の１又は複数の機能的態様を実行するために動作するアプリケーションソフトウェア内に含めることができる。ソフトウェアは、クライアントワークステーション、サーバ又は他のデバイス等の１又は複数のコンピュータによって実行されるプログラムモジュール等のコンピュータ実行可能命令の一般的なコンテキストで記述してもよい。当業者は、コンピュータシステムがデータを通信するために使用できる様々な構成及びプロトコルを有し、そのため、特定の構成又はプロトコルに限定されないことを理解するであろう。
【００４１】
[0050]  従って、図９は、ここで説明する実装の１又は複数の態様を実装できる適切なコンピューティングシステム環境９００の例を示しているが、上述のように、コンピューティングシステム環境９００は適切なコンピューティング環境の一例に過ぎず、使用又は機能の範囲に関する制限を意図していない。さらに、コンピューティングシステム環境９００は、例示的なコンピューティングシステム環境９００に示されているコンポーネントのいずれか１つ又は組み合わせに関連する依存性を有すると解釈されることを意図していない。
【００４２】
[0051]  図９を参照すると、１又は複数の実装を実現するための例示的なデバイスは、コンピュータ９１０の形態の汎用コンピューティングデバイスを含む。コンピュータ９１０のコンポーネントは、処理ユニット９２０、システムメモリ９３０、及びシステムメモリを含む様々なシステムコンポーネントを処理ユニット９２０に結合するシステムバス９２２が含まれるが、これらに限定されない。
【００４３】
[0052]  コンピュータ９１０は、通常、様々なマシン（例えば、コンピュータ）可読媒体を含み、コンピュータ９１０等のマシンによってアクセスできる任意の利用可能な媒体であってもよい。システムメモリ９３０は、読み取り専用メモリ（ＲＯＭ）及び／又はランダムアクセスメモリ（ＲＡＭ）等の揮発性及び／又は不揮発性メモリ、及びハードドライブ媒体、光学記憶媒体、フラッシュ媒体等の形態のコンピュータ記憶媒体を含んでもよい。限定ではなく例示として、システムメモリ９３０は、オペレーティングシステム、アプリケーションプログラム、他のプログラムモジュール、及びプログラムデータを含んでもよい。
【００４４】
[0053]  ユーザは、１又は複数の入力デバイス９４０を介してコマンド及び情報をコンピュータ９１０に入力することができる。モニタ又は他のタイプのディスプレイデバイスも、出力インタフェース９５０等のインタフェースを介してシステムバス９２２に接続される。モニタに加えて、コンピュータには、出力インタフェース９５０を介して接続できるスピーカーやプリンター等の他の周辺出力デバイスを含めることもできる。
【００４５】
[0054]  コンピュータ９１０は、リモートコンピュータ９７０等の１又は複数の他のリモートコンピュータへの論理接続（logical connections）を使用して、ネットワーク環境又は分散環境で動作することができる。リモートコンピュータ９７０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス又は他の一般的なネットワークノード、又は他の任意のリモートメディアコンサンプションデバイス又は送信デバイスであってもよく、コンピュータ９１０に対して上記の要素のいずれか又はすべてを含んでもよい。図９に示される論理接続は、ローカルエリアネットワーク（ＬＡＮ）又はワイドエリアネットワーク（ＷＡＮ）等のネットワーク９７２を含むが、他のネットワーク／バスを含んでもよい。このようなネットワーク環境は、家庭、オフィス、企業全体のコンピュータネットワーク、イントラネット、及びインターネットにおいて一般的である。
【００４６】
[0055]  上述のように、様々なコンピューティングデバイス及びネットワークアーキテクチャに関連して実装例を説明したが、基礎となる概念は、そのような技術を実装することが望ましいネットワークシステム及びコンピューティングデバイス又はシステムに適用できる。
【００４７】
[0056]  また、例えば、適切なＡＰＩ、ツールキット、ドライバコード、オペレーティングシステム、制御、スタンドアロン又はダウンロード可能なソフトウェアオブジェクト等の同一又は類似の機能を実装する複数の方法があり、それらは、アプリケーション及びサービスについて、ここで示された技術の利点を利用可能にする。従って、ここに記載された実装は、ＡＰＩ（又は他のソフトウェアオブジェクト）の観点から、及び、ここに記載された１又は複数の実装を実装するソフトウェア又はハードウェアオブジェクトの観点から検討される。従って、ここで説明する様々な実装は、全体がソフトウェアであるだけでなく、全体がハードウェア、一部がハードウェア、一部がソフトウェアの態様が可能である。
【００４８】
[0057]  「例」という語は、ここでは、例、事例、又は例示の意味で使用される。念のため、ここで開示される主題は、そのような例によって限定されない。また、ここで「例」として説明される態様又は設計は、必ずしも他の態様又は設計よりも好ましい又は有利であると解釈されるものではなく、当業者に知られている同等の例示的な構造及び技術を除外することを意味しない。さらに、「含む（includes）」、「有する（has）」、「含む（contains）」等の用語が使用される限り、疑義を避けるために、そのような用語は、請求項で使用される場合、追加要素又は他の要素を排除することなく、オープンな移行語として使用される「具備する（comprising）」という用語と同様の方法で包括的であることを意図している。
【００４９】
[0058]  上述のように、本明細書で説明される様々な技術は、ハードウェア又はソフトウェア、又は適切な場合には両方の組み合わせに関連して実装され得る。ここで使用される「コンポーネント」、「モジュール」、「システム」等の用語は、同様に、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア、又は実行中のソフトウェアのいずれかのコンピュータ関連エンティティを指すことを意図している。例えば、コンポーネントは、プロセッサ上で実行されるプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行スレッド、プログラム、及び／又はコンピュータであり得るが、これらに限定されない。例として、コンピュータ上で実行されているアプリケーションとコンピュータの両方がコンポーネントになり得る。１又は複数のコンポーネントがプロセス及び／又は実行スレッド内に存在し、コンポーネントは１つのコンピュータにローカライズされ、及び／又は２つ以上のコンピュータ間で分散され得る。
【００５０】
[0059]  前述のシステムは、いくつかのコンポーネント間の相互作用に関して説明された。そのようなシステム及びコンポーネントは、これらのコンポーネント又は指定されたサブコンポーネント、指定されたコンポーネント又はサブコンポーネントの一部、及び／又は追加のコンポーネントを、前述の様々な順列及び組み合わせに従って含むことができる。サブコンポーネントは、親コンポーネント（階層）に含まれるのではなく、他のコンポーネントと通信可能に結合されたコンポーネントとして実装することもできる。さらに、１又は複数のコンポーネントを組み合わせて、集約機能を提供する単一コンポーネントに統合し、又は、いくつかの個別のサブコンポーネントに分割してもよく、統合された機能を提供するために、管理レイヤー等の任意の１又は複数の中間層を提供し、通信可能にサブコンポーネントに結合してもよい。ここに記載される任意のコンポーネントは、ここには具体的に記載されていないが当業者に一般的に知られているような１又は複数の他のコンポーネントとも相互作用し得る。
【００５１】
[0060]  ここで説明される例示的なシステムを考慮して、説明された主題に従って実装され得る方法は、様々な図のフローチャート／フロー図を参照して理解できる。説明の簡略化のため、方法は一連のブロックとして示され説明されているが、いくつかのブロックは、ここで示され、説明されているものとは異なる順序で及び／又は他のブロックと同時に発生し得るため、様々な実装がブロックの順序によって制限されないことが理解できる。フローチャート／フロー図を介して非順次、又は分岐フローが示されている場合、同一又は類似の結果を達成する様々な他の分岐、フローパス、及びブロックの順序を実装できることが理解できる。さらに、いくつかの図示されたブロックは、ここで説明された方法を実装するにあたってのオプションである。
＜結論＞
【００５２】
[0061]  本発明は、様々な修正及び代替構成が可能であるが、その特定の例示的な実装が図面に示されており、上記で詳細に説明されてきた。しかし、本発明を開示された特定の形態に限定する意図はなく、本発明の精神及び範囲内にあるすべての修正、代替構造、及び等価物を網羅する。
【００５３】
[0062]  ここで説明する様々な実装に加えて、それらを逸脱しない範囲において、対応する実装の同一又は同等の機能を実行するために、他の同様の実装を使用することができ、又は説明した実装に修正及び追加を行うことができる。さらに、複数の処理チップ又は複数のデバイスは、ここで説明される１又は複数の機能の性能を共有することができ、同様に、記憶装置は複数のデバイスに渡って実行され得る。従って、本発明は、単一の実装に限定されるものではなく、添付の特許請求の範囲による領域、精神、及び範囲で解釈される。
【図１】
2020510919.tif 000004
【図２】
2020510919.tif 000005
【図３】
2020510919.tif 000006
【図４】
2020510919.tif 000007
【図５】
2020510919.tif 000008
【図６】
2020510919.tif 000009
【図７Ａ】
2020510919.tif 000010
【図７Ｂ】
2020510919.tif 000011
【図８】
2020510919.tif 000012
【図９】
2020510919.tif 000013
【国際調査報告】
2020510919.tif 000014
2020510919.tif 000015