(57)【要約】  本発明の実施形態は、改良された分散型コンピューティングシステムを提供する。分散型コンピューティングシステム内のエンティティは、ライタ、リーダ、ゲートウェイ、及びアプリケーションの４つのカテゴリに分類できる。エンドユーザは、ゲートウェイにより、アプリケーションを介してシステムとインタラクトできる。ライタとリーダの役割は、演算負荷を分散するために分離してもよい。ライタは、イベントストリームのためのメッセージを生成できる。メッセージは、一貫したグローバルな順序付けのためのタイムスタンプを含むことができる。リーダは、タイムスタンプに基づいて様々なライタからのメッセージを配列し、時間的に一貫したイベントストリームを生成する。【選択図】  図１
2020500345.tif 000002
【特許請求の範囲】
【請求項１】
それぞれがメッセージを生成し、前記メッセージにタイムスタンプを添付する複数のライタと、
前記複数のライタから分離された複数のリーダであって、少なくとも１つのリーダが、前記複数のライタのうちの少なくとも２つのライタに加入し、少なくとも１つのリーダが、前記加入している少なくとも２つのライタからメッセージを受信し、前記メッセージに添付されたタイムスタンプに基づいて、前記少なくとも２つのライタからのメッセージを時系列順に配列してイベントストリームを生成する複数のリーダと、
を備える分散型コンピューティングシステム。
【請求項２】
請求項１において、
前記複数のライタのうちの少なくとも１つのライタと、前記複数のリーダのうちの少なくとも１つのリーダとにエンドユーザアプリケーションを通信可能に接続するゲートウェイを更に備えるシステム。
【請求項３】
請求項２において、
前記エンドユーザアプリケーションは、前記少なくとも１つのライタにメッセージを送信するシステム。
【請求項４】
請求項１において、
各ライタは、前記メッセージに一意のデジタル署名を添付するシステム。
【請求項５】
請求項４において、
前記デジタル署名は、タイムスタンプ、メッセージの内容、ライタＩＤ、及びシーケンス番号の１つ以上に基づいているシステム。
【請求項６】
請求項１において、
前記少なくとも２つのライタからの以前に送信されたメッセージを保存するための１つ又は複数の中継器を更に備えるシステム。
【請求項７】
請求項６において、
前記中継器は、前記少なくとも１つのリーダからの再送信の要求に応答して、保存されたメッセージを読み出し、送信するシステム。
【請求項８】
請求項１において、
前記複数のライタのうちの１つのライタは、前記複数のライタに新しいライタを追加する能力を有するシステム。
【請求項９】
請求項１において、
前記複数のライタのうちの１つのライタは、前記複数のライタのうちの別のライタを削除する能力を有するシステム。
【請求項１０】
請求項１において、
前記複数のライタは、ハートビートを周期的に送信するシステム。
【請求項１１】
請求項１において、
異なるライタによる少なくとも２つのメッセージがトピック毎に編成されるシステム。
【請求項１２】
クロック信号を生成するクロックと、
ゲートウェイからの着信メッセージに基づいて発信メッセージを生成し、前記クロック信号に基づいて前記発信メッセージにタイムスタンプを添付し、前記発信メッセージを１つ又は複数のリーダデバイスに送信するプロセッサと、
を備えるライタデバイス。
【請求項１３】
請求項１２において、
以前に送信されたメッセージを保存するためのキャッシュを更に備えるライタデバイス。
【請求項１４】
請求項１３において、
前記キャッシュは、前記保存されたメッセージの要求時に応じた再送信のために前記保存されたメッセージを取り出すライタデバイス。
【請求項１５】
請求項１２において、
前記プロセッサは、前記発信メッセージにデジタル署名を添付するライタデバイス。
【請求項１６】
請求項１５において、
前記デジタル署名は、タイムスタンプ、メッセージの内容、ライタＩＤ、及びシーケンス番号の１つ以上に基づいているライタデバイス。
【請求項１７】
請求項１２において、
前記プロセッサは、定期的にハートビートを送信するライタデバイス。
【請求項１８】
請求項１２において、
前記クロックは、分散型コンピューティングネットワーク内の他のライタの他のクロックと同期するライタデバイス。
【請求項１９】
請求項１２において、
前記ライタデバイスは、前記発信メッセージを１つ以上のリーダデバイスに直接送信するライタデバイス。
【請求項２０】
請求項１２において、
前記ライタデバイスは、前記ライタデバイスが廃止される前に「シーケンス終了」メッセージを送信するライタデバイス。
【請求項２１】
イベントストリームを作成する方法において、
複数のライタからメッセージを受信することと、
前記メッセージに含まれるタイムスタンプに基づいて前記メッセージを時系列順に配列することと、
前記配列されたメッセージをイベントストリームとして送信することと、
を含む方法。
【請求項２２】
請求項２１において、
前記メッセージに含まれるデジタル署名に基づいてメッセージを認証することを更に含む方法。
【請求項２３】
請求項２１において、
前記イベントストリームは、ゲートウェイに送信され、前記ゲートウェイは、前記イベントストリームをエンドユーザアプリケーションに転送する方法。
【請求項２４】
請求項２１において、
ライタのセットを確立することと、
前記ライタのセットの各ライタから定期的なハートビートを受信することと、
を更に含む方法。
【請求項２５】
請求項２１において、
異なるライタによる少なくとも２つのメッセージをトピック毎に編成することを更に含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本出願は、２０１６年９月２日に出願された米国仮特許出願第６２／３８２，９１１号、発明の名称「System and Method for Creating Time-Accurate Event Streams」の優先権を主張し、この内容は、参照により本明細書に援用される。
【０００２】
発明の分野
本発明の実施形態は、包括的に、分散型コンピュータネットワークを使用して時間的に正確なイベントストリームを作成するためのシステム及び方法に関する。
【背景技術】
【０００３】
近年の最も複雑なコンピューティングは、集中型方式（centralized fashion）で行われている。例えば、所与のアプリケーションについて、異なる場所からのユーザが中央プロセッサとインタラクトし、中央プロセッサは、そのアプリケーションに関連する全ての処理機能を処理する。この例として、世界中の複数のユーザが中央サーバにログオンして、共に対話型ゲームをプレイするゲーム環境がある。各ユーザは、その指示を中央サーバに送信し、中央サーバは、ユーザの指示の順序に基づいて指示を実行する。プレイヤＡとプレイヤＢがゲーム内で武器を互いに向け合っている状態で、プレイヤＡがプレイヤＢより早く射撃ボタンを押すと、プレイヤＡは生き残り、プレイヤＢは死亡する。しかしながら、集中型コンピューティングには限界がある。例えば、単一のプロセッサの使用によってスループットが制限される。集中型システムのスループットが単一の集中型処理システムのスループットを超えることは、あり得ない。
【０００４】
分散型コンピューティングは、集中型コンピューティングの代替となる。分散型コンピューティングでは、単一のノードではなく、複数のノードを同時に使用してアプリケーションを処理できる。しかしながら、分散型コンピューティングは、二重支払い（double spend）等の欠点がある。複数のノードが異なる命令を処理する可能性があるため、ノードは、イベントの順序に同意する必要がある。例えば、売り手がオンラインで商品のオファーを投稿するとする。中国の買い手Ａがオファーに承諾を送信すると、その承諾は、中国にあるノード１によって処理される。略同時に、米国内の別の買い手である買い手Ｂがオファーに承諾を送信すると、その承諾は、アメリカにあるノード２によって処理される。ノード１とノード２は、買い手Ａ又は買い手Ｂの何れが先にオファーを承諾したかについて、見解が一致しない可能性がある。
【０００５】
分散型コンピューティング環境におけるイベントの順序付けに対する従来のソリューションは、不十分であった。例えば、ＰａｘｏｓやＲａｆｔ等のコンセンサスアルゴリズムでは、参加者間でイベントの順序を確実に一致させるための高負荷な調整が必要である。これにより、スループットが低下する。ビットコインのためのアルゴリズムのような他の従来のソリューションは、イベントの順序を合意するための明示的な調整ではなく、作業証明（プルーフオブワーク：proof-of-work）に依存している。しかしながら、これにより、待ち時間が長くなり、スループットが低下する。
【０００６】
したがって、本発明者らは、当技術分野において、高スループット及び低遅延を達成し、リアルタイムに近い一貫したグローバルな順序付けイベントを行う分散型コンピュータネットワークの必要性を認識した。
【０００７】
本発明をより完全に理解するために、以下では、添付の図面を参照して説明を行い、この添付の図面では、同様の要素に同様の符号を付している。これらの図面は、本発明を限定するものとして解釈されるべきではなく、単に例示的であることを意図している。
【図面の簡単な説明】
【０００８】
【図１】図１Ａは、本発明の一実施形態に基づく分散型コンピューティングネットワークの一部を示すブロック図である。図１Ｂは、本発明の一実施形態に基づく分散型コンピューティングネットワークのトランスポート層セクションを示すブロック図である。
【図２】本発明の一実施形態に基づくライタデバイスのブロック図である。
【図３】本発明の一実施形態に基づくライタデバイスの動作のフローチャートである。
【図４Ａ】本発明の一実施形態に基づくリーダデバイスの動作のフローチャートである。
【図４Ｂ】本発明の一実施形態に基づくリーダデバイスの動作のフローチャートである。
【図５】本発明の一実施形態に基づくリーダ動作の一例を示す図である。
【発明を実施するための形態】
【０００９】
本発明の実施形態は、分散型コンピューティングに関する。分散型コンピューティングネットワークでは、複数のノードの各ノードが処理責任を担っている。ノードは、異なる物理的位置に配置してもよい。異なるノードは、メッセージを使用して互いに通信できる。
【００１０】
図１Ａは、本発明の一実施形態に基づく分散型コンピューティングネットワーク１００の一部を示すブロック図である。図１Ａは、本発明の一実施形態に基づく分散型コンピューティングネットワーク１００の論理図でもある。分散型コンピューティングネットワーク１００は、複数のアプリケーション１１０．１〜１１０．Ｍ（Ｍは、正の整数）、ゲートウェイ１２０、複数のライタ（writer）１３０．１〜１３０．Ｎ（Ｎは、正の整数）、及び複数のリーダ（reader）１４０．１〜１４０．Ｐ（Ｐは、正の整数）を含むことができる。アプリケーション１１０．１〜１１０．Ｍは、エンドユーザとのインタラクションを提供できる。アプリケーション１１０．１〜１１０．Ｍは、イベントを作成／開始し、イベントを受信／消費し、及び／又はイベントに反応できる。
【００１１】
アプリケーション１１０．１〜１１０．Ｍは、通信リンクにより、ゲートウェイ１２０を介して分散型コンピューティングネットワーク１００の他のネットワークエンティティと通信できる。通信リンクは、インターネット等の１つ又は複数の通信ネットワークによって提供してもよい。通信ネットワークは、有線又は無線ローカルエリアネットワーク（local area network：ＬＡＮ）、広域ネットワーク（wide area network：ＷＡＮ）、無線パーソナルエリアネットワーク（personal area network：ＰＡＮ）、又は他の任意の種類の通信ネットワークを含むことができる。コンピュータは、インターネット、イントラネット、エクストラネット、イーサネット(登録商標)、又は通信を提供する他の任意のシステムを介して接続できる。幾つかの適切な通信プロトコルは、例えば、ＴＣＰ／ＩＰ、ＵＤＰ、又はＯＳＩを含むことができる。無線通信の場合、通信プロトコルは、ブルートゥース（Bluetooth）(登録商標)、ジグビー（Zigbee）、ＩｒＤａ又は他の適切なプロトコルを含むことができる。更に、ネットワークエンティティは、有線経路又は無線経路の組み合わせを介して互いに通信できる。
【００１２】
説明のために単一のゲートウェイ１２０を示しているが、２つ以上のゲートウェイを設けてもよい。ゲートウェイ１２０は、他のネットワークエンティティ（例えば、ライタ、リーダ、アプリケーション）からメッセージを受信し、これらのメッセージを他のエンティティに転送できる。ゲートウェイ１２０は、システムへのアクセスを制御できる。ゲートウェイ１２０は、メッセージに対して妥当性検査を実行してもよく、またメッセージ送信のペースを制御してもよい。したがって、ゲートウェイは、サービス拒否攻撃等のサイバー攻撃から分散型コンピューティングネットワーク１００を保護できる。
【００１３】
一実施形態では、ゲートウェイ１２０は、プログラム可能なスロットルレベルをＮとして、「Ｎインフライト（N-in-flight）」スロットルを使用して、メッセージのペースを制御し、信頼性を向上させることができる。例えば、アプリケーションが１０個のメッセージのストリームをライタに送信しようとし、スロットルレベルＮが１に設定されている場合、ゲートウェイ１２０は、第１のメッセージのみを続行させ、リーダからのイベントストリームを検討することによって第１のメッセージが順序付けられたことを確認できるまで待機してもよい。第１のメッセージが適切に処理された場合、ゲートウェイ１２０は、システム内の現在のメッセージフローに基づいて、残りの９つのメッセージを連続してライタに送信できる。一実施形態では、スループットを向上させるために、スロットルレベルＮをより大きい数に設定してもよい。例えば、スロットルレベルＮは、３に設定してもよい。この例では、ゲートウェイ１２０は、一度に３つのメッセージをアプリケーションストリームからライタに送信できる。
【００１４】
ライタ１３０．１〜１３０．Ｎは、ゲートウェイ１２０に接続してもよい。ライタ１３０．１〜１３０．Ｎは、アプリケーション１１０．１〜１１０．Ｍからの着信メッセージに応答して、イベントに関する発信メッセージを作成できる。ライタ１３０．１〜１３０．Ｎは、互いにグローバルに時間同期できる。したがって、ライタ１３０．１〜１３０．Ｎは、発信メッセージを順序付けることができる。ライタ１３０．１〜１３０．Ｎは、発信メッセージにタイムスタンプを付すことができ、また発信メッセージにデジタル署名を添付することもできる。デジタル署名は、公開鍵デジタル署名であってもよい。タイムスタンプは、グローバルに同期されたクロックに基づいて正確に同期してもよい。
【００１５】
ライタ１３０．１〜１３０．Ｎは、リーダ１４０．１〜１４０．Ｐに接続してもよい。各リーダ１４０．１〜１４０．Ｐは、１つ又は複数のライタ１３０．１〜１３０．Ｎを「リスン」することができる。したがって、各リーダ１４０．１〜１４０．Ｐは、複数のライタ１３０．１〜１３０．Ｎからメッセージを受信できる。各リーダ１４０．１〜１４０．Ｐは、セキュリティ保護目的のためにメッセージ上のデジタル署名を認証できる。そして、各リーダ１４０．１〜１４０．Ｐは、これらのメッセージ内のタイムスタンプに基づいて、異なるライタ１３０．１〜１３０．Ｎから受信したメッセージを配列して、時間的に正確なイベントストリームを作成できる。同じ組のライタに加入している任意の２つのリーダは、リーダ及び／又はライタの物理的な場所に関係なく、同じ順序のイベントストリームを生成できる。したがって、本発明の実施形態は、分散型コンピューティングの精度を向上させる。
【００１６】
更に、異なる役割（例えば、ライタとリーダ）を分離することにより、演算負荷がネットワーク全体に分散され、各ネットワークエンティティがより効率的に動作できるようになる。これにより、分散型コンピューティングネットワークの速度が向上し、スループットが向上する。例えば、リーダ１４０．１〜１４０．Ｐは、互いに通信したり、他の不要な動作を実行して、グローバルに一貫したイベントストリームの生成に時間をかける必要がなくなる。また、ライタは、リーダに送信するための順序付けられたメッセージを生成することに時間をかけるといった不要な動作から解放される。
【００１７】
図１Ｂは、本発明の一実施形態に基づく分散型コンピューティングネットワーク１００のトランスポート層セクションを示すブロック図である。上述したように、ライタ１３０．１〜１３０．Ｎは、一方向でリーダ１４０．１〜１４０．Ｐと通信できる。また、分散型コンピューティングネットワーク１００は、１つ又は複数の中継器１５０．１〜１５０．Ｑを含む中継器ブロック１５０を含むことができる。中継器ブロック１５０は、ライタ１３０．１〜１３０．Ｎからのサイドチャネルであってもよく、ネットワーク全体に分散させてもよい。
【００１８】
中継器１５０．１〜１５０．Ｑは、メモリストレージを含むことができ、ライタ１３０．１〜１３０．Ｎの発信メッセージを保存できる。中継器１５０．１〜１５０．Ｑは、様々な手法で編成できる。一実施形態では、中継器１５０．１〜１５０．Ｑは、メモリベースであってもよく、各中継器は、古い発信メッセージのウィンドウに対応してもよい。例えば、ある中継器が最新の１００個の送信メッセージを保管し、別の中継器が次に古い１００個の送信メッセージを保管してもよい。別の実施形態では、中継器１５０．１〜１５０．Ｑは、ファイルベースであってもよく、中継器１５０．１〜１５０．Ｑは、メッセージが関係するファイル及びアプリケーションに基づいて発信メッセージを保存してもよい。例えば、ある中継器がアプリケーションＡの最新のメッセージを保存し、別の中継器がアプリケーションＢとＣの最新のメッセージを保存する等としてもよい。別の実施形態では、中継器は、メモリベースとファイルベースの組み合わせとして編成してもよい。
【００１９】
中継器１５０．１〜１５０．Ｑに保存されたデータは、構造化してもよく、半構造化してもよく、又は構造化しなくてもよい。中継器１５０．１〜１５０．Ｑ内のデータ保存領域は、データを保存するためのファイルシステム及びデータベースを含むことができる。当分野で周知の手法により、中継器１５０．１〜１５０．Ｑに保存されたデータを管理し、データベース管理システムと通信できる。中継器１５０．１〜１５０．Ｑは、異なる構造を有し、異なる種類のデータを保存できる複数のデータ保存領域を含むことができる。
【００２０】
後に更に詳細に説明するように、リーダ１４０．１〜１４０．Ｐは、中継器１５０．１〜１５０．Ｑと通信して、欠落メッセージを要求できる。中継器１５０．１〜１５０．Ｑのうちの１つがその欠落メッセージを有している場合、適切な中継器が、そのメッセージを要求側のリーダに送信できる。一方、中継器１５０．１〜１５０．Ｑが欠落メッセージを有していない場合（中継器間で欠落メッセージをチェックした後）、適切な中継器が、再送信要求を発信元のライタに送信できる。これに応じて、発信元のライタは、欠落メッセージを再送信してもよい。この実施形態では、リーダ１４０．１〜１４０．Ｐは、直接（ゲートウェイを介さずに）メッセージを中継器１５０．１〜１５０．Ｐに送信するが、ライタ１３０．１〜１３０．Ｎには、送信しない。中継器１５０．１〜１５０．Ｐは、必要であれば、メッセージをライタ１３０．１〜１３０．Ｎに直接送信できる。
【００２１】
一実施形態では、中継器１５０．１〜１５０．Ｐは、階層的に配置してもよい。そして、ライタ１３０．１〜１３０．Ｎにメッセージを直接送信することを最上位階層の中継器のみに許可してもよい。
【００２２】
リーダとライタの役割を分離することにより、分散型コンピューティングネットワークが更に柔軟になり、ネットワークを動的に更新できる。ライタのメンバシップは、現在のライタによって制御してもよい。例えば、既存のライタがイベントストリームに他のライタを追加し又はこれを削除できるようにしてもよい。一実施形態では、あるライタが物理的に故障した場合、論理アドレスが同じであるが物理アドレスが異なる別のライタが、故障したライタの物理的地位を引き継いでもよい。別の例では、ライタを削除する場合、削除されようとしているライタは、そのリーダベースに「シーケンス終了（end of sequence）」メッセージを送信できる。この「シーケンス終了」メッセージは、このメッセージがそのライタによって送信された最後のメッセージになることをリーダベース（reader base）に示すことができる。これは、分散型コンピューティングネットワーク内のデバイスに冗長性を追加し、より高い柔軟性を提供するための他の手法である。また、リーダは、互いに通信する必要なく、ライタメンバシップリストを最新の状態に維持できる。これにより、分散型コンピューティングネットワークの速度が向上する。
【００２３】
上記のように、各ライタは、個々のイベントストリームを生成できる。一実施形態では、ライタからのメッセージ（すなわち、個々のイベントストリーム）は、リモートストレージユニット、例えば、クラウドストレージに保存できる。また、リーダのライタ加入リストの履歴を遠隔ストレージユニットに保存してもよい。したがって、リーダの過去の動作（すなわち、リーダが見たメッセージ）を再構築して再生できる。一実施形態では、遠隔ストレージユニットは、中継器ブロック構成要素に一体化してもよい。
【００２４】
本発明の一実施形態では、トピックによってメッセージを編成してもよく、トピックは、関連するタグ又は文字列によって指定してもよい。したがって、リーダは、異なるライタから受信したメッセージをトピックに基づいてフィルタリングできる。１つのトピックを１つ以上のライタの間で共有できる。トピックは、１つ以上のデータベースで維持してもよい。一実施形態では、トピックデータベースは、中央位置に配置してもよく、あるいは、トピックデータベースは、分散方式で提供してもよい。
【００２５】
新しいトピックが作成されると、対応するエントリがトピックデータベースに保存される。保存されたエントリは、そのトピックを定義する文字列、そのトピックの下でメッセージを発行するする最初のライタの識別情報、及び（そのライタに対する）そのメッセージのシーケンス番号を含むことができる。
【００２６】
一実施形態では、ライタが既に存在するトピックに参加することを望む場合、そのトピックに既に書き込んでいるライタによってこのことを告知してもよい。新しいライタは、この告知が行われるのを待って、そのトピックに関するメッセージを発行してもよく、これにより、そのトピックに加入している全てのリーダがタイムスタンプ付きの告知を消費し、今後そのタイムスタンプから新しいライタをフォローし始めることを確実に周知させることができる。これは、例えば、各トピックにソース告知トピックを関連付けることによってインスタンス化できる。トピックに既に関連付けられているライタは、新しいライタからの要求によって促されたとき、並びに他の状況下で、他のライタを追加する告知を行うことができる。ライタは、トピックから自らを削除することもでき、削除の告知によってこれを行うこともできる。自らを削除したライタは、（後にトピックに再度追加されない限り）そのトピックの下でメッセージを発行しなくなる。これらのメカニズムにより、いずれも一連のトピックに加入している２つのリーダが、これらのトピックで生成されたメッセージの正確な順序に同意することが保証される。
【００２７】
「トピック作成」ツールを使用して、新しいトピックが作成されたときにこれをリーダに知らせることができる。一実施形態では、リーダは、興味のあるトピックについての基準（例えば、文字列による表現）を維持できる。したがって、新たに作成されたトピックが告知されたとき、これをリーダの基準に基づいてチェックし、新しいトピックを消費するか否かを判断できる。
【００２８】
ここに説明する分散型コンピューティングネットワークは、様々な用途を有することができる。例えば、分散型コンピューティングネットワークは、グローバル決済システムに使用できる。ここに説明する本発明の実施形態は、オンラインゲーム、グローバルマッチングエンジン、軍事用途、決済機関、モノのインターネット、デジタル通貨、マイクロペイメント、様々なクラウドプラットフォーム上のアプリケーションの同期等と共に使用できる。
【００２９】
図２は、本発明の一実施形態に基づくライタ１３０を示している。ライタ１３０は、リードマシン（lead machine）２２０とキャッシュ２３０とを含むことができる。ライタ１３０は、ゲートウェイから着信メッセージを受信でき、これは、アプリケーションから発信される場合もある。リードマシーン２２０は、プロセッサ２２０．１及びクロック２２０．２を含むことができる。プロセッサ２２０．１は、着信メッセージのデジタル署名を認証できる。プロセッサ２２０．１は、後に更に詳細に説明するように、新しい発信メッセージを生成し、ライタ１３０のデジタル署名を発信メッセージに添付できる。クロック２２０．２は、ライタ１３０からの送信メッセージのタイムスタンプを作成するために使用される高精度クロックとして提供してもよい。クロック２２０．２は、他のライタのクロックとグローバルに同期させてもよい。一実施形態では、ライタのクロックは、ネットワークタイムプロトコル（Network Time Protocol：ＮＴＰ）を使用して同期させることができる。
【００３０】
キャッシュ２３０は、メモリストレージを含むことができ、ライタ１３０の発信メッセージを保存できる。中継器がメッセージの再送信を要求する（稀な）状況では、キャッシュ２３０がその要求を処理し、要求されたメッセージを再送信できる。
【００３１】
ライタ１３０は、発信メッセージをリーダ／中継器に送信できる。一実施形態では、発信メッセージをブロードキャストしてもよく、任意の受信機が発信メッセージを受信できるようにしてもよい。別の実施形態では、発信メッセージは、特に１つ以上のリーダを対象とでき、対象となるリーダのみが（中継器に加えて）これらのメッセージを受信できるようにしてもよい。また、ライタ１３０は、ライタの「ハートビート（heartbeat）」をリーダに定期的に送信してもよい。リーダは、シーケンス番号とともに、このハートビートを使用して、ライタとの通信が続いていること、及びそのライタからのメッセージが誤って欠落していないことを確認してもよい。例えば、リスニングしているリーダが指定されたライタからメッセージを受信しないが、同じ時間内にそのライタのハートビートを受信した場合、そのリーダは、そのライタには、その時間内に送信するメッセージがないと見なす。
【００３２】
図３は、本発明の実施形態に基づく、ライタからメッセージを生成し送信する動作のフローチャートである。一実施形態では、図３の方法は、図１及び図２のライタ１３０によって実行してもよく、他のデバイスによって実行してもよい。ステップ３１０において、ライタ１３０は、接続されているゲートウェイ１２０からメッセージを受信できる。
【００３３】
ステップ３２０において、ライタ１３０は、デジタル署名を認証して、着信メッセージの送信者を検証できる。ステップ３３０において、ライタ１３０は、新しい発信メッセージを生成できる。着信メッセージは、ゲートウェイを介してアプリケーションからライタにマルチキャストされている可能性がある。着信メッセージは、順序付けられていない可能性がある。ステップ３４０において、ライタ１３０は、そのライタＩＤをメッセージに添付できる。ライタＩＤは、各ライタに固有のＩＤであってもよい。ステップ３４０において、ライタ１３０は、シーケンス番号をメッセージに添付できる。シーケンス番号は、各メッセージの後にインクリメントされて単調に増加する数であってもよい。ステップ３６０において、ライタ１３０は、メッセージにタイムスタンプを付すことができる。メッセージには、高精度のグローバルクロックによってタイムスタンプを付してもよい。分散型コンピューティングネットワーク内の全てのライタは、同じタイプの高精度グローバルクロックを使用し、これにより、一貫したイベント順序付けを保証してもよい。
【００３４】
ステップ３７０において、ライタ１３０は、メッセージのための固有のデジタル署名を生成し、そのデジタル署名をメッセージに添付できる。ライタのデジタル署名は、メッセージの内容（アプリケーションからの受信メッセージ本文又は受信メッセージのゲートウェイ署名、あるいは、その両方）、ライタＩＤ、シーケンス番号、及びタイムスタンプのうちの１つ以上に基づいていてもよい。デジタル署名は、各メッセージに対して一意であってもよく、発信メッセージの受信者は、これを用いて、発信メッセージの信頼性を検証してもよい。
【００３５】
ステップ３８０において、メッセージは、ライタ１３０のローカルキャッシュに保存してもよい。ステップ３９０において、ライタは、発信メッセージを１つ以上のリーダ（及び（１つ又は複数の）中継器）に送信できる。ライタは、発信メッセージをブロードキャストしてもよく、又は１つ以上のリーダに発信メッセージを直接送信してもよい。
【００３６】
図４Ａは、本発明の実施形態に基づくメッセージ受信のフローチャートを示している。一実施形態では、図４Ａの処理は、図１のリーダ１４０．１〜１４０．Ｐのうちの１つによって実行してもよく、別のデバイスによって実行してもよい。ステップ４０５において、リーダは、リスンしようとするライタのリストを設定してもよい。リスト上のライタは、分散型コンピューティングネットワーク内の異なる場所に亘って分散させることができる。ステップ４１０において、リーダは、そのリスト上のライタからメッセージを受信できる。更に、リーダは、そのリスト上のライタからのハートビートを受信してもよい。
【００３７】
各受信メッセージについて、リーダは、以下のステップを実行できる。ステップ４１５において、リーダは、受信したメッセージ上のデジタル署名を認証して、メッセージが実際に指定されたライタから発信されたものであることを検証できる。ステップ４２０において、リーダは、同じ発信ライタから最後に受信されたメッセージに基づいて、メッセージに添付されたシーケンス番号をチェックして、シーケンス番号が正しいか否かを判定する。シーケンス番号が正しい（すなわち、同じライタからの最後のメッセージのシーケンス番号の後の次のシーケンス番号である）場合、リーダは、ステップ４２５において、このメッセージを発信ライタのキューに割り当てることができる。リーダは、そのリストにおいて、ライタ毎に１つの複数のキューを含むことができる。シーケンス番号が正しくない（すなわち、同じライタからの最後のメッセージのシーケンス番号の後の次のシーケンス番号ではない）場合、リーダは、抜けているシーケンス番号に対応するメッセージを見逃したと推測できる。したがって、ステップ４３０において、リーダは、見逃したメッセージに対する要求を適切な中継器に送信できる。中継器は、メッセージを適切なリーダに直接送信できる。再送信要求に応答して中継器が行う動作は、上述の通りである。
【００３８】
図４Ｂは、本発明の実施形態に従ってイベントストリームを生成するフローチャートを示している。一実施形態では、図４Ｂの処理は、図１のリーダ１４０．１〜１４０．Ｐのうちの１つによって実行してもよく、他のデバイスによって実行してもよい。ステップ４３５において、リーダは、各ライタキューが少なくとも１つのメッセージ（ハートビートを含む）を有するか否かをチェックしてもよい。チェックの結果がイエスである場合、ステップ４５０において、リーダは、キューから（ハートビートを含まない）最も古い未コミット（yet-to-be committed）メッセージを識別できる。ステップ４６０において、リーダは、識別された最も古い未コミットメッセージをイベントストリームに発行できる。次に、方法は、ステップ４３５に戻る。
【００３９】
一方、ステップ４３５において、全てのライタキューが少なくとも１つのメッセージ（ハートビートを含む）を有していない場合、リーダは、ステップ４４０において、それぞれのキューにおいて、メッセージがないライタから「ストリーム終了」メッセージが受信されているかをチェックしてもよい。「ストリーム終了」メッセージを受信していない場合、方法は、ステップ４３５に戻り、そのライタからのコンテンツメッセージ、ハートビート、又は「ストリーム終了」メッセージのいずれかが受信されるのを待機してもよい。「ストリーム終了」メッセージを受信した場合、リーダは、ステップ４４５において、そのライタをそのリストから削除し、ステップ４３５に戻る。
【００４０】
図５は、本発明の一実施形態に基づき、メッセージを受信し、これらを正しい時系列順に再配列するリーダ動作の一例を示している。この例では、２つのリーダ５２０、５５０が同じ５つのライタ（Ａ〜Ｅ）に加入できる。しかしながら、２つのリーダは、例えばリーダが異なる場所にあるために、異なる順序でライタからメッセージを受信することがある。リーダに近いライタからのメッセージは、リーダから離れたライタからのメッセージよりも速く受信されることがある。この例では、リーダ５２０は、１）ライタＡからのメッセージ、２）ライタＢからのメッセージ、３）ライタＣからのメッセージ、４）ライタＤからのメッセージ、及び５）ライタＥからのメッセージの受信順序５１０でメッセージを受信する。一方、リーダ５５０は、１）ライタＢからのメッセージ、２）ライタＣからのメッセージ、３）ライタＡからのメッセージ、４）ライタＥからのメッセージ、及び５）ライタＤからのメッセージの受信順序５４０でメッセージを受信する。ここで、リーダ５２０、５５０は、受信メッセージがいつ作成されたかを示すタイムスタンプをチェックした後、最も早いタイムスタンプ付きメッセージが最初になり、最も遅いタイムスタンプ付きメッセージが最後になるようにメッセージを再配列することができる。両方のリーダ５２０、５５０は、イベントストリーム５３０に対して、１）ライタＣからのメッセージ、２）ライタＥからのメッセージ、３）ライタＡからのメッセージ、４）ライタＤからのメッセージ、及び５）ライタＢからのメッセージの同じ順序でメッセージを再配列できる。したがって、同じライタに加入している任意の２つのリーダが同じイベントストリームを生成できる。
【００４１】
一実施形態では、ネットワークエンティティ間でメッセージを送信するために暗号化を使用してもよい。暗号化は、ここに説明するデジタル署名の使用によって提供される認証とは別個に行ってもよく、これを補うものであってもよい。一実施形態では、幾つかのネットワークエンティティは、その機能を実行するために暗号化キーを有する必要はない。例えば、リーダは、イベントストリームのために暗号化された形式でメッセージを受信し、配列できる。リーダにとっては、メッセージが暗号化されているか否かは、問題ではない。イベントストリームのメッセージ内の情報を表示するために、アプリケーションは、メッセージを復号するための暗号化キーを要求してもよい。これにより、分散型コンピューティングネットワークに追加のセキュリティ層が提供される。
【００４２】
一実施形態では、「チェックポイント」を使用できる。チェックポイントにより、リーダは、イベントシーケンスの先頭から開始するのではなく、特定のチェックポイントからイベントストリームの再構築を開始できる。これにより、イベントストリームを速やかに再構成でき、したがって分散型コンピューティングネットワークにおける回復の速度が向上する。
【００４３】
上述の技術により、クロックドリフト（clock drift）の悪影響から分散型コンピューティングネットワークを保護できる。クロックドリフトによる誤差があっても、全てのリーダが各メッセージで同じタイムスタンプを確認するという事実に変わりはなく、したがって、クロックドリフトによってメッセージの順序に矛盾が生じることはない。これにより、分散型コンピューティングネットワークの精度が向上する。
【００４４】
なお、包括的に言えば、本明細書に説明する構成要素は、コンピュータ又は複数のコンピュータであってもよく、又はこれらを含むことができる。これらの構成要素は、コンピュータによって実行されるプログラムモジュール等のコンピュータ実行可能命令の一般的な文脈で説明できる。プログラムモジュールは、一般的に、特定のタスクを実行し、又は特定の抽象データタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。
【００４５】
携帯電話又はＰＤＡ等のハンドヘルドワイヤレスデバイス、マルチプロセッサシステム、マイクロプロセッサベース又はプログラム可能な家庭用電化製品、ミニコンピュータ、メインフレームコンピュータ等を含む様々なコンピュータシステム構成を用いて本発明を実現できることは、当業者にとって明らかである。上述のように、本発明は、通信ネットワークを介してリンクされているリモート処理デバイスによってタスクが実行される分散型コンピューティング環境で実現できる。分散型コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを含むローカルとリモートの両方のコンピュータストレージ媒体に配置できる。
【００４６】
コンピュータは、通常、様々なコンピュータ可読媒体を含み、コンピュータ可読媒体は、システムメモリの一部を構成し、処理デバイスによって読み取ることができる。限定ではなく例として、コンピュータ可読媒体は、コンピュータストレージ媒体及び通信媒体を含むことができる。システムメモリは、読取専用メモリ（read only memory：ＲＯＭ）及びランダムアクセスメモリ（random access memory：ＲＡＭ）等の揮発性及び／又は不揮発性メモリの形態のコンピュータストレージ媒体を含むことができる。起動時等に要素間で情報を転送するための基本ルーチンを含む基本入出力システム（basic input/output system：ＢＩＯＳ）は、通常、ＲＯＭに保存される。ＲＡＭは、通常、処理デバイスに直ちにアクセス可能であり、及び／又は処理デバイスによって操作されているデータ及び／又はプログラムモジュールを含む。データ又はプログラムモジュールは、オペレーティングシステム、アプリケーションプログラム、他のプログラムモジュール、及びプログラムデータを含むことができる。オペレーティングシステムは、マイクロソフトウィンドウズ（Microsoft Windows：商標）オペレーティングシステム、Ｕｎｉｘ（商標）オペレーティングシステム、Ｌｉｎｕｘ（商標）オペレーティングシステム、Ｘｅｎｉｘオペレーティングシステム、ＩＢＭ  ＡＩＸ（商標）オペレーティングシステム、ヒューレット（Hewlett Packard）ＵＸ（商標）オペレーティングシステム、ノベルネットウェア（Novell Netware：商標）オペレーティングシステム、サンマイクロシステムズ（Sun Microsystems）ソラリス（Solaris：商標）オペレーティングシステムＯＳ／２（商標）オペレーティングシステム、ＢｅＯＳ（商標）オペレーティングシステム、マッキントッシュ（Macintosh：商標）オペレーティングシステムアパッチ（Apache：商標）オペレーティングシステム、オープンステップ（OpenStep：商標）オペレーティングシステム、又はその他のプラットフォームのオペレーティングシステム等の様々なオペレーティングシステムであってもよく、又はこれらを含むことができる。
【００４７】
メモリは、少なくとも、恒久的又は一時的に保存される少なくとも一組の命令を含む。プロセッサは、保存されている命令を実行してデータを処理する。一連の命令は、添付のフローチャートに示されているもの等、特定の１つ又は複数のタスクを実行する様々な命令を含むことができる。このような特定のタスクを実行するための一連の命令は、プログラム、ソフトウェアプログラム、ソフトウェア、エンジン、モジュール、コンポーネント、メカニズム、又はツールとして特徴付けることができる。コンピュータは、上述のようにメモリに保存され、ここに説明したようにプロセッサ上で実行される複数のソフトウェア処理モジュールを含むことができる。プログラムモジュールは、適切な如何なるプログラミング言語の形式であってもよく、これを機械語又はオブジェクトコードに変換することにより、プロセッサ又は複数のプロセッサは、命令を読み取ることができる。すなわち、特定のプログラミング言語で書かれたプログラミングコード又はソースコードの行は、コンパイラ、アセンブラ、又はインタプリタを使用して機械語に変換できる。機械語は、特定のコンピュータに固有のバイナリコードの機械語命令であってもよい。
【００４８】
本発明の様々な実施形態では、任意の適切なプログラミング言語を使用できる。使用されるプログラミング言語は、例として、アセンブリ言語、Ａｄａ、ＡＰＬ、Ｂａｓｉｃ、Ｃ、Ｃ＋＋、ＣＯＢＯＬ、ｄＢａｓｅ、Ｆｏｒｔｈ、ＦＯＲＴＲＡＮ、Ｊａｖａ(登録商標)、Ｍｏｄｕｌａ−２、Ｐａｓｃａｌ、Ｐｒｏｌｏｇ、ＲＥＸＸ、及び／又はＪａｖａＳｃｒｉｐｔ(登録商標)を含むことができる。更に、本発明のシステム及び方法の動作について、単一タイプの命令又はプログラミング言語を使用する必要はない。すなわち、必要に応じて又は要求に応じて、任意の数の異なるプログラミング言語を使用できる。
【００４９】
更に、本発明を実施するために使用される命令及び／又はデータは、必要に応じて、任意の圧縮又は暗号化技術又はアルゴリズムを利用できる。データを暗号化するために暗号化モジュールを使用してもよい。更に、ファイル又は他のデータは、適切な復号モジュールを使用して復号してもよい。
【００５０】
また、コンピューティング環境は、他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータストレージ媒体を含むことができる。例えば、ハードディスクドライブは、取り外し不能な不揮発性磁気媒体に／から情報を書き込む／読み出すことができる。磁気ディスクドライブは、取り外し可能な不揮発性磁気ディスクに／から情報を書き込む／読み出すことができ、光ディスクドライブは、ＣＤ-ＲＯＭ又は他の光媒体等の取り外し可能な不揮発性光ディスクに／から情報を書き込む／読み出すことができる。例示的な動作環境で使用できる他の取り外し可能／取り外し不能、揮発性／不揮発性のコンピュータストレージ媒体には、以下に限定されるものではないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭ等が含まれる。ストレージ媒体は、通常、取り外し可能又は取り外し不可能なメモリインタフェースを介してシステムバスに接続される。
【００５１】
コマンド及び命令を実行する処理ユニットは、汎用コンピュータであってもよいが、特殊用途コンピュータ、マイクロコンピュータ、ミニコンピュータ、メインフレームコンピュータ、プログラムされたマイクロプロセッサ、マイクロコントローラ、周辺集積回路素子、顧客特定集積回路（Customer Specific Integrated Circuit：ＣＳＩＣ）、特定用途集積回路（Application Specific Integrated Circuit：ＡＳＩＣ）、論理回路、デジタル信号プロセッサ、フィールドプログラマブルゲートアレイ（Field Programmable Gate Array：ＦＰＧＡ）、プログラマブルロジックデバイス（Programmable Logic Device：ＰＬＤ）、プログラマブルロジックアレイ（Programmable Logic Array：ＰＬＡ）等のプログラマブルロジックデバイス、ＲＦＩＤプロセッサ、スマートチップ、又は本発明のプロセスのステップを実施できる他の任意のデバイス若しくはデバイスの配置を含む他の任意の様々な技術を利用してもよい。
【００５２】
なお、コンピュータシステムのプロセッサ及び／又はメモリは、物理的に同じ場所にある必要はない。コンピュータシステムによって使用される各プロセッサ及び各メモリは、地理的に異なる場所にあってもよく、任意の適切な手法で互いに通信するように接続してもよい。更に、プロセッサ及び／又はメモリのそれぞれは、物理的に異なる機器から構成してもよい。
【００５３】
ユーザは、キーボード、及び例えば、マウス、トラックボール又はタッチパッドと呼ばれるポインティングデバイス等の入力デバイスを含むユーザインタフェースを介してコンピュータにコマンド及び情報を入力できる。他の入力デバイスは、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナ、音声認識デバイス、キーボード、タッチスクリーン、トグルスイッチ、押しボタン等を含むことができる。これらの及びこの他の入力デバイスは、システムバスに接続されているユーザ入力インタフェースを介して処理デバイスに接続されることが多いが、パラレルポート、ゲームポート又はユニバーサルシリアルバス（universal serial bus：ＵＳＢ）等の他のインタフェース及びバス構造によって接続してもよい。
【００５４】
インタフェースを介してシステムバスに１つ又は複数のモニタ又は表示デバイスを接続してもよい。表示デバイスに加えて、コンピュータは、他の周辺出力デバイスも含むことができ、これらは、出力用周辺機器インタフェースを介して接続できる。本発明を実施するコンピュータは、１つ又は複数のリモートコンピュータへの論理接続を使用してネットワーク環境で動作でき、リモートコンピュータは、通常、上記の要素の多く又は全てを含む。
【００５５】
本発明の実施形態では、有線又は無線ローカルエリアネットワーク（local area network：ＬＡＮ）及びワイドエリアネットワーク（wide area network：ＷＡＮ）、無線パーソナルエリアネットワーク（wireless personal area network：ＰＡＮ）、及び他の種類のネットワークを含む様々なネットワークを用いることができる。ＬＡＮネットワーキング環境で使用される場合、コンピュータは、ネットワークインタフェース又はアダプタを介してＬＡＮに接続してもよい。ＷＡＮネットワーキング環境で使用される場合、コンピュータは、通常、モデム又は他の通信機構を含む。モデムは、内蔵でも外付けでもよく、ユーザ入力インタフェース又は他の適切な機構を介してシステムバスに接続できる。コンピュータは、インターネット、イントラネット、エクストラネット、イーサネット（商標）、又は通信を提供する他の任意のシステムを介して接続できる。幾つかの適切な通信プロトコルは、例えば、ＴＣＰ／ＩＰ、ＵＤＰ、又はＯＳＩを含むことができる。無線通信の場合、通信プロトコルは、ブルートゥース(登録商標)、ジグビー（Zigbee）、ＩｒＤａ又は他の適切なプロトコルを含むことができる。更に、システムの構成要素は、有線経路又は無線経路の組み合わせを介して通信できる。
【００５６】
なお、コンピュータの他の多くの内部構成要素を図示していないが、このような構成要素及び相互接続は、当業者にとって周知である。したがって、本発明について、コンピュータの内部構造に関する更なる詳細を開示する必要はない。
【００５７】
また、ここに開示する発明が広範囲に亘る産業に適用できることも当業者にとって明らかである。ここに開示した発明の様々な実施形態及び特徴は、任意に組み合わせて使用してもよく、これらの実施形態及び特徴の組み合わせも本発明の範囲に含まれる。前述の説明は、多くの詳細事項及び特定事項を含むが、これらは、説明のみを目的としており、本発明を限定するものと解釈されない。本発明の思想及び範囲から逸脱することなく、上述の実施形態を変更できることは、当業者にとって明らかである。したがって、そのような変更は、特許請求の範囲及びこれらの法的な均等物に含まれ、本発明の範囲内にあるとみなされる。
【００５８】
以上の説明から、本発明は、システム及び方法に固有であり自明である他の利点と共に、上述した全ての目的及び目標を達成するために適合されたものであることがわかる。特定の特徴及び副次的組み合わせを用いてもよく、これは、他の特徴及び副次的組み合わせにかかわらず採用できる。これも特許請求の範囲に含まれる。
【図１】
2020500345.tif 000003
【図２】
2020500345.tif 000004
【図３】
2020500345.tif 000005
【図４Ａ】
2020500345.tif 000006
【図４Ｂ】
2020500345.tif 000007
【図５】
2020500345.tif 000008
【国際調査報告】
2020500345.tif 000009