(57)【特許請求の範囲】
【請求項１】
分散コンピューティング環境において目的のサービスに組み込まれた契約をバインドする方法を、コンピュータに実行させるプログラムであって、前記方法は、
クライアントサービスが依存する機能面を満たす指示を受信するステップと、
前記クライアントサービスの機能面の依存性を満たす契約を識別するステップであって、前記識別される契約は、１つまたは複数のインタフェースを定義し、前記１つまたは複数のインタフェースの動作を部分的に統治するための制約を特定するプロパティのセットを保持する、ステップと、
前記１つまたは複数のインタフェースを確立して、調整するために、前記識別された契約を組み込むステップであって、
（ａ）前記分散コンピューティング環境において前記１つまたは複数のインタフェースを確立するサブステップと、
（ｂ）前記プロパティのセットから得た値を、前記１つまたは複数の確立したインタフェースに与えることによって、前記１つまたは複数の確立したインタフェースを構成するサブステップであって、該１つまたは複数の確立したインタフェースは、構成されると、前記クライアントサービスが前記目的のサービスの一部に到達することを可能にし、前記クライアントサービスから前記目的のサービスへの通信を管理する時に前記契約によって特定される前記制約を実施するサブステップと、
を含む、前記識別された契約を組み込むステップと、
前記組み込まれた契約を前記目的のサービスにバインドするステップであって、
（ａ）前記１つまたは複数の確立したインタフェースを、１つまたは複数のロールインスタンスにリンクするサブステップであって、前記１つまたは複数のロールインスタンスは、実行されると、前記目的のサービスに機能を与える一種のコンポーネントプログラムを表す少なくとも１つのロールの複製を生じさせる、サブステップと、
（ｂ）前記目的のサービスの実行の管理を担当するファブリックコントローラを介して、前記リンクをマッピングするサブステップと、
を含む、バインドするステップと
を含む、プログラム。
【請求項２】
前記制約は、前記目的のサービスへのアクセスを制限することと、前記クライアントサービスを認証することと、前記目的のサービスへの接続を開始または終了することと、前記目的のサービスへのトラフィックの流れをフィルタリングすることと、いずれのポートがコールを受信するために使用されるかを定義することと、のうちの少なくとも１つに関連し、
前記方法は、前記分散コンピューティング環境内のノードに前記目的のサービスの１つまたは複数のロールインスタンスをデプロイするための詳細を保持するサービスモデルを提供するステップをさらに含み、該デプロイするための詳細は、前記１つまたは複数のロールインスタンス上に配置される入力エンドポイントと出力エンドポイントとの間の相互接続を構築する、請求項１に記載のプログラム。
【請求項３】
前記１つまたは複数の確立したインタフェースは、前記組み込まれた契約をバインドすると、前記１つまたは複数のロールインスタンスの前記入力エンドポイントにリンクされる、請求項２に記載のプログラム。
【請求項４】
前記１つまたは複数の確立したインタフェースと１つまたは複数のロールインスタンスをリンクするステップは、前記分散コンピューティング環境を横断する通信チャネルを割り当てて、前記１つまたは複数の確立したインタフェースを前記リンクされた入力エンドポイントに動作可能に結合するサブステップ
を含む、請求項３に記載のプログラム。
【請求項５】
前記割り当てられる通信チャネルは、前記１つまたは複数の確立したインタフェースを前記１つまたは複数のロールインスタンスの前記入力エンドポイントにリンクするロードベアリング（ＬＢ）チャネルを含み、
前記方法は、
前記１つまたは複数の確立したインタフェースで、前記クライアントサービスからのコールを受信するステップと、
ＬＢ機構を呼び出し、前記ＬＢチャネルの利用可能な通信チャネルに前記コールを分配するステップと
をさらに含む、請求項４に記載のプログラム。
【請求項６】
前記方法は、前記１つまたは複数の確立したインタフェースにリンクされる前記１つまたは複数のロールインスタンスの前記入力エンドポイントのロケーションを探すために、ネットワークアドレスを識別するステップをさらに含む、請求項４に記載のプログラム。
【請求項７】
前記方法は、前記ネットワークアドレスを、前記クライアントサービスに見えるようにするステップをさらに含み、
前記クライアントサービスのコンポーネントプログラムは、前記ネットワークアドレスを利用して、前記１つまたは複数のロールインスタンスにコールをルーティングするように構成される、請求項６に記載のプログラム。
【請求項８】
前記割り当てられた通信チャネルは、前記１つまたは複数の確立したインタフェースを、前記１つまたは複数のロールインスタンスの前記入力エンドポイントにリンクするＳＬＳチャネルを含み、
前記方法は、
前記１つまたは複数の確立したインタフェースで、前記コールと前記ネットワークアドレスとを前記クライアントサービスから受信するステップと、
前記ＳＬＳチャネルのうち、前記１つまたは複数の確立したインタフェースを前記入力エンドポイントにリンクするように指定された通信チャネルを介して、前記コールをルーティングするステップと
をさらに含む、請求項７に記載のプログラム。
【請求項９】
前記バインドするステップは、前記１つまたは複数の確立したインタフェースによって実施される前記特定された制約に基づいて、前記１つまたは複数のロールインスタンスを再構成するステップ
をさらに含む、請求項１に記載のプログラム。
【請求項１０】
バインドされた契約を分散コンピューティング環境内のクライアントサービスにバインドするコンピュータ化された方法であって、
前記クライアントサービスから、該クライアントサービスの１つまたは複数のコンポーネントプログラムの依存性を満たす指示を受信するステップと、
前記クライアントサービスの前記１つまたは複数のコンポーネントプログラムの前記依存性を満たす機能を抽象化したものを公開する契約であって、分散コンピューティング環境内で組み込まれ、前記機能を実行する目的のサービスにバインドされる契約を割り当てるステップと、
前記クライアントサービスを、その動作を開始するようにデプロイするステップであって、
（ａ）前記１つまたは複数のコンポーネントプログラムを前記割り当てられたバインドされる契約によって定義されたインタフェースにリンクするサブステップであって、該インタフェースは、前記割り当てられたバインドされる契約を組み込むと前記分散コンピューティング環境内で確立され、前記バインドされる契約は、前記インタフェースに関連付けられたプロパティのセットを保持する、サブステップと、
（ｂ）前記目的のサービスの実行の管理を担当するファブリックコントローラに、前記リンクの詳細を書き込むサブステップと、
（ｃ）前記プロパティのセットから得た値を前記確立したインタフェースに与えることによって、前記確立したインタフェースの動作を部分的に統治するための制約を、前記確立したインタフェースに適用するサブステップと、
（ｄ）前記１つまたは複数のコンポーネントプログラムを構成するために、前記適用された制約を前記クライアントサービスに公開するサブステップと、
を含む、前記クライアントサービスをデプロイするステップと
を含む、コンピュータ化された方法。
【請求項１１】
前記１つまたは複数のコンポーネントプログラムをインタフェースにリンクするステップは、
前記１つまたは複数のコンポーネントプログラムに配置された出力エンドポイントを、それぞれ識別するサブステップと、
前記分散コンピューティング環境内の通信チャネルを割り当てて、前記確立したインタフェースを前記出力エンドポイントに動作可能に結合する、サブステップと
をさらに含む、請求項１０に記載のコンピュータ化された方法。
【請求項１２】
前記目的のサービスは、少なくとも１つのロールの１つまたは複数のロールインスタンスを含み、
前記少なくとも１つのロールは、前記クライアントサービスの依存性を満たす前記機能を実現する、前記目的のサービスの他のロールと共に動作するコンポーネントの個々のクラスを表す、請求項１１に記載のコンピュータ化された方法。
【請求項１３】
前記１つまたは複数のコンポーネントプログラムを構成することは、前記１つまたは複数のコンポーネントプログラムの出力エンドポイントから発せられたコールが前記１つまたは複数のロールインスタンスの基本となるプロトコルと互換性を有するように、前記コールをフォーマットするために、前記適用された制約から指示を引き出すこと
を含む、請求項１２に記載のコンピュータ化された方法。
【請求項１４】
前記１つまたは複数のコンポーネントプログラムの前記出力エンドポイントから発せられた前記コールは、前記分散コンピューティング環境の前記割り当てられた通信チャネルを介して、前記確立したインタフェースにルーティングされる、請求項１３に記載のコンピュータ化された方法。
【請求項１５】
前記確立したインタフェースは、前記制約が適用されると、前記クライアントサービスのＩＤと共に前記適用された制約に基づいて、前記発せられたコールを前記１つまたは複数のロールインスタンスにリレーするか、前記発せられたコールをフィルタリングするように構成される、請求項１３に記載のコンピュータ化された方法。
【請求項１６】
前記クライアントサービスのＩＤは、前記ファブリックコントローラによって記録され、前記１つまたは複数のロールインスタンスに前記発せられたコールをリレーすると、前記発せられたコールに添付された要求を検査して、前記コールのリクエストを引き受けるか否かが確定される、請求項１５に記載のコンピュータ化された方法。
【請求項１７】
前記要求を前記発せられたコールに添付することは、
前記１つまたは複数のコンポーネントプログラムが前記コールを発したことを検証するために、前記クライアントサービスのＩＤにアクセスすることと、
前記クライアントサービスのＩＤと前記クライアントサービスの他の特性を、前記要求に組み込むことによって、前記目的のサービスにおける個々のセキュリティレベルを保証することと、
を含む、請求項１６に記載のコンピュータ化された方法。
【請求項１８】
分散コンピューティング環境で利用可能な契約を組み込んでバインドすることによって、クライアントサービスを目的のサービスにリンクする方法を行うコンピュータシステムであって、
プロセッサ及びメモリを備え、
当該コンピュータシステムは、クライアントサービスから、該クライアントサービスの１つまたは複数のコンポーネントプログラムの依存性を満たす指示を受け取るように構成され、
目的のサービスは、１つまたは複数のロールインスタンスを含み、前記１つまたは複数のロールインスタンスは、実行されると前記目的のサービスに機能を与える一種のコンポーネントプログラムを表す少なくとも１つのロールの複製を生じさせ、
当該コンピュータシステムは、前記目的のサービスの前記機能を抽象化したものを公開する契約であって、前記クライアントサービスの前記１つまたは複数のコンポーネントプログラムの前記依存性を満たし、少なくとも１つのインタフェースを定義して、前記少なくとも１つのインタフェースによって実施される制約を特定する契約を識別するように構成され、
当該コンピュータシステムは、前記目的のサービスと前記クライアントサービスに前記契約をバインドするファブリックコントローラをさらに備え、前記バインドするプロセスは、
（ａ）前記契約を組み込むことで、前記分散コンピューティング環境内に少なくとも１つのインタフェースを確立するステップと、
（ｂ）前記プロパティのセットから得た値を、前記少なくとも１つの確立したインタフェースに与えることよって、前記少なくとも１つの確立したインタフェースを構成するステップであって、前記少なくとも１つの確立したインタフェースは、構成されると、前記クライアントサービスが前記少なくとも１つの確立したインタフェースを介して前記目的のサービスの一部に到達することを可能にし、前記クライアントサービスと前記目的のサービスとの間の通信を管理する時に前記契約によって特定される前記制約を実施する、ステップと、
を含み、
前記ファブリックコントローラは、前記少なくとも１つの確立したインタフェースを介して、前記クライアントサービスの前記１つまたは複数のプログラムコンポーネントを、前記目的のサービスの前記１つまたは複数のロールインスタンスにリンクするように構成される、コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、契約（contract）と呼ぶ媒介を介して、サービスアプリケーションの機能面を自動的に明示することに関する。
【背景技術】
【０００２】
一般的に、開発者は、ソフトウェアアプリケーションを、その設定にかなりの自由度を持たせて書く。一例として、開発者は、そのソフトウェアアプリケーションをサポートするために提供される個々のプラットフォームの特定の制約内で動作するソフトウェアアプリケーションを確立することで、この自由度を活用することができる。従って、ソフトウェアアプリケーションに関連付けられたこの自由度によって、ソフトウェアアプリケーションは、プラットフォームと協働して動作することができる。
【０００３】
一例では、ソフトウェアアプリケーションを開発するアプリケーションサービス・プロバイダは、ソフトウェアアプリケーションのこの設定を採用して、インターネットを介して遠隔でアクセス可能なプラットフォーム上で動作させることができる。この例では、ユーザがソフトウェアアプリケーションを用いて遠隔でファイルを操作できるように、プラットフォームはソフトウェアプログラムを実行する。従って、プラットフォームは、プラットフォーム上で実行するソフトウェアアプリケーションの基本的要素を確立するようになされて、遠隔で使用する現在の負荷を引き受ける。ソフトウェアアプリケーションの自由度によって、これら基本的要素を増減でき、それら要素間の協調を管理することができる。しかしながら、これら基本的要素の機能を公開する方法がないので、対象のソフトウェアアプリケーション以外のソフトウェアプログラムに、この機能を利用する能力を提供することは、不可能である。さらに、仮に他のソフトウェアプログラムが、現在実行中の基本的要素の機能を認識したとしても、ソフトウェアアプリケーションを自動的にリンクしたり、自動的に基本的要素を構成したりして、その機能を遠隔で活用するのを可能にする手段が存在しない。
【０００４】
ソフトウェアアプリケーションの基本的要素を構成するための現在の解決法は、プラットフォームの管理者が基本的要素を手動で設定することによっている。このその場限りの解決法は、労力を要し、エラーが起こりやすく、基本的要素を別のソフトウェアプログラムにリンクさせることは含まない。さらに、多数のソフトウェアアプリケーションの動作をサポートするプラットフォームのサイズが、多数の相互接続したハードウェアコンポーネントを含んで拡張されると、この手動設定の欠点は増大される。
【発明の概要】
【０００５】
この概要は、詳細な説明で下記にさらに記載する概念を簡単な形で紹介するものである。この概要は、特許を請求する内容の主要な特徴または不可欠な特徴を特定することを意図するものではなく、特許を請求する内容の範囲の画定に用いられることを意図してもいない。
【０００６】
本発明の実施形態は、方法、システム、および、コンピュータ実行可能命令を有するコンピュータ記憶媒体に関する。コンピュータ記憶媒体は、コンピュータ実行可能命令が実行されると、本明細書の実施形態による、本明細書で契約（contract）と呼ぶ媒介を介して、目的のサービス（例えば、分散コンピューティング環境で実行するサービスアプリケーション）の機能面をクライアントサービスに自動的に明示する方法を行う。一般的に、その方法は、サービスアプリケーション（単数または複数）の動作の基礎となるように構成された分散コンピューティング環境という状況で行われる。実施形態においては、明示された機能面がクライアントサービスの依存性を満足させることが確かめられると、契約が割り当てられる。割り当られると、本発明の方法は、分散コンピューティング環境内の契約を組み込み、組み込まれた契約をサービスアプリケーションのコンポーネントプログラムにバインド（bind）することを含みうる。
【０００７】
一般的に、契約は、インタフェースを定義し、インストール時に、インタフェースを構成するプロパティを保持する。契約の組み込み時に、そのインタフェースの中の１つが、確立され、それに関連付けられたプロパティに従って、パラメータを決定される。組み込まれた契約のバインド時に、目的のサービスを構成するコンポーネントプログラムの入力エンドポイントは、通信チャネルを介して、確立したインタフェースにリンクされる。従って、確立したインタフェースに到達できる他のサービスアプリケーションは、目的のサービスの機能面へアクセスできる。
【０００８】
バインドのプロセスは、クライアントサービスを含むコンポーネントプログラムの出力エンドポイントを、確立したインタフェースにリンクするプロシージャ、および、確立したインタフェースのパラメータを決定することに基づいて目的のサービスを構成するプロシージャを含みうる。さらに、クライアントサービスは、出力エンドポイントから発せられるコールを、目的のサービスの一定の特性に形式を合わせるように構成されうる。従って、クライアントサービスからのコールは、通信チャネルを介してルーティングされて目的のプログラムに到達でき、目的のサービスの構成と互換性をもたせて、目的のサービスの機能面を適切に利用できるようになりうる。
【０００９】
実施形態において、目的のサービスは、コール、および、そのコールに付随する要求を受信すると、クライアントサービスのＩＤを確かめうる。目的のサービスは、一般的に、クライアントサービスのＩＤに動的に反応することができる。従って、クライアントサービスのＩＤを理解すると、目的のサービスは、コールに答えるとき、結果として、サービスのレベルを調整し（例えば、サービスの機能面を操作する）、個々のクライアントサービスを提供することができる。
【００１０】
この概要は、詳細な説明で下記にさらに記載する概念を簡単な形で紹介するものである。この概要は、特許を請求する内容の主要な特徴または不可欠な特徴を特定することを意図するものではなく、特許を請求する内容の範囲の画定に用いられることを意図してもいない。
【００１１】
本発明の実施形態を、添付図面を参照して、下記に詳細に述べる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態の実装に使用するのに適した例示的コンピュータ環境のブロック図である。
【図２】組み込まれた契約を目的のサービスにバインドするように構成された、本発明の実施形態の実装に使用するのに適した例示的分散コンピューティング環境を示すブロック図である。
【図３】目的のサービスにバインドされた契約を、クライアントサービスにバインドするように構成された、本発明の実施形態の実装に使用するのに適した例示的分散コンピューティング環境を示すブロック図である。
【図４】本発明の実施形態による、サービスアプリケーション間の通信をルーティングするロードバランシング（ＬＢ）チャネルを利用する例示的ファブリックコントローラの図式的な表示である。
【図５】本発明の実施形態による、サービスアプリケーション間の通信をルーティングするＳＬＳ（stateless-switch）チャネルを利用する例示的ファブリックコントローラの図式的な表示である。
【図６】本発明の実施形態による、契約を自動的に組み込み、その組み込まれた契約を目的のサービスにバインドする方法全体を示すフロー図である。
【図７】本発明の実施形態による、クライアントサービスの依存性に基づいて、組み込まれた契約を自動的に割り当て、割り当てられた契約をクライアントサービスにバインドする方法全体を示すフロー図である。
【発明を実施するための形態】
【００１３】
本発明の実施形態の内容を、法的要件を満たすように、特定性をもって本明細書に記載する。しかしながら、記載そのものは、特許の範囲を限定することを意図するものではない。むしろ、特許を請求する内容は、現行または今後の他の技術と組み合わせて、本明細書に記載されたステップと異なったステップや、または類似のステップを組み合わせたものなど、他の方法で実施してもよいと、発明者は考えている。
【００１４】
本発明の実施形態は、方法、システム、および、コンピュータ実行可能命令を有するコンピュータ記憶媒体に関し、コンピュータ記憶媒体は、実行されると、本明細書の実施形態による、クライアントサービスの動作をサポートするのに利用可能な一定の機能を期待して書き込まれたクライアントサービスを自動的に調整する方法のためのコンピュータ実行可能命令を有する。クライアントサービスが依存するこれらの機能は、契約によって公開され、クライアントサービスが、分散コンピューティング環境内で実行する目的のサービスの機能に到達し、それらを採用することを可能にするための媒介として働く。適切な契約は、クライアントサービスが満たすことを求める依存性を満足させる機能を、その契約が公開するか否かに基づいて、割り当てられうる。そうすると、割当られた契約を組み込み（例えば、分散コンピューティング環境内にインタフェースを確立）、目的のサービスとクライアントサービスにバインドされる（例えば、目的のサービスとクライアントサービスのコンポーネントプログラムを、確立したインタフェースを介してリンクする）。従って、クライアントサービスの実行を可能にするのに要求される機能が、自動的に発見され、クライアントサービスにリンクされる。
【００１５】
従って、一態様においては、本発明の実施形態は、コンピュータ実行可能命令を有する１つまたは複数のコンピュータ可読媒体に関する。このコンピュータ実行可能命令を実行すると、組み込まれた契約を分散コンピューティング環境内の目的のサービスにバインドする方法が提供される。最初に、この方法は、インタフェースの集合を定義する契約を識別し、識別された契約を組み込み、分散コンピューティング環境内のインタフェースの集合のうちから１つのインタフェースを確立する。典型的には、契約は、各インタフェースをインストールするためのプロパティのセットを保持しており、組み込まれた契約は、クライアントサービスが目的のサービスの一部に到達するための媒介として働く。さらに、方法は、確立したインタフェースに関連付けられたプロパティのセットから得た値で、確立したインタフェースのパラメータを決定することによって、組み込まれた契約を目的のサービスにバインドすることを含んでもよい。実施形態において、バインドのプロセスは、確立したインタフェースと１つまたは複数のロールインスタンスを自動的にリンクすること、および、目的のサービスの実行の管理を担当するファブリックコントローラを介して、そのリンクをマッピングすることを含む。一般的に、ロールインスタンス（role instance）は、一種のコンポーネントプログラムを表す少なくとも１つのロール（role）の複製を体現し、そのコンポーネントプログラムは、実行されると、目的のサービスに機能を与えるものである。
【００１６】
別の態様においては、本発明の実施形態は、目的のサービスに既にバインドされた組み込まれた契約を、分散コンピューティング環境内のクライアントサービスにバインドするためのコンピュータ化された方法に関する。実施形態においては、この方法は、クライアントサービスの依存性を満たす指示をクライアントサービスから受信すること、および、クライアントサービスのコンポーネントプログラムの依存性を満たす機能を抽象化したものを公開する契約を割り当てることを含む。典型的には、契約は、前もって、分散コンピューティング環境内で組み込まれ、機能を実行する目的のサービスにバインドされる。この方法は、クライアントサービスをデプロイして、その動作を開始することをさらに含んでもよい。例示の実施形態においては、デプロイメントは、割り当てられたバインドされた契約が定義するインタフェースに、１つまたは複数のコンポーネントプログラムを自動的にリンクすることを含み、割り当てられたバインドされた契約を組み込むと、そのインタフェースが分散コンピューティング環境内に確立されて、リンクの記述を目的のサービスの実行の管理を担当するファブリックコントローラに書き込む。実施形態において、この方法は、最初に、サービスアプリケーションのロールのインスタンスの数を増やす指示を受信することを含むが、これに限定されるものではない。上述のように、ロールは、サービスアプリケーションの他のロールと共に動作して分散された機能を実現する、個々のクラスのコンポーネントを表す。一例としては、サービスアプリケーションの遠隔使用のワークロードにおける少なくとも１つの変化、または、データセンタの１つもしくは複数のノードがオフラインになることを含むイベントが起こると、指示が生じる。従って、本発明が企図するこれらのイベントおよび他のイベントは、分散したデータセンタ内で、サービスアプリケーションの追加のロールをインストールするのが望ましい状況を促進してもよい。
【００１７】
さらに別の態様において、本発明の実施形態は、契約を組み込み、バインドして、分散コンピューティング環境で利用できるようにすることによって、クライアントサービスを目的のサービスに自動的にリンクすることができるコンピュータシステムに関する。一般的に、データセンタは、分散コンピューティング装置を含む。コンピュータシステムは、複数のコンピュータソフトウェアコンポーネントを体現するコンピュータ記憶媒体を含んでもよい。最初に、コンピュータソフトウェアコンポーネントは、サービスアプリケーション（例えば、クライアントサービスおよび目的のサービス）、契約、および、分散コンピューティング環境を管理するように構成されるファブリックコントローラを含む。一般的に、クライアントサービスは、１つまたは複数のコンポーネントプログラムを含み、一方、目的のサービスは、１つまたは複数のロールインスタンスを含み、このロールインスタンスは、一種のコンポーネントプログラムを表す少なくとも１つのロールの複製を実現し、このコンポーネントプログラムは、実行されると、目的のサービスに機能を与えるものである。動作時、クライアントサービスは、クライアントサービスの依存性を満たす指示を出すように構成される。契約は、目的のサービスの機能を抽象化したものを公開してもよく、それによって、クライアントサービスのコンポーネントプログラムの依存性が満たされる。契約は、さらに、少なくとも１つのインタフェースを定義するように構成される。ファブリックコントローラは、次のプロセスの１つまたは複数を順不同で行うよう構成される。すなわち、契約を組み込むことによって、分散コンピューティングプラットフォームにインタフェースを確立するプロセス、契約を目的のサービスとクライアントサービスにバインドするプロセス、および、確立したインタフェースを介して、クライアントサービスのプログラムコンポーネントを目的のサービスのロールインスタンスに自動的にリンクするプロセスである。
【００１８】
一般的に、目的のサービスのロールインスタンスのインスタンス化と協調的管理は、サービスモデルによって容易になる（図２の参照番号２５０を参照）。本明細書においては、「サービスモデル」という語は、限定的な意味ではなく、一般的に、分散コンピューティング環境内で目的のサービスのインスタンスを確立および管理することに関する情報を含む任意の通信に関する。一例においては、サービスモデルは、目的のサービスのどのロールを確立するべきか、または、データセンタ内に各ロールのインスタンスをどのようにインストールして起動するべきかの記述を含む。すなわち、サービスモデルは目的のサービスのためにはどのロールを実行するべきか、および、そのロールのインスタンスをどこにインストールするべきかに関する条件を明確に述べる役割をする。
【００１９】
さらに、サービスモデルは、分散コンピューティングセンター（図２および図３の参照番号２００を参照）内に、ロールのインスタンスをサポートするための１つまたは複数のノード（例えば、図２、図３のノードＩ２２１，ＩＩ２２２，ＩＩＩ２２３，ＩＶ２２４，Ｖ２２５）を割り当ててもよい。これは、ファブリックコントローラが実行してもよい。従って、サービスモデルは、個々の実施形態において、目的のサービスやクライアントサービスのロールインスタンス等のコンポーネントプログラムを管理する指示を与えるインタフェース設計図として働く。すなわち、サービスモデルは、分散コンピューティング環境にわたる分散されたロケーションにデプロイされると、ファブリックコントローラが協調してコンポーネントプログラム間の活動を導くのを助ける。これらのロケーションは、典型的には、サービスモデル内のデプロイメントの詳細に記載される。一般的に、「デプロイメントの詳細」という語は、限定的な意味ではなく、ノード上のロールインスタンスのインスタンス化を管理する機構、ロールインスタンス間の通信路としてどの通信チャネルを利用するか識別する機構、および／または、目的のサービスを実行する個々の方法を記述する情報を提供する機構、を指して使われる。  
【００２０】
目的のサービスのロールインスタンス（例えば、図２の目的のサービス２０５のロールＡ２６１とロールＢ２６２）は、一般的に、少なくとも１つのロールの複製をさす。一般的に、本明細書において使われるように、「ロール」という語は、広く、目的のサービスの他のロールと共に動作して、クライアントサービスの期待される依存性を満たす機能を実現する任意のクラスのコンポーネントを指す。
【００２１】
目的のサービスの動作、および、そのサービスの機能面を開始するために、サービスモデルは、デプロイメントの詳細と協働して、分散コンピューティング環境のノード上に、ロールインスタンスをインスタンス化する。インスタンス化は、ロールインスタンスをホストするために利用可能であることが確認されたノードを割り当てること、割り当てられたノードにロールインスタンスを配置すること、配置されたロールインスタンスを構成すること、および、ロールインスタンスに配置された入力エンドポイントと出力エンドポイント間を相互に接続すること、を最初に含む。より詳細に後述するように、契約を組み込むと、インタフェースは、ロールインスタンスの入力エンドポイントにリンクされ、目的のサービスの機能の一部へのアクセスを促進しうる。  
【００２２】
一般的には、分散コンピューティング環境内のノードを利用して、ロールインスタンスの動作を引き受ける。本明細書において使用するように、「ノード」という語は、限定的な意味ではなく、例えば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、携帯用装置、携帯電話機、家庭用電子機器など、全ての形態のコンピュータ装置を包含する。一態様においては、ノードは、ネットワーククラウドを介して相互に接続された分散された複数のコンピュータ装置のうちのコンピュータ装置を表す。一般的に、これらの分散されたコンピュータ装置は、サービスアプリケーションの様々なロールの複数のインスタンスをホストすることができる。一例として、個々のノードは、それぞれ、ロールインスタンス（単数または複数）をサポートする２つ以上のホスト環境を収容可能であってもよい。これらのロールインスタンスは、ノード上で完全に独立して実行してもよく（すなわち、サービスアプリケーションに高水準のセキュリティを適応する）、他のロールと部分的に通信して実行してもよく、または、サービスアプリケーションの１つまたは複数の他のロールとインタラクティブな状態で実行してもよい。
【００２３】
動作すると、実行中の目的のサービスをクライアントサービスにバインドして、クライアントサービスに書き込まれた期待される依存性を満たしうる。契約は、典型的には、バインドのプロセスを進めるために本発明が採用した媒介である。一実施形態においては、契約は、実行中の目的のサービスに期待するもの（すなわち、目的のサービスの機能）の抽象的な定義を公開する。別の実施形態においては、契約は、インタフェースの集合を定義し、そのインタフェースの各々に関連付けられたプロパティのセットを保持する。一般的に、インタフェースは、１つまたは複数の点で、関連付けられている。実施形態においては、プロパティを利用して、分散コンピューティング環境へのインストール時に、インタフェースを調整またはインタフェースのパラメータを決定する。一例として、プロパティは、ノードのプロトコルに部分的に依存してもよい。ファブリックコントローラが目的のサービスを見つけ、クライアントサービスのコンポーネントプログラムが目的のサービスに成功裡に到達できるように構成できるように、これらプロパティは、目的のサービスを作成するとき、適切な情報で満たされる。
【００２４】
下記のように、契約を組み込み（例えば、定義されたインタフェースの集合のうちの１つを確立）、目的のサービスにバインドしうる。ファブリックコントローラは、目的のサービスを、１つまたは複数の目的のサービスに、目的のサービス（単数または複数）の機能に部分的に基づいて、バインドすることを選択してもよい。従って、契約は、複数のサービスアプリケーションにバインドされうる。しかしながら、契約の組み込み中に確立されるインタフェースは、選択された目的のサービスのノード、ロールインスタンス等の特性に従って、異なった構成であってもよい。
【００２５】
ここまで、本発明の実施形態全体の概観を簡潔に述べたが、本発明の実施形態を実装するのに適した例示的な動作環境について、下記に記載する。
【００２６】
図面を参照する。特に、まず、図１を参照すると、本発明の実施形態を実装する例示的な動作環境が示されており、それをコンピュータ装置１００と総称する。コンピュータ装置１００は、適切なコンピュータ環境の一例に過ぎず、本発明の実施形態の使用または機能の範囲に関していかなる限定を示唆するものでもない。また、コンピュータ環境１００が、図示のコンポーネントの任意の１つまたは任意の組み合わせに関して依存性または要件を有すると解釈すべきでもない。
【００２７】
本発明の実施形態は、パーソナルデータアシスタントまたは他の携帯用デバイス等のコンピュータまたは他の機械で実行される、コンポーネントプログラム等のコンピュータ実行可能命令などのコンピュータコードまたは機械で使用可能な指示という一般的な状況で、記載してよい。一般的に、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、などを含むコンポーネントプログラムは、個々のタスクを行うコード、または、個々の抽象データ型を実行するコードを指す。本発明の実施形態は、携帯装置、家庭用電化製品、汎用コンピュータ、専用コンピュータ装置などの様々なシステム構成で実践してもよい。本発明の実施形態は、通信ネットワークを通してリンクされる遠隔処理装置によってタスクを行う分散コンピューティング環境で実践されてもよい。
【００２８】
引き続き図１を参照すると、コンピュータ装置１００は、バス１１０を含み、バス１１０は、メモリ１１２、１つまたは複数のプロセッサ１１４、１つまたは複数のプレゼンテーションコンポーネント１１６、入力／出力（Ｉ／Ｏ）ポート１１８、Ｉ／Ｏコンポーネント１２０、および、例示の電源１２２を直接または間接的に結合する。バス１１０は、１つまたは複数のバス（アドレスバス、データバス、またはそれらの組み合わせなど）を表す。図１の様々なブロックは、分かりやすいように線で示されているが、実際には、様々なコンポーネントの線引きは、それほど明確ではなく、比喩的であり、その線は、より正確には中間的であいまいである。例えば、ディスプレイ装置などのプレゼンテーションコンポーネントをＩ／Ｏコンポーネントとみなしてもよい。また、プロセッサはメモリを有する。本発明の発明者は、技術の性質はそのようなものであり、図１の図は本発明の１つまたは複数の実施形態に関連して用いることができる例示的なコンピュータ装置を示したものに過ぎないことを繰り返して述べる。全て図１の範囲内で考えられている「ワークステーション」、「サーバ」「ラップトップ」、「携帯装置」などのカテゴリと、「コンピュータ」または「コンピュータ装置」との間に違いを設けていない。
【００２９】
コンピュータ装置１００は、典型的には、様々なコンピュータ可読媒体を含む。一例として、コンピュータ可読媒体は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ＥＥＰＲＯＭ（Electronically Erasable Programmable Read Only Memory）、フラッシュメモリなどのメモリ技術、ＣＤＲＯＭ、ＤＶＤ（Digital Versatile Disk）などの光学的またはホログラフィック媒体、磁気カセット、磁気テープ、磁気ディスク記憶装置などの磁気記憶装置、または、所望の情報のコード化に使用でき、コンピュータ装置１００によってアクセス可能な他の任意の媒体を含んでもよいが、これに限定されるものではない。
【００３０】
メモリ１１２は、揮発性および／または不揮発性メモリ形式のコンピュータ記憶媒体を含む。メモリ１１２は、取り外し可能であってもよく、取り外し不能であってもよく、それらの組み合わせであってもよい。例示的なハードウェア装置としては、固体メモリ、ハードドライブ、光ディスクドライブなどがある。コンピュータ装置１００は、メモリ１１２またはＩ／Ｏコンポーネント１２０等の様々なエンティティからデータを読み取る１つまたは複数のプロセッサを含む。プレゼンテーションコンポーネント（単数または複数）１１６は、ユーザや他の装置にデータ表示を提供する。例示的なプレゼンテーションコンポーネントとしては、ディスプレイ装置、スピーカ、印刷コンポーネント、振動コンポーネントなどがある。Ｉ／Ｏポート１１８によって、コンピュータ装置１００は、論理的にＩ／Ｏコンポーネント１２０などの他の装置への結合が可能になる。その一部は、内蔵式でもよい。例示的なコンポーネントとしては、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナ、プリンタ、ワイヤレス装置などがある。
【００３１】
図２を参照すると、本発明の実施形態の実装に使用するのに適した、分散コンピューティング環境２００を示すブロック図が示されている。一般的に、分散コンピューティング環境２００は、図３に示すように、組み込まれた契約２３５を目的のサービス２０５にバインドし、目的のサービス２０５にバインドされた契約をクライアントサービスにバインドするように構成されている。分散コンピューティング環境２００は、データセンタ２１０を含み、そのデータセンタ２１０は、サービスモデル２５０に従って、コンポーネントプログラムの動作、または目的のサービス２０５のロールＡ２６１およびＢ２６２のインスタンスを有し、サポートするように構成されている。当業者には当然のことながら、図２に示すデータセンタ２１０は、１つまたは複数のサービスアプリケーション（例えば、目的のサービス２０５）を収容するのに適する一例に過ぎず、本発明の実施形態の使用または機能の範囲に関していかなる制限を示唆するものでもない。データセンタ２１０を、任意の単一のノード、ノードの組み合わせ（例えば、ノードＩ２２１，ＩＩ２２２，ＩＩＩ２２３）、リソース（図示せず）、またはリソース（図示せず）にアクセスするＡＰＩのセットに関連付けられた任意の依存性または要件を有するものとして解釈すべきでもない。さらに、図２の様々なブロックは、分かりやすくするために線で示されているが、実際には、様々なコンポーネントの線引きは、それほど明確でなく、比喩的であり、線は、より正確には、中間的であいまいである。
【００３２】
データセンタ２１０は、様々なノード（例えば、ノードＩ２２１，ＩＩ２２２，ＩＩＩ２２３）、各ノード上で実行するオペレーティングシステム、ロールインスタンスＡ２６１およびＢ２６２、インタフェース（例えば、インタフェース２２０）、および、多くは、ファブリックコントローラ２１５を含み、このファブリックコントローラ２１５は、ノードＩ２２１，ＩＩ２２２、およびＩＩＩ２２３にローカルにインストールされるファブリックエージェント（図示せず）を含んでもよい。ファブリックエージェントは、ファブリックコントローラ２１５の拡張機能として働き、特に、目的のサービス２０５のインストールおよび管理のために協働して機能する。さらに、ロールインスタンスＡ２６１およびＢ２６２は、入力エンドポイント（例えば、入力エンドポイント２５５）を介して互いに接続してもよく、入力エンドポイントからコールを発し、出力エンドポイントで、コールを受信する。一例においては、これらの接続のうちの１つまたは複数は、ネットワーククラウド（図示せず）を介して確立してもよい。様々な物理的リソースにわたって分散配置されているロールインスタンスＡ２６１、Ｂ２６２、および、インタフェース２２０が、それらの間の通信を確立するために互いのロケーションを認識するように、ネットワーククラウドは、上記に挙げたエンティティを相互に接続する。さらに、ネットワーククラウドは、インタフェース２２０をロールＡのインスタンス２６１の入力エンドポイント２５５に動作可能に結合する通信チャネル２９０を介して、この通信を容易にする。一例として、ネットワーククラウドは、１つまたは複数のローカルリアネットワーク（ＬＡＮ）および／または広域ネットワーク（ＷＡＮ）を含むが、これに限定されるものではない。このようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットでは一般的である。従って、本明細書ではこれ以上の記載を省略する。
【００３３】
さらに、本発明の実施形態は、図２に示す物理的リソースへの実装に限定されず、本明細書の実施形態の範囲内の様々な異なった種類のコンピュータ装置、機器、および、コンポーネントプログラムの任意のもので実装してもよいことに留意されたい。言い換えれば、データセンタ２１０の図示のノードＩ２２１，ＩＩ２２２、ＩＩＩ２２３は、説明のために、例示的な構成を示したに過ぎず、従って、コンピュータ業界では既知の、ノード、および、ノード上に常駐するロールインスタンスの任意の適切な配置を、本発明は用いてもよく、意図してもよい。
【００３４】
これらの例示的なノード、I２２１，ＩＩ２２２，ＩＩＩ２２３、およびデータセンタ２１０のロールインスタンスＡ２６１、Ｂ２６２は、サービスの契約を組み込み、組み込まれた契約２３５を目的のサービス２０５にバインドするという概念を導入する働きをする。それについて、今から説明する。最初に、サービスの契約は、識別を行う。一例においては、クライアントサービス（図３の参照番号３０５参照）に書き込まれた期待される依存性を満たすロールＡのインスタンス２６１の機能２６０を抽象化したものを公開する契約が、識別される。識別された契約は、典型的には、インタフェースの集合を定義し、それぞれ、１つまたは複数のインタフェースに関連付けられたプロパティ２４０のセットを保持する。動作時、プロパティ２４０のセットは、各インタフェースの構成をインストールし、調整する助けになる。
【００３５】
識別されたサービスの契約を組み込み、分散コンピューティング環境２００のコンピュータ装置（例えば、ノードＩ２２１）内に、インタフェースの集合のうちのインタフェース２２０を確立してもよい。詳しく前述したように、組み込まれた契約は、クライアントサービスが、目的のサービス２０５の機能２６０に到達するための媒介として働く。組み込みのプロセスは、確立したインタフェース２２０に関連付けられたプロパティ２４０のセットから得た値２３０で、確立したインタフェース２２０のパラメータを決定することを含んでもよい。一例においては、パラメータの決定は、インタフェース２２０内の暗黙のパラメータ２７０に、値２３０を与えることを含んでもよい。
【００３６】
組み込みのプロセスは、インタフェース２２０に制約２９５をインストールすることも含んでもよい。最初に、インタフェース２２０に関連付けられたプロパティ２４０のセットは、確立したインタフェース２２０の動作を部分的に統治する制約２９５を特定してもよい。さらに、確立したインタフェース２２０を、プロパティ２４０のセットから得た値２３０でパラメータを決定すると、分散コンピューティング環境２００内で制約２９５を実施する。従って、制約２９５は、インタフェース２２０をどのように接続するかを決定する（例えば、サーバのどの外部ポートが、遠隔ウェブサーバアプリケーションからのコール２２５を受信するかを決定する）ガイドラインとして働き、一部では、インタフェース２２０をどのように構成するかを決定するガイドラインとして働く。一例として、プロパティ２４０が、特定のポート番号などの個々の制約２９５を特定すると、ファブリックコントローラ２１５は、データセンタ２１０内に個々の制約を割り当て、コール２２５が発せられると、個々の制約が目的とされるように設定する。従って、インタフェース２２０は、目的のサービス２１０の機能２６０への到達を試みると、これらの割り当てられたポート番号を使うように制限を受ける。
【００３７】
制約２９５は、インタフェース２２０の構成を支援してもよい。一例においては、制約２９５は、インタフェース２２０に、機能２６０へのアクセスを試みるものをフィルタリングするように促し、それによって目的のサービス２０５へのトラフィックの流れを制限してもよい。別の例においては、制約２９５によって、インタフェース２２０が、個々のＩＤを証明する機関が認証したクライアントサービスが機能２６０に到達できるようにしてもよい。さらに別の例においては、制約２９５によって、インタフェース２２０、または、インタフェース２２０を介した目的のサービス２０５は、所定の時間枠が過ぎると、機能２６０への接続を終わらせるようにし、そうすることによって、プロセスが盗まれるのを防ぐようにしてもよい。
【００３８】
組み込むとすぐに、組み込まれた契約２３５は、ファブリックコントローラ２１５を介して、目的のサービス２０５にバインドしてもよい。組み込まれた契約２３５を目的のサービス２０５にバインドするプロセスは、確立したインタフェース２２０とロールＡのインスタンス２６１を、通信チャネル２９０を介して自動的にリンクすることを含んでもよい。図４、図５を参照して、下記により詳しく述べるように、通信チャネル２９０は、様々な形態のうちの任意のものを採用してよい。典型的には、通信チャネル２９０は、入力エンドポイント２５５を介して、目的のサービス２０５の機能２６０にインタフェース２２０を動作可能に結合する。入力エンドポイント２５５、および／または、通信チャネル２９０は、将来参照するためにマッピングしてもよい。一例としては、ファブリックコントローラ２１５は、インタフェース２２０が使用するために、データストア２１０への適切な通信チャネル２９０の割当を担当してもよい。
【００３９】
実施形態においては、組み込まれた契約２３５を目的のサービス２０５にバインドすると、インタフェース２２０は、ロールＡのインスタンス２６１の入力エンドポイント２５５にリンクされる。リンクは、機能２６０を提供する目的のサービス２０５の複数のロケーションへのアクセスを促進する。言い換えれば、インタフェース２２０は、所望の機能２６０を提供するロールＡの全ての関連するインスタンス２６１を認識する。
【００４０】
バインドのプロセスは、確立したインタフェース２２０によって実施される特定の制約２９５に基づいて、ロールＡのインスタンス２６１を自動的に構成することをさらに含む。構成のプロセスは、参照番号２７５によって示す。実施形態においては、インタフェース２２０で実現された制約２９５は、目的のサービス２０５内での制約条件の設定の仕方に関して、ファブリックコントローラ２１５に指示する。一例においては、制約２９５は、ロールＡのインスタンス２６１に誰がアクセスできるかに関する制約条件、例えば、北アメリカのクライアントサービスのみがアクセスできるなど、があることを指示してもよい。別の例においては、インタフェース２２０を、セキュリティを有効にしたインタフェースとして構成する制約２９５は、次に、着信コール２２５に対して、信頼性の証明書をレビューするように目的のサービス２０５を構成してよい。典型的には、データセンタ２１０内の目的のサービス２０５のインスタンスの数を増やすとき、新しいロールインスタンスに関する入力エンドポイント２５５を適切に構成するために、サービスモデル２５０は、制約２９５を備え、または制約２９５を参照してもよい。
【００４１】
バインドのプロセスは、機能２６０を有するロールＡのインスタンス２６１の適切な入力エンドポイント２５５を識別して、それにリンクすることをさらに含む。一般的に、「入力エンドポイント」とは、広義に、ロールＡがコール２２５を入力させて、他のエンティティがロールＡに接触することを可能にするポートを指す。さらに、ポートを用いて、コール２２５内に組み込まれたリクエストにレスポンスしてもよい。このレスポンス、すなわち、「応答」は、同じ通信チャネル２９５を介して、機能２６０をリクエストするクライアントサービスに送り返してもよい。目的のサービス２０５およびクライアントサービスは、ネゴシエーション中に、互換性があるように構成されるので（例えば、組み込まれた契約２３５からの制約２９５を適用すること）、コール２２５と応答は、目的のサービス２０５およびクライアントサービスの両方が理解可能である（例えば、類似のプロトコルまたは言語）。
【００４２】
さらに、入力エンドポイント２５５にリンクすると、データセンタ２１０内の入力エンドポイント２５５のネットワークアドレス２６５（例えば、ＩＰアドレス）を、ファブリックコントローラ２１５に伝えて、インタフェース２２０にリンクされるロールＡのインスタンス２６１のロケーションを探してもよい。このネットワークアドレス２６５は、組み込まれた契約２３５によって公開された機能２６０のロケーションを表しており、このネットワークアドレス２６５によって、機能２６０に依存するクライアントサービスは、適切なロケーション、またはロールインスタンス２６１にアクセスすることができる。さらに、ネットワークアドレス２６５は、データセンタ２１０外のエンティティがインタフェース２２０に接触するのを助ける。一般的に、バインド中に、インタフェース２２０をリンクさせると、ファブリックコントローラ２１５は、入力エンドポイント２５５のネットワークアドレス２６５を記載したものを、獲得し、保持する。
【００４３】
一例においては、このネットワークアドレス２６５は、クライアントサービスから見えなくてもよい。従って、ファブリックコントローラ２１５は、コール２２５をサービスアプリケーションから適切な入力エンドポイント２５５にルーティングする静的な経路を自動的に確立する。別の例においては、このネットワークアドレス２６５は、クライアントサービスに見えてもよい。この場合には、クライアントサービスは、コール２２５を送信するために連絡先のアドレスを知ることが必要なレガシーアプリケーションでありうる。従って、ファブリックコントローラ２１５は、ネットワークアドレス２６５をクライアントサービスに公開してもよい。さらに別の例においては、このネットワークアドレス２６５は、クライアントサービスがアクセスできてもよい。従って、通信チャネル２９０が動的に更新されると、クライアントサービスは、ネットワークアドレス２６５を検索して、入力エンドポイントにアクセスしてもよい。
【００４４】
目的のサービス２０５でコール２２５を受信すると、コール２２５を行ったクライアントサービスのＩＤを要求して、コール２２５の信頼性を検証してもよい。一例においては、クライアントサービスのＩＤが、ファブリックコントローラ２１５によって記録される。記録は、クライアントサービスをデプロイすると行われてもよいし、クライアントサービスを、組み込まれた契約２３５にバインドすると行われてもよいし、あるいは、その後の任意の時に行われてもよい。発せられコール２２５をロールＡのインスタンス２６１にリレーすると、要求２８１を、発せられたコール２２５に追加してもよい。この要求２８１は、クライアントサービスのＩＤにアクセスして、クライアントサービスのコンポーネントプログラムがコール２２５を発したことを検証し、判断したＩＤとクライアントサービスの他の特性を要求２８１に組み込むことによって、生成してもよい。
【００４５】
このようにして、ファブリックコントローラ２１５は、コール２２５の発信源を基本的に保証し、クライアントサービスのために認証を与える。従って、要求２８１によって、目的のサービス２０５は、コールを発した側を検証することができ、そうすることによって、目的のサービス２０５で、個々のセキュリティレベルを保証することができる。実施形態においては、検証は、要求２８１を検査して、コール２２５のリクエストを引き受けるか否かを確定することを含んでもよい。検査は、要求２８１の内容（例えば、クライアントサービスのプロパティおよび／または能力）のチェックを含んでもよい。この内容の詳細のレベルは、一般的に、要求２８１の粒度、コール２２５を送信するクライアントサービスの種類、および／または、クライアントサービスの出力エンドポイントがサポートするプロトコルに依存する。
【００４６】
一実施形態においては、要求２８１内のクライアントサービスのプロパティは、ファブリックコントローラ２１５がクライアント装置に関して推定することができる任意の情報を含んでもよい。一例においては、クライアントサービスのジオロケーションを要求２８１の内容に設けてもよい。それに応じて、目的のサービス２０５は、より近くのノードでコール２２５を引き受ける、または、より近くのノードにコール２２５をリダイレクトしてもよい。または、目的のサービス２０５は、ジオロケーションに基づいて、コール２２５への応答を調整してもよい。例えば、ジオロケーションが、コール２２５はフランスからであることを示す場合、目的のサービス２０５は、フランス語で応答を準備してもよい。別の例においては、機能２６０への権利のリストを、要求２８１の内容に組み込んでもよい。それに応じて、目的のサービス２０５は、クライアントサービスが所有する権利に従って、目的のサービス２０５が制御するリソースにクライアントサービスがアクセスするのを制限してもよい。
【００４７】
別の実施形態においては、目的のサービス２０５は、検証ＡＰＩ（Application Programming Interface）２０１に問い合わせることによって、クライアントサービスのＩＤと権利を検証してもよい。検証ＡＰＩ２０１は、ファブリックコントローラ２１５がコール２２５のソースを知っているので、受信したコール２２５に関するデータを提供してもよい。従って、要求２８１が不完全または利用できない場合、目的のサービス２０５は、コール２２５を満たすか否か（例えば、機能２６０を提供）の判断を積極的に行ってもよい。
【００４８】
次に図３を見てみると、本発明の実施形態の実装に使用するのに適した、目的のサービスにバインドされた契約を、クライアントサービスにバインドするように構成された例示的な分散コンピューティング環境２００を示すブロック図が示されている。最初に、分散コンピューティング環境２００は、上述のように、目的のサービスにアクセスするクライアントサービス３０５を含む。クライアントサービス３０５は、データセンタ２１０内で実行する、またはデータセンタ２１０外で遠隔接続によって実行する、あるいはデータセンタ２１０上に部分的に常駐するように構成した任意のサービスアプリケーションを表してもよい。クライアントサービス３０５は、データセンタ２１０の別々のノード（例えば、ノードＩＶ２２４およびＶ２２５）に分散され得るコンポーネントプログラム（例えば、コンポーネントプログラムＡ３６１およびＢ３６２）を含んでもよい。クライアントサービス３０５がデータセンタ２１０内にある実施形態においては、ファブリックコントローラ２１５は、サービスモデル３５０に保持されたデプロイメントの詳細を踏まえて、コンポーネントプログラムＡ３６１およびＢ３６２をデプロイしてもよく、クライアントサービス３０５の実行を管理してもよい。
【００４９】
例示的実施形態においては、１つまたは複数のコンポーネントプログラムＡ３６１およびＢ３６２は、依存性３６０と共に、開発者によって書かれる。一般的に、クライアントサービス３０５の適切な実行は、適切な機能（例えば、図２の目的のサービス２０５の機能２６０）を用いて、依存性３６０を満たすことに依存する。動作時、クライアントサービス３０５は、指示を伝えて、クライアントサービス３０５の依存性３６０を満たしてもよい。それに応じて、ファブリックコントローラ２１５は、依存性３６０を検査して、依存性３６０を満たす機能を抽象化したものを公開する契約を割り当ててもよい。上述のように、依存性３６０を満たす契約は、分散コンピューティング環境２００内で前もって組み込まれてもよい。さらに、組み込まれた契約は、契約が公開する機能を実行する目的のサービスに、前もってバインドしてもよい。
【００５０】
依存性を満たす契約を割り当てると、ファブリックコントローラ２１５は、この割り当てられ、前もってバインドされた契約３３５をクライアントサービス３０５にバインドしてもよい。実施形態においては、クライアントサービス３０５をバインドするプロセスは、動作を開始するためのクライアントサービス３０５のコンポーネントプログラムＡ３６１およびＢ３６２の最初のデプロイメント中であってもよい。一般的に、デプロイメントのプロセスは、コンポーネントプログラムＡ３６１およびＢ３６２を、割り当てられバインドされた契約３３５によって定義されたインタフェース２２０に自動的にリンクさせることを含む。そこで、バインドされた契約３３５は、プロパティ２４０のセットから得た制約２９５で、インタフェース２２０を構成する。一実施形態においては、割り当てられ、バインドされた契約３３５を組み込むと、インタフェース２２０が、分散コンピューティング環境２００内に確立される。さらに、リンクの詳細が、ファブリックコントローラ２１５に書き込まれてもよい。あるいは、リンクは、将来参照するために、ファブリックコントローラ２１５にアクセス可能な任意のデータストア（単数または複数）に、少なくとも一時的に記憶されてもよい。
【００５１】
例示的な実施形態において、コンポーネントプログラムＡ３６１およびＢ３６２をインタフェース２２０に自動的にリンクするプロセスは、コンポーネントプログラムＢ３６２に配置された出力エンドポイント３７５を識別することを含んでもよく、ここではコンポーネントプログラムＢ３６２は、依存性３６０を呈する。一般的には、出力エンドポイント３７５は、コンポーネントプログラムＢ３６２が、他方に何かをリクエストするのに使うポートを表してよい。自動的にリンクを行うプロセスは、分散コンピューティング環境２００内の通信チャネル３９０の割当を継続して、確立したインタフェース２２０を出力エンドポイント３７５に動作可能に結合してもよい。通信チャネル３９０は、典型的には、クライアントサービス３０５の出力エンドポイント３７５から発せられたコール２２５を伝達する役割をする。典型的には、コール２２５は、コンポーネントプログラムＢ３６２に書かれた依存性３６０を満たすようにというコンポーネントプログラムＢ３６２によるリクエストを含む。実施形態においては、依存性３６０は、クライアントサービス３０５では実行されないが、インタフェース２２０を通してリンクされた機能によって行われる外部処理またはデータ検索を含んでもよい。
【００５２】
バインドのプロセスを完了すると、バインドされた契約３３５は、クライアントサービス３０５と、付随する目的のサービスの両方にバインドされる。実施形態においては、クライアントサービス３０５は、インタフェース２２０の制約２９５に問い合わせて、インタフェース２２０がクライアントサービス３０５のサービスモデル３５０が特定する機能面を有することができるか否かを判定することができる。もし有していなければ、クライアントサービス３０５は、ファブリックコントローラ２１５によって、バインドされたインタフェースと目的のサービスに代わる、依存性３６０を満たす機能を有する別の契約に、再バインドされてよい。バインドされた目的のサービスがオフラインとなったときも、再バインドを行ってもよい。
【００５３】
クライアントサービス３０５の依存性３６０に目的のサービスを関連付けるために、様々な種類の契約を採用してもよい。一実施形態によると、セルフバインドされた契約を利用する。一般的には、セルフバインドされた契約は、ファブリックコントローラ２１５によって動作可能なプラグイン機構によって自動的にバインドされる。従って、ファブリックコントローラ２１５が目的のサービスまたは疑似サービスを選択すると、そのサービスが、インタフェース２２０を介して行われたコール２２５に対応する。
【００５４】
別の実施形態においては、標準的な契約が用いられる。一般的に、標準的な契約は、２つの異なった方法でバインドしてもよい。１つの例示的方法においては、目的のサービスは、それぞれ固有の名前を与えられる。そして、ファブリックコントローラ２１５は、バインドされた目的のサービスが実際にバインドされた契約３３５を組み込むことを検証することによって、固有の名前を用いて、クライアントサービス３０５と目的のサービスとの関連付けの有効性をチェックしてもよい。そして、ネットワークアドレス（例えば、ネットワークアドレス２６５）を、目的のサービスの入力エンドポイントから得る。別の方法においては、データセンタ２１０によってホストされていない外部クライアントサービス３０５の出力エンドポイント３７５に関する情報、および／または、目的のサービスの入力エンドポイント（例えば、ＩＰアドレス／ＤＮＳ名：ポート）に関する情報が、ファブリックコントローラ２１５に送られる。ＩＰ：ポートの詳細が、インタフェース２２０のために検知される。従って、ファブリックコントローラ２１５は、インタフェース２２０にリンクされたコンポーネントプログラムＢ３６２の出力エンドポイント３７５を構成する。しかしながら、名前を付けられた目的のサービスがバインドされた契約３３５を満たすことの検証は行われない。
【００５５】
さらに別の例示的実施形態においては、典型的には、クライアントサービス３０５が、データセンタ２１０の外部に常駐するとき、外部の契約を利用する。一般的に、外部の契約は、低レベルの抽象化したものを含み、その抽象化したものによって、クライアントサービス３０５は、クライアントサービス３０５のデプロイメントによって設定された境界内の任意の公的なＩＰアドレスに接触することができる。実際に、バインドは行われず、クライアントサービス３０５は、目的のサービスのネットワークアドレス２６５を提供して、その機能にアクセスするものとされる。従って、リンクされた入力エンドポイントのネットワークアドレス２６５を用いて、通信チャネル３９０を構成し、ルーティングする。
【００５６】
上述のように、バインドされた契約３３５は、確立したインタフェース２２０に関連付けられたプロパティ２４０のセットを保持してもよい。動作時、関連付けられたプロパティ２４０のセットから得た値で、確立したインタフェース２２０のパラメータを決定することによって、制約２９５を確立したインタフェース２２０に適用してもよい。この適用された制約２９５は、コンポーネントプログラムＡ３６１およびＢ３６２を構成するために、クライアントサービス３０５に公開してもよい。クライアントサービス３０５を構成するプロセスは、参照番号３８８によって示される。一般的には、出力エンドポイント３７５と共に、コンポーネントプログラムＡ３６１およびＢ３６２を構成するプロセス３８８は、インタフェース２２０に適用された制約２９５からの指示を引き出すことを含む。これらの指示は、クライアントサービス３０５の態様への任意の数の構成、および、それによって提供される通信のために用いてもよい。例えば、指示は、出力エンドポイント３７５が発したコール２２５をフォーマットするために利用してもよい。特に、指示を利用してコール２２５のフォーマットを構成することによって、コール２２５は、所望の機能を実施する目的のプログラムのロールインスタンスの基礎となるプロトコルと互換性があってもよい。
【００５７】
一旦構成されると、クライアントサービス３０５は、依存性３６０が満たされれば、コール２２５を発してもよい。実施形態においては、コール２２５は、依存性３６０を実現するコンポーネントプログラムＢ３６２の出力エンドポイント３７５から発してもよい。その後、コール２２５は、分散コンピューティング環境２００の割り当てられた通信チャネル３９０を介して、確立したインタフェース２２０にルーティングされる。詳細に前述したように、確立したインタフェース２２０は、パラメータを決定されて、発せられたコール２２５を目的のサービスにリレーし、あるいは発せられたコール２２５をフィルタリングしてもよい。インタフェース２２０のこの決定は、クライアントサービス３０５のＩＤと共に、適用されている制約２９５に基づいてもよい。
【００５８】
この例示的分散コンピューティング環境２００は、本発明の態様を実行するために実装してもよい適切な環境の一例に過ぎず、本発明の使用または機能の範囲に関して、いかなる制限も示唆するものではない。分散コンピューティング環境２００の図示された例示的システムアーキテクチャが、図示のコンポーネント２１５，２２０，２２１，２２５，３０５，３３５，３５０，３６０，３６１および３６２の任意の１つまたは任意の組み合わせに関する依存性または要件を有すると解釈するべきでもない。一部の実施形態においては、コンポーネント２１５，２２０，２２１，２２４，２２５，３０５，３３５，３５０，３６０，３６１および３６２のうちの１つまたは複数は、スタンドアロン装置として実装してもよい。別の実施形態においては、コンポーネント２１５，２２０，２２１，２２５，３０５，３３５，３５０，３６０，３６１および３６２の１つまたは複数は、データセンタ２１０またはファブリックコントローラ２１５に、直接、組み込まれてもよい。当業者には当然のことながら、図３に示されたコンポーネント２１５，２２０，２２１，２２５，３０５，３３５，３５０，３６０，３６１および３６２は、性質および数の点で例示的なものであり、制限的なものと解釈してはならない。
【００５９】
従って、任意の数のコンポーネントを採用して、本発明の実施形態の範囲内で所望の機能を達成してもよい。図３の様々なコンポーネントは、分かりやすいように線で示されているが、実際は、様々なコンポーネントの線引きは明確なものではなく、比喩的であり、線はより正確には、中間的な、あいまいなものである。さらに、図３の一部のコンポーネントは、単一のブロックで表されているが、表示は、性質および数の点で例示的なものであり、制限的なものとみなしてはならない（例えば、クライアントサービス３０５のみが図示されているが、より多くのものがインタフェース２２０に通信可能に結合されてもよい）。
【００６０】
次に図４を見てみると、本発明の実施形態による、ロードバランシング（ＬＢ）チャネル４１０を利用して、サービスアプリケーション（例えば、クライアントサービス３０５および目的のサービス２０５）間の通信（例えば、コール２２５と応答）をルーティングする例示的なファブリックコントローラ２１５の図式的な表示が示されている。最初に、ファブリックコントローラ２１５がアクセス可能な接続定義４５０を与える。これらの接続定義４５０は、ＬＢ機構４２０に指示して、目的のサービス２０５の複数のロールインスタンス４１１，４１２および４１３のうちの選択された１つに通信をルーティングするのを助ける。コールを受信するために選択されるロールインスタンスは、例えば、コール２２５を発したクライアントサービス３０５のロール（例えば、ロール４２１，４２２および４２３）との互換性、そのロール（例えば、ロール４２１，４２２および４２３）への近接性、利用可能性など、任意の数の要素に基づいて選択してもよい。
【００６１】
選択されると、確立したインタフェース２２０を目的のサービス２０５のロール（例えば、ロール４１１，４１２および４１３）の入力エンドポイントにリンクするロードベアリング（ＬＢ）チャネル４１０を介して、コールは、目的のサービス２０５の選択されたロールに送信される。一例においては、送信は、確立したインタフェース２２０で、クライアントサービス３０５からのコール２２５を受信すること、および、ＬＢ機構４２０を呼び出して、ＬＢチャネル４１０の利用可能な通信チャネルにコール２２５を配信することを含んでもよい。従って、ただ１つのネットワークアドレスが、コール２２５を送信するクライアントサービス３０５に提供される。ファブリックコントローラ２１５は、接続定義４５０を踏まえて、ロードバランシングスキームの実行を担当し、それによって、インタフェース２２０へのコール２２５の配信が、目的のサービス２０５のロール（例えば、ロール４１１，４１２および４１３）間に間違いなく配信される。例示的な実施形態においては、ネットワークアドレスは、インタフェース２２０および／またはＬＢ機構４２０への仮想ＩＰである。ＬＢ機構４２０は、次に、仮想ＩＰを、それぞれが異なるロールに関連付けられる具体的なＩＰに変えてもよい。
【００６２】
図５を参照すると、本発明の実施形態による、ＳＬＳチャネル（例えば、チャネル５１０，５１１および５１２）を利用して、サービスアプリケーション（例えば、クライアントサービス３０５および目的のサービス２０５）間の通信（例えば、コール５２１，５２２および５２３と、そのコールに応じる応答）をルーティングする例示的なファブリックコントローラの図式的な表示が示されている。一般的に、割り当てられた通信チャネル（図２の参照番号２９０を参照）は、目的のサービス２０５のロール（例えば、ロール４１１，４１２および４１３）の入力エンドポイントに、確立したインタフェース２２０をリンクする、ＳＬＳチャネル５１０，５１１および５１２を含んでもよい。これらのＳＬＳチャネル５１０，５１１および５１２は、接続定義４５０によって記憶され、またファブリックコントローラ２１５によって保持されてもよい。
【００６３】
動作時、コール（例えば、コール５２１，５２２および５２３）を受信すると、ファブリックコントローラ２１５は、コールに関連付けられたネットワークアドレスを識別する。そのネットワークアドレスは、コール（例えば、コール５２１）を提供するクライアントサービス３０５のロール（例えば、ロール４２１）が提供してもよく、あるいは、コールの発信源に基づいて接続定義４５０が供給してもよい。このネットワークアドレスに基づいて、コール２２５は、ＳＬＳチャネルのうち、目的のサービス２０５の適切なロールインスタンス（例えば、ロール４１１）の入力エンドポイントに、確立したインタフェース２２０をリンクするように指定された通信チャネル（例えば、５１０）を介して、ルーティングされる。従って、ファブリックコントローラ２１５は、インタフェース２２０にリンクされたクライアントサービスのコンポーネントプログラムまたはロールと同じ数の、到達可能であり外部からアドレス可能な入力エンドポイントがあることを保証する。このように、各出力エンドポイントが単一の入力エンドポイントに対応することによって、コールをルーティングするための単一のＳＬＳチャネルおよび単一のネットワークアドレスを指定する。
【００６４】
図６を参照すると、本発明の実施形態による、契約を自動的に組み込み、その組み込まれた契約を目的のサービスにバインドする方法６００全体のフロー図が示されている。さらに、「ステップ」および／または「ブロック」という語は、本明細書においては、採用される方法の異なる要素を示すのに用いられるが、個々のステップの順序が明確に述べられている場合を除いては、これらの語は、本明細書で開示されている様々なステップ間の個々の順序を示唆していると解釈してはならない。最初に、ブロック６０５に示されているように、インタフェースの集合を定義する契約を識別する。さらに、この契約は、各インタフェースをインストールするためのプロパティのセットを保持する。ブロック６１０に示すように、識別された契約を組み込み、分散コンピューティング環境内のインタフェースの集合から、インタフェースを確立する。典型的には、組み込まれた契約は、クライアントサービスが目的のサービスの一部に到達するための媒介を導入する。ブロック６１５に示すように、組み込まれた契約は、確立したインタフェースに関連付けられたプロパティのセットから得た値で、確立したインタフェースのパラメータを決定することによって、目的のサービスにバインドされる。実施形態において、パラメータを決定するのプロセスは、確立したインタフェースと、その１つまたは複数のロールインスタンスとを自動的にリンクすること（ブロック６２０参照）と、目的のサービス（ブロック６２５参照）の実行の管理を担当するファブリックコントローラを介してリンクをマッピングすることとを含む。明確化のために、ロールインスタンスは、一種のコンポーネントプログラムを表す少なくとも１つのロールを複製し、このコンポーネントプログラムは、実行されると、機能を目的のサービスに与える。
【００６５】
次に図７を見てみると、本発明の実施形態による、組み込まれた契約を、クライアントサービスの依存性に基づいて自動的に割り当て、割り当てられた契約をバインドする方法７００全体を示すフロー図が示されている。最初に、ブロック７０５に示されるように、依存性を満たす指示を、クライアントサービスから受信する。上述のように、クライアントサービスは、１つまたは複数のコンポーネントプログラムを含む。ブロック７１０に示すように、クライアントサービスのコンポーネントプログラムの依存性を満たす機能を抽象化したものを公開する契約が割り当てられる。典型的には、契約は、分散コンピューティング環境内で組み込まれ、機能を実行する目的のサービスにバインドされる。ブロック７１５に示すように、クライアントサービスがデプロイされて、その動作を開始する。実施形態においては、デプロイメントは、割り当てられ、バインドされた契約（ブロック７２０参照）が定義するインタフェースに、コンポーネントプログラムを自動的にリンクすることと、目的のサービスの実行の管理を担当するファブリックコントローラにリンクの詳細を書くこと（ブロック７２５参照）とを含む。一般的に、割り当てられ、バインドされた契約を組み込むと、インタフェースが、分散コンピューティング環境内に確立される。
【００６６】
当業者には当然のことながら、図６および図７に示される実施形態の範囲内で、所望の機能を達成するために、任意の数のステップを採用してもよい。さらに、図６および図７の様々なステップは、分かりやすいように線で示しているが、実際は、様々なコンポーネントの線引きは、それほど明確でなく、比喩的であり、線は、より正確には、中間的なあいまいなものである。さらに、図６および図７の一部のステップは、単一のプロセスとして表しているが、表示は、性質および数の点で例示的なものであり、制限的であると解釈してはならない。
【００６７】
本発明の実施形態を、個々の実施形態に関連して記載したが、それらは、あらゆる点において、説明するためであり、限定するためではない。当業者には、本発明の範囲を逸脱することなく本発明の実施形態に関連する代替的な実施形態は明らかであろう。
【００６８】
本発明は、そのシステムおよび方法に本来備わる、明らかな他の利点と共に、上述のあらゆる目的を達成するようになされたものであることは、上記より明らかである。当然のことながら、一部の特徴および下位の組み合わせは、有用であり、それらに言及することなく採用してもよい。これは、請求項の企図するところであり、また請求項の範囲内である。
【図１】
0005579727.tif 000002
【図２】
0005579727.tif 000003
【図３】
0005579727.tif 000004
【図４】
0005579727.tif 000005
【図５】
0005579727.tif 000006
【図６】
0005579727.tif 000007
【図７】
0005579727.tif 000008