詳細な説明
以下の記載では、説明の目的のため、この発明の実施形態の完全な理解を提供するために特定の詳細が述べられる。しかしながら、これらの特定の詳細がなくてもさまざまな実施形態は実践され得る、ということは明らかであろう。図および説明は、限定的であるよう意図されてはいない。
図のいくつかに示すシステムは、さまざまな構成で提供されてもよい。いくつかの実施形態では、システムは、システムの1つ以上のコンポーネントがクラウドコンピューティングシステムにおける1つ以上のネットワークを介して分散される分散型システムとして構成されてもよい。
この開示は一般に、メッセージ通信の信頼性を向上させるための手法に関する。ある実施形態では、仲介通信ハンドラシステムを介したソース(たとえば、クライアントシステム)と宛先(たとえば、ターゲットシステム)との間のメッセージの信頼できる通信を容易にするための手法が説明される。メッセージは、宛先からターゲットサービスを要求するために通信されてもよい。
ある実施形態では、仲介通信ハンドラシステムは、信頼できる通信を保証するために、メッセージについての配信ステータスを示す情報を格納できる。ある実施形態では、仲介通信ハンドラシステムは、QoS基準と一致する信頼できる配信を保証するために、メッセージについての配信ステータスを示す情報を使用してもよい。
ある実施形態では、宛先へのメッセージの配信時に遅延および/またはエラーに遭遇した場合、メッセージについての配信ステータスを示す情報は、仲介通信ハンドラシステムが、いつ、どのアクション(たとえば、メッセージ再送および配信結果の通信)を行なうべきかを判断できるようにしてもよい。たとえば、仲介通信ハンドラシステムは、宛先に送信されるべき要求(たとえば、ネットワークサービスの要求)に対応する複製メッセージを許可すべきか否かを、宛先に送信された同じ要求に対応する以前のメッセージの配信ステータスに基づいて判断してもよい。配信ステータスを維持することにより、仲介通信ハンドラは、メッセージの配信を確実に取扱うことができる。仲介通信ハンドラは、メッセージを配信するための複製の試みを防止するために、配信ステータスを使用できる。そうすることで、仲介通信ハンドラは、メッセージの再配信を管理しなければならないことを回避してもよい。配信を再試行すべきか否かを判断するための負担をソースにシフトすることができる。メッセージについての配信ステータスを示す情報は、ユニーク識別子に関連付けて管理され得る。ユニーク識別子は、メッセージのデジタル署名、または宛先に関連付けられたメッセージ識別子に基づき得る。ある実施形態では、ユニーク識別子は、メッセージに対応するメッセージ識別子に関連付けられ得る。メッセージ識別子をユニーク識別子に関連付けることにより、仲介通信ハンドラは、メッセージに関連付けられたメッセージ識別子を有する同一のメッセージを配信するようにという次の要求を判断し、防止することができる。メッセージについての配信ステータスを示す情報はまた、メッセージの通信に使用される通信プロトコルについて特定された信頼性パラメータ(たとえば、QoS基準)を満たすメッセージの通信を再試行すべきか否かを判断するために、仲介通信ハンドラシステムによって使用されてもよい。
いくつかの実施形態では、仲介通信ハンドラシステムは、メッセージが配信された場合に仲介通信ハンドラシステムが受理確認を受信できるようにする1つ以上の呼出し可能インターフェイスを提供できる。1つ以上の呼出し可能インターフェイスは、仲介通信ハンドラシステムが、メッセージのステータスにおける変化の通知を受信できるようにしてもよい。インターフェイス通信ハンドラシステムは、ソースと宛先との間のメッセージの通信に関連する情報を管理することによって、仲介サービスシステム(たとえば、企業サービスバス)に対する負担を減らし得る。また、仲介通信ハンドラは、通信環境および/またはプロトコルにおける制限または差異に関係なく、各コンポーネントが独立して動作できるようにソースと宛先との間の独立性を促進し得る。
図1は、この発明の一実施形態に従った通信システム100を示す。図示されるように、通信システム100は、ソース102と、複数のターゲットサービス(たとえば、ターゲットサービス104およびターゲットサービス106)と、仲介通信ハンドラ110とを含む。仲介通信ハンドラ110は、ソース102と1つ以上の宛先との間のメッセージ(たとえば、メッセージ108)の信頼できる通信を容易にする。各ターゲットサービス(たとえば、ターゲットサービス104およびターゲットサービス106)は、宛先であってもよい。図1に示す通信システム100はまた、仲介通信ハンドラ110によってアクセス可能な1つ以上のデータストア160を含む。データストア160は、データベース(たとえば、文書データベース、リレーショナルデータベース、または他のタイプのデータベース)、ファイルストア、それらの組合せ、または何らかの他の情報ストアを使用して実現され得る。
通信システム100とは異なり得る、さまざまな異なるシステム構成が可能である、ということが理解されるべきである。図1に示す実施形態はこのため、この発明の一実施形態を実現するための通信システムの一例であり、限定的であるよう意図されてはいない。例示の目的のため、特定の実施形態が、ソース102とターゲットサービス104、106との間のメッセージの信頼できる通信を容易にするための手法としてここに説明される。この発明の実施形態によれば、どのソース(たとえば、ソース102)も、仲介通信ハンドラ110を介して、ターゲットサービス(たとえば、ターゲットサービス104またはターゲットサービス106)と通信可能である。
ソース102、仲介通信ハンドラ110、およびターゲットサービス104、106は、異なるコンピューティングシステムで実現され得る。ある実施形態では、通信システム100の要素のすべてまたはいくつかが、単一のコンピューティングシステムに含まれ得る。異なるコンピューティングシステム上で実現される場合、ソース102、仲介通信ハンドラ110、およびターゲットサービス104、106は、1つ以上のネットワーク(図示せず)を介して互いに通信してもよい。通信ネットワークの例は、インターネット、モバイルネットワーク、無線ネットワーク、セルラーネットワーク、ローカルエリアネットワーク(local area network:LAN)、ワイドエリアネットワーク(wide area network:WAN)、他の通信ネットワーク、またはそれらの組合せを含んでいてもよい。
ソース102(たとえば「ソース」)は、コンピューティングシステムを含んでいてもよい。ソース102は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組合せで実現されてもよい。ソース102は、ターゲットサービス104、106のうちの1つ以上への配信のために、メッセージ(たとえば、メッセージ108)を仲介通信ハンドラ110に通信してもよい。いくつかの実施形態では、ターゲットサービスに送信されたメッセージは、サービスの要求を含んでいてもよい。ソース102は、携帯情報端末(personal digital assistant:PDA)、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、ウェアラブルコンピュータ、ポケットベルなどを含んでいてもよい。ソース102は、1つ以上のメモリ記憶装置と1つ以上のプロセッサとを含み得る。メモリ記憶装置はプロセッサにアクセス可能であり、また、プロセッサによって実行されるとここに開示された1つ以上の動作をプロセッサに実現させる、格納された命令を含み得る。さまざまな実施形態では、ソース102は、ウェブブラウザ、専用クライアントアプリケーションなどのアプリケーションを実行し、動作させるように構成されてもよい。
ターゲットサービス(たとえば、ターゲットサービス104およびターゲットサービス106)は、コンピューティングシステムにおいて実現され、または含まれてもよい。ターゲットサービスは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組合せで実現されてもよい。ターゲットサービスは、仲介通信ハンドラ110を介してソース102と通信してもよい。たとえば、ソース102で作成されたメッセージ(たとえば、メッセージ108)は、ターゲットサービス104、106のうちの1つ以上をメッセージの宛先として識別してもよい。メッセージの宛先であるターゲットサービスは、ソース102から送信されたメッセージ108を、仲介通信ハンドラ110を介して受信してもよく、1つ以上の応答(たとえば、メッセージ112)をクライアントリソース102に通信してもよい。メッセージ108は、要求されているターゲットサービスを示してもよい。いくつかの実施形態では、メッセージ108、112のうちの1つ以上は、インターネットを介した2つの電子装置間の通信用に意図されたウェブメッセージである場合がある。
ターゲットサービスは、サービスを要求するメッセージの受信に応答して、さまざまなサービスを提供できる。サービスは、アプリケーションの実行、ファンクションの実行、データの検索、情報の通信などを含んでいてもよい。
ターゲットサービス104、106は、PDA、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、ウェアラブルコンピュータ、ポケットベルなどのコンピューティング装置で実現されてもよい。ターゲットサービス104、106は、1つ以上のメモリ記憶装置と1つ以上のプロセッサとを使用して実現され得る。メモリ記憶装置はプロセッサにアクセス可能であり、また、プロセッサによって実行されるとここに開示された1つ以上の動作をプロセッサに実現させる、格納された命令を含み得る。さまざまな実施形態では、ターゲットサービス104、106は、サービスを提供するために、アプリケーション(たとえば、ウェブブラウザ、専用クライアントアプリケーションなど)を実行し、動作させるように構成されてもよい。
いくつかの実施形態では、ターゲットサービス104に通信されたメッセージ(たとえば、メッセージ108)は、ソース102で実行されたアプリケーションによって生成されてもよい。たとえば、ソースで実行されたアプリケーションは、そのアプリケーションの動作のために、ターゲットサービス106を使用してアクションを行なうようにという要求などのメッセージ108を、仲介通信ハンドラ110を介してターゲットサービス106に送信してもよい。たとえば、ソース102は、ローンアプリケーションである場合があり、それは、顧客の信用格付けをつきとめるためにターゲットサービス106からサービスを要求するためにメッセージ108を通信する。別の例では、クライアントアプリケーションは、ターゲットサービス106によって提供されるリソースを要求するために簡易オブジェクトアクセスプロトコル(simple object access protocol:SOAP)を使用してメッセージ108を通信するウェブブラウザである場合がある。いくつかの実施形態では、ソース102は、異なるアプリケーションを実行しているターゲットサービスにメッセージ108を通信するアプリケーションを実行する。いくつかの実施形態では、双方のアプリケーションが、ウェブサービス・リライアブルメッセージング(WS−RM)プロトコルを通信用に使用してもよい。
仲介通信ハンドラ110は、ソース102とターゲットサービス104、106との間の通信プロキシサービスとして作用できる。メッセージ(たとえば、メッセージ108)を配信するためにターゲットサービス104、106と直接通信するのではなく、ソース102は、ターゲットサービス104、106へのメッセージの配信のために、仲介通信ハンドラ110にメッセージを通信してもよい。仲介通信ハンドラ110は、ターゲットサービス104、106のうちの1つ以上に通信されるべきメッセージ(たとえば、メッセージ108)を、ソース102から受信できる。仲介通信ハンドラ110は、ソース102に通信されるべき1つ以上のメッセージ(たとえば、メッセージ112)を、ターゲットサービス(たとえば、ターゲットサービス106)から受信できる。ターゲットサービス106から仲介通信ハンドラ110によって受信されたメッセージ(たとえば、メッセージ112)は、ソース102から仲介通信ハンドラ110によって受信され、ターゲットサービス106に通信されたメッセージ(たとえば、メッセージ108)に応答するものであってもよい。たとえば、ターゲットサービスから受信されたメッセージ112は、メッセージ108がターゲットサービスによって受信されたか否かといった、ターゲットサービスへのメッセージ108の配信ステータスを示す情報を含んでいてもよい。別の例として、メッセージ112は、メッセージ108において要求されたサービスに関連する情報を含んでいてもよい。
仲介通信ハンドラ110を介して通信することにより、ソース102およびターゲットサービス104、106は、ソースから宛先へのメッセージ(たとえば、メッセージ108)の配信ステータスに関する信頼できる情報を確認することができる。仲介通信ハンドラ110は、ソース102およびターゲットサービス104、106に、通信されたメッセージの配信ステータスを示す情報を提供してもよい。仲介通信ハンドラ110は、ソース102またはターゲットサービス104、106によって使用される通信プロトコルがメッセージの配信、送信、受理確認などを保証するためのメカニズムを提供しない場合に、メッセージの信頼できる配信を可能にしてもよい。
仲介通信ハンドラ110は、サーバコンピュータなどのコンピューティング装置を1つ以上使用して実現されてもよい。いくつかの実施形態では、仲介通信ハンドラ110は、ソースサーバコンピュータ140および宛先サーバコンピュータ150などの複数のサーバコンピュータを含み得る。ある実施形態では、ソースサーバコンピュータ140または宛先サーバコンピュータ150の一方または双方は、ネットワーク通信サーバコンピュータであり得る。ソースサーバコンピュータ140は、ターゲットサービスに送信するためにソース102から受信されたメッセージを処理するように構成されてもよい。メッセージ(たとえば、メッセージ108)は、ソース102によってサポートされるプロトコルに従って処理されてもよい。宛先サーバコンピュータ150は、ソースサーバコンピュータによって処理されたメッセージの配信を取扱ってもよい。宛先サーバコンピュータ150は、ターゲットサービス104、106のうちの1つなどの宛先にメッセージを配信するように構成されてもよい。いくつかの実施形態では、ソースサーバコンピュータ140または宛先サーバコンピュータ150の一方または双方は、アプリケーションおよびサービスがソース102およびターゲットサービス104、106の一方または双方に提供され得るようにするアプリケーションサーバとして動作可能である。
仲介通信ハンドラ110は、1つ以上のメモリ記憶装置と1つ以上のプロセッサとを含み得る。メモリ記憶装置はプロセッサにアクセス可能であり、また、プロセッサによって実行されるとここに開示された1つ以上の動作をプロセッサに実現させる、格納された命令を含み得る。さまざまな実施形態では、仲介通信ハンドラ110は、ウェブブラウザ、専用クライアントアプリケーションなどのサービスアプリケーションを実行し、動作させるように構成されてもよい。
いくつかの実施形態では、ソース102とターゲットサービス104、106との間でのメッセージ(たとえば、メッセージ108)の交換は、サーバコンピュータ140、150のうちの1つ以上によって容易にされてもよい。たとえば、メッセージがWS−RMプロトコルを使用してソース102からターゲットサービス106に通信される場合、WS−RMプロトコルに従ったメッセージ108の交換を容易にするために、ソースサーバコンピュータ140はリライアブルメッセージングソース(reliable messaging source:RMS)として動作するように構成され、宛先サーバコンピュータ150はリライアブルメッセージング宛先(reliable messaging destination:RMD)として動作するように構成されてもよい。ソースサーバコンピュータ140は、メッセージの通信を管理するために宛先サーバコンピュータ150と通信可能である。メッセージの通信を管理することは、配信されるべきメッセージのための通信のシーケンスを維持することを含んでいてもよい。一実施形態では、メッセージ配信のために、QoSパラメータが(たとえば、プロトコル自体、システムアドミニストレータなどによって)規定されてもよい。そのような実施形態では、ソースサーバコンピュータ140および宛先サーバコンピュータ150は、メッセージ通信プロトコル(たとえば、WS−RMプロトコル)のQoSパラメータに従い、それに準拠してメッセージの配信を保証するように構成されてもよい。
いくつかの実施形態では、仲介通信ハンドラ110は、ソース102と1つ以上のターゲットサービス104、106との間でのメッセージの交換を容易にするために、仲介サービスシステム120を含み得る。たとえば、仲介サービスシステム120は企業サービスバスを含み、またはそれを実現することができる。ソース102およびターゲットサービス104、106といった1つ以上の異種コンピューティングシステムは、仲介サービスシステム120を通して通信可能に接続され得る。仲介サービスシステム120は、ソース102とターゲットサービス104、106との間のメッセージのルーティングを監視し、制御することができる。仲介サービスシステム120は、ターゲットサービスとの通信のための複数のソース間の競合解除を含め、ターゲットサービス104、106へのアクセスを制御することができる。仲介サービスシステム120は、イベント取扱い、通信中のメッセージのためのデータ変換、およびメッセージプロトコル変換を行なうことができる。
仲介サービスシステム120は、とりわけ、SOAP、ハイパーテキスト転送プロトコル(Hypertext Transfer Protocol:HTTP)、Java(登録商標)メッセージングサービス(Java Messaging Service:JMS)プロトコル、インターネットOrb間プロトコル上のJavaリモートメソッド呼出しインターフェイス(Remote Method Invocation interface over the Internet Inter-Orb Protocol:RMI−IIOP)、電子メール通信プロトコル(たとえば、簡易メール転送プロトコル)、ファイル転送プロトコル(File Transfer Protocol:FTP)、WS−RMプロトコルを含む、さまざまな異なる通信プロトコルをサポートでき、それらのいずれも、通信のためにソース102および/またはターゲットサービス104、106によって実現され得る。ある実施形態では、ソースで生じ、特定のターゲットに向けられるメッセージについて、ソースと仲介通信ハンドラ110との間の通信に使用される通信プロトコルは、仲介通信ハンドラ110と特定のターゲットとの間の通信に使用される通信プロトコルと異なっていてもよい。そのようなシナリオでは、ターゲットサービス104、106などの宛先への配信のためにソース102から仲介通信ハンドラ110によって受信されたメッセージ108は、第1の通信プロトコルに従った第1のフォーマットの仲介通信ハンドラ110によって受信されてもよい。仲介通信ハンドラ110は次に、意図される宛先によってサポートされる、第1の通信プロトコルとは異なる第2の通信プロトコルに従って、受信されたメッセージを第1のフォーマットとは異なる第2のフォーマットに変換し、変換されたメッセージを宛先に通信してもよい。
仲介通信ハンドラ110は、ソース102とターゲットサービス104、106の1つ以上との間の通信のステータスを管理するように構成された通信マネージャ130を含み得る。一実施形態では、仲介通信ハンドラ110を介して通信される別個のメッセージ(たとえば、メッセージ108またはメッセージ112)ごとに、情報が、そのメッセージに関連する1つ以上のデータストア(たとえば、データストア160)に格納されてもよい。格納された情報は、ユニークなメッセージごとのユニークメッセージ識別子162、またはメッセージの状態についての他の情報を含んでいてもよい。メッセージのメッセージ識別子は、ユニークメッセージ識別子162として使用されてもよく、または、ユニーク識別子162として使用される別の識別子に関連付けられてもよい。メッセージのメッセージ識別子を格納することにより、仲介通信ハンドラ110は、新しいメッセージが、保留中の配信であるメッセージの複製であるか否かを判断することができる。複製メッセージは、前のメッセージと同一のメッセージ識別子を有していてもよい。整合が見つかるか否か判断するために、入来メッセージのメッセージ識別子は、ユニーク識別子162、またはユニーク識別子162に関連付けられたメッセージ識別子と比較されてもよい。メッセージ識別子に関連付けられたユニーク識別子162の存在は、複製メッセージを示してもよい。また、メッセージに関連する情報をデータストアに格納することにより、この発明のある実施形態は、クラスタ化コンピューティング環境などのコンピューティング環境において、クラスタのすべてのノードにおけるメッセージ状態の格納を可能にするように実現されてもよい。たとえば、データストア160などのデータストアは、通信される過程にあったメッセージのシステム回復を容易にし、または可能にしてもよい。
メッセージ識別子ごとに、関連付けられた格納された情報はまた、メッセージ識別子に対応するメッセージの、そのメッセージの意図された宛先への配信ステータスを示す情報を含んでいてもよい。たとえば、ソース102から仲介通信ハンドラ110によって受信されたメッセージ108について、仲介通信ハンドラ110は、メッセージ108のためのメッセージ識別子を格納し、また、メッセージ108のその意図された宛先への配信ステータスに関する情報も格納してもよい。仲介通信ハンドラ110が配信ステータスにおける(たとえば「通信保留」から「ターゲットによるメッセージ受信」への)変化についての情報を受信すると、この配信ステータス情報は更新されてもよい。ある実施形態では、宛先サーバコンピュータ150による宛先へのメッセージの配信に関連付けられたメッセージ識別子または他の識別子に関連付けて、別個のメッセージ識別子が格納されてもよい。宛先サーバコンピュータ150のためのメッセージ識別子が、メッセージ識別子に対応するメッセージの配信のための再試行を管理するために、宛先リソースマネージャによって使用されてもよい。宛先サーバコンピュータ150によって使用されるメッセージ識別子は、メッセージの配信ステータスに関連付けて格納されてもよい。
メッセージのためのメッセージ識別子を生成するために、さまざまな異なる手法を使用してもよい。一実施形態では、メッセージのためのメッセージ識別子は、メッセージの内容の一部に基づいて生成されてもよい。たとえば、メッセージの一部が選択され、選択された一部にファンクションを適用することによってメッセージ識別子が生成されてもよい。別の例では、メッセージ識別子は、受信されたメッセージにすでに含まれる情報に対応していてもよい。別の実施形態では、メッセージ識別子を生成するために、シーケンス番号スキームを使用してもよい。そのような一実施形態では、仲介通信ハンドラ110は、ソースとターゲットサービスとの間の通信のシーケンスを追跡し、通信のシーケンスにおけるメッセージの順序に基づいてメッセージ識別子をメッセージに割当ててもよい。
メッセージ識別子は、さまざまな異なる目的のために、仲介通信ハンドラ110によって使用されてもよい。たとえば、一実施形態では、通信マネージャ130は、複製メッセージを識別するためにメッセージ識別子を使用してもよい。通信マネージャ130は、メッセージ識別子がすでに格納されているか否かを判断するために、メッセージ識別子がないかデータストア160をサーチしてもよい。メッセージ識別子の存在は、そのメッセージ識別子に関連付けられたメッセージの配信について要求が受信されたことを示してもよい。いくつかの実施形態では、メッセージ識別子は、ソースサーバコンピュータ140から受信されたメッセージのメッセージ識別子に関連付けて格納されてもよい。メッセージ識別子との関連付けの存在は、仲介通信ハンドラ110が、要求された新しいメッセージが複製か否かを判断できるようにするのに有用であり得る。メッセージがオリジナルメッセージであるかまたは複製メッセージであるかの判断が、仲介通信ハンドラ110によるメッセージの配信に関連する1つ以上の異なるアクションをトリガしてもよい。たとえば、メッセージが複製であると判断された場合、仲介通信ハンドラ110は、オリジナルメッセージに関連付けられた配信ステータスを判断し、その配信ステータスに基づいて、複製メッセージの通信を許可するか否かを判断してもよい。
通信マネージャ130は、ソース102とターゲットサービス104、106との間で通信されたメッセージ(たとえば、メッセージ108またはメッセージ112)の配信ステータス164を格納できる。配信ステータス164は、メッセージ識別子162に関連付けて格納され得る。いくつかの実施形態では、配信ステータス164は、宛先サーバコンピュータ150に対応する別のメッセージ識別子に関連付けて格納されてもよい。宛先サーバコンピュータ150は、宛先サーバコンピュータ150のためのメッセージ識別子に関連付けられた配信ステータスに基づいて、メッセージの配信を再試行するか否かを判断してもよい。配信ステータス164は、メッセージが配信された(たとえば、配信の受理確認が受信された)か否か、メッセージが送信されたか否か、メッセージの配信中にエラーに遭遇したか否か、またはメッセージの配信に関連付けられた他のステータスを示すことができる。通信マネージャ130は、ソースサーバコンピュータ140、宛先サーバコンピュータ150、仲介サービスシステム120、またはそれらの組合せが、メッセージの配信ステータスにおける変化について通信マネージャ130に通知できるようにするインターフェイスを含み得る。
通信マネージャ130は、メッセージのためのメッセージ識別子162に基づいて、配信ステータス164を判断できる。メッセージが以前のメッセージの複製であるか否かを判断するために、配信ステータス164が通信マネージャ130によって使用され得る。複製メッセージがターゲットサービス104、106の1つ以上に送信されたか否かを判断するために、通信マネージャ130は配信ステータス164を使用できる。通信マネージャ130は、複製メッセージをターゲットサービス106に通信すべきか否かを判断でき、通信すべきでない場合には、複製メッセージがターゲットサービス106に通信されるのを防止できる。メッセージのための通信のステータス(たとえば、メッセージの配信ステータス)は、通信マネージャ130が通信システム100における通信を管理できるようにし得る。たとえば、通信マネージャ130は、メッセージを再送することによって、ターゲットサービス104、106のうちの1つへのメッセージの配信の再試行を試みることができる。
図2〜4を参照して、仲介通信ハンドラ110を以下にさらに説明する。図2は、この発明の一実施形態に従った通信システム200を示す。通信システム200は、同じ参照番号および名称によって表わされる図1の同じ要素を含み得る。通信システム200は、1つ以上のソース(たとえば、ソース102)と、1つ以上のターゲットサービス(たとえば、ターゲットサービス104またはターゲットサービス106)と、仲介通信ハンドラ110と、データストア160とを含み得る。通信システム200は、ソース102とターゲットサービス104、106との間のメッセージ(たとえば、ウェブメッセージ)の信頼できる通信を容易にすることができる。
仲介サービスシステム120は、1つ以上のソース(たとえば、ソース102)を、1つ以上のターゲットサービス(たとえば、ターゲットサービス104およびターゲットサービス106)と通信可能に接続することができる。仲介サービスシステム120は、ソース102とターゲットサービス104、106との間のメッセージの交換を容易にするために、1つ以上のインターフェイスを含み、またはそれを実現することができる。仲介サービスシステム120は、ソースサーバコンピュータ140および/または宛先サーバコンピュータ150に、メッセージの配信ステータスについて通知することができる。
仲介サービスシステム120は、ソース(たとえば、ソース102)と宛先(たとえば、ターゲットサービス104またはターゲットサービス106)との間のメッセージの通信のためにさまざまな動作を行なうように構成された1つ以上のファンクションブロックまたはモジュールとして実現され得る。仲介サービスシステム120は、入力インターフェイス222と、出力インターフェイス224とを含み得る。仲介サービスシステム120は、メッセージを非同期に処理し、各メッセージが配信され得る宛先によってサポートされるプロトコルを使用してそれらを配信することができる。たとえば、入力インターフェイス222は、ソース102からメッセージ(たとえば、メッセージ108)を受信し、それらのメッセージを、出力インターフェイス224を介してターゲットサービス106に配信することができる。
ある実施形態では、入力インターフェイス222は、仲介サービスシステム120がターゲットサービス104、106への通信のためにソース102からメッセージを受信できるようにするためにソース102によって呼出され得る呼出し可能インターフェイス(たとえば、アプリケーションプログラミングインターフェイス)を提供できる。入力インターフェイス222は、メッセージの送信元(たとえば、ソース102、ターゲットサービス104、またはターゲットサービス106)によってサポートされる1つ以上のメッセージ通信プロトコルと一致するフォーマットで、メッセージを受信できる。メッセージを受信すると、入力インターフェイス222は、メッセージプロトコル特有の処理のために、ソースサーバコンピュータ140の通信プロトコルスタックにメッセージを配置できる。ある実施形態では、入力インターフェイス222は、メッセージの宛先へのアウトバウンド配信のために、宛先サーバコンピュータ150の通信プロトコルスタックにメッセージを配置できる。
出力インターフェイス224は、宛先へのメッセージの配信のために呼出され得る呼出し可能出力インターフェイスを提供できる。ある実施形態では、出力インターフェイス224は、宛先(たとえば、ターゲットサービス104またはターゲットサービス106)にメッセージを送信するために、仲介通信ハンドラ110のウェブサーバ(たとえば、宛先サーバコンピュータ150)によって呼出され得る。出力インターフェイス224は、メッセーが配信されるべき宛先によってサポートされる1つ以上のメッセージ通信プロトコルと一致するフォーマットで、メッセージを送信できる。
ソースサーバコンピュータ140は、メッセージの送信元によってサポートされるプロトコルに従って、受信されたメッセージを処理できる。ある実施形態では、メッセージは、仲介サービスシステム120に宛先への配信のためにメッセージを処理するよう要求する前に処理され得る。ソースサーバコンピュータ140は、ソース(たとえばソース)からインバウンドメッセージを受信し、管理して処理することができる通信プロトコルスタックを実現できる。通信プロトコルスタックは、サービストランスポートプロトコル(たとえば、HTTP、SMTP、およびFTP)、SOAPプロトコル、またはWS−RMメッセージングプロトコルなどの通信プロトコルをサポートしてもよい。メッセージの配信を要求するために、ソースサーバコンピュータ140は、宛先へのメッセージの配信を予定するようにという仲介サービスシステム120への要求を起動できる。ソースサーバコンピュータ140は、例外を示すための、または他の態様でメッセージの配信ステータスについてソースに通知するための機能性を提供できる。ソースサーバコンピュータ140は、通信マネージャ130から、メッセージの配信ステータスについての情報を要求できる。ある実施形態では、ソースサーバコンピュータ140は、配信ステータスに基づいてメッセージの配信を試みるようにという追加の要求を仲介サービスシステム120に通信できる。
ある実施形態では、ソースサーバコンピュータ140は、メッセージの配信を要求する前に、ソース(たとえば、ソース102)と宛先(たとえば、ターゲットサービス104)との間の通信シーケンスを起動するようにという要求を、宛先サーバコンピュータ150に送信することができる。ある実施形態では、この要求は、仲介サービスシステム120を介して通信され得る。宛先サーバコンピュータ150は、ソースサーバコンピュータ140と仲介通信ハンドラ110との間の通信に割当てるべきシーケンス識別子を判断してもよい。通信シーケンスを作成するようにという要求は、ソース102とターゲットサービス(たとえば、ターゲットサービス106)との間の通信シーケンスにおける第1のメッセージのために起動され得る。宛先に通信されたメッセージ(たとえば、メッセージ108)のための識別子に、シーケンス番号が割当てられ得る。シーケンス番号および識別子は、ターゲットサービスに通信されたメッセージに関連付けられ得る。仲介通信ハンドラ110およびターゲットサービス104、106によるメッセージの通信中、ソースサーバコンピュータ140は、宛先サーバコンピュータ150に、通信に対応するシーケンス識別子を求めてもよい。
宛先サーバコンピュータ150は、宛先に送信されるべきメッセージを処理できる。ある実施形態では、メッセージは、宛先によってサポートされるプロトコルに従って処理され得る。いくつかの実施形態では、宛先ウェブサーバ150は、仲介サービスシステム120から、配信のためにメッセージを処理するようにという要求を受信できる。メッセージは、仲介サービスシステム120が、メッセージを宛先に送信するようにという要求を受信する前に処理され得る。宛先サーバコンピュータ150は、宛先に配信されることを管理する通信プロトコルスタックを実現できる。通信プロトコルスタックは、サービストランスポートプロトコル(たとえば、HTTP、SMTP、およびFTP)、SOAPプロトコル、またはWS−RMメッセージングプロトコルなどの通信プロトコルをサポートしてもよい。
ある実施形態では、メッセージの配信を管理するために、宛先サーバコンピュータ150は、トランザクションをメッセージに関連付けることができる。配信のための別個のメッセージを受信すると、宛先サーバコンピュータ150は、配信されるべきメッセージのためのトランザクションを作成できる。宛先サーバコンピュータ150は、メッセージに対応するトランザクション(たとえば、コミットまたはロールバック)のステータスに基づいて、そのメッセージの配信のための処理のステータスを管理できる。メッセージが配信されたと判断すると、宛先サーバコンピュータ150は、配信のためのトランザクションを完了するために、メッセージに関連付けられたトランザクションをコミットしようとすることができる。メッセージが配信できないと判断すると、メッセージが配信されなかったことを示すために、メッセージに関連付けられたトランザクションはロールバックされ得る。
配信のステータスに基づいて、宛先サーバコンピュータ150は、メッセージまたは任意の複製メッセージの配信に関連する追加のアクションを行なうべきか否かを判断できる。いくつかの実施形態では、宛先サーバコンピュータ150は、メッセージの配信を要求しようとすべきか否かを判断するために、通信マネージャ130からステータスを得ることができる。ステータスは、複製メッセージの配信をどのように管理するかを判断するために使用可能である。ある実施形態では、宛先サーバコンピュータ150は、配信ステータスに基づいてメッセージの再配信を試みるようにという追加の要求を仲介サービスシステム120に通信できる。ある実施形態では、宛先サーバコンピュータ150は、メッセージの配信ステータスを提供するために、仲介サービスシステム120を介してソースサーバコンピュータ140と通信できる。宛先サーバコンピュータ150は、メッセージの配信についての情報の管理のために、宛先から受信された応答を通信マネージャ130に通信できる。
通信マネージャ130は、メッセージを配信するようにという要求についての情報(たとえば、配信ステータス)を管理できる。通信マネージャ130は、ソースと宛先との間のメッセージの通信のためにさまざまな動作を行なうように構成された1つ以上のファンクションブロックまたはモジュールとして実現され得る。通信マネージャ130は、配信ステータスインターフェイスモジュール232と、メッセージマネージャ236と、ステータス判断部238とを含み得る。通信マネージャ130は、そのファンクションブロックまたはモジュールのうちの1つ以上を介して呼出され得る。
メッセージマネージャ236は、データストア160におけるメッセージについての情報(たとえば、メッセージ識別子162)およびそれらのステータス(たとえば、配信ステータス164)を管理できる。メッセージマネージャ236は、宛先に送信されるべき別個のメッセージごとにメッセージ識別子を生成できる。ある実施形態では、メッセージマネージャ236は、別個のメッセージのためにメッセージ識別子を生成できる。いくつかの実施形態では、メッセージ識別子は、ソースサーバコンピュータ140と宛先サーバコンピュータ150との間の通信のシーケンスのためにソースサーバコンピュータ140から受信されたメッセージのシーケンス識別子または識別子の一方または双方に基づき得る。
メッセージマネージャ236は、データストア160におけるメッセージのための配信ステータス164を管理できる。配信ステータス164は、メッセージ識別子162に関連付けて維持され得る。たとえば、メッセージの配信ステータス164は、そのメッセージが配信のために受入れられたか否か、メッセージが配信されたか否か、宛先がメッセージの受信を確認したか否か、またはメッセージを再配信する試みがなされたか否かを示す情報を含み得る。配信ステータスにより、通信マネージャ130は、メッセージが実際に宛先に配信されたか否かを判断することができる。メッセージとのトランザクションの関連付けにより、メッセージの配信ステータスは維持され、正確であり得る。そうすることにより、ソースサーバコンピュータ140は、成功した配信ステータスを仲介サービスシステム120に通信することができる。また、メッセージの実際の配信が生じると、仲介サービスシステム120は、メッセージに対応するトランザクションがコミットされ得るように、配信ステータスを通知されてもよい。
ステータス判断部238は、メッセージの通信のステータスについての情報を判断できる。メッセージのメッセージ識別子に基づいて、ステータス判断部238は、データストア160からメッセージに関連付けられた配信ステータス164を識別し、検索することができる。
配信ステータスインターフェイスモジュール232は、呼出されるとメッセージのための配信ステータスに関連する情報を通信マネージャ130に提供できる1つ以上の呼出し可能インターフェイス234(たとえば、アプリケーションプログラミングインターフェイス)を含み得る。配信ステータスインターフェイスモジュール232は、通信マネージャ130の1つ以上のモジュールを実行でき、および/または、呼出し可能インターフェイス234が呼出されると実行される1つ以上のファンクションを実現できる。たとえば、呼出し可能インターフェイス234が呼出されると、呼出し可能インターフェイス234によって識別されたメッセージのための配信ステータスを格納するために、メッセージマネージャ236が実行され得る。呼出し可能インターフェイス234は、配信ステータスを示す情報(たとえば、真値または偽値)を特定するパラメータを受入れることができる。パラメータは、配信の受理確認が受信されたか否か、配信が失敗したか否か、またはメッセージを配信する試みの数といった、配信ステータスについての情報を含み得る。
いくつかの実施形態では、呼出し可能インターフェイス234のインスタンスが、ある特定のメッセージとの関連付けのために作成され得る。呼出し可能インターフェイス234のインスタンスは、通信マネージャ130がメッセージのステータスについて通知され得るように、メッセージのステータスを示すパラメータを用いて呼出され得る。いくつかの実施形態では、呼出し可能インターフェイス234は、呼出し可能インターフェイス234を介して提供されるステータスが、トランザクションに対応するメッセージに関連付けられ得るように、メッセージに関連付けられたトランザクションのために呼出され得る。たとえば、ソースサーバコンピュータ140は、呼出し可能インターフェイス234のインスタンスを作成でき、それは仲介サービスシステム120に渡され得る。仲介サービスシステム120は、メッセージのための配信ステータスについての通知を宛先サーバコンピュータ150から受信すると、呼出し可能インターフェイス234を呼出すことができる。いくつかの実施形態では、メッセージのステータスについての情報を通信マネージャ130に提供するために、呼出し可能インターフェイス234のインスタンスは、宛先サーバコンピュータ150に渡され、宛先サーバコンピュータ150によって呼出され得る。
図1および2に示す仲介通信ハンドラ110は、ソース(たとえば、ソース102)および宛先(たとえば、ターゲットサービス106)が、より確実に通信を交換できるようにし得る。仲介サービスシステム(たとえば、仲介サービスシステム120)および1つ以上のサーバコンピュータ(たとえば、サーバコンピュータ140、150)と通信できる通信マネージャ(たとえば、通信マネージャ130)を実現することにより、メッセージの配信ステータスを効果的に管理することができる。配信ステータスは、過剰送信および/または通信殺到を防止できないまでも減少できるように、複製メッセージが検出されることを可能にし得る。呼出し可能インターフェイスにより、ソースとターゲットサービスとの間の通信を容易にするさまざまな当事者は、再送信が必要か否かを判断するためにメッセージの配信ステータスを確実に判断できるようになる。メッセージ識別子および通信シーケンスに関連付けられた識別子にメッセージの配信を関連付けることにより、仲介通信ハンドラ110は、配信の信頼性のためのさらなる保証を提供できる。メッセージが受入れられ配信される際に仲介通信ハンドラ110が引き続き通知されることを可能にするインターフェイスを有することにより、仲介主体は、メッセージの配信のために通信のソースシーケンスを通信の宛先シーケンスとリンクさせることによって、メッセージのための通信の信頼性を保証することができる。
仲介通信ハンドラによって実現され得るプロセスの例をこれから説明する。図3は、この発明の一実施形態に従った、ソースと1つ以上のターゲットサービスとの間の通信を管理するためのプロセス300を示すフローチャートを示す。
プロセス300は、ブロック305で、ソースから、ターゲットサービスに送信すべきメッセージを受信することによって開始可能である。たとえば、仲介通信ハンドラは、クライアント装置から、ターゲットサービスに送信すべきメッセージを受信できる。クライアント装置上で動作するローンアプリケーションの例では、ローンアプリケーションは、宛先(たとえば、あるアプリケーションによって提供されるローンサービス)に送信すべきメッセージを仲介通信ハンドラに送信できる。そのメッセージは、ローンサービスによって提供されるサービス(たとえば、ローン計算)の要求を示すことができる。ソースによって通信されるメッセージは、ソースによってサポートされるメッセージ通信プロトコル(たとえば、WS−RMプロトコル)と一致するフォーマットに従って構成され得る。メッセージ通信プロトコルは、宛先によってサポートされるメッセージ通信プロトコルに類似している場合があり、またはそれとは異なっている場合がある。いくつかの実施形態では、メッセージは、ソースによってサポートされるメッセージ通信プロトコルによってサポートされるサービス品質パラメータを示すことができる。
ブロック310で、プロセス300は、メッセージに関連付けられたメッセージ識別子を判断してもよい。たとえば、受信されたメッセージがWS−RMプロトコルに従ってフォーマット化される場合、仲介通信ハンドラは、メッセージのためのメッセージ識別子を判断できる。メッセージ識別子は、メッセージのメッセージシーケンス番号および/または識別子に基づいて判断可能であり、それらの組合せは、ターゲットサービスへのメッセージをユニークに識別できる。別の例では、仲介通信ハンドラは、メッセージをユニークに識別するメッセージのデジタル署名に基づいて、メッセージのためのメッセージ識別子を判断できる。いくつかの実施形態では、デジタル署名は、整合する署名を有することに基づいて複製メッセージが検出されることを可能にしつつ、あるユニークメッセージを別のものと区別するために使用可能である。
ブロック315で、メッセージを受信すると、プロセス300は、メッセージが以前にターゲットサービスに送信されたか否かを判断してもよい。たとえば、プロセス300は、メッセージが、仲介通信ハンドラによって受信された以前のメッセージの複製であるか否かを判断できる。いくつかの実施形態では、仲介通信ハンドラにアクセス可能なストレージに、判断されたメッセージ識別子に関連付けて格納された識別子の存在は、複製メッセージが以前に受信されたこと、および、仲介通信ハンドラが以前にターゲットサービスにメッセージを送信しようとしたことを示すことができる。メッセージが以前にターゲットサービスに送信されていないと判断すると、プロセス300は、ターゲットサービスへのメッセージの配信に関連する1つ以上のアクションを行なうためにブロック320に進む。メッセージが以前に送信されたと判断すると、プロセス300は、ターゲットサービスへのメッセージの配信ステータスを判断するためにブロック330に進む。
ブロック320で、プロセス300は、ターゲットサービスへのメッセージの配信に関連する1つ以上のアクションを行なう。たとえば、アクションは、ソースのためにターゲットサービスにメッセージを送信することを含んでいてもよい。ブロック325で、プロセス300は、メッセージのためのメッセージ識別子を格納してもよい。たとえば、仲介通信ハンドラは、メッセージのフォーマットを使用して、メッセージのシーケンス番号および識別子を判断してもよい。フォーマットは、通信プロトコルに基づいている。メッセージ識別子に関連付けられるべき識別子は、メッセージのシーケンス番号および/または識別子に基づいて生成されてもよい。識別子は、データストアに格納されてもよい。いくつかの実施形態では、識別子は、メッセージの配信ステータスに関連付けて格納され得る。メッセージのメッセージ識別子に関連付けられた識別子の存在は、メッセージがターゲットサービスへの配信のために送信されたと判断するために使用されてもよい。
ブロック330で、プロセス300は、ターゲットサービスへのメッセージの配信に関するメッセージの配信ステータスを判断する。たとえば、仲介通信ハンドラは、メッセージのためのメッセージ識別子に関連付けて格納された識別子に関連付けられた、配信ステータスなどの情報をつきとめ、検索することができる。ある実施形態では、プロセス300は、メッセージの配信ステータスを周期的にまたは断続的に判断できる。プロセス300は、メッセージを送信した直後に、またはメッセージが送信された後のある期間に周期的に、ステータスを判断できる。
ブロック335で、プロセス300は、メッセージの配信についての受理確認が受信されたか否かを判断するために、メッセージのステータスを使用できる。メッセージの送信に続くある期間の後で、プロセス300は、ターゲットサービスから受理確認が受信されたか否かを判断するために、ステータスを使用できる。いくつかの実施形態では、ターゲットサービスからの受理確認の受信は、メッセージの配信を示すことができる。
受理確認が受信されたと判断すると、プロセス300は、生成された識別子に関連付けて配信のステータスを格納するために、ブロック345に進むことができる。受理確認が受信されていないと判断すると、プロセス300はブロック340に進むことができ、そこでそれは、ターゲットサービスへのメッセージの配信に関連する1つ以上のアクションを行なうことができる。たとえば、メッセージの配信に関連するアクションは、ターゲットサービスにメッセージを再送することによって、ターゲットサービスへのメッセージの配信を再試行しようとすることを含み得る。いくつかの実施形態では、仲介通信ハンドラは、ターゲットサービスのために、仲介通信ハンドラに含まれるかまたはそれにより実現されるネットワーク通信サーバに配信ステータスを通信してもよい。ネットワーク通信サーバは、ターゲットサービスによってサポートされる通信プロトコルに関連付けられたサービス品質規格に基づいて、メッセージのさらなる通信を取扱う態様を判断するために、配信ステータスを使用できる。ブロック340でプロセス300を行なった後、プロセス300はブロック355で終了可能である。
ブロック345に戻って、メッセージのための配信ステータスを格納した後で、プロセス300は、メッセージのための配信ステータスについてソースに通知するために、ブロック350に進むことができる。たとえば、仲介通信ハンドラは、メッセージが配信されたことを示すために、情報(たとえば、受理確認メッセージ)をソースに送信できる。プロセス300はブロック355で終了可能である。
ある実施形態では、プロセス300は、図1の仲介通信ハンドラ110のある実施形態によって実現され得る。ソース102からメッセージを受信すると、仲介通信ハンドラ110は、受信されたメッセージが以前にターゲットサービスに送信されたか否かを判断できる。通信マネージャ130は、識別子が、受信されたメッセージのメッセージ識別子に関連付けられているか否かを判断できる。通信マネージャ130は、メッセージのために識別子がデータストア160に存在するか否かに基づいて、メッセージが以前に送信されたか否かを判断できる。メッセージが以前に送信されなかったと判断すると、通信マネージャ130は、仲介サービスシステム120を介して、メッセージをターゲットサービス106に送信できる。以前にすでに送信されていない場合、通信マネージャ130は、メッセージが送信されたことを示すために、メッセージのメッセージ識別子を格納できる。
メッセージが以前に送信されていなかった場合にそれが送信されることを保証することに続き、仲介通信ハンドラ110は、周期的に、またはソース102からの要求(たとえば、「ACK」要求メッセージ)に応答して、メッセージのための配信ステータスを判断できる。受理確認が受信されていないと判断すると、仲介通信ハンドラ110は、ターゲットサービス106へのメッセージの配信に関連する1つ以上のアクションを行なうことができる。一方、メッセージの配信についての受理確認が受信されている場合、仲介通信ハンドラ110は配信ステータスを格納し、配信ステータスについてソースに通知することができる。
プロセス300は、ソースから受信されるメッセージごとに繰り返し行なわれ得る。それに代えて、またはそれに加えて、ブロック330〜355は、メッセージが送信された後のある期間中に行なわれ得る。特に、ブロック335は、受理確認が実際には受信されていなかったと判断されるまで、周期的にまたは断続的に行なわれ得る。いくつかの実施形態では、受理確認が受信されたか否かについての判断は、仲介通信ハンドラがターゲットサービスへの配信ステータスについて通知されたか否かに基づいて判断され得る。いくつかの実施形態では、配信のステータスは、ある期間の後でターゲットサービスから応答が受信されたか否かに基づいて判断され得る。応答がないことは、受理確認が受信されていないことを示し得る。メッセージの配信についての受理確認に関する判断に基づいて、仲介通信ハンドラは、どのアクションを行なうべきかを判断できる(たとえば、メッセージの配信を待ち続けるか、配信を再試行するか、またはメッセージの配信を待つことをやめるか否かを判断する)。
プロセス300は例示的であること、ならびに、変形および修正が可能であることが理解されるであろう。シーケンシャルであるとしてプロセス300について説明されたアクションまたは動作は、並行して実行されてもよく、および/または動作の順序が変更されてもよく、動作は修正され、組合わされ、追加され、または省略されてもよい。
図4は、この発明の一実施形態に従った、ソース490(たとえば、ソース102)とサービス470(たとえば、ターゲットサービス106)との間の通信を管理するためのプロセス400を示すシーケンス図を示す。ある実施形態では、プロセス400は、仲介通信ハンドラ110によって実現され得る。
仲介通信ハンドラ110は、サービス470に配信されるべきメッセージ(たとえば、メッセージ108)の配信ステータスについての信頼できる情報を、メッセージのための配信ステータスに関連する情報を仲介通信ハンドラ110に提供し得る1つ以上の呼出し可能インターフェイスおよび/または仲介サービスシステムを使用して、ソース490に提供してもよい。配信ステータスは、追加のアクション(たとえば、配信の再試行)が行なわれるべきか否か、または、ソースはメッセージの配信のための配信ステータスについて通知されるべきか否かを判断するために、仲介通信ハンドラ110によって使用可能である。配信ステータスはさらに、仲介通信ハンドラ110が、宛先への複製メッセージの通信を管理し防止できるようにする。配信ステータスは、宛先サーバコンピュータが、サービス470によってサポートされる通信プロトコルに関連付けられたQoSパラメータが満たされているか否かを判断できるようにしてもよい。
例示の目的のため、図4に提示する例を、通信プロトコル、たとえばWS−RMプロトコルを使用した、ソース490とサービス470との間のメッセージ通信に関して説明する。ソース490は、リライアブルメッセージングソース(RMS)として作用してもよい。サービス470は、リライアブルメッセージング宛先(RMD)(たとえば、ウェブサービス・リライアブルメッセージング宛先)として作用してもよい。クライアントリソースマネージャ(たとえば、「C/RM」)455は、ソースサーバコンピュータ(たとえば、ソースサーバコンピュータ140)として動作してもよい。宛先リソースマネージャ(たとえば、「S/RM」)405は、宛先サーバコンピュータ(たとえば、宛先サーバコンピュータ150)として動作してもよい。RMS490からRMD470へのメッセージ(たとえば、メッセージ402)の通信は、仲介サービスシステム、たとえば企業サービスバス(enterprise service bus:ESB)480を介して生じてもよい。プロセス400が以下に説明され、RMS490からRMD470へのメッセージの通信に関するさらなる詳細を提供する。
ある実施形態では、WS−RMプロトコルなどの通信プロトコルは、信頼できるメッセージ通信のためのサービス品質(quality of service:QoS)パラメータを規定する1つ以上のパラメータをサポートしてもよい。QoSパラメータは、下記のうちの1つ以上を含んでいてもよい:
・少なくとも1回(“AtLeastOnce”)−各メッセージは宛先に少なくとも1回配信される。メッセージを配信できない場合、RMSおよび/またはRMDによってエラーが生じ得る。メッセージは、宛先に2回以上配信される場合がある(すなわち、宛先は複製メッセージを受信する場合がある);
・せいぜい1回(“AtMostOnce”)−各メッセージは宛先にせいぜい1回配信される。宛先は、複製メッセージを受信しない場合がある;
・まさしく1回(“ExactlyOnce”)−各メッセージは宛先にまさしく1回配信される。メッセージを配信できない場合、RMSおよび/またはRMDによってエラーが生じ得る。宛先は、複製メッセージを受信しない場合がある;
・順番に(“InOrder”)−メッセージは、それらがソースからRMSに送信される順序で、RMDから宛先に配信されるであろう。この保証は、上述の保証のうちのいずれかと組合わされ得る。
プロセス400は、S/RM405が、サービス470によって提供されるサービスのために、ソース490からメッセージ402を受信することによって開始可能である。メッセージ402は、仲介サービスシステム、たとえば企業サービスバス(ESB)480を介して受信され得る。ESB480は、仲介サービスシステム120に含まれ、またはそれにより実現されてもよい。メッセージ402を送信する前に、ソース490は、シーケンスを作成する(たとえば“CREATE_SEQUENCE”)ようにS/RM405に要求してもよい。シーケンスは、ソース490とS/RM405との間の信頼できる通信を保証するために作成される。S/RM405は、ソース490とS/RM405との間の通信のシーケンスのためのシーケンス番号を割当ててもよい。メッセージ402は、S/RM405によって作成されたシーケンス番号を使用して送信されてもよい。いくつかの実施形態では、ソース490は、メッセージ402との関連付けのためのユニーク識別子を判断してもよい。シーケンス番号およびメッセージ識別子は、メッセージ402とともに通信されてもよい。
メッセージ402を受信すると、プロセス400は、トランザクションファンクション410が行なわれることを要求できる(404)。トランザクションファンクション(transaction function:TX)410は、S/RM405によって行なわれ得る。要求404のために、トランザクションが、メッセージ402に関連付けられるように作成され得る。トランザクションは、ソース490へのサービス470の配信を管理するために使用可能である。いくつかの実施形態では、トランザクションは、サービス470の要求に対応するユニークメッセージ(たとえば、メッセージ402)ごとに作成され得る。トランザクションのコンテキストは、メッセージに関連付けられたトランザクションがコミットされるまでソース490が受理確認を受信しないことを保証するようにメッセージ402の配信を管理するために使用されてもよい。
トランザクションの作成後、S/RM405は、メッセージ402についての情報がデータストア415に格納されることを要求できる(406)。ある実施形態では、S/RM405は、図1の通信マネージャ130(図4に図示せず)に、メッセージ402に関連するメタデータ(たとえば、メッセージ識別子)をデータストア160に格納するように要求してもよい。メッセージ識別子は、メッセージ402をソース490によって通信される他のメッセージと区別するユニーク識別子を含み得る。メタデータは、通信マネージャ130がサービス470への複製メッセージの通信を防止できるようにするために格納され得る。ある実施形態では、データストア415は、C/RM455によって使用されるデータストア460とは異なるデータストアに、データを格納できる。データストア415およびデータストア460は、データストア160などの1つ以上のデータストアにおいて実現され、またはそれに含まれ得る。
メッセージ402についての情報を格納するためのファンクションを行なった後で、プロセス400は、S/RM405が、生成されるべき配信ステータスインターフェイスモジュール232の呼出し可能インターフェイス(たとえば、呼出し可能インターフェイス234)のインスタンスを作成するようにという要求408を送信することを含み得る。ある実施形態では、呼出し可能インターフェイス234は、インバウンド受入れ(inbound accepted)インターフェイス420を含み得る。インバウンド受入れインターフェイス420は、メッセージ402が受入れられたか否かを示すステータスを特定するためのパラメータを含み得る。いくつかの実施形態では、メッセージが受入れられているというステータスは、メッセージが配信されたことも示すことができる。インバウンド受入れインターフェイス420のインスタンスは、呼出されると、配信ステータスインターフェイスモジュール232の実行を起動でき、それは、インバウンド受入れインターフェイス420のパラメータによって示されたメッセージ402のステータスについての情報を格納するためのインバウンド受入れルーチンを行なうことができる。
プロセス400は、S/RM405が、ESB480の要求ファンクション425に要求411(たとえば、要求ファンクションを提供すること)を送信することを含み得る。要求411は、メッセージ402のための同じトランザクションコンテキスト上で呼出され得る。メッセージ402のためのトランザクションコンテキストは、S/RM405がトランザクションに対応するメッセージ402の配信についての通知を受信しないことを保証するために使用可能である。要求ファンクション425は、サービス470に送信すべきメッセージ402の処理を行なうようにESB480を起動するために呼出され得る。要求411は、インバウンド受入れインターフェイス420のインスタンスを含み得る。ESB480がメッセージ402の配信ステータスについて通知された場合、インバウンド受入れインターフェイス420は後で呼出され得る。
要求411の受信に応答して、プロセス400は、ESB480が、さらなる処理のためのC/RM455への通信のためにメッセージ402を待ち行列に入れるようにという要求412を、ESB480の処理パイプライン435に送信することを含み得る。メッセージ402がさらなる処理のためにパイプライン435から取出され得ると判断すると、プロセス400は、ESB480が、ディスパッチ要求ファンクション445を介して要求416をC/RM455に通信することを含み得る。ディスパッチャ要求ファンクション445は、メッセージ(たとえば、メッセージ402)を、C/RM455のアウトバウンド処理チェーンの初めに置く。
いくつかの実施形態では、ディスパッチ要求ファンクションを呼出す前に、プロセス400は、ESB480が、配信ステータスインターフェイスモジュール232の呼出し可能インターフェイス(たとえば、呼出し可能インターフェイス234)のインスタンスを作成するようにという要求414を通信することを含み得る。そのような実施形態では、呼出し可能インターフェイス234は、アウトバウンド配信(outbound delivered)インターフェイス440を含み得る。アウトバウンド配信インターフェイス440は、サービス470へのメッセージ402の「アウトバウンド」配信が受理確認されたか否かを示すステータスを特定するためのパラメータを含み得る。アウトバウンド配信インターフェイス440のインスタンスは、呼出されると、アウトバウンド配信インターフェイス440のパラメータによって示されたメッセージ402のステータスについての情報を格納できるアウトバウンド配信ルーチンを行なうために、配信ステータスインターフェイスモジュール232の実行を起動できる。具体的には、ステータスは、メッセージ402が配信されたか否かを示すことができる。ステータスは、メッセージ402の配信を示すサービス470からの受理確認応答の受信に基づき得る。
ある実施形態では、アウトバウンド配信インターフェイス440のインスタンスは、ディスパッチャ要求ファンクション445への要求416に含まれ得る。ディスパッチャ要求ファンクション445は、アウトバウンド配信インターフェイス440のインスタンスをC/RM455に提供できる。C/RM455は、通信マネージャ130のためにメッセージ402のアウトバウンド配信のステータスを格納するために、アウトバウンド配信インターフェイス440を呼出すことができる。いくつかの実施形態では、メッセージ402の複製であるメッセージのためにアウトバウンド配信インターフェイス440が以前に呼出された場合、アウトバウンド配信インターフェイス440のインスタンスは作成されないかもしれない。
プロセス400は、C/RM455が、ディスパッチャ要求ファンクション445の要求416に応答して、要求418を受信することを含み得る。C/RM455は、メッセージ402のためのさらなる処理を行なってから、サービス470へのメッセージ402の配信の試みに進むことができる。C/RM455は、ローカルID取得ルーチン485を呼出す(419)ことによって、メッセージ402のためのユニークメッセージ識別子を判断してもよい。メッセージ識別子は、サービス470に複製を送信しないようにするために、C/RM455によって使用されてもよい。ソース490がウェブサービス・リアイアブルメッセージングサポートを有するいくつかの実施形態では、ローカルID取得ルーチン485は、シーケンス番号をメッセージ識別子として使用してもよい。いくつかの実施形態では、ローカルID取得ルーチン485は、ESB480によって実現されてもよい。ローカルID取得ルーチン485は、メッセージ402のデジタル署名に基づいてメッセージ識別子を判断してもよい。メッセージ識別子はまた、メッセージ識別子に関連付けられたメッセージの配信ステータスを追跡するために、通信マネージャ130によって使用され得る。通信マネージャ130は、ローカルID取得ルーチンから判断されたメッセージ識別子に基づいて、メッセージ402のサービス470への配信のために試みられた複製メッセージを識別できる。
C/RM455は、メッセージ402のための配信ステータスを追跡するために、メッセージ402に関連付けられるべき別のメッセージ識別子を判断してもよい。プロセス400は、C/RM455が、サービス470のRMDに、C/RM455とRMD470との間に新しいシーケンスを作成する(たとえば“CREATE_SEQUENCE)ようにという要求422を送信することを含み得る。C/RM455は、シーケンス番号に基づいて識別子を判断してもよい。サービス470は、メッセージのためのシーケンス番号を割当て、そのシーケンス番号をC/RM455に返してもよい。メッセージ402は、シーケンス番号を使用してサービス470に送信されてもよい。C/RM455は、サービス470への配信のための再試行を管理するために、メッセージ402のための識別子を維持してもよい。C/RM445からRMD470へのシーケンスが失敗した場合には、ソース490とS/RM405との間の信頼性シーケンスも同様に失敗するように、ソース490とS/RM405との間の通信に関連付けられたシーケンスは、C/RM455とRMD470との間の通信に関連付けられたシーケンスにリンクされてもよい。
プロセス400は、C/RM455が、メッセージ402についての情報がデータストア460で管理されることを要求する(421)ために、通信マネージャ130と通信することを含み得る。通信マネージャ130は、メッセージ402に関連付けられたメッセージ識別子を追跡するために使用されるそのメッセージ識別子を格納できる。サービス470がそのプロトコルのためのシーケンス番号およびメッセージ識別子を使用する場合、通信マネージャ130によって生成されたメッセージ識別子は、メッセージ402のためのシーケンス番号および/またはメッセージ識別子に関連付けられてもよい。生成されたメッセージ識別子をメッセージ402のシーケンス番号および/またはメッセージ識別子に関連付けて格納することは、メッセージのための配信ステータスが、複製メッセージが以前に送信されたか否かを判断するために追跡されることを可能にし得る。メッセージ識別子の存在は、メッセージ402が、以前に送信されたメッセージの複製であることを示すことができる。いくつかの実施形態では、通信マネージャ130は、メッセージ識別子(たとえば、メッセージ識別子162)に関連付けて格納された情報を識別するために、データストア460をサーチするように要求され得る(421)。データストア460は、メッセージ402のためのメッセージ識別子が格納されているか否かを判断するために、メッセージ402のユニークデジタル署名またはメッセージを識別する他の情報を使用してサーチされ得る。メッセージ識別子が見つからない場合、通信マネージャ130は、メッセージ識別子をデータストア460に格納するよう要求され、その他の場合、メッセージ402に関連付けられたデータストア460で見つかったメッセージ識別子を使用するよう要求され得る(424)。
プロセス400は、C/RM455が、トランスポートルーチン465を介してサービス470に要求426を送信することを含み得る。トランスポートルーチン465は、ESB480のインターフェイス(たとえば、出力インターフェイス224)として提供され得る。いくつかの実施形態では、トランスポートルーチン465は、出力インターフェイス224において含まれ、または実現され得る。次に、プロセス400は、トランスポートルーチン465が、要求426の受信に応答して、要求428をサービス470に送信することを含み得る。トランスポートルーチン465は、サービス470にメッセージ402を配信できる。プロセス400は、C/RM455が、メッセージ402を再配信しようとして、次の要求426をサービス470に送信することを含み得る。C/RM455は、メッセージ402に関連付けられた以前のメッセージ識別子を、メッセージ402のための配信ステータスに関連付けるために使用してもよい。
C/RM455は、応答431がトランスポートルーチン465から受信されるまで待つことができる。応答431は、メッセージ402を配信する試みの結果を示すことができる。応答431は、メッセージ402がターゲットサービスに配信されたという受理確認(たとえば、「ACK」メッセージ」)を示す、または受理確認が受信されなかったことを示す、応答データおよびメタデータを含み得る。プロセス400は、C/RM455が、結果などの応答431における情報がデータストア460に格納されることを要求する(433)ために、通信マネージャ130と通信することを含み得る。
要求428の配信が失敗したと判断すると、プロセス400は、サービス470が、メッセージ402を配信するようにという要求428が失敗したことを示す応答431をC/RM455に送信することを含み得る。いくつかの実施形態では、サービス470は、配信が失敗したことを示す結果を送信しなくてもよい。C/RM455は、ある期間の後でトランスポートルーチン465を介して別の要求426をサービス470に送信しようとしてもよい。ある実施形態では、C/RM455は、配信を再試行するための1つ以上の基準に基づいて、メッセージ402の配信を再試行できる。配信のための1つ以上の基準は、サービス470によってサポートされる通信プロトコルのためのQoSパラメータに基づき得る。1つ以上の基準は、配信を再試行する試みの数、および配信を再試行するタイムアウト期間を示すことができる。いくつかの実施形態では、トランスポートルーチン465は、要求426が再試行されるべきか否かを示すパラメータを含み得る。アウトバウンド配信インターフェイス440は、サービス470へのメッセージ402のアウトバウンド配信が行なわれなかった(たとえば、配信されなかった)というステータスを示すパラメータを用いて呼出され得る。
要求426は再試行されず、したがって配信されるであろうと判断すると、プロセス400は、C/RM455が、アウトバウンド配信インターフェイス440のインスタンスが呼出されることを要求する(432)ことを含み得る。応答431がメッセージ402についての配信の受理確認を示すと判断すると、プロセス400は、C/RM455が、メッセージ402のアウトバウンド配信が行なわれた(たとえば、配信された)というステータスを示すパラメータを用いてアウトバウンド配信インターフェイス440のインスタンスが呼出されることを要求する(432)ことを含み得る。
プロセス400は、ESB480がメッセージ402の配信ステータスについて通知されるとインバウンド受入れインターフェイス420を呼出すようにという要求434を含み得る。たとえば、アウトバウンド配信インターフェイス440が呼出されたことに応答して、ESB480に提供されたインバウンド受入れインターフェイス420は、メッセージ402に関連付けられた同じトランザクションコンテキストのために、ESB480によって呼出され得る。インバウンド配信インターフェイス420のインスタンスは、配信ステータスがメッセージ402に関連付けられ、他のメッセージには関連付けられていないことを保証するためにディスパッチ要求445を呼出すために、メッセージ402のための同じトランザクションコンテキスト上で呼出され得る。インバウンド受入れインターフェイス420は、メッセージ402の配信ステータスを示すパラメータを用いて呼出され得る。インバウンド受入れインターフェイス420へのパラメータとして特定されたメッセージ402の配信ステータスは、アウトバウンド配信インターフェイス440によって示された配信ステータスに基づき得る。たとえば、インバウンドインターフェイスファンクション420に提供されたステータスは、アウトバウンド配信インターフェイス440によって示された配信ステータスに基づいて、メッセージ402が配信されたこと、またはメッセージ402が配信されなかったことを示すことができる。
インバウンド受入れインターフェイス420が呼出されたことに応答して、プロセス400は、通信マネージャ130の配信応答インターフェイスモジュール232が、インバウンド受入れインターフェイス420のパラメータによって示されたステータスに基づいて配信ステータスを判断するために呼出されることを含み得る。プロセス400は、配信ステータスインターフェイスマネージャ232が、データストア415(たとえば、データストア160)における配信ステータス164を更新するために、メッセージ402のための配信ステータスをメッセージマネージャ236に提供することを含み得る。いくつかの実施形態では、プロセス400は、通信マネージャ130がデータストア460(たとえばデータストア160)に配信ステータスを格納することを含み得る。それは、C/RM455のために維持され得る。
ある実施形態では、メッセージが配信されたことを示す(たとえば“InboundAccepted=真”)インバウンド配信インターフェイス420を呼出すことによって、メッセージ402に関連付けられたトランザクションをコミットすることができる。メッセージが配信されなかったことを示す(たとえば“InboundAccepted=偽”)インバウンド配信インターフェイス420を呼出すことによって、メッセージ402に関連付けられたトランザクションをロールバックすることができる。
受理確認の受信に基づいてメッセージ402が配信されたことを配信ステータスが示すと判断すると、プロセス400は、通信マネージャ130が、データストア415に、メッセージ402が配信されたことを示すように更新されるよう要求する(438)ことを含み得る。プロセス400は、メッセージ402の配信について受理確認が受信された場合、通信マネージャ130が、メッセージ402に関連付けられたトランザクションがコミットされることを要求する(436)ことを含み得る。トランザクションをコミットすることにより、メッセージ402は配信された。いくつかの実施形態では、コミットが成功した場合、プロセス400は、通信マネージャ130が、トランザクションが完了した(たとえば、コミットされた)こと、および/またはメッセージ402が配信された(たとえば、受理確認された)ことを示すように、情報をデータストア415に格納することを含み得る。コミットが成功しなかった場合、プロセス400は、通信マネージャ130が、メッセージ402をコミットできないことを示すようにデータストア415を更新することを含み得る。いくつかの実施形態では、メッセージ402に関連付けられたトランザクションコンテキストがアクティブであり、かつ、トランザクションのために他の動作が行なわれている場合、トランザクションはコミットされないかもしれない。
メッセージ402を配信できないこと、したがってメッセージ402について配信の受理確認が受信されなかったことを配信ステータスが示すと判断すると、プロセス400は、通信マネージャ130が、データストア415に、メッセージ402が配信されていないことを示すように更新されるよう要求する(438)ことを含み得る。プロセス400は、通信マネージャ130が、メッセージ402のためのトランザクションがロールバックされることを要求する(436)ことを含み得る。トランザクションをロールバックすることにより、メッセージ402の配信のステータスは、未配信と同様であり得る。いくつかの実施形態では、プロセス400は、インバウンド受入れインターフェイス420が、データストア415における情報に、トランザクションは行なわなかった(たとえば、ロールバックされた)こと、およびメッセージ402を配信できないことを示すよう要求することを含み得る。
インバウンド受入れインターフェイス420が要求434に応答して処理を行なった後で、プロセス400は、インバウンド受入れインターフェイス420が、アウトバウンド配信インターフェイス440に、ESB応答ルーチン430への要求434の結果442を通信することを含み得る。いくつかの実施形態では、インバウンドの受入れられるインターフェイス420は、結果442がアウトバウンド配信インターフェイス440に提供されることを要求できる。
プロセス400は、通信マネージャ130が、結果442に基づいて、メッセージ402のための通信を終了すべきか否かを判断することを含み得る。メッセージ402が配信されたこと、およびメッセージ402のためのトランザクションがコミットされたことを結果442が示すと判断すると、プロセス400は、アウトバウンド配信インターフェイス440が、ディスパッチ要求ファンクション445に、メッセージ402のためのS/RM405とC/RM455との間の通信を終了する(たとえば、通信シーケンスを終了する)よう要求する(444)ことを含み得る。通信を終了することにより、通信マネージャ130は、メッセージ402に関連付けて格納されたメッセージ識別子を含む、メッセージ402についての情報を削除できる。その結果、メッセージ402の配信ステータスはもはや、メッセージ402に関連付けて維持されないかもしれない。
しかしながら、メッセージ402が配信されなかったこと、および/またはメッセージ402のためのトランザクションがコミットされなかったことを結果442が示すと判断すると、プロセス400は、アウトバウンド配信インターフェイス440が、S/RM405とC/RM455との間の通信の終了を防止することを含み得る。S/RM405とC/RM455との間の通信が終了されない場合、メッセージ識別子402を含む、メッセージについての情報は、メッセージ402の配信ステータスが引き続きメッセージ識別子に関連付けられるように、データストア460に格納されたままであってもよい。データストア460にメッセージ識別子を維持することにより、C/RM455は、通信マネージャ130に、メッセージ402のための配信ステータスを判断するよう要求できる。S/RM405とC/RM455との間の通信シーケンスが終了すると、メッセージ402の配信ステータスを管理するために通信マネージャ130によって生成されたメッセージ識別子は、データストア460、415から除去され得る。ある実施形態では、ある期間の間通信シーケンスが存在した場合、メッセージ識別子は、メッセージ402に関連付けてストレージから除去され得る。いくつかの実施形態では、メッセージ識別子は、S/RM405とC/RM455との間の通信シーケンスの終了のために、ある期間に関連付けて格納され得る。通信シーケンスが終了するようにQoS基準を上回った場合、メッセージ識別子は除去され得る。
プロセス400は、C/RM455が、結果431からの応答データを通信するようにという要求446を、ESB480の処理パイプライン435に送信することを含み得る。ESB480の処理パイプライン435は、ESB応答ルーチン430に、ソース490への配信のために応答データをS/RM405に配信するように要求してもよい(448)。メッセージの配信ステータスは、要求448に含まれていてもよい。S/RM405は、結果431からの応答データの要求452をソース490に通信してもよい。
図4に示すプロセス400の例では、メッセージ識別子(たとえば、メッセージのシーケンス番号および識別子)に関連付けて管理される配信ステータスは、メッセージの配信を管理するために使用可能である。仲介通信ハンドラにおける通信マネージャの実現は、配信ステータスが変化する際に、通信システムのさまざまなコンポーネント(たとえば、C/RM、S/RM、ターゲットサービスRMD、およびESB)が、呼出し可能インターフェイスを介して配信ステータスを共有することを可能にし得る。さまざまなコンポーネントは、送信元(たとえば、ソース)が配信について引き続き通知され得るように、かつ、配信のための再試行の試みが適正に管理され得るように、仲介通信ハンドラによって引き続き通知され得る。いくつかの実施形態では、メッセージの同じシーケンス番号および識別子を使用して配信のための複製メッセージを送信することにより、ターゲットサービスをサポートしているサーバコンピュータは、メッセージ402のためにサポートされるプロトコルに従ってサービス品質パラメータを維持することができる。
図5は、実施形態のうちの1つを実現するための分散型システム500の簡略図を示す。分散型システム500は、図1の通信システム100および/または図2の通信システム200を実現できる。分散型システム500は、図3のプロセス300および/または図4のプロセス400を実現できる。図示された実施形態では、分散型システム500は1つ以上のクライアントコンピューティング装置502、504、506、および508を含み、それらは、1つ以上のネットワーク510を通して、ウェブブラウザ、専用クライアント(たとえば、オラクル・フォームズ(Oracle Forms))などのクライアントアプリケーションを実行し、動作させるように構成される。ある実施形態では、1つ以上のクライアントコンピューティング装置502〜508は、図1のソース102および/または図1のターゲットサービス104、106を含み得る。サーバ512は、ネットワーク510を介して、リモートクライアントコンピューティング装置502、504、506、および508と通信可能に結合されてもよい。サーバ512は、図1のソースサーバコンピュータ140および/または図1の宛先サーバコンピュータ150を含み得る。
さまざまな実施形態では、サーバ512は、システムのコンポーネントのうちの1つ以上によって提供される1つ以上のサービスまたはソフトウェアアプリケーションを動かすように適合されてもよい。サービスまたはソフトウェアアプリケーションは、非仮想環境および仮想環境を含み得る。仮想環境は、仮想のイベント、トレードショー、シミュレータ、教室、ショッピング交換、および企業に使用されるものを、2次元または3次元(3D)表現、ページベースの論理環境などであろうとなかろうと含み得る。いくつかの実施形態では、これらのサービスは、ウェブベースのサービスまたはクラウドサービスとして、もしくはソフトウェア・アズ・ア・サービス(Software as a Service:SaaS)モデルの下で、クライアントコンピューティング装置502、504、506、および/または508のユーザに提供されてもよい。クライアントコンピューティング装置502、504、506、および/または508を動作させるユーザは次に、これらのコンポーネントによって提供されるサービスを利用するためにサーバ512とやりとりするために、1つ以上のクライアントアプリケーションを利用してもよい。
図5に示す構成では、システム500のソフトウェアコンポーネント518、520および522は、サーバ512上で実現されるとして図示されている。他の実施形態では、システム500のコンポーネントのうちの1つ以上、および/またはこれらのコンポーネントによって提供されるサービスも、クライアントコンピューティング装置502、504、506、および/または508のうちの1つ以上によって実現されてもよい。クライアントコンピューティング装置を動作させるユーザは次に、これらのコンポーネントによって提供されるサービスを使用するために、1つ以上のクライアントアプリケーションを利用してもよい。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組合せで実現されてもよい。分散型システム500とは異なり得るさまざまな異なるシステム構成が可能であることが理解されるべきである。図5に示す実施形態はこのため、実施形態システムを実現するための分散型システムの一例であり、限定的であるよう意図されてはいない。
クライアントコンピューティング装置502、504、506、および/または508は、携帯型ハンドヘルド装置(たとえば、iPhone(登録商標)、携帯電話、iPad(登録商標)、コンピューティングタブレット、携帯情報端末(PDA))またはウェアラブル装置(たとえば、グーグル・グラス(Google Glass)(登録商標)頭部装着型ディスプレイ)、マイクロソフト・ウィンドウズ・モバイル(Microsoft Windows Mobile)(登録商標)などの実行ソフトウェア、および/または、インターネット、電子メール、ショートメッセージサービス(short message service:SMS)、ブラックベリー(登録商標)、または他の通信プロトコル対応のiOS、ウィンドウズ(登録商標)フォン、アンドロイド(登録商標)、ブラックベリー(登録商標)10、パームOSなどのさまざまなモバイルオペレーティングシステムであってもよい。クライアントコンピューティング装置は、マイクロソフト・ウィンドウズ(登録商標)、アップル・マッキントッシュ(登録商標)、および/またはLinux(登録商標)オペレーティングシステムのさまざまなバージョンを実行するパーソナルコンピュータおよび/またはラップトップコンピュータを例として含む、汎用パーソナルコンピュータであり得る。クライアントコンピューティング装置は、たとえばグーグル・クロームOSなどのさまざまなGNU/Linux(登録商標)オペレーティングシステムを限定なしで含む、商業的に入手可能なさまざまなUNIX(登録商標)またはUNIX(登録商標)様オペレーティングシステムのうちのいずれかを実行するワークステーションコンピュータであり得る。それに代えて、またはそれに加えて、クライアントコンピューティング装置502、504、506、および508は、ネットワーク510を通して通信可能である、シン・クライアント・コンピュータ、インターネット対応ゲーミングシステム(たとえば、Kinect(登録商標)ジェスチャー入力装置を有する、または有さない、マイクロソフトXboxゲーミングコンソール)、および/またはパーソナルメッセージング装置といった、任意の他の電子装置であってもよい。
例示的な分散型システム500は4つのクライアントコンピューティング装置を有して図示されているが、任意の数のクライアントコンピューティング装置がサポートされてもよい。センサを有する装置などの他の装置が、サーバ512とやりとりしてもよい。
分散型システム500におけるネットワーク510は、TCP/IP(transmission control protocol/Internet protocol:伝送制御プロトコル/インターネットプロトコル)、SNA(systems network architecture:システム・ネットワーク・アーキテクチャ)、IPX(Internet packet exchange:インターネットパケット交換)、アップル・トーク(Apple Talk)などを限定なしで含む、商業的に入手可能なさまざまなプロトコルのうちのいずれかを使用してデータ通信をサポートできる、当業者にはよく知られた任意のタイプのネットワークであってもよい。単なる例として、ネットワーク510は、イーサネット(登録商標)、トークンリングなどに基づくものといったローカルエリアネットワーク(LAN)であり得る。ネットワーク510は、ワイドエリアネットワークおよびインターネットであり得る。それは、仮想プライベートネットワーク(virtual private network:VPN)を何ら限定されることなく含む仮想ネットワーク、イントラネット、エクストラネット、公衆交換電話網(public switched telephone network:PSTN)、赤外線ネットワーク、無線ネットワーク(たとえば、電気電子技術者協会(the Institute of Electrical and Electronics:IEEE)802.11プロトコルスイート、Bluetooth(登録商標)、および/または任意の他の無線プロトコルのうちのいずれかの下で動作するネットワーク)、および/または、これらのおよび/または他のネットワークの任意の組合せを含み得る。
サーバ512は、1つ以上の汎用コンピュータ、専用サーバコンピュータ(PC(パーソナルコンピュータ)サーバ、UNIX(登録商標)サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウントサーバなどを例として含む)、サーバファーム、サーバクラスタ、もしくは任意の他の適切な構成および/または組合せで構成されてもよい。サーバ512は、仮想オペレーティングシステムを実行する1つ以上の仮想マシン、または仮想化に関わる他のコンピューティングアーキテクチャを含み得る。論理記憶装置の1つ以上のフレキシブルプールは、サーバのための仮想記憶装置を維持するために仮想化され得る。仮想ネットワークは、ソフトウェア定義ネットワーキングを使用して、サーバ512によって制御され得る。さまざまな実施形態では、サーバ512は、前述の開示で説明された1つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合されてもよい。たとえば、サーバ512は、この開示の一実施形態に従った上述の処理を行なうためのサーバに対応していてもよい。
サーバ512は、上述のもののうちのいずれかを含むオペレーティングシステム、および商業的に入手可能な任意のサーバオペレーティングシステムを実行してもよい。サーバ512はまた、さまざまな追加のサーバアプリケーションおよび/または中間層アプリケーションのうちのいずれかを実行してもよく、HTTPサーバ、FTPサーバ、CGI(common gateway interface:コモンゲートウエイインターフェイス)サーバ、JAVA(登録商標)サーバ、データベースサーバなどを含む。例示的なデータベースサーバは、オラクル、マイクロソフト、サイベース(Sybase)、IBM(International Business Machines:インターナショナル・ビジネス・マシーンズ)などから商業的に入手可能なものを限定なしで含む。
いくつかの実現化例では、サーバ512は、クライアントコンピューティング装置502、504、506、および508のユーザから受信されたデータフィードおよび/またはイベント更新を分析して統合するための1つ以上のアプリケーションを含んでいてもよい。一例として、データフィードおよび/またはイベント更新は、センサデータアプリケーション、金融ティッカー、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通監視などに関連するリアルタイムイベントを含み得る、1つ以上の第三者情報源および連続データストリームから受信されたツイッター(登録商標)フィード、ヴェースブック(登録商標)更新またはリアルタイム更新を含んでいてもよいが、それらに限定されない。サーバ512はまた、クライアントコンピューティング装置502、504、506、および508の1つ以上の表示装置を介してデータフィードおよび/またはリアルタイムイベントを表示するための1つ以上のアプリケーションを含んでいてもよい。
分散型システム500はまた、1つ以上のデータベース514および516を含んでいてもよい。データベース514および516は、さまざまな場所に存在していてもよい。例として、データベース514および516のうちの1つ以上は、サーバ512に対してローカルな(および/または、サーバ512内にある)非一時的記憶媒体上に存在していてもよい。それに代えて、データベース514および516は、サーバ512からリモートであってもよく、ネットワークベースの接続または専用接続を介してサーバ512と通信してもよい。一組の実施形態では、データベース514および516は、ストレージエリアネットワーク(storage-area network:SAN)に存在していてもよい。同様に、サーバ512に帰するファンクションを行なうための任意の必要なファイルは適宜、サーバ512上にローカルに格納されてもよく、および/またはリモートに格納されてもよい。一組の実施形態では、データベース514および516は、SQLフォーマットのコマンドに応答してデータを格納し、更新し、検索するように適合された、オラクルによって提供されるデータベースなどのリレーショナルデータベースを含んでいてもよい。図1のデータストア160は、1つ以上のデータベース514および516に含まれ得る。
図6は、この開示の一実施形態に従った、実施形態システムの1つ以上のコンポーネントによって提供されるサービスをクラウドサービスとして提供し得るシステム環境600の1つ以上のコンポーネントの簡略ブロック図である。システム環境600は、図1の通信システム100および/または図2の通信システム200を含むかまたは実現することができる。システム環境600は、図3のプロセス300および/または図4のプロセス400を実現することができる。図示された実施形態では、システム環境600は、クラウドサービスを提供するクラウドインフラストラクチャシステム602とやりとりするためにユーザによって使用され得る1つ以上のクライアントコンピューティング装置604、606、および608を含む。クライアントコンピューティング装置は、クラウドインフラストラクチャシステム602によって提供されるサービスを使用するためにクラウドインフラストラクチャシステム602とやりとりするためにクライアントコンピューティング装置のユーザによって使用され得る、ウェブブラウザ、専用クライアントアプリケーション(たとえば、オラクル・フォームズ)、または何らかの他のアプリケーションといったクライアントアプリケーションを動作させるように構成されてもよい。
図6に示すクラウドインフラストラクチャシステム602は、図示されたもの以外のコンポーネントを有していてもよい、ということが理解されるべきである。また、図6に示す実施形態は、この発明の一実施形態を取入れ得るクラウドインフラストラクチャシステムの単なる一例である。たとえば、クラウドインフラストラクチャシステム602は、通信システム100および/または通信システム200の1つ以上の要素を含むかまたは実現することができる。別の例では、ターゲットサービス104、106は、クラウドインフラストラクチャシステム602によって含まれるかまたは実現されてもよい。いくつかの他の実施形態では、クラウドインフラストラクチャシステム602は、図6に示すものよりも多い、または少ないコンポーネントを有していてもよく、2つ以上のコンポーネントを組み合わせてもよく、もしくは、異なる構成または配置のコンポーネントを有していてもよい。
クライアントコンピューティング装置604、606、および608は、502、504、506、および508について上述したものと同様の装置であってもよい。
例示的なシステム環境600は3つのクライアントコンピューティング装置を有して図示されているが、任意の数のクライアントコンピューティング装置がサポートされてもよい。センサを有する装置などの他の装置が、クラウドインフラストラクチャシステム602とやりとりしてもよい。
ネットワーク610は、クライアント604、606、および608とクラウドインフラストラクチャシステム602との間のデータの通信および交換を容易にしてもよい。各ネットワークは、ネットワーク510について上述したものを含む、商業的に入手可能なさまざまなプロトコルのうちのいずれかを使用してデータ通信をサポートできる、当業者にはよく知られた任意のタイプのネットワークであってもよい。
クラウドインフラストラクチャシステム602は、サーバ512について上述したものを含み得る1つ以上のコンピュータおよび/またはサーバを含んでいてもよい。
ある実施形態では、クラウドインフラストラクチャシステムによって提供されるサービスは、オンラインデータストレージおよびバックアップソリューション、ウェブベースの電子メールサービス、ホスト型オフィススイートおよび文書コラボレーションサービス、データベース処理、管理された技術サポートサービスといった、クラウドインフラストラクチャシステムのユーザにとってオンデマンドで利用可能にされる多数のサービスを含んでいてもよい。クラウドインフラストラクチャシステムによって提供されるサービスは、そのユーザの必要性を満たすために動的にスケール変更され得る。クラウドインフラストラクチャシステムによって提供されるサービスの特定のインスタンス化は、ここに「サービスインスタンス」と呼ばれる。一般に、クラウドサービスプロバイダのシステムから、インターネットなどの通信ネットワークを介してユーザに利用可能とされる任意のサービスは、「クラウドサービス」と呼ばれる。典型的には、パブリッククラウド環境では、クラウドサービスプロバイダのシステムを作り上げるサーバおよびシステムは、顧客自身の業務用サーバおよびシステムとは異なっている。たとえば、クラウドサービスプロバイダのシステムは、アプリケーションをホストしてもよく、ユーザは、インターネットなどのネットワーク通信を介してオンデマンドでアプリケーションをオーダーし、使用してもよい。
いくつかの例では、コンピュータネットワーククラウドインフラストラクチャにおけるサービスは、クラウドベンダーによってユーザに提供されるかまたは当該技術分野において他の態様で公知であるようなストレージ、ホスト型データベース、ホスト型ウェブサーバ、ソフトウェアアプリケーション、もしくは他のサービスへの、保護されたコンピュータネットワークアクセスを含んでいてもよい。たとえば、サービスは、インターネットを通した、クラウド上のリモートストレージへの、パスワードで保護されたアクセスを含み得る。別の例として、サービスは、ネットワーク化された開発者による私的使用のための、ウェブサービスベースのホスト型リレーショナルデータベースおよびスクリプト言語ミドルウェアエンジンを含み得る。別の例として、サービスは、クラウドベンダーのウェブサイト上でホストされる電子メールソフトウェアアプリケーションへのアクセスを含み得る。
ある実施形態では、クラウドインフラストラクチャシステム602は、セルフサービスで、サブスクリプションベースで、弾力的にスケーラブルで、信頼でき、高可用性で、かつ安全な態様で顧客に配信される、アプリケーション、ミドルウェアおよびデータベースサービス提供物一式を含んでいてもよい。そのようなクラウドインフラストラクチャシステムの一例は、本譲受人によって提供されるオラクル・パブリック・クラウド(Oracle Public Cloud)である。
ビッグデータと呼ばれることもある大量のデータは、多くのレベルで、および異なるスケールで、インフラストラクチャシステムによってホストされ、および/または操作され得る。そのようなデータは、非常に大きくて複雑であるために典型的なデータベース管理ツールまたは従来のデータ処理アプリケーションを使用して処理することが困難であり得るデータセットを含み得る。たとえば、何テラバイトものデータは、パーソナルコンピュータまたはそれらのラックベースの相当物を使用して格納し、検索し、処理することが困難であり得る。そのようなサイズのデータは、大抵の現在のリレーショナルデータベース管理システムおよびデスクトップ統計および視覚化パッケージを使用して作業することが困難であり得る。それらは、許容できる経過時間内にデータを取込み、監督し、管理し、処理するために、よく使用されるソフトウェアツールの構造を超えた、何千ものサーバコンピュータを動かす超並列処理ソフトウェアを必要とし得る。
大きいデータ量を視覚化し、傾向を検出し、および/または他の態様でデータとやりとりするために、極めて大きいデータセットがアナリストおよび研究者によって格納され、操作され得る。そのようなデータを提示し、もしくは、データまたはデータが表わすものに対する外力をシミュレートするために、並列にリンクされた何十、何百、または何千ものプロセッサがデータに対して作用できる。これらのデータセットは、データベースで編成されたもの、あるいは構造化モデルに従ったものといった構造化データ、および/または、非構造化データ(たとえば、電子メール、画像、データblob(binary large object:バイナリ・ラージ・オブジェクト)、ウェブページ、複雑なイベント処理)を伴い得る。より多い(またはより少ない)コンピューティングリソースを比較的迅速に目標に集中させるように一実施形態の能力を活用することにより、クラウドインフラストラクチャシステムは、ビジネス、政府機関、研究組織、私人、同志の個人または組織のグループ、もしくは他のエンティティからの要望に基づいて、大きいデータセットに対してタスクを実行するためにより良好に利用可能であってもよい。
さまざまな実施形態では、クラウドインフラストラクチャシステム602は、クラウドインフラストラクチャシステム602によって提供されるサービスに顧客のサブスクリプションを自動的にプロビジョニングし、管理し、追跡するように適合されてもよい。クラウドインフラストラクチャシステム602は、異なるデプロイメントモデルを介してクラウドサービスを提供してもよい。たとえば、サービスは、クラウドインフラストラクチャシステム602がクラウドサービスを販売する組織によって所有され(たとえば、オラクルによって所有され)、サービスが一般大衆または異なる産業企業にとって利用可能とされる、パブリッククラウドモデルの下で提供されてもよい。別の例として、サービスは、クラウドインフラストラクチャシステム602が単一の組織のためにのみ動作され、その組織内の1つ以上のエンティティのためのサービスを提供し得る、プライベートクラウドモデルの下で提供されてもよい。クラウドサービスはまた、クラウドインフラストラクチャシステム602、およびクラウドインフラストラクチャシステム602によって提供されるサービスが、関連するコミュニティにおけるいくつかの組織によって共有される、コミュニティクラウドモデルの下で提供されてもよい。クラウドサービスはまた、2つ以上の異なるモデルの組合せであるハイブリッドクラウドモデルの下で提供されてもよい。
いくつかの実施形態では、クラウドインフラストラクチャシステム602によって提供されるサービスは、ソフトウェア・アズ・ア・サービス(SaaS)カテゴリー、プラットフォーム・アズ・ア・サービス(Platform as a Service:PaaS)カテゴリー、インフラストラクチャ・アズ・ア・サービス(Infrastructure as a Service:IaaS)カテゴリー、または、ハイブリッドサービスを含むサービスの他のカテゴリーの下で提供される、1つ以上のサービスを含んでいてもよい。顧客は、クラウドインフラストラクチャシステム602によって提供される1つ以上のサービスを、サブスクリプションオーダーを介してオーダーしてもよい。クラウドインフラストラクチャシステム602は次に、顧客のサブスクリプションオーダーにおけるサービスを提供するために処理を行なう。
いくつかの実施形態では、クラウドインフラストラクチャシステム602によって提供されるサービスは、アプリケーションサービス、プラットフォームサービス、およびインフラストラクチャサービスを限定なしで含んでいてもよい。いくつかの例では、アプリケーションサービスは、SaaSプラットフォームを介して、クラウドインフラストラクチャシステムによって提供されてもよい。SaaSプラットフォームは、SaaSカテゴリーに該当するクラウドサービスを提供するように構成されてもよい。たとえば、SaaSプラットフォームは、統合された開発およびデプロイメントプラットフォーム上にオンデマンドアプリケーション一式を構築し、配信するための能力を提供してもよい。SaaSプラットフォームは、SaaSサービスを提供するための基本ソフトウェアおよびインフラストラクチャを管理し、制御してもよい。SaaSプラットフォームによって提供されるサービスを利用することにより、顧客は、クラウドインフラストラクチャシステム上で実行されるアプリケーションを利用できる。顧客は、顧客が別々のライセンスおよびサポートを購入する必要なく、アプリケーションサービスを取得できる。さまざまな異なるSaaSサービスが提供されてもよい。例は、大型組織のための販売実績管理、企業統合、およびビジネス柔軟性についてのソリューションを提供するサービスを限定なしで含む。
いくつかの実施形態では、プラットフォームサービスは、PaaSプラットフォームを介して、クラウドインフラストラクチャシステムによって提供されてもよい。PaaSプラットフォームは、PaaSカテゴリーに該当するクラウドサービスを提供するように構成されてもよい。プラットフォームサービスの例は、(オラクルなどの)組織が共有の共通アーキテクチャ上で既存のアプリケーションを統合できるようにするサービスと、プラットフォームによって提供される共有のサービスを活用する新しいアプリケーションを構築するための能力とを限定なしで含んでいてもよい。PaaSプラットフォームは、PaaSサービスを提供するための基本ソフトウェアおよびインフラストラクチャを管理し、制御してもよい。顧客は、顧客が別々のライセンスおよびサポートを購入する必要なく、クラウドインフラストラクチャシステムによって提供されるPaaSサービスを取得できる。プラットフォームサービスの例は、オラクルJava(登録商標)クラウドサービス(Java Cloud Service:JCS)、オラクル・データベース・クラウド・サービス(Database Cloud Service:DBCS)などを限定なしで含む。
PaaSプラットフォームによって提供されるサービスを利用することにより、顧客は、クラウドインフラストラクチャシステムによってサポートされるプログラミング言語およびツールを採用するとともに、デプロイメントされたサービスを制御することができる。いくつかの実施形態では、クラウドインフラストラクチャシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス(たとえば、オラクル・フュージョン・ミドルウェア(Oracle Fusion Middleware)サービス)、およびJava(登録商標)クラウドサービスを含んでいてもよい。一実施形態では、データベースクラウドサービスは、組織がデータベースリソースをプールし、データベースクラウドの形をしたデータベース・アズ・ア・サービスを顧客に提供することを可能にする共有のサービスデプロイメントモデルをサポートしてもよい。ミドルウェアクラウドサービスは、顧客がさまざまなビジネスアプリケーションを開発してデプロイメントするためのプラットフォームを提供してもよく、Java(登録商標)クラウドサービスは、顧客がクラウドインフラストラクチャシステムにおいてJava(登録商標)アプリケーションをデプロイメントするためのプラットフォームを提供してもよい。
クラウドインフラストラクチャシステムにおいて、さまざまな異なるインフラストラクチャサービスが、IaaSプラットフォームによって提供されてもよい。これらのインフラストラクチャサービスは、SaaSプラットフォームおよびPaaSプラットフォームによって提供されるサービスを利用する顧客のための、ストレージ、ネットワーク、ならびに他の基礎的コンピューティングリソースなどの基本コンピューティングリソースの管理および制御を容易にする。
ある実施形態では、クラウドインフラストラクチャシステム602はまた、クラウドインフラストラクチャシステムの顧客にさまざまなサービスを提供するために使用されるリソースを提供するためのインフラストラクチャリソース630を含んでいてもよい。一実施形態では、インフラストラクチャリソース630は、PaaSプラットフォームおよびSaaSプラットフォームによって提供されるサービスを実行するために、サーバ、ストレージ、およびネットワーキングリソースなどのハードウェアの予め統合され最適化された組合せを含んでいてもよい。
いくつかの実施形態では、クラウドインフラストラクチャシステム602におけるリソースは、複数のユーザによって共有され、要望ごとに動的に再割当てされてもよい。加えて、リソースは、異なる時間帯におけるユーザに割当てられてもよい。たとえば、クラウドインフラストラクチャシステム630は、第1の時間帯における第1の一組のユーザが、特定数の時間、クラウドインフラストラクチャシステムのリソースを利用することを可能にし、次に、異なる時間帯に位置する別の一組のユーザへの同じリソースの再割当てを可能にして、それによりリソースの利用を最大化してもよい。
ある実施形態では、クラウドインフラストラクチャシステム602の異なるコンポーネントまたはモジュールによって、およびクラウドインフラストラクチャシステム602によって提供されるサービスによって共有される、多くの内部共有サービス632が提供されてもよい。これらの内部共有サービスは、セキュリティおよびアイデンティティサービス、統合サービス、企業リポジトリサービス、企業マネージャサービス、ウィルススキャニングおよびホワイトリストサービス、高可用性、バックアップおよび復元サービス、クラウドサポートを可能にするためのサービス、電子メールサービス、通知サービス、ファイル転送サービスなどを限定なしで含んでいてもよい。
ある実施形態では、クラウドインフラストラクチャシステム602は、クラウドインフラストラクチャシステムにおけるクラウドサービス(たとえば、SaaS、PaaS、およびIaaSサービス)の包括的管理を提供してもよい。一実施形態では、クラウド管理機能性は、クラウドインフラストラクチャシステム602によって受信された顧客のサブスクリプションをプロビジョニングし、管理し、追跡するための能力などを含んでいてもよい。
一実施形態では、図6に示すように、クラウド管理機能性は、オーダー管理モジュール620、オーダーオーケストレーションモジュール622、オーダープロビジョニングモジュール624、オーダー管理および監視モジュール626、およびアイデンティティ管理モジュール628などの1つ以上のモジュールによって提供されてもよい。これらのモジュールは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、もしくは任意の他の適切な構成および/または組合せであり得る、1つ以上のコンピュータおよび/またはサーバを含んでいてもよく、もしくはそれらを使用して提供されてもよい。
例示的な動作634では、クライアント装置604、606または608などのクライアント装置を使用する顧客は、クラウドインフラストラクチャシステム602によって提供される1つ以上のサービスを要求し、クラウドインフラストラクチャシステム602によって提供される1つ以上のサービスについてサブスクリプションオーダーを出すことにより、クラウドインフラストラクチャシステム602とやりとりしてもよい。ある実施形態では、顧客は、クラウドユーザインターフェイス(User Interface:UI)であるクラウドUI612、クラウドUI614および/またはクラウドUI616にアクセスし、これらのUIを介してサブスクリプションオーダーを出してもよい。顧客がオーダーを出したことに応答してクラウドインフラストラクチャシステム602が受信したオーダー情報は、顧客と、顧客が申し込むつもりである、クラウドインフラストラクチャシステム602によって提供される1つ以上のサービスとを識別する情報を含んでいてもよい。
顧客によってオーダーが出された後で、オーダー情報がクラウドUI612、614および/または616を介して受信される。
動作636で、オーダーがオーダーデータベース618に格納される。オーダーデータベース618は、クラウドインフラストラクチャシステム602によって動作され、他のシステム要素とともに動作される、いくつかのデータベースのうちの1つであり得る。
動作638で、オーダー情報はオーダー管理モジュール620に転送される。場合によっては、オーダー管理モジュール620は、オーダーを検証し、検証後にオーダーを予約するといった、オーダーに関連する請求および課金機能を行なうように構成されてもよい。
動作640で、オーダーに関する情報がオーダーオーケストレーションモジュール622に通信される。オーダーオーケストレーションモジュール622は、顧客によって出されたオーダーのためのサービスおよびリソースのプロビジョニングをオーケストレーションするために、オーダー情報を利用してもよい。場合によっては、オーダーオーケストレーションモジュール622は、オーダープロビジョニングモジュール624のサービスを使用して、申し込まれたサービスをサポートするようにリソースのプロビジョニングをオーケストレーションしてもよい。
ある実施形態では、オーダーオーケストレーションモジュール622は、各オーダーに関連付けられたビジネスプロセスの管理を可能にし、オーダーがプロビジョニングに進むべきか否かを判断するためにビジネス論理を適用する。動作642で、新規サブスクリプションのオーダーを受信すると、オーダーオーケストレーションモジュール622は、リソースを割当ててサブスクリプションオーダーを遂行するために必要とされるリソースを構成するようにという要求を、オーダープロビジョニングモジュール624に送信する。オーダープロビジョニングモジュール624は、顧客によってオーダーされたサービスのためのリソースの割当てを可能にする。オーダープロビジョニングモジュール624は、クラウドインフラストラクチャシステム602によって提供されるクラウドサービスと、要求されたサービスを提供するためのリソースをプロビジョニングするために使用される物理的実装層との間の抽象化のレベルを提供する。オーダーオーケストレーションモジュール622はこのため、サービスおよびリソースが実際にオンザフライでプロビジョニングされるか否か、または予めプロビジョニングされて要求時にのみ割当てられるか否かといった実現詳細から切り離されてもよい。
動作644で、サービスおよびリソースが一旦プロビジョニングされると、提供されるサービスの通知が、クラウドインフラストラクチャシステム602のオーダープロビジョニングモジュール624によって、クライアント装置604、606および/または608上の顧客に送信されてもよい。
動作646で、顧客のサブスクリプションオーダーが、オーダー管理および監視モジュール626によって管理され、追跡されてもよい。場合によっては、オーダー管理および監視モジュール626は、使用されるストレージの量、転送されるデータの量、ユーザの数、システムアップタイムおよびシステムダウンタイムの量といった、サブスクリプションオーダーにおけるサービスについての使用統計を収集するように構成されてもよい。
ある実施形態では、クラウドインフラストラクチャシステム602は、アイデンティティ管理モジュール628を含んでいてもよい。アイデンティティ管理モジュール628は、クラウドインフラストラクチャシステム602においてアクセス管理および認証サービスなどのアイデンティティサービスを提供するように構成されてもよい。いくつかの実施形態では、アイデンティティ管理モジュール628は、クラウドインフラストラクチャシステム602によって提供されるサービスを利用したい顧客についての情報を制御してもよい。そのような情報は、そのような顧客のアイデンティティを認証する情報と、さまざまなシステムリソース(たとえば、ファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど)に対してそれらの顧客がどのアクションを行なうことが認可されているかを記述する情報とを含み得る。アイデンティティ管理モジュール628はまた、各顧客についての記述的情報と、その記述的情報が誰によってどのようにアクセスされ、修正され得るかについての記述的情報との管理を含んでいてもよい。
図7は、この発明のさまざまな実施形態が実現され得る例示的なコンピュータシステム700を示す。システム700は、上述のコンピュータシステムのうちのいずれかを実現するために使用されてもよい。たとえば、システム700では、図1の通信システム100および図2の通信システム200の要素のすべてまたはいくつかが含まれ、または実現され得る。システム700は、図3のプロセス300または図4のプロセス400のうちの一方または双方を実現できる。図7に示すように、コンピュータシステム700は、バスサブシステム702を介して多くの周辺サブシステムと通信する処理部704を含む。これらの周辺サブシステムは、処理加速部706と、I/Oサブシステム708と、記憶サブシステム718と、通信サブシステム724とを含んでいてもよい。記憶サブシステム718は、有形のコンピュータ読取可能記憶媒体722と、システムメモリ710とを含む。
バスサブシステム702は、コンピュータシステム700のさまざまなコンポーネントおよびサブシステムを意図されるように互いに通信させるためのメカニズムを提供する。バスサブシステム702は単一のバスとして概略的に図示されているが、バスサブシステムの代替的な実施形態は複数のバスを利用してもよい。バスサブシステム702は、さまざまなバスアーキテクチャのうちのいずれかを使用するメモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含む、いくつかのタイプのバス構造のうちのいずれかであってもよい。たとえば、そのようなアーキテクチャは、IEEE P1386.1規格で製造されるメザニンバスとして実現可能な、産業標準アーキテクチャ(Industry Standard Architecture:ISA)バス、マイクロチャネルアーキテクチャ(Micro Channel Architecture:MCA)バス、強化ISA(EISA)バス、ビデオエレクトロニクス標準組織(Video Electronics Standards Association:VESA)ローカルバス、および周辺コンポーネント相互接続(Peripheral Component Interconnect:PCI)バスを含んでいてもよい。
1つ以上の集積回路(たとえば、従来のマイクロプロセッサまたはマイクロコントローラ)として実現され得る処理部704は、コンピュータシステム700の動作を制御する。処理部704には、1つ以上のプロセッサが含まれていてもよい。これらのプロセッサは、シングルコアまたはマルチコアプロセッサを含んでいてもよい。ある実施形態では、処理部704は、各処理部にシングルまたはマルチコアプロセッサが含まれた、1つ以上の独立した処理部732および/または734として実現されてもよい。他の実施形態では、処理部704はまた、2つのデュアルコアプロセッサをシングルチップへと集積することによって形成されるクアッドコア処理部として実現されてもよい。
さまざまな実施形態では、処理部704は、プログラムコードに応答してさまざまなプログラムを実行でき、同時に実行される複数のプログラムまたはプロセスを維持できる。任意の所与の時間において、実行されるべきプログラムコードのうちのいくつかまたはすべては、プロセッサ704に、および/または記憶サブシステム718にあり得る。好適なプログラミングを通して、プロセッサ704は、上述のさまざまな機能性を提供できる。コンピュータシステム700は加えて処理加速部706を含んでいてもよく、それは、デジタル信号プロセッサ(digital signal processor:DSP)、専用プロセッサなどを含み得る。
I/Oサブシステム708は、ユーザインターフェイス入力装置と、ユーザインターフェイス出力装置とを含んでいてもよい。ユーザインターフェイス入力装置は、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、ダイヤル、ボタン、スイッチ、キーパッド、音声コマンド認識システム付き音声入力装置、マイクロホン、および他のタイプの入力装置を含んでいてもよい。ユーザインターフェイス入力装置は、たとえば、ジェスチャーおよび口頭コマンドを使用したナチュラルユーザインターフェイスを通して、マイクロソフトXbox(登録商標)360ゲームコントローラなどの入力装置をユーザが制御し、それとやりとりすることを可能にする、マイクロソフトKinect(登録商標)運動センサなどの運動感知および/またはジェスチャー認識装置を含んでいてもよい。ユーザインターフェイス入力装置はまた、ユーザから目の活動(たとえば、写真撮影中および/またはメニュー選択中の「まばたき」)を検出し、アイジェスチャーを入力装置(たとえば、グーグル・グラス(登録商標))への入力として変換する、グーグル・グラス(登録商標)まばたき検出器などのアイジェスチャー認識装置を含んでいてもよい。加えて、ユーザインターフェイス入力装置は、ユーザが音声コマンドを通して音声認識システム(たとえば、Siri(登録商標)ナビゲータ)とやりとりできるようにする音声認識検出装置を含んでいてもよい。
ユーザインターフェイス入力装置はまた、3次元(3D)マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、ならびに、スピーカ、デジタルカメラ、デジタルビデオカメラ、携帯型メディアプレイヤー、ウェブカメラ、画像スキャナ、指紋スキャナ、バーコードリーダ3Dスキャナ、3Dプリンタ、レーザー測距器、および視線検出装置などの音声/視覚装置を限定なしで含んでいてもよい。加えて、ユーザインターフェイス入力装置は、たとえば、コンピュータ断層撮影装置、磁気共鳴撮像装置、ポジトロン放出断層撮影装置、医療用超音波検査装置などの医療用撮像入力装置を含んでいてもよい。ユーザインターフェイス入力装置はまた、たとえば、MIDIキーボード、デジタル楽器などの音声入力装置を含んでいてもよい。
ユーザインターフェイス出力装置は、表示サブシステム、表示灯、または、音声出力装置などの非視覚的ディスプレイを含んでいてもよい。表示サブシステムは、陰極線管(cathode ray tube:CRT)、液晶ディスプレイ(liquid crystal display:LCD)またはプラズマディスプレイを使用するものなどのフラットパネル装置、投影装置、タッチスクリーンなどであってもよい。一般に、「出力装置」という用語の使用は、コンピュータシステム700からユーザまたは他のコンピュータに情報を出力するためのあらゆる可能なタイプの装置およびメカニズムを含むよう意図されている。たとえば、ユーザインターフェイス出力装置は、モニタ、プリンタ、スピーカ、ヘッドホン、カーナビ、プロッタ、音声出力装置、およびモデムといった、テキスト、グラフィックスおよび音声/映像情報を視覚的に搬送するさまざまな表示装置を限定なしで含んでいてもよい。
コンピュータシステム700は、現在システムメモリ710内にあるとして図示されたソフトウェア要素を含む記憶サブシステム718を含んでいてもよい。システムメモリ710は、処理部704上でロード可能および実行可能なプログラム命令と、これらのプログラムの実行中に生成されたデータとを格納してもよい。
コンピュータシステム700の構成およびタイプに依存して、システムメモリ710は揮発性(ランダムアクセスメモリ(random access memory:RAM)など)であってもよく、および/または不揮発性(読出専用メモリ(read-only memory:ROM)、フラッシュメモリなど)であってもよい。RAMは典型的には、処理部704に直ちにアクセス可能であり、および/または処理部704によって現在動作および実行中のデータおよび/またはプログラムモジュールを含む。いくつかの実現化例では、システムメモリ710は、スタティックランダムアクセスメモリ(static random access memory:SRAM)またはダイナミックランダムアクセスメモリ(dynamic random access memory:DRAM)などの複数の異なるタイプのメモリを含んでいてもよい。いくつかの実現化例では、起動中などにコンピュータシステム700内の要素間で情報を転送するのに役立つ基本ルーチンを含む基本入力/出力システム(basic input/output system:BIOS)が、典型的にはROMに格納されていてもよい。限定のためではなく例として、システムメモリ710はまた、クライアントアプリケーション、ウェブブラウザ、中央層アプリケーション、リレーショナルデータベース管理システムなど(relational database management system:RDBMS)を含み得るアプリケーションプログラム712と、プログラムデータ714と、オペレーティングシステム716とを示す。例として、オペレーティングシステム716は、マイクロソフト・ウィンドウズ(登録商標)、アップル・マッキントッシュ(登録商標)、および/またはLinux(登録商標)オペレーティングシステムのさまざまなバージョン、商業的に入手可能なさまざまなUNIX(登録商標)またはUNIX(登録商標)様オペレーティングシステム(さまざまなGNU/Linux(登録商標)オペレーティングシステム、グーグル・クローム(登録商標)OSなどを限定なしで含む)、および/または、iOS、ウィンドウズ(登録商標)フォン、アンドロイド(登録商標)OS、ブラックベリー(登録商標)10OS、パーム(登録商標)OSオペレーティングシステムなどのモバイルオペレーティングシステムを含んでいてもよい。
記憶サブシステム718はまた、いくつかの実施形態の機能性を提供する基本プログラミングおよびデータ構造を格納するための有形のコンピュータ読取可能記憶媒体を提供してもよい。プロセッサによって実行されると上述の機能性を提供するソフトウェア(プログラム、コードモジュール、命令)が、記憶サブシステム718に格納されてもよい。これらのソフトウェアモジュールまたは命令は、処理部704によって実行されてもよい。記憶サブシステム718はまた、この発明に従って使用されるデータを格納するためのリポジトリを提供してもよい。
記憶サブシステム700はまた、コンピュータ読取可能記憶媒体722にさらに接続され得るコンピュータ読取可能記憶媒体リーダ720を含んでいてもよい。システムメモリ710とともに、およびオプションでシステムメモリ710と組合わされて、コンピュータ読取可能記憶媒体722は、リモート、ローカル、固定および/またはリムーバブルの記憶装置に加えて、コンピュータ読取可能情報を一時的におよび/またはより永続的に含み、格納し、送信し、検索するための記憶媒体を包括的に表わしてもよい。
コードまたはコードの一部を含むコンピュータ読取可能記憶媒体722はまた、情報の格納および/または送信のためのあらゆる方法または技術で実現される揮発性および不揮発性でリムーバブルおよび非リムーバブルの媒体を含むがそれらに限定されない記憶媒体および通信媒体を含む、当該技術分野において公知であるかまたは使用されるあらゆる適切な媒体を含み得る。これは、RAM、ROM、電子的消去可能プログラマブルROM(electronically erasable programmable ROM:EEPROM)、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタル多用途ディスク(digital versatile disk:DVD)または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、もしくは他の有形のコンピュータ読取可能媒体といった、有形の非一時的コンピュータ読取可能記憶媒体を含み得る。特定される場合、これは、所望情報を送信するために使用可能であり、コンピューティングシステム700によってアクセスされ得るデータ信号、データ送信、または任意の他の媒体といった、非有形の一時的コンピュータ読取可能媒体も含み得る。
例として、コンピュータ読取可能記憶媒体722は、非リムーバブルで不揮発性の磁気媒体から読出し、またはそれに書込むハードディスクドライブ、リムーバブルで不揮発性の磁気ディスクから読出し、またはそれに書込む磁気ディスクドライブ、ならびに、CD ROM、DVD、およびBlu−Ray(登録商標)ディスク、または他の光学媒体といった、リムーバブルで不揮発性の光ディスクから読出し、またはそれに書込む光ディスクドライブを含んでいてもよい。コンピュータ読取可能記憶媒体722は、Zip(登録商標)ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス(universal serial bus:USB)フラッシュドライブ、セキュアデジタル(secure digitalSD)カード、DVDディスク、デジタルビデオテープなどを含んでいてもよいが、それらに限定されない。コンピュータ読取可能記憶媒体722はまた、フラッシュメモリベースのソリッドステートドライブ(solid-state drive:SSD)、企業フラッシュドライブ、固体ROMといった、不揮発性メモリに基づいたSSD、ソリッドステートRAM、ダイナミックRAM、スタティックRAM、DRAMベースのSSD、磁気抵抗RAM(MRAM)SSDといった、揮発性メモリに基づいたSSD、および、DRAMベースのSSDとフラッシュメモリベースのSSDとの組合せを使用するハイブリッドSSDを含んでいてもよい。ディスクドライブおよびそれらの関連付けられたコンピュータ読取可能媒体は、コンピュータ読取可能命令、データ構造、プログラムモジュールおよび他のデータの不揮発性ストレージをコンピュータシステム700に提供してもよい。
通信サブシステム724は、他のコンピュータシステムおよびネットワークへのインターフェイスを提供する。通信サブシステム724は、コンピュータシステム700とは別のシステムからデータを受信し、別のシステムにデータを送信するためのインターフェイスとして機能する。たとえば、通信サブシステム724は、コンピュータシステム700がインターネットを介して1つ以上の装置に接続できるようにしてもよい。いくつかの実施形態では、通信サブシステム724は、(たとえば、3G、4G、またはEDGE(enhanced data rates for global evolution:エンハンスト・データレート・フォー・グローバル・エボリューション)、WiFi(IEEE802.11ファミリー規格)、または他の移動通信技術、またはそれらの任意の組合せといった携帯電話技術、高度なデータネットワーク技術を使用した)無線音声および/またはデータネットワークにアクセスするための無線周波数(radio frequency:RF)トランシーバコンポーネント、全地球測位システム(global positioning system:GPS)受信機コンポーネント、および/または他のコンポーネントを含み得る。いくつかの実施形態では、通信サブシステム724は、無線インターフェイスに加えて、またはその代わりに、有線ネットワーク接続(たとえば、イーサネット(登録商標))を提供できる。
いくつかの実施形態では、通信サブシステム724はまた、コンピュータシステム700を使用し得る1人以上のユーザのために、構造化および/または非構造化データフィード726、イベントストリーム728、イベント更新730などの形をした入力通信を受信してもよい。
例として、通信サブシステム724は、ツイッター(登録商標)フィード、フェースブック(登録商標)更新、リッチ・サイト・サマリー(Rich Site Summary:RSS)フィードなどのウェブフィード、および/または1つ以上の第三者情報源からのリアルタイム更新といった、ソーシャルメディアネットワークおよび/または他の通信サービスのユーザからのデータフィード726をリアルタイムで受信するように構成されてもよい。
加えて、通信サブシステム724はまた、リアルタイムイベントのイベントストリーム728および/またはイベント更新730を含み得る、明確な終わりがなく本質的に連続的または無限であり得る連続データストリームの形をしたデータを受信するように構成されてもよい。連続データを生成するアプリケーションの例は、たとえば、センサデータアプリケーション、金融ティッカー、ネットワーク性能測定ツール(たとえば、ネットワーク監視およびトラフィック管理アプリケーション)、クリックストリーム分析ツール、自動車交通監視などを含んでいてもよい。
通信サブシステム724はまた、構造化および/または非構造化データフィード726、イベントストリーム728、イベント更新730などを、コンピュータシステム700に結合された1つ以上のストリーミングデータソースコンピュータと通信し得る1つ以上のデータベースに出力するように構成されてもよい。
コンピュータシステム700は、ハンドヘルド携帯装置(たとえば、iPhone(登録商標)携帯電話、iPad(登録商標)コンピューティングタブレット、PDA)、ウェアラブル装置(たとえば、グーグル・グラス(登録商標)頭部装着型ディスプレイ)、PC、ワークステーション、メインフレーム、キオスク、サーバラック、または任意の他のデータ処理システムを含む、さまざまなタイプのうちの1つであり得る。
コンピュータおよびネットワークの絶えず変化する性質により、図7に示すコンピュータシステム700の説明は、単に特定の一例として意図される。図7に示すシステムよりも多い、または少ないコンポーネントを有する他の多くの構成が可能である。たとえば、カスタマイズされたハードウェアも使用されてもよく、および/または、特定の要素が、ハードウェア、ファームウェア、ソフトウェア(アプレットを含む)、または組合せで実現されてもよい。また、ネットワーク入力/出力装置などの他のコンピューティング装置への接続が採用されてもよい。ここに提供される開示および教示に基づいて、当業者であれば、さまざまな実施形態を実現するための他のやり方および/または方法を理解するであろう。
前述の明細書では、この発明の局面がその特定の実施形態に関して説明されているが、当業者であれば、この発明がそれらに限定されないことを認識するであろう。上述の発明のさまざまな特徴および局面は、個々にまたはともに使用されてもよい。また、実施形態は、明細書のより広範な精神および範囲から逸脱することなく、ここに説明されたものを超えるあらゆる数の環境および用途において利用され得る。したがって、明細書および図面は、限定的ではなく例示的であるとみなされるべきである。