(57)【特許請求の範囲】
【請求項１】
それぞれのチャネル名を含む発行者から書込要求を受信する段階であって、該チャネル名によって識別されるチャネルが、１又は２以上のバッファに格納された順序付けられた複数のメッセージを含み、各バッファが、予め決められた有効期間を有し、かつそれぞれのノードに割り当てられる前記受信する段階と、
前記書込要求の前記チャネル名に基づいて第１のノードと１又は２以上のメッセージを格納するのに利用可能なストレージを有する該第１のノード上に格納された第１のバッファとを識別する段階であって、該第１のバッファが、満了していない有効期間を有する前記識別する段階と、
書込許可を前記発行者に送信する段階であって、該書込許可が、前記第１のノードと前記第１のバッファとの識別を含み、該発行者が、該第１のバッファが満杯であるか又は該第１のバッファの有効期間が満了するまで該許可に基づいて該第１のバッファに格納するために１又は２以上のメッセージを該第１のノードに送信するように構成される前記送信する段階と、
を１又は２以上のコンピュータによって実行する段階、
を含むことを特徴とする方法。
【請求項２】
それぞれのチャネル名とそれぞれのオフセットとを含む購読者からの読取要求を受信する段階であって、該チャネル名によって識別される前記チャネルが、１又は２以上のバッファに格納された順序付けられた複数のメッセージを含み、各バッファが、予め決められた有効期間を有し、かつそれぞれのノードに割り当てられる前記受信する段階と、
前記読取要求の前記チャネル名と前記オフセットとに基づいて第２のノードと該第２のノード上に格納された第２のバッファとを識別する段階と、
読取許可を前記購読者に送信する段階であって、該読取許可が、前記第２のノードと前記第２のバッファとの識別を含み、該購読者が、該第２のバッファの有効期間が満了するまで該第２のバッファからメッセージを取得するために該第２のノードに１又は２以上の読取要求を送信するように構成される前記送信する段階と、
を更に含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記第１のノード及び前記第２のノードは、異なる物理コンピュータであることを特徴とする請求項２に記載の方法。
【請求項４】
前記書込要求の前記チャネル名に基づいて前記第１のノード及び前記第１のバッファを識別する段階は、
複数の利用可能なノード上のそれぞれのワークロードをモニタする段階と、
前記ノードの前記それぞれのワークロードを配分するために前記第１のノードを識別する段階と、
を含む、
ことを特徴とする請求項１に記載の方法。
【請求項５】
前記第２のバッファは、前記チャネルのメッセージを格納するのに使用される他のバッファよりも早く満了することになるそれぞれの有効期間を有することを特徴とする請求項２に記載の方法。
【請求項６】
満了した有効期間を有する第３のノード上に格納された第３のバッファを識別し、かつそれに基づいて、該第３のバッファを排除する段階、
を更に含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記第１のバッファが閉じているという通知を前記第１のノードから受信する段階と、
前記チャネルのための新しいバッファをその上に格納するための第２のノードを識別する段階と、
前記チャネルの新しいメッセージを格納するために前記第２のノード上に第２のバッファを生成する段階と、
を更に含むことを特徴とする請求項１に記載の方法。
【請求項８】
それぞれのチャネル名を含む発行者から書込要求を受信する段階であって、該チャネル名によって識別されるチャネルが、１又は２以上のバッファに格納された順序付けられた複数のメッセージを含み、各バッファが、予め決められた有効期間を有し、かつそれぞれのノードに割り当てられる前記受信する段階と、
前記書込要求の前記チャネル名に基づいて第１のノードと１又は２以上のメッセージを格納するのに利用可能なストレージを有する該第１のノード上に格納された第１のバッファとを識別する段階であって、該第１のバッファが、満了していない有効期間を有する前記識別する段階と、
書込許可を前記発行者に送信する段階であって、該書込許可が、前記第１のノードと前記第１のバッファとの識別を含み、該発行者が、該第１のバッファが満杯であるか又は該第１のバッファの有効期間が満了するまで該許可に基づいて該第１のバッファに格納するために１又は２以上のメッセージを該第１のノードに送信するように構成される前記送信する段階と、
を含む作動を実行するようにプログラムされた１又は２以上のコンピュータ、
を含むことを特徴とするシステム。
【請求項９】
前記作動は、
それぞれのチャネル名とそれぞれのオフセットとを含む購読者からの読取要求を受信する段階であって、該チャネル名によって識別される前記チャネルが、１又は２以上のバッファに格納された順序付けられた複数のメッセージを含み、各バッファが、予め決められた有効期間を有し、かつそれぞれのノードに割り当てられる前記受信する段階と、
前記読取要求の前記チャネル名と前記オフセットとに基づいて第２のノードと該第２のノード上に格納された第２のバッファとを識別する段階と、
読取許可を前記購読者に送信する段階であって、該読取許可が、前記第２のノードと前記第２のバッファとの識別を含み、該購読者が、該第２のバッファの有効期間が満了するまで該第２のバッファからメッセージを取得するために該第２のノードに１又は２以上の読取要求を送信するように構成される前記送信する段階と、
を更に含む、
ことを特徴とする請求項８に記載のシステム。
【請求項１０】
前記第１のノード及び前記第２のノードは、異なる物理コンピュータであることを特徴とする請求項９に記載のシステム。
【請求項１１】
前記書込要求の前記チャネル名に基づいて前記第１のノード及び前記第１のバッファを識別する段階は、
複数の利用可能なノード上のそれぞれのワークロードをモニタする段階と、
前記ノードの前記それぞれのワークロードを配分するために前記第１のノードを識別する段階と、
を含む、
ことを特徴とする請求項８に記載のシステム。
【請求項１２】
前記第２のバッファは、前記チャネルのメッセージを格納するのに使用される他のバッファよりも早く満了することになるそれぞれの有効期間を有することを特徴とする請求項９に記載のシステム。
【請求項１３】
前記作動は、
満了した有効期間を有する第３のノード上に格納された第３のバッファを識別し、かつそれに基づいて、該第３のバッファを排除する段階、
を更に含む、
ことを特徴とする請求項８に記載のシステム。
【請求項１４】
前記作動は、
前記第１のバッファが閉じているという通知を前記第１のノードから受信する段階と、
前記チャネルのための新しいバッファをその上に格納するための第２のノードを識別する段階と、
前記チャネルの新しいメッセージを格納するために前記第２のノード上に第２のバッファを生成する段階と、
を更に含む、
ことを特徴とする請求項８に記載のシステム。
【請求項１５】
１又は２以上のコンピュータによって実行された時に、
それぞれのチャネル名を含む発行者から書込要求を受信する段階であって、該チャネル名によって識別されるチャネルが、１又は２以上のバッファに格納された順序付けられた複数のメッセージを含み、各バッファが、予め決められた有効期間を有し、かつそれぞれのノードに割り当てられる前記受信する段階と、
前記書込要求の前記チャネル名に基づいて第１のノードと１又は２以上のメッセージを格納するのに利用可能なストレージを有する該第１のノード上に格納された第１のバッファとを識別する段階であって、該第１のバッファが、満了していない有効期間を有する前記識別する段階と、
書込許可を前記発行者に送信する段階であって、該書込許可が、前記第１のノードと前記第１のバッファとの識別を含み、該発行者が、該第１のバッファが満杯であるか又は該第１のバッファの有効期間が満了するまで該許可に基づいて該第１のバッファに格納するために１又は２以上のメッセージを該第１のノードに送信するように構成される前記送信する段階と、
を含む作動を実行する命令が格納されたストレージデバイス。
【請求項１６】
前記作動は、
それぞれのチャネル名とそれぞれのオフセットとを含む購読者からの読取要求を受信する段階であって、該チャネル名によって識別される前記チャネルが、１又は２以上のバッファに格納された順序付けられた複数のメッセージを含み、各バッファが、予め決められた有効期間を有し、かつそれぞれのノードに割り当てられる前記受信する段階と、
前記読取要求の前記チャネル名と前記オフセットとに基づいて第２のノードと該第２のノード上に格納された第２のバッファとを識別する段階と、
読取許可を前記購読者に送信する段階であって、該読取許可が、前記第２のノードと前記第２のバッファとの識別を含み、該購読者が、該第２のバッファの有効期間が満了するまで該第２のバッファからメッセージを取得するために該第２のノードに１又は２以上の読取要求を送信するように構成される前記送信する段階と、
を更に含む、
ことを特徴とする請求項１５に記載のストレージデバイス。
【請求項１７】
前記第１のノード及び前記第２のノードは、異なる物理コンピュータであることを特徴とする請求項１６に記載のストレージデバイス。
【請求項１８】
前記書込要求の前記チャネル名に基づいて前記第１のノード及び前記第１のバッファを識別する段階は、
複数の利用可能なノード上のそれぞれのワークロードをモニタする段階と、
前記ノードの前記それぞれのワークロードを配分するために前記第１のノードを識別する段階と、
を含む、
ことを特徴とする請求項１５に記載のストレージデバイス。
【請求項１９】
前記第２のバッファは、前記チャネルのメッセージを格納するのに使用される他のバッファよりも早く満了することになるそれぞれの有効期間を有することを特徴とする請求項１６に記載のストレージデバイス。
【請求項２０】
前記作動は、
満了した有効期間を有する第３のノード上に格納された第３のバッファを識別し、かつそれに基づいて、該第３のバッファを排除する段階、
を更に含む、
ことを特徴とする請求項１５に記載のストレージデバイス。
【請求項２１】
前記作動は、
前記第１のバッファが閉じているという通知を前記第１のノードから受信する段階と、
前記チャネルのための新しいバッファをその上に格納するための第２のノードを識別する段階と、
前記チャネルの新しいメッセージを格納するために前記第２のノード上に第２のバッファを生成する段階と、
を更に含む、
ことを特徴とする請求項１５に記載のストレージデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
〔関連出願への相互参照〕
この出願は、２０１６年３月１１日出願の米国特許出願第１５／０６７，４７６号、及び２０１５年８月７日出願の米国特許出願第１４／８２１，４８２号に対する優先権及びその利益を主張するものであり、かつそれらの全体を引用によって本明細書に組み込んでいる。
【０００２】
本明細書は、データ通信システム、特に、リアルタイムのスケーラブル発行（出版）−購読（publish-subscribe）メッセージングを実施するシステムに関する。
【背景技術】
【０００３】
発行−購読パターン（又は「ＰｕｂＳｕｂ」）は、いわゆる発行者が、トピックに対するメッセージを発行し、いわゆる購読者が、購読している特定のトピックに関するメッセージを受信するソフトウエアシステムによって実施されるデータ通信メッセージング取り決めである。トピック毎に１又は２以上の発行者が存在する可能性があり、発行者は、一般的に、どの購読者が、もし居れば、発行されたメッセージを受信するかの知識を持っていない。一部のＰｕｂＳｕｂシステムは、メッセージをキャッシュに入れず、又は小さいキャッシュを有し、購読者が、特定のトピックに対する購読予約の時点の前で発行されたメッセージを受信しない場合があることを意味する。ＰｕｂＳｕｂシステムは、メッセージ発行のサージ中又は特定のトピックに対する購読者の数が増加する時に性能不安定を受け易い可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
一般的に、本明細書に説明する主題の一態様は、それぞれのチャネル名を含む発行者から書込要求を受信するアクションであって、チャネル名によって識別されるチャネルが、１又は２以上のバッファに格納された順序付けられた複数のメッセージを含み、各バッファが、予め決められた有効期間を有し、かつそれぞれのノードに割り当てられている上記受信するアクションと、書込要求のチャネル名に基づいて第１のノードと１又は２以上のメッセージを格納するのに利用可能なストレージを有する第１のノード上に格納された第１のバッファとを識別するアクションであって、第１のバッファが、満了していない有効期間を有する上記識別するアクションと、書込許可を発行者に送信するアクションであって、書込許可が、第１のノードと第１のバッファとの識別を含み、発行者が、第１のバッファが満杯になるか又は第１のバッファの有効期間が満了するまで許可に基づいて第１のバッファに格納するために第１のノードに１又は２以上のメッセージを送信するように構成される上記送信するアクションとを含む方法に具現化することができる。
【０００５】
これら及び他の態様は、以下の特徴の１又は２以上を任意的に含むことができる。この態様は、それぞれのチャネル名とそれぞれのオフセットとを含む購読者からの読取要求を受信する段階であって、チャネル名によって識別されるチャネルが、１又は２以上のバッファに格納された順序付けられた複数のメッセージを含み、各バッファが、予め決められた有効期間を有し、かつそれぞれのノードに割り当てられる上記受信する段階と、読取要求のチャネル名とオフセットとに基づいて第２のノードと第２のノード上に格納された第２のバッファとを識別する段階と、購読者に読取許可を送信する段階であって、読取許可が、第２のノードと第２のバッファとの識別を含み、購読者が、第２のバッファの有効期間が満了するまで第２のバッファからメッセージを取得するために１又は２以上の読取要求を第２のノードに送信するように構成される上記送信する段階とを更に含むことができる。第１のノード及び第２のノードは、異なる物理コンピュータとすることができる。書込要求のチャネル名に基づいて第１のノード及び第１のバッファを識別する段階は、複数の利用可能なノード上のそれぞれのワークロードをモニタする段階と、ノードのそれぞれのワークロードを配分するために第１のノードを識別する段階とを含むことができる。第２のバッファは、チャネルのメッセージを格納するのに使用される他のバッファよりも早く満了することになるそれぞれの有効期間を有することができる。この態様は、満了した有効期間を有する第３のノード上に格納された第３のバッファを識別する段階と、それに基づいて、第３のバッファを排除する段階とを更に含むことができる。この態様は、第１のバッファが閉じているという通知を第１のノードから受信する段階と、チャネルのための新しいバッファをその上に格納するための第２のノードを識別する段階と、チャネルの新しいメッセージを格納するための第２のノード上に第２のバッファを生成する段階とを更に含むことができる。
【０００６】
本明細書に説明する主題の特定の実施形態は、以下の利点の１又は２以上を実現するように実施することができる。メッセージングシステムは、発行者と購読者間のデータ通信のための複数のチャネルを提供する。メッセージングシステムの各チャネルは、メッセージの順序付けられたシーケンスを含む。メッセージは、それぞれの待ち行列ノード上に存在する複数のバッファに格納される。各バッファは、それぞれの有効期間、例えば、限定されたかつ多くの場合に短い寿命を有する。待ち行列ノードは、例えば、仮想機械又は物理機械とすることができる。メッセージングシステムでは、チャネルマネージャは、アクティブバッファ、すなわち、満了していないそれぞれの有効期間を有するバッファのリストを各チャネルに対して維持する。チャネルマネージャは、複数の発行者からメッセージの表示を受信し、かつ対応するチャネルの各メッセージに対して、チャネルのメッセージを格納するためのバッファを識別する。チャネルマネージャはまた、満了するバッファを排除することにより、それぞれのチャネルのためのアクティブバッファのリスを更新する。チャネルマネージャは、複数の購読者から複数のチャネルのメッセージに対する要求の表示を受信することができ、かつ各要求されたチャネルのメッセージに対して、要求されたチャネルのメッセージを取り出すためにアクティブバッファを識別する。チャネルのメッセージを格納するためのバッファを識別する時に、チャネルマネージャは、メッセージングシステムの利用可能な待ち行列ノード上のそれぞれのワークロードをモニタし、かつノードのそれぞれのワークロードを配分するためにバッファをノードに割り当てる。このようにして、チャネルマネージャは、メッセージングシステム内の待ち行列ノード間の負荷の均衡を取ることができる。
【０００７】
本明細書に説明する主題の１又は２以上の実施形態の詳細は、添付図面及び以下の説明に示している。本発明の主題の他の特徴、態様、及び利点は、説明、図面、及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００８】
【図１Ａ】ＰｕｂＳｕｂ通信パターンをサポートする例示的システムを示す図である。
【図１Ｂ】例示的クライアントデバイス上のソフトウエアの機能層を示す図である。
【図２】例示的メッセージングシステムの図である。
【図３Ａ】データをストリームレットに書き込む例示的方法のデータ流れ図である。
【図３Ｂ】ストリームレットからデータを読み取る例示的方法のデータ流れ図である。
【図４Ａ】メッセージングシステムのチャネルにメッセージを発行する例示的方法のデータ流れ図である。
【図４Ｂ】メッセージングシステムのチャネルに購読予約する例示的方法のデータ流れ図である。
【図４Ｃ】メッセージングシステムのチャネルのメッセージを格納するための例示的データ構造を示す図である。
【図５】メッセージングシステムのメッセージを格納する例示的方法の流れ図である。
【発明を実施するための形態】
【０００９】
図１Ａは、ＰｕｂＳｕｂ通信パターンをサポートする例示的システム１００を示している。発行者クライアント（例えば、発行者１）は、システム１００によってメッセージを指名チャネル（例えば、「チャネル１」）に発行することができる。メッセージは、テキスト、画像コンテンツ、音声コンテンツ、マルチメディアコンテンツ、ビデオコンテンツ、及びバイナリデータなどの１又は２以上を含むあらゆるタイプの情報を含むことができる。メッセージデータの他のタイプも可能である。購読者クライアント（例えば、購読者２）は、システム１００を使用して指名チャネルを購読予約し、かつ購読要求後に又は所与の位置（例えば、メッセージ番号又は時間オフセット）から発生するメッセージの受信を開始することができる。クライアントは、発行者及び購読者の両方とすることができる。
【００１０】
構成に応じて、ＰｕｂＳｕｂシステムは、以下のように分類することができる。
・１対１（１：１）。この構成では、チャネル毎に１人の発行者及び１人の購読者がいる。典型的な使用事例は、プライベートメッセージングである。
・１対多数（１：Ｎ）。この構成では、チャネル毎に１人の発行者と複数の購読者がいる。典型的な使用事例は、放送メッセージ（例えば、株価）である。
・多数対多数（Ｍ：Ｎ）。この構成では、単一チャネルに発行する多くの発行者がいる。メッセージは、次に、複数の購読者に配信される。典型的な使用事例は、地図アプリケーションである。
【００１１】
指名チャネルを生成するのに必要な個別の作動はない。チャネルが購読された時又はメッセージがチャネルに発行された時にチャネルが暗黙的に生成される。一部の実施では、チャネル名は、名前空間によって限定することができる。名前空間は、１又は２以上のチャネル名を含む。異なる名前空間は、曖昧さを生じることなく同じチャネル名を有することができる。名前空間名は、名前空間及びチャネネームがドットによって分けられる場合のチャネル名の接頭辞とすることができる。一部の実施では、チャネル許可設定を指定する時に名前空間を使用することができる。例えば、メッセージングシステム１００は、ａｐｐ１．ｆｏｏ及びａｐｐ１．ｓｙｓｔｅｍ．ｎｏｔｉｆｉｃａｔｉｏｎｓチャネルを有することができ、ここで「ａｐｐｌ」は、名前空間の名称である。本発明のシステムは、クライアントがａｐｐｌ．ｆｏｏチャネルを購読及び発行することを可能にすることができる。しかし、クライアントは、ａｐｐｌ．ｓｙｓｔｅｍ．ｎｏｔｉｆｉｃａｔｉｏｎｓチャネルを発行しないが購読のみとすることができる。
【００１２】
図１Ｂは、例示的クライアントデバイス上のソフトウエアの機能層を示している。クライアントデバイス（例えば、クライアント１０２）は、例えば、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、スマートウォッチ、又はサーバコンピュータのようなデータ処理装置である。他のタイプのクライアントデバイスも可能である。アプリケーション層１０４は、ＰｕｂＳｕｂシステム１００に統合することになるエンド−ユーザアプリケーションを含む。メッセージング層１０６は、アプリケーション層１０４がチャネル購読、メッセージ発行、メッセージ取り出し、ユーザ認証、及びユーザ許可のようなシステム１００のサービスを利用するプログラミングインタフェースである。一部の実施では、メッセージング層１０６との間で送られるメッセージは、ＪａｖａＳｃｒｉｐｔ（登録商標）オブジェクト表記（ＪＳＯＮ）オブジェクトとして符号化される。他のメッセージ符号化方式も可能である。
【００１３】
オペレーティングシステム１０８層は、クライアント１０２のオペレーティングシステムソフトウエアを含む。様々な実施では、持続的又は非持続的接続を使用してシステム１００にメッセージを送信する及びシステム１００からメッセージを受信することができる。持続的接続は、例えば、ネットワークソケットを使用して生成することができる。ＴＣＰ／ＩＰ層１１２のようなトランスポートプロトコルは、メッセージング層１０６によって使用されるシステム１００とのトランスポート制御プロトコル／インターネットプロトコル通信を実施し、接続を通じてシステム１００にメッセージを送信する。例えば、ユーザデータグラムプロトコル（ＵＤＰ）を含む他の通信プロトコルも可能である。更に別の実施では、任意的なトランスポート層セキュリティ（ＴＬＳ）層１１０を利用してメッセージの機密性を保証することができる。
【００１４】
図２は、例示的メッセージングシステム１００の図である。システム１００は、ＰｕｂＳｕｂ通信パターンを実施するための機能性を提供する。本発明のシステムは、例えば、１又は２以上の地理的な場所で１又は２以上のデータセンター１２２に配備することができるソフトウエア構成要素及びストレージを含む。本発明のシステムは、ＭＸノード（例えば、ＭＸノード又は多重化ノード２０２、２０４、及び２０６）、Ｑノード（例えば、Ｑノード又は待ち行列ノード２０８、２１０、及び２１２）、１又は２以上のチャネルマネージャノード（例えば、チャネルマネージャ２１４、２１５）、及び任意的に１又は２以上のＣノード（例えば、Ｃノード又はキャッシュノード２２０及び２２２）を含む。各ノードは、仮想機械又は物理機械（例えば、データ処理装置）で実行することができる。各ＭＸノードは、外部ネットワーク２１６を通じた１又は２以上の発行者及び／又は購読者接続の終端ポイントとして機能する。ＭＸノード、Ｑノード、Ｃノード、及びチャネルマネージャ間の内部通信は、例えば、内部ネットワーク２１８を通じて行われる。例示的に、ＭＸノード２０４をクライアント１０２からの購読者接続の終端とすることができる。各Ｑノードは、ＭＸノードによって消費するチャネルデータをバッファに入れる。チャネルに発行されたメッセージの順序付けられたシーケンスが論理的チャネルストリームである。例えば、３つのクライアントが所与のチャネルにメッセージを発行する場合に、クライアントによって発行された複合メッセージは、チャネルストリームを含む。メッセージは、チャネルストリーム内でクライアントによる発行の時間により、ＭＸノードによる受信の時間により、又はＱノードによる受信の時間によって順序付けることができる。チャネルストリームのメッセージを順序付けるための他の方法も可能である。１よりも多いメッセージが順序の同じ位置に割り当てられる場合に、順序の後ろのシーケンスを有するメッセージの１つを（例えば、ランダムに）選択することができる。各チャネルマネージャノードは、チャネルストリームをいわゆるストリームレットに分割することによってＱノードの負荷を管理する役割を果たす。ストリームレットは以下に詳しく説明する。任意的Ｃノードは、キャッシュ及びＱノードからの負荷除去を提供する。
【００１５】
例示的メッセージングシステム１００では、１又は２以上のクライアントデバイス（発行者及び／又は購読者）は、ＭＸノード（ＭＸ２０４など）へのそれぞれの持続的接続（例えば、ＴＣＰ接続）を設定する。ＭＸノードは、これらの接続の終端ポイントとして機能する。例えば、これらの接続によって運ばれた外部メッセージ（例えば、それぞれのクライアントデバイスとＭＸノード間）は、外部プロトコル（例えば、ＪＳＯＮ）に基づいて符号化することができる。ＭＸノードは、外部プロトコルを終了して外部メッセージを内部通信に翻訳し、逆も同様である。ＭＸノードは、クライアントの代わりにストリームレットを発行及び購読する。従って、ＭＸノードは、同じチャネルを購読又は発行するクライアントデバイスの要求を多重化及び融合することができ、従って、１つずつの代わりに１つとして複数のクライアントデバイスを表している。
【００１６】
例示的メッセージングシステム１００では、Ｑノード（例えば、Ｑノード２０８）は、１又は２以上のチャネルストリームの１又は２以上のストリームレットを格納することができる。ストリームレットは、チャネルストリームの一部分のためのデータバッファである。ストリームレットは、そのストレージが満杯である時に書込に対して閉じることになる。ストリームレットは、ストリームレットの有効期間（ＴＴＬ）が満了した時に読取及び書込に対して閉じて割り当てを解除する。例示的に、ストリームレットは、１ＭＢの最大サイズ及び３分のＴＴＬを有することができる。異なるチャネルが異なるＴＴＬによって制限されるストリームレットを有することができる。例えば、１つのチャネル内のストリームレットは、３分まで存在することができる一方、別のチャネル内のストリームレットは、１０分まで存在することができる。様々な実施では、ストリームレットは、Ｑノードで実行されるコンピュータ処理に対応する。コンピュータ処理は、ストリームレットのＴＴＬが満了した後に終了することができ、従って、例えば、Ｑノードに戻るコンピュータリソース（ストリームレット）を解放する。
【００１７】
クライアントデバイスから発行要求を受信した時に、ＭＸノード（例えば、ＭＸ２０４）は、チャネルマネージャ（例えば、チャネルマネージャ２１４）に要求してストリームレットへのアクセスを許可し、発行されるメッセージを書き込む。しかし、ＭＸノードがチャネル内のストリームレットへの書込アクセスを予め許可される（かつチャネルが書込に対して閉じていない）場合に、ＭＸノードは、ストリームレットにアクセスする許可を要求する必要なくこのストリームレットにメッセージを書き込むことができることに注意されたい。メッセージがチャネル内のストリームレットに書き込まれた状態で、メッセージは、ＭＸノードによって読み取られ、このチャネルの購読者に提供することができる。
【００１８】
同様に、クライアントデバイスからチャネル購読要求を受信した時に、ＭＸノードは、チャネル内のストリームレットへのアクセスの許可をチャネルマネージャに要求してメッセージを読み取る。ＭＸノードがチャネル内のストリームレットへの読取アクセスを予め許可されている（かつチャネルのＴＴＬが読取に対して閉じていない）場合に、ＭＸノードは、ストリームレットにアクセスする許可を要求する必要なくストリームレットからメッセージを読み取ることができる。読取メッセージは、チャネルに購読予約したクライアントデバイスに転送することができる。様々な実施では、ストリームレットから読み取られたメッセージは、ＭＸノードによってキャッシュに入れられ、それによってＭＸノードは、ストリームレットから読み取るのに必要な時間数を低減することができる。
【００１９】
例示的に、ＭＸノードは、ＭＸノードが特定のチャネル内のストリームレットを格納する特定のＱノードのストリームレットにデータのブロックを格納することを可能にするチャネルマネージャからの許可を要求することができる。例示的ストリームレット許可要求及び許可データ構造は以下の通りである。
0006678742.tif 000002
【００２０】
ＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｑｕｅｓｔデータ構造は、ストリームｃｈａｎｎｅｌの名前及びＭＸノードがストリームレットからの読取又はストリームレットへの書込を意図するか否かを示すモードを格納する。ＭＸノードは、ＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｑｕｅｓｔをチャネルマネージャノードに送信する。チャネルマネージャノードは、相応にＭＸノードにＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｑｕｅｓｔデータ構造を送信する。ＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｓｐｏｎｓｅは、ストリームレットの識別子（ｓｔｒｅａｍｌｅｔ−ｉｄ）、ストリームレットの最大サイズ（ｌｉｍｉｔ−ｓｉｚｅ）、ストリームレットが格納することができるメッセージの最大数（ｌｉｍｉｔ−ｍｓｇｓ）、ＴＴＬ（ｌｉｍｉｔ−ｌｉｆｅ）、及びストリームレットが存在するＱノードの識別子（ｑ−ｎｏｄｅ）を含有する。ＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｑｕｅｓｔ及びＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｓｐｏｎｓｅはまた、ストリームレットから読み取るためのストリームレットの位置（又はチャネルの位置）を示す位置フィールドを有することができる。
【００２１】
許可は、ストリームレットが閉じた状態で無効になる。例えば、ストリームレットは、ストリームレットのＴＴＬが満了した状態で読取及び書込に対して閉じ、ストリームレットのストレージが満杯の時はストリームレットが書込に対して閉じる。許可が無効になった時に、ＭＸノードは、ストリームレットから読み取る又はストリームレットに書き込むためのチャネルマネージャからの新しい許可を要求することができる。新しい許可は、異なるストリームレットを参照することになり、かつ新しいストリームレットが存在する場所に応じて同じか又は異なるＱノードを意味することになる。
【００２２】
図３Ａは、様々な実施形態でデータをストリームレットに書き込む例示的方法のデータ流れ図である。図３Ａでは、ストリームレットに書き込むためのＭＸノード（例えば、ＭＸ２０２）要求が、上述のようにチャネルマネージャ（例えば、チャネルマネージャ２１４）によって許可された時に、ＭＸノードは、チャネルマネージャ（３０２）から受信した許可応答で識別されたＱノードとの送信制御プロトコル（ＴＣＰ）接続を確立する。ストリームレットは、複数の書込許可（例えば、複数の発行者クライアントによって発行されたメッセージに対する）によって同時に書き込むことができる。ＭＸノードとＱノード間の接続プロトコルの他のタイプも可能である。
【００２３】
ＭＸノードは、次に、ＭＸノードがＱノードに書き込みたいストリームレットの識別子を備えた準備−発行メッセージを送信する（３０４）。ストリームレット識別子及びＱノード識別子は、上述のように書込許可でチャネルマネージャによって提供することができる。Ｑノードは、識別されたストリームレットのハンドラ処理３０１（例えば、Ｑノードで実行されるコンピュータ処理）にメッセージを渡す（３０６）。ハンドラ処理は、ＭＸノードに肯定応答を送信することができる（３０８）。肯定応答を受信した後に、ＭＸノードは、識別されたストリームレットに受信したデータを格納するハンドラ処理へのメッセージの書込（発行）（例えば、３１０、３１２、３１４、及び３１８）を開始する。ハンドラ処理はまた、受信したデータの肯定応答（３１６、３２０）をＭＸノードに送信することができる。一部の実施では、肯定応答は、抱き合わせ又は累積的とすることができる。例えば、ハンドラ処理は、予め決められたデータ量が受信される毎に（例えば、１００メッセージが受信される毎に）、又は予め決められた時間毎に（例えば、１ミリ秒毎に）ＭＸノードに肯定応答を送信することができる。ネーグルのアルゴリズムのような他の肯定応答スケジューリングアルゴリズムを使用することもできる。
【００２４】
ストリームレットが、発行されたデータをそれ以上受け入れられない場合（例えば、ストリームレットが満杯の時）、ハンドラ処理は、問題を示す否定応答（ＮＡＫ）メッセージ（３３０）、次に、ＥＯＦ（ファイルの終わり）メッセージ（３３２）を送信する。従って、ハンドラ処理は、発行許可のためのＭＸノードとのアソシエーションを閉じる。ＭＸノードが格納する追加のメッセージを有する場合に、ＭＸノードは、チャネルマネージャから別のストリームレットの書込許可を要求することができる。
【００２５】
図３Ｂは、様々な実施形態におけるストリームレットからデータを読み取る例示的方法のデータ流れ図である。図３Ｂでは、ＭＸノード（例えば、ＭＸ２０２）は、チャネルマネージャ（例えば、チャネルマネージャ２１４）に特定のメッセージから始まる特定のチャネル又はチャネルの時間オフセットを読み取るための要求を送信する。チャネルマネージャは、特定のメッセージを含有するストリームレットの識別子、特定のメッセージに対応するストリームレットにおける位置、及び特定のストリームレットを含有するＱノード（例えば、Ｑノード２０８）の識別子を含む読取許可をＭＸノードに戻す。ＭＸノードは、ＱノードとのＴＣＰ接続を確立する（３５２）。ＭＸノードとＱノード間の接続プロトコルの他のタイプも可能である。
【００２６】
ＭＸノードは、ストリームレットの識別子（Ｑノード内）及びＭＸノードが読み取りたいストリームレットの位置を備えた購読メッセージをＱノードに送信する（３５６）。Ｑノードは、購読メッセージをストリームレットのハンドラ処理３５１に渡す（３５６）。ハンドラ処理は、ＭＸノードに肯定応答を送信することができる（３５８）。ハンドラ処理は、ストリームレットの位置で開始されるメッセージ（３６０、３６４、３６６）をＭＸノードに送信する。一部の実施では、ハンドラ処理は、ストリームレットのメッセージの全てをＭＸノードに送信することができる。特定のストリームレット内の最後のメッセージを送信した後に、ハンドラ処理は、最後のメッセージの通知をＭＸノードに送信することができる。ＭＸノードは、特定のチャネル内の次のメッセージを含有する別のストリームレットに対する別の要求をチャネルマネージャに送信することができる。
【００２７】
特定のストリームレットが閉じた場合（例えば、特定のストリームレットのＴＴＬが満了した後）、ハンドラ処理は、非購読メッセージ（３９０）、次に、ＥＯＦメッセージ（３９２）を送信して読取許可のためのＭＸノードとのアソシエーションを閉じることができる。ＭＸノードは、ＭＸノードが特定のチャネル内のメッセージのために別のストリームレットに移る（例えば、チャネルマネージャによって示されたように）時にハンドラ処理とのアソシエーションを閉じることができる。ＭＸノードは、ＭＸノードが、対応するクライアントデバイスから非購読メッセージを受信した場合に、ハンドラ処理とのアソシエーションを閉じることができる。
【００２８】
様々な実施では、ストリームレットは、同じ時間インスタンスに書き込み、かつ読み取ることができる。例えば、同じ時間インスタンスに有効読取許可及び有効書込許可を存在させることができる。様々な実施では、複数の読取許可（例えば、複数の発行者クライアントによって購読されるチャネルに対する）によって同時にストリームレットを読み取ることができる。ストリームレットのハンドラ処理は、例えば、到着時間に基づいて同時書込許可からのメッセージを順序付けし、その順序に基づいてメッセージを格納することができる。従って、複数の発行者クライアントからチャネルに発行されたメッセージは、チャネル内のストリームレットにシリアル化して格納することができる。
【００２９】
メッセージングシステム１００では、１又は２以上のＣノード（例えば、Ｃノード２２０）は、１又は２以上のＱノードからのデータ転送をアンロードすることができる。例えば、特定のチャネルのためのストリームレットをＱノードから要求する多くのＭＸノードが存在する場合に、ストリームレットをアンロードして１又は２以上のＣノードをキャッシュに入れることができる。ＭＸノード（例えば、チャネルマネージャから読取許可によって命令される）は、代わりにＣノードからストリームレットを読み取ることができる。
【００３０】
上述のように、メッセージングシステム１００内のチャネルのためのメッセージは、チャネルストリームで順序付けされる。チャネルマネージャ（例えば、チャネルマネージャ２１４）は、それぞれのＱノードに各々が存在する固定サイズストリームレットにチャネルストリームを分割する。従って、チャネルストリームの格納は、多くのＱノード間で共有することができ、各Ｑノードは、チャネルストリームの一部分（１又は２以上のストリームレット）を格納する。特に、ストリームレットは、Ｑノード上のコンピュータ処理に関連付けられたレジスタ及び動的メモリ要素に格納することができ、従って、ハードディスクのような持続性低速ストレージデバイスにアクセスする必要性を回避する。これは高速のメッセージアクセスをもたらす。チャネルマネージャは、Ｑノードのそれぞれのワークロードをモニタし、いかなる１つのＱノードの過負荷も回避する方法でストリームレットを割り当てることにより、メッセージングシステム１００のＱノード間の負荷の均衡を取ることができる。
【００３１】
様々な実施では、チャネルマネージャは、各アクティブストリームレット、ストリームレットが存在するそれぞれのＱノード、及びストリームレットの第１のメッセージの位置の識別、及びストリームレットが書込に対して閉じているか否かを識別するリストを維持する。一部の実施では、Ｑノードは、満杯であるために又はストリームレットのＴＴＬが満了した時にストリームレットが閉じていることをストリームレットに発行しているチャネルマネージャ及びあらゆるＭＸノードに通知する。ストリームレットが閉じている時に、ＭＸノードがストリームレットからメッセージの取り出しを継続することができるようにストリームレットのＴＴＬが満了するまでアクティブストリームレットのチャネルマネージャのリストにストリームレットが残る。
【００３２】
ＭＸノードが所与のチャネルに対する書込許可を要求して書き込むことができるチャネルのためのストリームレットがない時に、チャネルマネージャは、Ｑノードの１つに新しいストリームレットを割り当て、ストリームレットのアイデンティティ及びＳｔｒｅａｍｌｅｔＧｒａｎｔのＱノードを戻す。そうでなければ、チャネルマネージャは、ストリームレット及び対応するＱノードをＳｔｒｅａｍｌｅｔＧｒａｎｔに書き込むために現在開いているというアイデンティティを戻す。ＭＸノードは、ストリームレットが満杯になるか又はストリームレットのＴＴＬが満了するまでストリームレットにメッセージを発行することができ、この後で新しいストリームレットをチャネルマネージャによって割り当てることができる。
【００３３】
ＭＸノードが所与のチャネルの読取許可を要求して読み取ることができるチャネルのためのストリームレットがない時に、チャネルマネージャは、Ｑノードの１つに新しいストリームレットを割り当て、ストリームレットのアイデンティティ及びＳｔｒｅａｍｌｅｔＧｒａｎｔのＱノードを戻す。そうでなければ、チャネルマネージャは、ストリームレットのアイデンティティ及びＭＸノードが読み取りたい位置を含有するＱノードを戻す。Ｑノードは、送信するストリームレットのメッセージがなくなるまで指定された位置で始まるストリームレットからＭＸノードへのメッセージの送信を開始することができる。新しいメッセージがストリームレットに発行された時に、このストリームレットを購読しているＭＸノードは、新しいメッセージを受信する。ストリームレットのＴＴＬが満了した場合に、ハンドラ３５１は、ＥＯＦメッセージ（３９２）をストリームレットを購読するいずれのＭＸノードにも送信する。
【００３４】
図２に関して上述したように、メッセージングシステム１００は、複数のチャネルマネージャ（例えば、チャネルマネージャ２１４、２１５）を含むことができる。複数のチャネルマネージャは、弾力性を提供して単一障害点を回避する。例えば、１つのチャネルマネージャは、それが維持するストリームレットと現在の許可のリストとを別の「スレーブ」チャネルマネージャに複製することができる。別の例として、複数のチャネルマネージャは、Ｐａｘｏｓ又はＲａｆｔプロトコルのような分散コンセンサスプロトコルを使用して複数のチャネルマネージャ間で作動を調整することができる。
【００３５】
図４Ａは、メッセージをメッセージングシステムのチャネルに発行する例示的方法のデータ流れ図である。図４Ａでは、発行者（例えば、発行者クライアント４０２、４０４、４０６）が、図２に関して上述したメッセージングシステム１００にメッセージを発行する。例えば、発行者４０２は、それぞれに接続４１１を設定して発行要求をＭＸノード２０２に送信する。発行者４０４はそれぞれ接続４１３を設定して、発行要求をＭＸノード２０６に送信する。発行者４０６はそれぞれ接続４１５を設定して、発行要求をＭＸ２０４に送信する。従って、ＭＸノードは、内部ネットワーク２１８を通じてメッセージングシステム１００のチャネルマネージャ（例えば、チャネルマネージャ２１４）及び１又は２以上のＱノード（例えば、Ｑノード２１２及び２０８）と通信することができる（４１７）。
【００３６】
例示的に、発行者からＭＸノードへの各発行要求（例えば、ＪＳＯＮ鍵／値対）は、チャネル名及びメッセージを含む。ＭＸノード（例えば、ＭＸ２０２）は、発行要求のチャネル名（例えば、「ｆｏｏ」）に基づいてメッセージングシステム１００の異なるチャネルに発行要求のメッセージを割り当てることができる。ＭＸノードは、チャネルマネージャ２１４によって割り当てられたチャネルを確認することができる。チャネル（購読要求で指定）がメッセージングシステム１００に存在しない場合に、チャネルマネージャは、メッセージングシステム１００の新しいチャネルを生成及び維持することができる。例えば、チャネルマネージャは、チャネルのストリームの各アクティブストリームレット、ストリームレットが存在するそれぞれのＱノード、及び上述のようにストリームレットの最初及び最後のメッセージの位置の識別を識別するリストを維持することによって新しいチャネルを維持することができる。
【００３７】
特定のチャネルのメッセージに対して、ＭＸノードは、メッセージングシステム１００の１又は２以上のバッファ又はストリームレットにメッセージを格納することができる。例えば、ＭＸノード２０２は、発行者４０２からメッセージＭ１１、Ｍ１２、Ｍ１３、及びＭ１４をチャネルｆｏｏに発行する要求を受信する。ＭＸノード２０６は、発行者４０４からメッセージＭ７８及びＭ７９をチャネルｆｏｏに発行する要求を受信する。ＭＸノード２０４は、発行者４０６からメッセージＭ２６、Ｍ２７、Ｍ２８、Ｍ２９、Ｍ３０、及びＭ３１をチャネルｆｏｏに発行する要求を受信する。
【００３８】
ＭＸノードは、チャネルｆｏｏのメッセージを格納するための１又は２以上のストリームレットを識別することができる。上述のように、各ＭＸノードは、ＭＸノードがチャネルｆｏｏのストリームレットにメッセージを格納することを可能にするチャネルマネージャ２１４からの書込許可を要求することができる。例えば、ＭＸノード２０２は、メッセージＭ１１、Ｍ１２、Ｍ１３、及びＭ１４をＱノード２１２のストリームレット４１０１に書き込む許可をチャネルマネージャ２１４から受信する。ＭＸノード２０６は、チャネルマネージャ２１４からメッセージＭ７８及びＭ７９をストリームレット４１０１に書き込む許可を受信する。ここでストリームレット４１０１は、チャネルｆｏｏのメッセージを格納するチャネルストリーム４３０のストリームレットのシーケンスの最後の１つである（この瞬間では）。ストリームレット４１０１は、ストリームレット４１０１に以前に格納されたチャネルｆｏｏのメッセージ（４２１）を有するが、開いており、すなわち、ストリームレット４１０１は、メッセージを格納する空間を有し、ストリームレットのＴＴＬは満了していない。
【００３９】
ＭＸノード２０２は、各メッセージがＭＸノード２０２によって受信されたそれぞれの時間に基づいて、例えば、Ｍ１１、Ｍ１３、Ｍ１４、Ｍ１２（４２２）にチャネルｆｏｏのメッセージを配置して、ストリームレット４１０１に配置された通りに受信したメッセージを格納することができる。すなわち、ＭＸノード２０２は、まずＭ１１を受信し、次にＭ１３、Ｍ１４、及びＭ１２を受信する。同様に、ＭＸノード２０６は、各メッセージがＭＸノード２０６によって受信されたそれぞれの時間に基づいて、例えば、Ｍ７８、Ｍ７９でチャネルｆｏｏのメッセージを配置して（４２３）、ストリームレット４１０１に配置された通りに受信したメッセージを格納することができる。
【００４０】
ＭＸノード２０２（又はＭＸノード２０６）は、例えば、図３Ａに関して上述したストリームレットにデータを書き込む方法を使用して、受信したメッセージを格納することができる。様々な実施では、バッファに入れられたメッセージが予め決められたサイズ（例えば、１００メッセージ）に達した時に、又は予め決められた時間（例えば、５０ミリ秒）が経過した時に、ＭＸノード２０２（又はＭＸノード２０６）は、チャネルｆｏｏの受信したメッセージをバッファに入れ（例えば、ローカルデータバッファに）、チャネルｆｏｏのストリームレット（例えば、ストリームレット４１０１）に受信したメッセージを格納することができる。すなわち、ＭＸノード２０２は、一度に又は５０ミリ秒毎にストリームレットに１００メッセージを格納することができる。ネーグルのアルゴリズムのような他の肯定応答スケジューリングアルゴリズムを使用することもできる。
【００４１】
様々な実施では、Ｑノード２１２（例えば、ハンドラ処理）は、ＭＸノード２０２及びＭＸノード２０６によって配置された順序でストリームレット４１０１にチャネルｆｏｏのメッセージを格納する。Ｑノード２１２は、Ｑノード２１２がメッセージを受信した順序でストリームレット４１０１にチャネルｆｏｏのメッセージを格納する。例えば、Ｑノード２１２は、まずメッセージＭ７８を（ＭＸノード２０６から）受信し、続いてメッセージＭ１１及びＭ１３（ＭＸノード２０２から）、Ｍ７９（ＭＸノード２０６から）、Ｍ１４、Ｍ１２、及びＭ２６（ＭＸノード２０２から）を受信すると仮定する。Ｑノード２１２は、ストリームレット４１０１に以前に格納されたメッセージ４２１の直後に、受信した順序でメッセージ、例えば、Ｍ７８、Ｍ１１、Ｍ１３、Ｍ７９、Ｍ１４、及びＭ１２をストリームレット４１０１に格納する。従って、複数の発行者（例えば、４０２、４０４）からチャネルｆｏｏに発行されたメッセージは、特定の順序でシリアル化してチャネルｆｏｏのストリームレット４１０１に格納することができる。チャネルＦｏｏを購読する様々な購読者は、図４Ｂに関して詳しく説明するように同じ特定の順序でチャネルｆｏｏのメッセージを受信する。
【００４２】
図４Ａの例では、メッセージＭ１２がストリームレット４１０１に格納された後の時間インスタンスで、ＭＸノード２０４は、チャネルｆｏｏに書き込む許可をチャネルマネージャ２１４から要求する。チャネルマネージャ２１４は、ストリームレット４１０１が書込に対して開いている場合に、ストリームレット４１０１にメッセージを書き込む許可をＭＸノード２０４に提供する。ＭＸノード２０４は、各メッセージがＭＸノード２０４によって受信されたそれぞれの時間に基づいて、チャネルのためのメッセージを配置し、例えば、Ｍ２６、Ｍ２７、Ｍ３１、Ｍ２９、Ｍ３０、Ｍ２８（４２４）、チャネルｆｏｏに配置された通りにメッセージを格納する。
【００４３】
例示的に、メッセージＭ２６は、ストリームレット４１０１の最後の利用可能な位置に格納されると仮定する。ストリームレット４１０１が現在満杯である場合に、Ｑノード２１２は、ＮＡＫメッセージをＭＸノード２０４に、次にＥＯＦメッセージを送信し、図３Ａに関して上述したように書込許可のためのＭＸノード２０４とのアソシエーションを閉じる。ＭＸノード２０４は、チャネルｆｏｏに対する追加のメッセージ（例えば、Ｍ２７、Ｍ３１）に対するチャネルマネージャ２１４からの別の書込許可を要求する。
【００４４】
チャネルマネージャ２１４は、それぞれのワークロードに対するメッセージングシステム１００における利用可能なＱノード（例えば、各Ｑノード上に存在するストリームレットの数）をモニタすることができる。チャネルマネージャ２１４は、過負荷（例えば、多すぎるストリームレット又は多すぎる読取又は書込許可）をいずれの所与のＱノードに対しても防ぐことができるようにＭＸノード２０４からの書込要求にストリームレットを割り当てることができる。例えば、チャネルマネージャ２１４は、メッセージングシステム１００における少なくとも負荷Ｑノードを識別し、ＭＸノード２０４からの書込要求に対する最も負荷のないＱノードで新しいストリームレットを割り当てることができる。図４Ａの例では、チャネルマネージャ２１４は、Ｑノード２０８で新しいストリームレット４１０２を割り当て、チャネルｆｏｏのメッセージをストリームレット４１０２に書き込むための書込許可をＭＸノード２０４に提供する。図４Ａに示すように、Ｑノードは、ＭＸノード２０４によって配置された順序Ｍ２７、Ｍ３１、Ｍ２９、Ｍ３０、及びＭ２８でＭＸノード２０４からのメッセージをストリームレット４１０２に格納する（この瞬間のストリームレット４１０２に対して他の同時書込許可がないと仮定する）。
【００４５】
チャネルマネージャ２１４が、チャネル（例えば、ｆｏｏ）に書き込むためのＭＸノード（例えば、ＭＸノード２０４）からの許可の要求に新しいストリームレット（例えば、ストリームレット４１０２）を割り当てた時に、チャネルマネージャ２１４は、チャネル内のストリームに既にある他のストリームレットのＴＴＬ後に満了するＴＴＬをストリームレットに割り当てる。例えば、チャネルマネージャ２１４は、ストリームレットを割り当てる時に、チャネルｆｏｏのストリームの各ストリームレットに３分のＴＴＬを割り当てることができる。すなわち、各ストリームレットは、チャネルマネージャ２１４によって割り当てられた（生成された）後に３分で満了する。新しいストリームレットは、前のストリームレットが閉じた（例えば、完全に満たされるか又は満了した）後に割り当てられるので、チャネルｆｏｏのストリームは、従って、この前のストリームレットが満了した後に各々が連続して満了するストリームレットを含む。例えば、図４Ａのチャネルｆｏｏの例示的ストリーム４３０に示すように、ストリームレット４０９８及び４０９８の前のストリームレットは、満了している（破線のグレイアウトボックスによって指示）。これらの満了したストリームレットに格納されたメッセージは、チャネルｆｏｏの購読者にとって読み取ることができない。ストリームレット４０９９、４１００、４１０１、及び４１０２は、アクティブである（満了していない）。ストリームレット４０９９、４１００、及び４１０１は、書込に対して閉じているが、読取には利用可能である。メッセージＭ２８がストリームレット４１０２に格納された瞬間に、ストリームレット４１０２は、読取及び書込に利用可能である。後の時間に、ストリームレット４０９９は満了し、次に、ストリームレット４１００、４１０１などが続く。
【００４６】
図４Ｂは、メッセージングシステムのチャネルを購読する例示的方法のデータ流れ図である。図４Ｂでは、購読者４８０は、メッセージングシステム１００のＭＸノード４６１との接続４６２を設定する。購読者４８２は、ＭＸノード４６１との接続４６３を設定する。購読者４８５は、メッセージングシステム１００のＭＸノード４６８との接続４６７を設定する。ここでＭＸノード４６１及び４６８は、内部ネットワーク２１８を通じてメッセージングシステム１００のチャネルマネージャ２１４及び１又は２以上のＱノードとそれぞれに通信することができる（４６４）。
【００４７】
購読者（例えば、購読者４８０）は、接続を確立して（例えば、４６２）チャネルｆｏｏのメッセージを購読する要求をＭＸノード（例えば、ＭＸノード４６１）に送信することによってメッセージングシステム１００のチャネルｆｏｏを購読することができる。要求（例えば、ＪＳＯＮ鍵／値対）は、チャネル名「ｆｏｏ」を含むことができる。購読要求を受信した時に、ＭＸノード４６１は、チャネルｆｏｏのチャネルストリームのストリームレットに対する読取許可要求をチャネルマネージャ２１４に送信することができる。
【００４８】
例示的に、現在の瞬間にチャネルｆｏｏのチャネルストリーム４３１が図４Ｂに示すようにアクティブストリームレット４１０２、４１０３、及び４１０４を含むと仮定する。ストリームレット４１０２及び４１０３は各々満杯である。ストリームレット４１０４は、位置４７７３１に格納された最後のメッセージ（現在の瞬間で）を含むチャネルｆｏｏのメッセージを格納する。ストリームレットのそれぞれのＴＴＬが満了した場合に、ストリームレット４１０１及び４１０１の前のストリームレットは無効である。ストリームレット４１０１が有効でなく、ストリームレットのＴＴＬが満了したので、ストリームレット４１０１に格納され、図４Ａに関して上述したメッセージＭ７８、Ｍ１１、Ｍ１３、Ｍ７９、Ｍ１４、Ｍ１２、及びＭ２６は、チャネルｆｏｏの購読者には利用できないことに注意されたい。上述のように、チャネルｆｏｏのストリームの各ストリームレットは、３分のＴＴＬを有し、従って、現在の時間から３分以内にチャネルｆｏｏに発行されたメッセージ（チャネルｆｏｏのストリームレットに格納された）だけがチャネルｆｏｏの購読者に対して利用可能である。
【００４９】
例えば、購読者４８０がチャネルｆｏｏの新しい購読者である時に、ＭＸノード４６１は、チャネルｆｏｏの全ての利用可能なメッセージに対する読取許可を要求することができる。要求に基づいて、チャネルマネージャ２１４は、ＭＸノード４６１にチャネルｆｏｏのアクティブストリームレットの最も早いストリームレット（すなわち、アクティブストリームレットのシーケンスの最初）であるストリームレット４１０２（Ｑノード２０８上の）の読取許可を提供する。ＭＸノード４６１は、例えば、図３Ｂに関して上述したストリームレットからデータを読み取る方法を使用してＱノード２０８からストリームレット４１０２のメッセージを取り出すことができる。ストリームレット４１０２から取り出されたメッセージは、ストリームレット４１０２に格納された同じ順序を維持することに注意されたい。様々な実施では、ストリームレット４１０２に格納されたメッセージをＭＸノード４６１に提供する時に、バッファメッセージが予め決められたサイズ（例えば、２００メッセージ）に達し、又は予め決められた時間（例えば、５０ミリ秒）が経過した時に、Ｑノード２０８は、メッセージをバッファに入れ（例えば、ローカルデータバッファに）、メッセージをＭＸノード４６１に送信する。すなわち、Ｑノード２０８は、チャネルｆｏｏのメッセージ（ストリームレット４１０２からの）を一度に又は５０ミリ秒毎に２００メッセージでＭＸノード４６１に送信することができる。ネーグルのアルゴリズムのような他の肯定応答スケジューリングアルゴリズムを使用することができる。
【００５０】
ストリームレット４１０２の最後のメッセージを受信した後に、ＭＸノード４６１は、肯定応答をＱノード２０８に送信し、チャネルマネージャ２１４にチャネルｆｏｏのチャネルストリームの次のストリームレットに対する別の要求（例えば、読取許可のための）を送信することができる。要求に基づいて、チャネルマネージャ２１４は、チャネルｆｏｏのアクティブストリームレットのシーケンスにおけるストリームレット４１０２に論理的に従うストリームレット４１０３（Ｑノード４７２）への読取許可をＭＸノード４６１に提供する。ＭＸノード４６１は、例えば、ストリームレット４１０３に格納された最後のメッセージを取り出すまで、図３Ｂに関して上述したストリームレットからデータを読み取る方法を使用して、ストリームレット４０１３に格納されたメッセージを取り出すことができる。ＭＸノード４６１は、次のストリームレット４１０４（Ｑノード４７４）のメッセージに対する読取許可のための別の要求をチャネルマネージャ２１４に送信することができる。読取許可を受信した後に、位置４７７３１の最後のメッセージまで、ＭＸノード４６１は、ストリームレット４０１４に格納されたチャネルｆｏｏのメッセージを取り出す。同様に、ＭＸノード４６８は、ストリームレット４１０２、４１０３、及び４１０４からメッセージを取り出して（図４Ｂの破線で図示）メッセージを購読者４８５に提供することができる。
【００５１】
ＭＸノード４６１は、Ｑノード２０８、４７２、又は４７４からメッセージを受信しながら、（接続４６２を通じて）購読者４８０にチャネルｆｏｏの取り出されたメッセージを送信することができる。様々な実施では、ＭＸノード４６１は、ローカルバッファに取り出したメッセージを格納することができる。従って、取り出されたメッセージは、他の購読者がチャネルｆｏｏを購読してチャネルのメッセージを要求した時に、別の購読者（例えば、購読者４８２）に提供することができる。ＭＸノード４６１は、予め決められた期間を超えた発行の時間を各々が有するローカルバッファに格納されたメッセージを排除することができる。例えば、ＭＸノード４６１は、３分を超える発行のそれぞれの時間を有するメッセージ（ローカルバッファに格納された）を排除することができる。一部の実施では、所与の瞬間に、チャネルのストリームから取り出されたメッセージは、既に満了したそれぞれの有効期間を有するメッセージをストリームレットに含まないので、ＭＸノード４６１のローカルバッファにメッセージを維持するための予め決められた期間は、チャネルｆｏｏのチャネルストリームにおけるストリームレットの有効期間持続時間に同じか又は類似とすることができる。
【００５２】
チャネルストリーム４３１から取り出され（ＭＸノード４６１により）購読者４８０に送信されたメッセージは、メッセージがチャネルストリームに格納されたのと同じ順序で配置される。例えば、チャネルｆｏｏに発行されたメッセージは、特定の順序（例えば、Ｍ２７、Ｍ３１、Ｍ２９、Ｍ３０など）でシリアル化されてストリームレット４１０２に格納され、ストリームレット４１０３及びストリームレット４１０４に続けて格納される。ＭＸノードは、チャネルストリーム４３１からメッセージを取り出して、取り出したメッセージをメッセージがチャネルストリームに格納されたのと同じ順序Ｍ２７、Ｍ３１、Ｍ２９、Ｍ３０で、続いてストリームレット４１０３の順序付けられたメッセージ及びストリームレット４１０４の順序付けられたメッセージで購読者４８０に提供する。
【００５３】
チャネルストリーム４３１の全ての利用可能なメッセージを取り出す代わりに、ＭＸノード４６１は、特定の位置、例えば、位置４７２０２のメッセージから始まるチャネルストリーム４３１に格納されたメッセージに対する読取許可を要求することができる。例えば、位置４７２０２は、購読者４８０が（メッセージングシステム１００のＭＸノード４６１又は別のＭＸノードへの接続を通じて）チャネルｆｏｏに最後に購読した時のより早期の時間インスタンス（例えば、現在の時間の１０秒前）に対応することができる。ＭＸノード４６１は、位置４７２０２で開始されるメッセージに対する読取許可の要求をチャネルマネージャ２１４に送信することができる。要求に基づいて、チャネルマネージャ２１４は、ストリームレット４１０４（Ｑノード４７４）への読取許可及びチャネルストリーム位置４７２０２に対応するストリームレット４１０４の位置をＭＸノード４６１に提供する。ＭＸノード４６１は、提供された位置から開始されるストリームレット４１０４のメッセージを取り出して、取り出したメッセージを購読者４８０に送信することができる。
【００５４】
図４Ａ及び４Ｂに関して上述したように、チャネルｆｏｏに発行されたメッセージは、特定の順序でチャネルのストリームレットにシリアル化及び格納される。チャネルマネージャ２１４は、ストリームレットのそれぞれの有効期間を通じて生成された場合にストリームレットの順序付けられたシーケンスを維持する。ＭＸノード（例えば、ＭＸノード４６１又はＭＸノード４６８）によってストリームレットから取り出され購読者に提供されたメッセージは、一部の実施では、メッセージがストリームレットの順序付けられたシーケンスで格納されたのと同じ順序にすることができる。従って、異なる購読者（例えば、購読者４８０、購読者４８２、又は購読者４８５）に送信されたメッセージは、購読者が接続されたＭＸノードにかかわらず、同じ順序（メッセージがストリームレットに格納された場合と）にすることができる。
【００５５】
様々な実施では、ストリームレットは、メッセージのブロックのセットにメッセージを格納する。各ブロックは、いくつかのメッセージを格納する。例えば、ブロックは、２００キロバイトのメッセージを格納することができる。各ブロックは、ブロックを保持するストリームレットの有効期間よりも短くすることができる固有の有効期間を有する。ブロックＴＴＬが満了した状態で、図４Ｃに関して以下に詳しく説明するように、ブロックを保持するストリームレットからブロックを廃棄することができる。
【００５６】
図４Ｃは、メッセージングシステムのチャネルのメッセージを格納するための例示的データ構造である。図４Ａ及び４Ｂに関してチャネルｆｏｏと共に説明されているように、現在の瞬間に、チャネルｆｏｏのチャネルストリーム４３２は、図４Ｃに示すようにアクティブストリームレット４１０４及び４１０５を含むと仮定する。ストリームレットのそれぞれのＴＴＬが満了した場合に、ストリームレット４１０３及び４１０３の前のストリームレットは無効である。ストリームレット４１０４は、ストリームレットの容量（例えば、対応する書込許可によって決定される）に対して既に満杯であり、追加のメッセージ書込に対して閉じている。ストリームレット４１０４は、メッセージ読取には利用可能である。ストリームレット４１０５は開いており、メッセージ書込及び読取に利用可能である。
【００５７】
例示的に、ストリームレット４１０４（例えば、図４Ｂに示すＱノード４７４で実行されるコンピュータ処理）は、現時点で２ブロックのメッセージを保持する。ブロック４９４は、チャネル位置４７３０１から４７８５０のメッセージを保持する。ブロック４９５は、チャネル位置４７８５１から４８０００のメッセージを保持する。ストリームレット４１０５（例えば、メッセージングシステム１００の別のＱノードで実行されるコンピュータ処理）は、現時点で２ブロックのメッセージを保持する。ブロック４９６は、チャネル位置４８００１から４８２００のメッセージを保持する。ブロック４９７は、チャネル位置４８２０１から開始されるメッセージを保持し、チャネルｆｏｏの追加のメッセージを受信する。
【００５８】
ストリームレット４１０４が生成された時に（例えば、書込許可により）、第１のブロック（サブバッファ）４９２は、例えば、チャネル位置４７０１０から４７１００のメッセージを格納するために生成される。その後に、ブロック４９２がブロック４９２の容量に達した後で、別のブロック４９３が、例えば、チャネル位置４７１１１から４７３００のメッセージを格納するために生成される。ブロック４９４及び４９５は、続いて追加のメッセージを格納するために生成される。その後に、ストリームレット４１０４は、追加のメッセージ書込に対して閉じられ、チャネルｆｏｏの追加のメッセージを格納するための追加のブロックを備えたストリームレット４１０５が生成される。
【００５９】
この例では、ブロック４９２及び４９３のそれぞれのＴＴＬが満了している。これらの２つのブロック（チャネル位置４７０１０から４７３００）に格納されたメッセージは、チャネルｆｏｏの購読者によって読み取ることができない。ストリームレット４１０４は、例えば、ブロック４９２及び４９３のためのメモリ空間の割り当てを解除することによってこれらの２つの満了したブロックを廃棄することができる。ブロック４９４又は４９５は、ストリームレット４１０４自体が無効になる前に満了になり、ストリームレット４１０４によって廃棄することができる。あるいは、ストリームレット４１０４自体が、ブロック４９４又は４９５が満了になる前に無効になることができると考えられる。従って、ストリームレットは、例えば、ストリームレット及びブロックのそれぞれのＴＴＬに応じて、メッセージの１又は２以上のブロックを保持するか、又はメッセージのブロックを含有しないでおくことができる。
【００６０】
ストリームレット、又はメッセージングシステム１００のＱノードで実行されるコンピュータ処理は、Ｑノードからメモリ空間のある一定のサイズを割り当てることによってチャネルのメッセージを格納するためのブロックを生成することができる。ストリームレットは、メッセージングシステム１００のＭＸノードから一度に１つのメッセージを受信し、受信したメッセージをブロックに格納することができる。これに代えて、ＭＸノードは、メッセージの群をアセンブルして（すなわち、バッファ）メッセージの群をＱノードに送信することができる。ストリームレットは、メモリ空間のブロック（Ｑノードから）を割り当て、メッセージの群をブロックに格納することができる。ＭＸノードは、例えば、各メッセージから共通ヘッダを排除することにより、メッセージの群に圧縮を実行することができる。
【００６１】
図５は、メッセージングシステムのメッセージを格納する例示的方法の流れ図である。本方法は、例えば、メッセージングシステム１００のチャネルマネージャ２１４のようなチャネルマネージャを使用して実施することができる。本方法は、それぞれのチャネル名を含む発行者からの書込要求を受信することによって開始され、チャネル名によって識別されるチャネルは、１又は２以上のバッファに格納された順序付けられた複数のメッセージを含み、各バッファは、予め決められた有効期間を有し、かつそれぞれのノードに割り当てられる（５０２）。本方法は、書込要求のチャネル名に基づいて第１のノードと１又は２以上のメッセージを格納するのに利用可能なストレージを有する第１のノード上に格納された第１のバッファとを識別し、第１のバッファは、満了していない有効期間を有する（５０４）。本方法は、書込許可を発行者に送信し、書込許可は、第１のノードと第１のバッファとの識別を含み、発行者は、第１のバッファが満杯であるか又は第１のバッファの有効期間が満了するまで許可に基づいて第１のバッファに格納するために１又は２以上のメッセージを第１のノードに送信するように構成される（５０６）。
【００６２】
本明細書に説明する主題及び作動の実施形態は、本明細書及び本明細書の構造的均等物又はこれらの１又は２以上の組合せで開示する構造を含むデジタル電子回路、又はコンピュータソフトウエア、ファームウエア、又はハードウエアを用いて実施することができる。本明細書に説明する主題の実施形態は、１又は２以上のコンピュータプログラムとして、すなわち、デジタル処理装置によって実行するために又はその作動を制御するためにコンピュータストレージ媒体上に符号化されるコンピュータプログラム命令の１又は２以上のモジュールとして実施することができる。これに代えて又はこれに加えて、プログラム命令は、人工的に生成された伝播信号、例えば、データ処理装置によって実行するのに適する受信装置に送信する情報を符号化するために生成される機械発生式電気、光学、又は電磁信号で符号化することができる。コンピュータストレージ媒体は、コンピュータ可読ストレージデバイス、コンピュータ可読ストレージ基板、ランダム又はシリアルアクセスメモリアレイ又はデバイス、又はこれらの１又は２以上の組合せとすることができ、又はこれらに含めることができる。更に、コンピュータストレージ媒体は伝播信号ではないが、コンピュータストレージ媒体は、人工的発生式伝播信号で符号化されたコンピュータプログラム命令のソース又は宛先とすることができる。コンピュータストレージ媒体は、１又は２以上の個別の物理的構成要素又は媒体（例えば、複数のＣＤ、ディスク、又は他のストレージデバイス）とすることができ、又はこれらに含めることができる。
【００６３】
本明細書に説明する作動は、１又は２以上のコンピュータ可読ストレージデバイスに格納されたか又は他のソースから受信したデータにデータ処理装置によって実行される作動として実施することができる。
【００６４】
「データ処理装置」という語は、一例として、プログラマブルプロセッサ、コンピュータ、システムオンチップ、又はマルチプロセッサ、又は上述の組合せを含むデータを処理するための全ての種類の装置、デバイス、及び機械を網羅する。装置は、専用論理回路、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）を含むことができる。装置は、ハードウエアに加えて、問題のコンピュータプログラムのための実行環境を生成するコード、例えば、プロセッサファームウエア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォーム実行時間環境、仮想機械、又はこれらの１又は２以上の組合せを構成するコードを含むことができる。装置及び実行環境は、ウェブサービス、分散コンピュータ及びグリッドコンピュータインフラストラクチャーのような様々な異なるコンピュータモデルインフラストラクチャーを実現することができる。
【００６５】
コンピュータプログラム（プログラム、ソフトウエア、ソフトウエアアプリケーション、スクリプト、又はコードとしても公知）は、コンパイル又は解釈言語、宣言、手順、又は機能言語を含むプログラミング言語のあらゆる形態で書くことができ、独立プログラムとして又はモジュール、構成要素、サブルーチン、オブジェクト、又はコンピュータ環境に使用するのに適する他のユニットとして含むいずれの形態でも配備することができる。コンピュータプログラムは、ファイルシステムのファイルに対応することができるが、対応する必要はない。プログラムは、他のプログラム又はデータ（例えば、マークアップ言語リソースに格納された１又は２以上のスクリプト）を保持するファイルの一部分に、問題のプログラム専用単一ファイルに、又は複数の調節されたファイル（例えば、１又は２以上のモジュール、サブプログラム、又はコードの一部分を格納するファイル）に格納することができる。コンピュータプログラムは、１つのコンピュータ又は１つのサイトに位置するか又は複数のサイトにわたって分散されて通信ネットワークによって相互接続された複数のコンピュータで実行されるように配備される。
【００６６】
本明細書に説明した処理及び論理フローは、１又は２以上のコンピュータプログラムを実行する１又は２以上のプログラマブルプロセッサによって実行され、入力データを演算して出力を生成することによってアクションを実行することができる。処理及び論理フローは、専用論理回路、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）によって実行することができ、装置は、専用論理回路、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）として実施することができる。
【００６７】
コンピュータプログラムの実行に適するプロセッサは、一例として、汎用及び専用マイクロプロセッサの両方、及びあらゆる種類のデジタルコンピュータのいずれか１つ又はそれよりも多いプロセッサを含む。一般的に、プロセッサは、読取専用メモリ又はランダムアクセスメモリ又はこれらの両方から命令及びデータを受信する。コンピュータの基本的な要素は、命令に従ってアクションを実行するためのプロセッサ、及び命令及びデータを格納するための１又は２以上のメモリデバイスである。一般的にコンピュータは、データを格納するための１又は２以上の大容量ストレージデバイス、例えば、磁気、磁気光学ディスク、又は光学ディスクを含むか、これらからデータを受信するか又はデータを転送し、又はこの両方のために作動的に結合される。しかし、コンピュータは、そのようなデバイスを有する必要はない。コンピュータは、別のデバイス、幾つか挙げると、例えば、スマートフォン、移動音声又は映像プレーヤ、ゲームコンソール、全地球測位システム（ＧＰＳ）受信機、又は携帯式ストレージデバイス（例えば、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ）に組み込むことができる。コンピュータプログラム命令及びデータを格納するのに適するデバイスは、一例として、半導体メモリデバイス、例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ、及びフラッシュメモリデバイス、磁気ディスク、例えば、内部ハードディスク又は着脱可能ディスク、磁気光学ディスク、及びＣＤ−ＲＯＭ及びＤＶＤ−ＲＯＭディスクを含む不揮発性メモリ、媒体、及びメモリデバイスの全ての形態を含む。プロセッサ及びメモリは、専用論理回路によって補足又は専用論理回路に組み込むことができる。
【００６８】
ユーザとの対話を提供するために、本明細書に説明する主題の実施形態は、ディスプレイデバイス、例えば、ユーザに情報を表示するためのディスプレイデバイス、例えば、ＣＲＴ（ブラウン管）又はＬＣＤ（液晶ディスプレイ）モニタ、及びキーボード及びポインティングデバイス、例えば、ユーザがコンピュータに入力を与えることを可能にするマウス又はトラックボールを有するコンピュータを用いて実施することができる。他の種類のデバイスを使用して、同様にユーザとの対話を提供することができ、例えば、ユーザに提供されるフィードバックは、センサ式フィードバックのあらゆる形態、例えば、視覚フィードバック、聴覚フィードバック、又は触知フィードバックとすることができ、ユーザからの入力は、音響、音声、又は触知入力を含むあらゆる形態で受信することができる。コンピュータは、ユーザによって使用されるデバイスにリソースを送信し、デバイスからリソースを受信することにより、例えば、ウェブブラウザから受信した要求に応じてユーザのクライアントデバイスのウェブブラウザにウェブページを送信することによってユーザと対話することができる。
【００６９】
本明細書に説明する主題の実施形態は、バックエンド構成要素を例えばデータサーバとして含むか、又はミドルウェア構成要素、例えば、アプリケーションサーバを含むか、又はフロントエンド構成要素、例えば、ユーザが本明細書に説明する主題の実施と対話することを可能にするグラフィカルユーザインタフェース又はウェブブラウザを有するクライアントコンピュータ、又は１又は２以上のこれらのバックエンド、ミドルウェア、又はフロントエンド構成要素のあらゆる組合せを含むコンピュータシステムを用いて実施することができる。本発明のシステムの構成要素は、デジタルデータ通信のあらゆる形態又は媒体、例えば、通信ネットワークによって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク（「ＬＡＮ」）及びワイドエリアネットワーク（「ＷＡＮ」）、インターネットワーク（例えば、インターネット）及びピアツーピアネットワーク（例えば、アドホックピアツープアネットワーク）を含む。
【００７０】
コンピュータシステムは、クライアント及びサーバを含むことができる。クライアント及びサーバは、一般的に互いから遠隔にあり、一般的に通信ネットワーク上で対話する。クライアントとサーバの関係は、それぞれのコンピュータで実行されて互いにクライアント−サーバ関係を有するコンピュータプログラムによって発生する。一部の実施形態では、サーバは、データ（例えば、ＨＴＭＬページ）をクライアントデバイスに送信する（クライアントデバイスと対話するユーザにデータを表示してユーザからユーザ入力を受信するために）。クライアントデバイスで生成されたデータ（例えば、ユーザ対話の結果）は、サーバでクライアントデバイスから受信することができる。
【００７１】
１又は２以上のコンピュータのシステムは、作動中にシステムにアクションを実行させるシステム上にインストールされたソフトウエア、ファームウエア、ハードウエア、又はその組合せを有することによって特定の作動又はアクションを実行するように構成することができる。１又は２以上のコンピュータプログラムは、データ処理装置によって実行された時に装置にアクションを実行させる命令を含むことによって特定の作動又はアクションを実行するように構成することができる。
【００７２】
本明細書は多くの特定の実施の詳細を含有するが、これらは、いずれの発明又は主張することができる範囲の制限として解釈すべきではなく、逆に特定の発明の特定の実施形態に固有の特徴の説明として解釈しなければならない。個別の実施形態の関連で本明細書に説明するある一定の特徴は、単一実施形態に組み合わせて実施することができる。対照的に、単一実施形態の関連で説明する様々な特徴は、複数の実施形態で別々に又はあらゆる適切な部分組合せを用いて実施することができる。更に、特徴は、ある一定の組合せで作用するように上述し、更にそのように最初に主張したが、主張した組合せからの１又は２以上の特徴は、一部の事例では組合せから削除することができ、主張した組合せを部分組合せ又は部分組合せの変形に向けることができる。
【００７３】
同様に、作動は、特定の順序で図面に示されているが、これは、望ましい結果を達成するためにそのような作動を示された特定の順序又は連続的な順序で実行し、又は全ての例示された作動を実行することが望ましいとして理解すべきではない。ある状況では、マルチタスク及び並列処理が有利である場合がある。上述の実施形態における様々なシステム構成要素の分離は、全ての実施形態においてそのような分離を要求するものとして理解すべきではなく、説明したプログラム構成要素及びシステムは、一般的に単一ソフトウエア製品に互いに統合するか又は複数のソフトウエア製品にパッケージ化することができることを理解しなければならない。
【００７４】
すなわち、本主題の特定の実施形態を説明した。他の実施形態も特許請求の範囲内である。一部の事例では、特許請求の範囲に説明するアクションを異なる順序で実行して望ましい結果を達成することができる。更に、添付の図に示す処理は、望ましい結果を達成するために必ずしも示す特定の順序又は連続的な順序を必要としない。ある一定の実施では、マルチタスク及び並列処理が有利である場合がある。
【符号の説明】
【００７５】
１  チャネル
１  発行者
１００  ＰｕｂＳｕｂ通信パターンをサポートするシステム
Ｎ  発行者
Ｎ  購読者
【図１Ａ】
0006678742.tif 000003
【図１Ｂ】
0006678742.tif 000004
【図２】
0006678742.tif 000005
【図３Ａ】
0006678742.tif 000006
【図３Ｂ】
0006678742.tif 000007
【図４Ａ】
0006678742.tif 000008
【図４Ｂ】
0006678742.tif 000009
【図４Ｃ】
0006678742.tif 000010
【図５】
0006678742.tif 000011