IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アイイーエックス グループ,インコーポレーテッドの特許一覧

特許7200455時間的に正確なイベントストリームの作成のためのシステム及び方法
<>
  • 特許-時間的に正確なイベントストリームの作成のためのシステム及び方法 図1
  • 特許-時間的に正確なイベントストリームの作成のためのシステム及び方法 図2
  • 特許-時間的に正確なイベントストリームの作成のためのシステム及び方法 図3
  • 特許-時間的に正確なイベントストリームの作成のためのシステム及び方法 図4A
  • 特許-時間的に正確なイベントストリームの作成のためのシステム及び方法 図4B
  • 特許-時間的に正確なイベントストリームの作成のためのシステム及び方法 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-26
(45)【発行日】2023-01-10
(54)【発明の名称】時間的に正確なイベントストリームの作成のためのシステム及び方法
(51)【国際特許分類】
   G06F 9/52 20060101AFI20221227BHJP
   G06F 9/54 20060101ALI20221227BHJP
   H04L 65/00 20220101ALI20221227BHJP
【FI】
G06F9/52 150Z
G06F9/54 C
H04L65/00
【請求項の数】 27
(21)【出願番号】P 2019512214
(86)(22)【出願日】2017-08-29
(65)【公表番号】
(43)【公表日】2020-01-09
(86)【国際出願番号】 US2017049000
(87)【国際公開番号】W WO2018044828
(87)【国際公開日】2018-03-08
【審査請求日】2020-08-27
(31)【優先権主張番号】62/382,911
(32)【優先日】2016-09-02
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
【前置審査】
(73)【特許権者】
【識別番号】515066209
【氏名又は名称】アイイーエックス グループ,インコーポレーテッド
(74)【代理人】
【識別番号】110002572
【氏名又は名称】弁理士法人平木国際特許事務所
(72)【発明者】
【氏名】パーク,ロバート
(72)【発明者】
【氏名】アイセン,ダニエル,チャールズ
(72)【発明者】
【氏名】ビショップ,アリソン,ブレトン
(72)【発明者】
【氏名】サングヴィ,プレラク,ピー.
(72)【発明者】
【氏名】タテヤマ,ビアウ,セイチ
(72)【発明者】
【氏名】ケープ,ジェイムズ,エム.
(72)【発明者】
【氏名】チュン,フランシス
(72)【発明者】
【氏名】ソコロフ,コンスタンティン
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2008-134726(JP,A)
【文献】特開2016-025653(JP,A)
【文献】特開2008-134947(JP,A)
【文献】米国特許第09319365(US,B1)
【文献】米国特許出願公開第2015/0341422(US,A1)
【文献】特開平09-244984(JP,A)
【文献】特開2008-257381(JP,A)
【文献】特開2006-134344(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455ー9/54
H04L 65/00
(57)【特許請求の範囲】
【請求項1】
それぞれが、(1)イベントを作成または開始し、あるいは(2)前記イベントを受信または消費し、あるいは(3)前記イベントに反応する複数のアプリケーションから受信する前記イベントに基づいてメッセージを生成し、前記メッセージにタイムスタンプを添付する複数のライタと、
前記複数のライタから分離された複数のリーダであって、少なくとも1つのリーダが、前記複数のライタのうちの少なくとも2つのライタにサブスクライブし、少なくとも1つのリーダが、前記サブスクライブしている少なくとも2つのライタからメッセージを受信し、前記メッセージに添付されたタイムスタンプに基づいて、前記少なくとも2つのライタからのメッセージを時系列順に配列してイベントストリームを生成する複数のリーダと、を備え
前記複数のライタは、当該複数のライタの外部にあるゲートウェイを介して、前記複数のアプリケーションから前記イベントを受信する、分散型コンピューティングシステム。
【請求項2】
請求項1において、
前記複数のライタのうちの少なくとも1つのライタと、前記複数のリーダのうちの少なくとも1つのリーダとにエンドユーザアプリケーションを通信可能に接続するゲートウェイを更に備えるシステム。
【請求項3】
請求項2において、
前記エンドユーザアプリケーションは、前記少なくとも1つのライタにメッセージを送信するシステム。
【請求項4】
請求項1において、
各ライタは、前記メッセージに一意のデジタル署名を添付するように構成されたシステム。
【請求項5】
請求項4において、
前記デジタル署名は、タイムスタンプ、メッセージの内容、ライタID、及びシーケンス番号の1つ以上に基づいているシステム。
【請求項6】
請求項1において、
前記少なくとも2つのライタからの以前に送信されたメッセージを保存するための1つ又は複数の中継器を更に備えるシステム。
【請求項7】
請求項6において、
前記1つ又は複数の中継器は、前記少なくとも1つのリーダからの再送信の要求に応答して、保存されたメッセージを読み出し、送信するシステム。
【請求項8】
請求項1において、
前記複数のライタのうちの1つは、前記複数のライタに新しいライタを追加し、当該追加された新しいライタが前記複数のライタのメンバとなり、前記メッセージを生成し、タイムスタンプを付すように構成されたシステム。
【請求項9】
請求項1において、
前記複数のライタのうちの1つは、前記複数のライタのうちの別のライタを削除し、当該削除されたライタがもはや、別の削除されていない複数のライタとともに、前記メッセージを生成し、タイムスタンプを付すことがないように構成されたシステム。
【請求項10】
請求項1において、
前記複数のライタは、ハートビートを周期的に送信するように構成されたシステム。
【請求項11】
請求項1において、
異なるライタによって生成された少なくとも2つのメッセージがトピック毎に編成されるシステム。
【請求項12】
ライタデバイスであって、
クロック信号を生成するクロックと、
ゲートウェイデバイスから送信された着信メッセージに基づいて発信メッセージを生成し、前記クロック信号に基づいて前記発信メッセージにタイムスタンプを添付し、前記発信メッセージを1つ又は複数のリーダデバイスに送信するプロセッサと、を備え、
前記リーダデバイスは、前記ライタデバイスと分離して構成され、サブスクライブしている少なくとも2つのライタデバイスからメッセージを受信し、前記メッセージに付与されたタイムスタンプに基づいて前記少なくとも2つのライタデバイスからの前記メッセージを時系列順に配列することによってイベントストリームを生成し、
前記プロセッサは、前記ライタデバイスの外部にある前記ゲートウェイデバイスに接続され、前記ゲートウェイは、複数のアプリケーションからイベントを受信し、当該イベントを前記プロセッサに送信するライタデバイス。
【請求項13】
請求項12において、
以前に送信されたメッセージを保存するためのキャッシュを更に備えるライタデバイス。
【請求項14】
請求項13において、
前記キャッシュは、前記保存されたメッセージの要求時に応じた再送信のために前記保存されたメッセージを取り出すように構成されたライタデバイス。
【請求項15】
請求項12において、
前記プロセッサは、前記発信メッセージにデジタル署名を添付するように構成されたライタデバイス。
【請求項16】
請求項15において、
前記デジタル署名は、タイムスタンプ、メッセージの内容、ライタID、及びシーケンス番号の1つ以上に基づいているライタデバイス。
【請求項17】
請求項12において、
前記プロセッサは、定期的にハートビートを送信するように構成されたライタデバイス。
【請求項18】
請求項12において、
前記クロックは、分散型コンピューティングネットワーク内の他のライタの他のクロックと同期するライタデバイス。
【請求項19】
請求項12において、
前記ライタデバイスは、前記発信メッセージを1つ以上のリーダデバイスに直接送信するライタデバイス。
【請求項20】
請求項12において、
前記ライタデバイスは、前記ライタデバイスが廃止される前に「シーケンス終了」メッセージを送信するように構成されたライタデバイス。
【請求項21】
イベントストリームを作成する方法において、
リーダがサブスクライブする複数のライタからメッセージを受信することと、
前記複数のライタによって、前記複数のライタからの前記メッセージに含まれるタイムスタンプに基づいて前記メッセージを時系列順に配列することと、
前記配列されたメッセージをイベントストリームとして送信することと、
を含み、
前記複数のライタが前記リーダとは分離されており、
前記メッセージは、(1)イベントを作成または開始し、あるいは(2)前記イベントを受信または消費し、あるいは(3)前記イベントに反応する複数のアプリケーションから、前記複数のライタの外部にあるゲートウェイを介して前記複数のライタが受信する前記イベントに基づいて生成される、方法。
【請求項22】
請求項21において、
前記メッセージに含まれるデジタル署名に基づいてメッセージを認証することを更に含む方法。
【請求項23】
請求項21において、
前記イベントストリームは、ゲートウェイに送信され、前記ゲートウェイは、前記イベントストリームをエンドユーザアプリケーションに転送する方法。
【請求項24】
請求項21において、
ライタのセットを確立することと、
前記ライタのセットの各ライタから定期的なハートビートを受信することと、
を更に含む方法。
【請求項25】
請求項21において、
異なるライタによる少なくとも2つのメッセージをトピック毎に編成することを更に含む方法。
【請求項26】
請求項1において、
前記複数のリーダのうちの少なくとも1つは、前記イベントストリームの先頭よりもむしろ特定のチェックポイントからのメッセージを、前記イベントストリームから受信し始めるように構成されたシステム。
【請求項27】
請求項21において、さらに、
記イベントストリームの先頭よりもむしろ特定のチェックポイントからのメッセージを、前記イベントストリームから受信し始めることを含む方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願
本出願は、2016年9月2日に出願された米国仮特許出願第62/382,911号、発明の名称「System and Method for Creating Time-Accurate Event Streams」の優先権を主張し、この内容は、参照により本明細書に援用される。
【0002】
発明の分野
本発明の実施形態は、包括的に、分散型コンピュータネットワークを使用して時間的に正確なイベントストリームを作成するためのシステム及び方法に関する。
【背景技術】
【0003】
近年の最も複雑なコンピューティングは、集中型方式(centralized fashion)で行われている。例えば、所与のアプリケーションについて、異なる場所からのユーザが中央プロセッサとインタラクトし、中央プロセッサは、そのアプリケーションに関連する全ての処理機能を処理する。この例として、世界中の複数のユーザが中央サーバにログオンして、共に対話型ゲームをプレイするゲーム環境がある。各ユーザは、その指示を中央サーバに送信し、中央サーバは、ユーザの指示の順序に基づいて指示を実行する。プレイヤAとプレイヤBがゲーム内で武器を互いに向け合っている状態で、プレイヤAがプレイヤBより早く射撃ボタンを押すと、プレイヤAは生き残り、プレイヤBは死亡する。しかしながら、集中型コンピューティングには限界がある。例えば、単一のプロセッサの使用によってスループットが制限される。集中型システムのスループットが単一の集中型処理システムのスループットを超えることは、あり得ない。
【0004】
分散型コンピューティングは、集中型コンピューティングの代替となる。分散型コンピューティングでは、単一のノードではなく、複数のノードを同時に使用してアプリケーションを処理できる。しかしながら、分散型コンピューティングは、二重支払い(double spend)等の欠点がある。複数のノードが異なる命令を処理する可能性があるため、ノードは、イベントの順序に同意する必要がある。例えば、売り手がオンラインで商品のオファーを投稿するとする。中国の買い手Aがオファーに承諾を送信すると、その承諾は、中国にあるノード1によって処理される。略同時に、米国内の別の買い手である買い手Bがオファーに承諾を送信すると、その承諾は、アメリカにあるノード2によって処理される。ノード1とノード2は、買い手A又は買い手Bの何れが先にオファーを承諾したかについて、見解が一致しない可能性がある。
【0005】
分散型コンピューティング環境におけるイベントの順序付けに対する従来のソリューションは、不十分であった。例えば、PaxosやRaft等のコンセンサスアルゴリズムでは、参加者間でイベントの順序を確実に一致させるための高負荷な調整が必要である。これにより、スループットが低下する。ビットコインのためのアルゴリズムのような他の従来のソリューションは、イベントの順序を合意するための明示的な調整ではなく、作業証明(プルーフオブワーク:proof-of-work)に依存している。しかしながら、これにより、待ち時間が長くなり、スループットが低下する。
【0006】
したがって、本発明者らは、当技術分野において、高スループット及び低遅延を達成し、リアルタイムに近い一貫したグローバルな順序付けイベントを行う分散型コンピュータネットワークの必要性を認識した。
【0007】
本発明をより完全に理解するために、以下では、添付の図面を参照して説明を行い、この添付の図面では、同様の要素に同様の符号を付している。これらの図面は、本発明を限定するものとして解釈されるべきではなく、単に例示的であることを意図している。
【図面の簡単な説明】
【0008】
図1図1Aは、本発明の一実施形態に基づく分散型コンピューティングネットワークの一部を示すブロック図である。図1Bは、本発明の一実施形態に基づく分散型コンピューティングネットワークのトランスポート層セクションを示すブロック図である。
図2】本発明の一実施形態に基づくライタデバイスのブロック図である。
図3】本発明の一実施形態に基づくライタデバイスの動作のフローチャートである。
図4A】本発明の一実施形態に基づくリーダデバイスの動作のフローチャートである。
図4B】本発明の一実施形態に基づくリーダデバイスの動作のフローチャートである。
図5】本発明の一実施形態に基づくリーダ動作の一例を示す図である。
【発明を実施するための形態】
【0009】
本発明の実施形態は、分散型コンピューティングに関する。分散型コンピューティングネットワークでは、複数のノードの各ノードが処理責任を担っている。ノードは、異なる物理的位置に配置してもよい。異なるノードは、メッセージを使用して互いに通信できる。
【0010】
図1Aは、本発明の一実施形態に基づく分散型コンピューティングネットワーク100の一部を示すブロック図である。図1Aは、本発明の一実施形態に基づく分散型コンピューティングネットワーク100の論理図でもある。分散型コンピューティングネットワーク100は、複数のアプリケーション110.1~110.M(Mは、正の整数)、ゲートウェイ120、複数のライタ(writer)130.1~130.N(Nは、正の整数)、及び複数のリーダ(reader)140.1~140.P(Pは、正の整数)を含むことができる。アプリケーション110.1~110.Mは、エンドユーザとのインタラクションを提供できる。アプリケーション110.1~110.Mは、イベントを作成/開始し、イベントを受信/消費し、及び/又はイベントに反応できる。
【0011】
アプリケーション110.1~110.Mは、通信リンクにより、ゲートウェイ120を介して分散型コンピューティングネットワーク100の他のネットワークエンティティと通信できる。通信リンクは、インターネット等の1つ又は複数の通信ネットワークによって提供してもよい。通信ネットワークは、有線又は無線ローカルエリアネットワーク(local area network:LAN)、広域ネットワーク(wide area network:WAN)、無線パーソナルエリアネットワーク(personal area network:PAN)、又は他の任意の種類の通信ネットワークを含むことができる。コンピュータは、インターネット、イントラネット、エクストラネット、イーサネット(登録商標)、又は通信を提供する他の任意のシステムを介して接続できる。幾つかの適切な通信プロトコルは、例えば、TCP/IP、UDP、又はOSIを含むことができる。無線通信の場合、通信プロトコルは、ブルートゥース(Bluetooth)(登録商標)、ジグビー(Zigbee)、IrDa又は他の適切なプロトコルを含むことができる。更に、ネットワークエンティティは、有線経路又は無線経路の組み合わせを介して互いに通信できる。
【0012】
説明のために単一のゲートウェイ120を示しているが、2つ以上のゲートウェイを設けてもよい。ゲートウェイ120は、他のネットワークエンティティ(例えば、ライタ、リーダ、アプリケーション)からメッセージを受信し、これらのメッセージを他のエンティティに転送できる。ゲートウェイ120は、システムへのアクセスを制御できる。ゲートウェイ120は、メッセージに対して妥当性検査を実行してもよく、またメッセージ送信のペースを制御してもよい。したがって、ゲートウェイは、サービス拒否攻撃等のサイバー攻撃から分散型コンピューティングネットワーク100を保護できる。
【0013】
一実施形態では、ゲートウェイ120は、プログラム可能なスロットルレベルをNとして、「Nインフライト(N-in-flight)」スロットルを使用して、メッセージのペースを制御し、信頼性を向上させることができる。例えば、アプリケーションが10個のメッセージのストリームをライタに送信しようとし、スロットルレベルNが1に設定されている場合、ゲートウェイ120は、第1のメッセージのみを続行させ、リーダからのイベントストリームを検討することによって第1のメッセージが順序付けられたことを確認できるまで待機してもよい。第1のメッセージが適切に処理された場合、ゲートウェイ120は、システム内の現在のメッセージフローに基づいて、残りの9つのメッセージを連続してライタに送信できる。一実施形態では、スループットを向上させるために、スロットルレベルNをより大きい数に設定してもよい。例えば、スロットルレベルNは、3に設定してもよい。この例では、ゲートウェイ120は、一度に3つのメッセージをアプリケーションストリームからライタに送信できる。
【0014】
ライタ130.1~130.Nは、ゲートウェイ120に接続してもよい。ライタ130.1~130.Nは、アプリケーション110.1~110.Mからの着信メッセージに応答して、イベントに関する発信メッセージを作成できる。ライタ130.1~130.Nは、互いにグローバルに時間同期できる。したがって、ライタ130.1~130.Nは、発信メッセージを順序付けることができる。ライタ130.1~130.Nは、発信メッセージにタイムスタンプを付すことができ、また発信メッセージにデジタル署名を添付することもできる。デジタル署名は、公開鍵デジタル署名であってもよい。タイムスタンプは、グローバルに同期されたクロックに基づいて正確に同期してもよい。
【0015】
ライタ130.1~130.Nは、リーダ140.1~140.Pに接続してもよい。各リーダ140.1~140.Pは、1つ又は複数のライタ130.1~130.Nを「リスン」することができる。したがって、各リーダ140.1~140.Pは、複数のライタ130.1~130.Nからメッセージを受信できる。各リーダ140.1~140.Pは、セキュリティ保護目的のためにメッセージ上のデジタル署名を認証できる。そして、各リーダ140.1~140.Pは、これらのメッセージ内のタイムスタンプに基づいて、異なるライタ130.1~130.Nから受信したメッセージを配列して、時間的に正確なイベントストリームを作成できる。同じ組のライタにサブスクライブしている任意の2つのリーダは、リーダ及び/又はライタの物理的な場所に関係なく、同じ順序のイベントストリームを生成できる。したがって、本発明の実施形態は、分散型コンピューティングの精度を向上させる。
【0016】
更に、異なる役割(例えば、ライタとリーダ)を分離することにより、演算負荷がネットワーク全体に分散され、各ネットワークエンティティがより効率的に動作できるようになる。これにより、分散型コンピューティングネットワークの速度が向上し、スループットが向上する。例えば、リーダ140.1~140.Pは、互いに通信したり、他の不要な動作を実行して、グローバルに一貫したイベントストリームの生成に時間をかける必要がなくなる。また、ライタは、リーダに送信するための順序付けられたメッセージを生成することに時間をかけるといった不要な動作から解放される。
【0017】
図1Bは、本発明の一実施形態に基づく分散型コンピューティングネットワーク100のトランスポート層セクションを示すブロック図である。上述したように、ライタ130.1~130.Nは、一方向でリーダ140.1~140.Pと通信できる。また、分散型コンピューティングネットワーク100は、1つ又は複数の中継器150.1~150.Qを含む中継器ブロック150を含むことができる。中継器ブロック150は、ライタ130.1~130.Nからのサイドチャネルであってもよく、ネットワーク全体に分散させてもよい。
【0018】
中継器150.1~150.Qは、メモリストレージを含むことができ、ライタ130.1~130.Nの発信メッセージを保存できる。中継器150.1~150.Qは、様々な手法で編成できる。一実施形態では、中継器150.1~150.Qは、メモリベースであってもよく、各中継器は、古い発信メッセージのウィンドウに対応してもよい。例えば、ある中継器が最新の100個の送信メッセージを保管し、別の中継器が次に古い100個の送信メッセージを保管してもよい。別の実施形態では、中継器150.1~150.Qは、ファイルベースであってもよく、中継器150.1~150.Qは、メッセージが関係するファイル及びアプリケーションに基づいて発信メッセージを保存してもよい。例えば、ある中継器がアプリケーションAの最新のメッセージを保存し、別の中継器がアプリケーションBとCの最新のメッセージを保存する等としてもよい。別の実施形態では、中継器は、メモリベースとファイルベースの組み合わせとして編成してもよい。
【0019】
中継器150.1~150.Qに保存されたデータは、構造化してもよく、半構造化してもよく、又は構造化しなくてもよい。中継器150.1~150.Q内のデータ保存領域は、データを保存するためのファイルシステム及びデータベースを含むことができる。当分野で周知の手法により、中継器150.1~150.Qに保存されたデータを管理し、データベース管理システムと通信できる。中継器150.1~150.Qは、異なる構造を有し、異なる種類のデータを保存できる複数のデータ保存領域を含むことができる。
【0020】
後に更に詳細に説明するように、リーダ140.1~140.Pは、中継器150.1~150.Qと通信して、欠落メッセージを要求できる。中継器150.1~150.Qのうちの1つがその欠落メッセージを有している場合、適切な中継器が、そのメッセージを要求側のリーダに送信できる。一方、中継器150.1~150.Qが欠落メッセージを有していない場合(中継器間で欠落メッセージをチェックした後)、適切な中継器が、再送信要求を発信元のライタに送信できる。これに応じて、発信元のライタは、欠落メッセージを再送信してもよい。この実施形態では、リーダ140.1~140.Pは、直接(ゲートウェイを介さずに)メッセージを中継器150.1~150.Pに送信するが、ライタ130.1~130.Nには、送信しない。中継器150.1~150.Pは、必要であれば、メッセージをライタ130.1~130.Nに直接送信できる。
【0021】
一実施形態では、中継器150.1~150.Pは、階層的に配置してもよい。そして、ライタ130.1~130.Nにメッセージを直接送信することを最上位階層の中継器のみに許可してもよい。
【0022】
リーダとライタの役割を分離することにより、分散型コンピューティングネットワークが更に柔軟になり、ネットワークを動的に更新できる。ライタのメンバシップは、現在のライタによって制御してもよい。例えば、既存のライタがイベントストリームに他のライタを追加し又はこれを削除できるようにしてもよい。一実施形態では、あるライタが物理的に故障した場合、論理アドレスが同じであるが物理アドレスが異なる別のライタが、故障したライタの物理的地位を引き継いでもよい。別の例では、ライタを削除する場合、削除されようとしているライタは、そのリーダベースに「シーケンス終了(end of sequence)」メッセージを送信できる。この「シーケンス終了」メッセージは、このメッセージがそのライタによって送信された最後のメッセージになることをリーダベース(reader base)に示すことができる。これは、分散型コンピューティングネットワーク内のデバイスに冗長性を追加し、より高い柔軟性を提供するための他の手法である。また、リーダは、互いに通信する必要なく、ライタメンバシップリストを最新の状態に維持できる。これにより、分散型コンピューティングネットワークの速度が向上する。
【0023】
上記のように、各ライタは、個々のイベントストリームを生成できる。一実施形態では、ライタからのメッセージ(すなわち、個々のイベントストリーム)は、リモートストレージユニット、例えば、クラウドストレージに保存できる。また、リーダのライタ加入リストの履歴を遠隔ストレージユニットに保存してもよい。したがって、リーダの過去の動作(すなわち、リーダが見たメッセージ)を再構築して再生できる。一実施形態では、遠隔ストレージユニットは、中継器ブロック構成要素に一体化してもよい。
【0024】
本発明の一実施形態では、トピックによってメッセージを編成してもよく、トピックは、関連するタグ又は文字列によって指定してもよい。したがって、リーダは、異なるライタから受信したメッセージをトピックに基づいてフィルタリングできる。1つのトピックを1つ以上のライタの間で共有できる。トピックは、1つ以上のデータベースで維持してもよい。一実施形態では、トピックデータベースは、中央位置に配置してもよく、あるいは、トピックデータベースは、分散方式で提供してもよい。
【0025】
新しいトピックが作成されると、対応するエントリがトピックデータベースに保存される。保存されたエントリは、そのトピックを定義する文字列、そのトピックの下でメッセージを発行するする最初のライタの識別情報、及び(そのライタに対する)そのメッセージのシーケンス番号を含むことができる。
【0026】
一実施形態では、ライタが既に存在するトピックに参加することを望む場合、そのトピックに既に書き込んでいるライタによってこのことを告知してもよい。新しいライタは、この告知が行われるのを待って、そのトピックに関するメッセージを発行してもよく、これにより、そのトピックにサブスクライブしている全てのリーダがタイムスタンプ付きの告知を消費し、今後そのタイムスタンプから新しいライタをフォローし始めることを確実に周知させることができる。これは、例えば、各トピックにソース告知トピックを関連付けることによってインスタンス化できる。トピックに既に関連付けられているライタは、新しいライタからの要求によって促されたとき、並びに他の状況下で、他のライタを追加する告知を行うことができる。ライタは、トピックから自らを削除することもでき、削除の告知によってこれを行うこともできる。自らを削除したライタは、(後にトピックに再度追加されない限り)そのトピックの下でメッセージを発行しなくなる。これらのメカニズムにより、いずれも一連のトピックにサブスクライブしている2つのリーダが、これらのトピックで生成されたメッセージの正確な順序に同意することが保証される。
【0027】
「トピック作成」ツールを使用して、新しいトピックが作成されたときにこれをリーダに知らせることができる。一実施形態では、リーダは、興味のあるトピックについての基準(例えば、文字列による表現)を維持できる。したがって、新たに作成されたトピックが告知されたとき、これをリーダの基準に基づいてチェックし、新しいトピックを消費するか否かを判断できる。
【0028】
ここに説明する分散型コンピューティングネットワークは、様々な用途を有することができる。例えば、分散型コンピューティングネットワークは、グローバル決済システムに使用できる。ここに説明する本発明の実施形態は、オンラインゲーム、グローバルマッチングエンジン、軍事用途、決済機関、モノのインターネット、デジタル通貨、マイクロペイメント、様々なクラウドプラットフォーム上のアプリケーションの同期等と共に使用できる。
【0029】
図2は、本発明の一実施形態に基づくライタ130を示している。ライタ130は、リードマシン(lead machine)220とキャッシュ230とを含むことができる。ライタ130は、ゲートウェイから着信メッセージを受信でき、これは、アプリケーションから発信される場合もある。リードマシーン220は、プロセッサ220.1及びクロック220.2を含むことができる。プロセッサ220.1は、着信メッセージのデジタル署名を認証できる。プロセッサ220.1は、後に更に詳細に説明するように、新しい発信メッセージを生成し、ライタ130のデジタル署名を発信メッセージに添付できる。クロック220.2は、ライタ130からの送信メッセージのタイムスタンプを作成するために使用される高精度クロックとして提供してもよい。クロック220.2は、他のライタのクロックとグローバルに同期させてもよい。一実施形態では、ライタのクロックは、ネットワークタイムプロトコル(Network Time Protocol:NTP)を使用して同期させることができる。
【0030】
キャッシュ230は、メモリストレージを含むことができ、ライタ130の発信メッセージを保存できる。中継器がメッセージの再送信を要求する(稀な)状況では、キャッシュ230がその要求を処理し、要求されたメッセージを再送信できる。
【0031】
ライタ130は、発信メッセージをリーダ/中継器に送信できる。一実施形態では、発信メッセージをブロードキャストしてもよく、任意の受信機が発信メッセージを受信できるようにしてもよい。別の実施形態では、発信メッセージは、特に1つ以上のリーダを対象とでき、対象となるリーダのみが(中継器に加えて)これらのメッセージを受信できるようにしてもよい。また、ライタ130は、ライタの「ハートビート(heartbeat)」をリーダに定期的に送信してもよい。リーダは、シーケンス番号とともに、このハートビートを使用して、ライタとの通信が続いていること、及びそのライタからのメッセージが誤って欠落していないことを確認してもよい。例えば、リスニングしているリーダが指定されたライタからメッセージを受信しないが、同じ時間内にそのライタのハートビートを受信した場合、そのリーダは、そのライタには、その時間内に送信するメッセージがないと見なす。
【0032】
図3は、本発明の実施形態に基づく、ライタからメッセージを生成し送信する動作のフローチャートである。一実施形態では、図3の方法は、図1及び図2のライタ130によって実行してもよく、他のデバイスによって実行してもよい。ステップ310において、ライタ130は、接続されているゲートウェイ120からメッセージを受信できる。
【0033】
ステップ320において、ライタ130は、デジタル署名を認証して、着信メッセージの送信者を検証できる。ステップ330において、ライタ130は、新しい発信メッセージを生成できる。着信メッセージは、ゲートウェイを介してアプリケーションからライタにマルチキャストされている可能性がある。着信メッセージは、順序付けられていない可能性がある。ステップ340において、ライタ130は、そのライタIDをメッセージに添付できる。ライタIDは、各ライタに固有のIDであってもよい。ステップ340において、ライタ130は、シーケンス番号をメッセージに添付できる。シーケンス番号は、各メッセージの後にインクリメントされて単調に増加する数であってもよい。ステップ360において、ライタ130は、メッセージにタイムスタンプを付すことができる。メッセージには、高精度のグローバルクロックによってタイムスタンプを付してもよい。分散型コンピューティングネットワーク内の全てのライタは、同じタイプの高精度グローバルクロックを使用し、これにより、一貫したイベント順序付けを保証してもよい。
【0034】
ステップ370において、ライタ130は、メッセージのための固有のデジタル署名を生成し、そのデジタル署名をメッセージに添付できる。ライタのデジタル署名は、メッセージの内容(アプリケーションからの受信メッセージ本文又は受信メッセージのゲートウェイ署名、あるいは、その両方)、ライタID、シーケンス番号、及びタイムスタンプのうちの1つ以上に基づいていてもよい。デジタル署名は、各メッセージに対して一意であってもよく、発信メッセージの受信者は、これを用いて、発信メッセージの信頼性を検証してもよい。
【0035】
ステップ380において、メッセージは、ライタ130のローカルキャッシュに保存してもよい。ステップ390において、ライタは、発信メッセージを1つ以上のリーダ(及び(1つ又は複数の)中継器)に送信できる。ライタは、発信メッセージをブロードキャストしてもよく、又は1つ以上のリーダに発信メッセージを直接送信してもよい。
【0036】
図4Aは、本発明の実施形態に基づくメッセージ受信のフローチャートを示している。一実施形態では、図4Aの処理は、図1のリーダ140.1~140.Pのうちの1つによって実行してもよく、別のデバイスによって実行してもよい。ステップ405において、リーダは、リスンしようとするライタのリストを設定してもよい。リスト上のライタは、分散型コンピューティングネットワーク内の異なる場所に亘って分散させることができる。ステップ410において、リーダは、そのリスト上のライタからメッセージを受信できる。更に、リーダは、そのリスト上のライタからのハートビートを受信してもよい。
【0037】
各受信メッセージについて、リーダは、以下のステップを実行できる。ステップ415において、リーダは、受信したメッセージ上のデジタル署名を認証して、メッセージが実際に指定されたライタから発信されたものであることを検証できる。ステップ420において、リーダは、同じ発信ライタから最後に受信されたメッセージに基づいて、メッセージに添付されたシーケンス番号をチェックして、シーケンス番号が正しいか否かを判定する。シーケンス番号が正しい(すなわち、同じライタからの最後のメッセージのシーケンス番号の後の次のシーケンス番号である)場合、リーダは、ステップ425において、このメッセージを発信ライタのキューに割り当てることができる。リーダは、そのリストにおいて、ライタ毎に1つの複数のキューを含むことができる。シーケンス番号が正しくない(すなわち、同じライタからの最後のメッセージのシーケンス番号の後の次のシーケンス番号ではない)場合、リーダは、抜けているシーケンス番号に対応するメッセージを見逃したと推測できる。したがって、ステップ430において、リーダは、見逃したメッセージに対する要求を適切な中継器に送信できる。中継器は、メッセージを適切なリーダに直接送信できる。再送信要求に応答して中継器が行う動作は、上述の通りである。
【0038】
図4Bは、本発明の実施形態に従ってイベントストリームを生成するフローチャートを示している。一実施形態では、図4Bの処理は、図1のリーダ140.1~140.Pのうちの1つによって実行してもよく、他のデバイスによって実行してもよい。ステップ435において、リーダは、各ライタキューが少なくとも1つのメッセージ(ハートビートを含む)を有するか否かをチェックしてもよい。チェックの結果がイエスである場合、ステップ450において、リーダは、キューから(ハートビートを含まない)最も古い未コミット(yet-to-be committed)メッセージを識別できる。ステップ460において、リーダは、識別された最も古い未コミットメッセージをイベントストリームに発行できる。次に、方法は、ステップ435に戻る。
【0039】
一方、ステップ435において、全てのライタキューが少なくとも1つのメッセージ(ハートビートを含む)を有していない場合、リーダは、ステップ440において、それぞれのキューにおいて、メッセージがないライタから「ストリーム終了」メッセージが受信されているかをチェックしてもよい。「ストリーム終了」メッセージを受信していない場合、方法は、ステップ435に戻り、そのライタからのコンテンツメッセージ、ハートビート、又は「ストリーム終了」メッセージのいずれかが受信されるのを待機してもよい。「ストリーム終了」メッセージを受信した場合、リーダは、ステップ445において、そのライタをそのリストから削除し、ステップ435に戻る。
【0040】
図5は、本発明の一実施形態に基づき、メッセージを受信し、これらを正しい時系列順に再配列するリーダ動作の一例を示している。この例では、2つのリーダ520、550が同じ5つのライタ(A~E)にサブスクライブできる。しかしながら、2つのリーダは、例えばリーダが異なる場所にあるために、異なる順序でライタからメッセージを受信することがある。リーダに近いライタからのメッセージは、リーダから離れたライタからのメッセージよりも速く受信されることがある。この例では、リーダ520は、1)ライタAからのメッセージ、2)ライタBからのメッセージ、3)ライタCからのメッセージ、4)ライタDからのメッセージ、及び5)ライタEからのメッセージの受信順序510でメッセージを受信する。一方、リーダ550は、1)ライタBからのメッセージ、2)ライタCからのメッセージ、3)ライタAからのメッセージ、4)ライタEからのメッセージ、及び5)ライタDからのメッセージの受信順序540でメッセージを受信する。ここで、リーダ520、550は、受信メッセージがいつ作成されたかを示すタイムスタンプをチェックした後、最も早いタイムスタンプ付きメッセージが最初になり、最も遅いタイムスタンプ付きメッセージが最後になるようにメッセージを再配列することができる。両方のリーダ520、550は、イベントストリーム530に対して、1)ライタCからのメッセージ、2)ライタEからのメッセージ、3)ライタAからのメッセージ、4)ライタDからのメッセージ、及び5)ライタBからのメッセージの同じ順序でメッセージを再配列できる。したがって、同じライタにサブスクライブしている任意の2つのリーダが同じイベントストリームを生成できる。
【0041】
一実施形態では、ネットワークエンティティ間でメッセージを送信するために暗号化を使用してもよい。暗号化は、ここに説明するデジタル署名の使用によって提供される認証とは別個に行ってもよく、これを補うものであってもよい。一実施形態では、幾つかのネットワークエンティティは、その機能を実行するために暗号化キーを有する必要はない。例えば、リーダは、イベントストリームのために暗号化された形式でメッセージを受信し、配列できる。リーダにとっては、メッセージが暗号化されているか否かは、問題ではない。イベントストリームのメッセージ内の情報を表示するために、アプリケーションは、メッセージを復号するための暗号化キーを要求してもよい。これにより、分散型コンピューティングネットワークに追加のセキュリティ層が提供される。
【0042】
一実施形態では、「チェックポイント」を使用できる。チェックポイントにより、リーダは、イベントシーケンスの先頭から開始するのではなく、特定のチェックポイントからイベントストリームの再構築を開始できる。これにより、イベントストリームを速やかに再構成でき、したがって分散型コンピューティングネットワークにおける回復の速度が向上する。
【0043】
上述の技術により、クロックドリフト(clock drift)の悪影響から分散型コンピューティングネットワークを保護できる。クロックドリフトによる誤差があっても、全てのリーダが各メッセージで同じタイムスタンプを確認するという事実に変わりはなく、したがって、クロックドリフトによってメッセージの順序に矛盾が生じることはない。これにより、分散型コンピューティングネットワークの精度が向上する。
【0044】
なお、包括的に言えば、本明細書に説明する構成要素は、コンピュータ又は複数のコンピュータであってもよく、又はこれらを含むことができる。これらの構成要素は、コンピュータによって実行されるプログラムモジュール等のコンピュータ実行可能命令の一般的な文脈で説明できる。プログラムモジュールは、一般的に、特定のタスクを実行し、又は特定の抽象データタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。
【0045】
携帯電話又はPDA等のハンドヘルドワイヤレスデバイス、マルチプロセッサシステム、マイクロプロセッサベース又はプログラム可能な家庭用電化製品、ミニコンピュータ、メインフレームコンピュータ等を含む様々なコンピュータシステム構成を用いて本発明を実現できることは、当業者にとって明らかである。上述のように、本発明は、通信ネットワークを介してリンクされているリモート処理デバイスによってタスクが実行される分散型コンピューティング環境で実現できる。分散型コンピューティング環境では、プログラムモジュールは、メモリストレージデバイスを含むローカルとリモートの両方のコンピュータストレージ媒体に配置できる。
【0046】
コンピュータは、通常、様々なコンピュータ可読媒体を含み、コンピュータ可読媒体は、システムメモリの一部を構成し、処理デバイスによって読み取ることができる。限定ではなく例として、コンピュータ可読媒体は、コンピュータストレージ媒体及び通信媒体を含むことができる。システムメモリは、読取専用メモリ(read only memory:ROM)及びランダムアクセスメモリ(random access memory:RAM)等の揮発性及び/又は不揮発性メモリの形態のコンピュータストレージ媒体を含むことができる。起動時等に要素間で情報を転送するための基本ルーチンを含む基本入出力システム(basic input/output system:BIOS)は、通常、ROMに保存される。RAMは、通常、処理デバイスに直ちにアクセス可能であり、及び/又は処理デバイスによって操作されているデータ及び/又はプログラムモジュールを含む。データ又はプログラムモジュールは、オペレーティングシステム、アプリケーションプログラム、他のプログラムモジュール、及びプログラムデータを含むことができる。オペレーティングシステムは、マイクロソフトウィンドウズ(Microsoft Windows:商標)オペレーティングシステム、Unix(商標)オペレーティングシステム、Linux(商標)オペレーティングシステム、Xenixオペレーティングシステム、IBM AIX(商標)オペレーティングシステム、ヒューレット(Hewlett Packard)UX(商標)オペレーティングシステム、ノベルネットウェア(Novell Netware:商標)オペレーティングシステム、サンマイクロシステムズ(Sun Microsystems)ソラリス(Solaris:商標)オペレーティングシステムOS/2(商標)オペレーティングシステム、BeOS(商標)オペレーティングシステム、マッキントッシュ(Macintosh:商標)オペレーティングシステムアパッチ(Apache:商標)オペレーティングシステム、オープンステップ(OpenStep:商標)オペレーティングシステム、又はその他のプラットフォームのオペレーティングシステム等の様々なオペレーティングシステムであってもよく、又はこれらを含むことができる。
【0047】
メモリは、少なくとも、恒久的又は一時的に保存される少なくとも一組の命令を含む。プロセッサは、保存されている命令を実行してデータを処理する。一連の命令は、添付のフローチャートに示されているもの等、特定の1つ又は複数のタスクを実行する様々な命令を含むことができる。このような特定のタスクを実行するための一連の命令は、プログラム、ソフトウェアプログラム、ソフトウェア、エンジン、モジュール、コンポーネント、メカニズム、又はツールとして特徴付けることができる。コンピュータは、上述のようにメモリに保存され、ここに説明したようにプロセッサ上で実行される複数のソフトウェア処理モジュールを含むことができる。プログラムモジュールは、適切な如何なるプログラミング言語の形式であってもよく、これを機械語又はオブジェクトコードに変換することにより、プロセッサ又は複数のプロセッサは、命令を読み取ることができる。すなわち、特定のプログラミング言語で書かれたプログラミングコード又はソースコードの行は、コンパイラ、アセンブラ、又はインタプリタを使用して機械語に変換できる。機械語は、特定のコンピュータに固有のバイナリコードの機械語命令であってもよい。
【0048】
本発明の様々な実施形態では、任意の適切なプログラミング言語を使用できる。使用されるプログラミング言語は、例として、アセンブリ言語、Ada、APL、Basic、C、C++、COBOL、dBase、Forth、FORTRAN、Java(登録商標)、Modula-2、Pascal、Prolog、REXX、及び/又はJavaScript(登録商標)を含むことができる。更に、本発明のシステム及び方法の動作について、単一タイプの命令又はプログラミング言語を使用する必要はない。すなわち、必要に応じて又は要求に応じて、任意の数の異なるプログラミング言語を使用できる。
【0049】
更に、本発明を実施するために使用される命令及び/又はデータは、必要に応じて、任意の圧縮又は暗号化技術又はアルゴリズムを利用できる。データを暗号化するために暗号化モジュールを使用してもよい。更に、ファイル又は他のデータは、適切な復号モジュールを使用して復号してもよい。
【0050】
また、コンピューティング環境は、他の取り外し可能/取り外し不能、揮発性/不揮発性のコンピュータストレージ媒体を含むことができる。例えば、ハードディスクドライブは、取り外し不能な不揮発性磁気媒体に/から情報を書き込む/読み出すことができる。磁気ディスクドライブは、取り外し可能な不揮発性磁気ディスクに/から情報を書き込む/読み出すことができ、光ディスクドライブは、CD-ROM又は他の光媒体等の取り外し可能な不揮発性光ディスクに/から情報を書き込む/読み出すことができる。例示的な動作環境で使用できる他の取り外し可能/取り外し不能、揮発性/不揮発性のコンピュータストレージ媒体には、以下に限定されるものではないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROM等が含まれる。ストレージ媒体は、通常、取り外し可能又は取り外し不可能なメモリインタフェースを介してシステムバスに接続される。
【0051】
コマンド及び命令を実行する処理ユニットは、汎用コンピュータであってもよいが、特殊用途コンピュータ、マイクロコンピュータ、ミニコンピュータ、メインフレームコンピュータ、プログラムされたマイクロプロセッサ、マイクロコントローラ、周辺集積回路素子、顧客特定集積回路(Customer Specific Integrated Circuit:CSIC)、特定用途集積回路(Application Specific Integrated Circuit:ASIC)、論理回路、デジタル信号プロセッサ、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array:FPGA)、プログラマブルロジックデバイス(Programmable Logic Device:PLD)、プログラマブルロジックアレイ(Programmable Logic Array:PLA)等のプログラマブルロジックデバイス、RFIDプロセッサ、スマートチップ、又は本発明のプロセスのステップを実施できる他の任意のデバイス若しくはデバイスの配置を含む他の任意の様々な技術を利用してもよい。
【0052】
なお、コンピュータシステムのプロセッサ及び/又はメモリは、物理的に同じ場所にある必要はない。コンピュータシステムによって使用される各プロセッサ及び各メモリは、地理的に異なる場所にあってもよく、任意の適切な手法で互いに通信するように接続してもよい。更に、プロセッサ及び/又はメモリのそれぞれは、物理的に異なる機器から構成してもよい。
【0053】
ユーザは、キーボード、及び例えば、マウス、トラックボール又はタッチパッドと呼ばれるポインティングデバイス等の入力デバイスを含むユーザインタフェースを介してコンピュータにコマンド及び情報を入力できる。他の入力デバイスは、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナ、音声認識デバイス、キーボード、タッチスクリーン、トグルスイッチ、押しボタン等を含むことができる。これらの及びこの他の入力デバイスは、システムバスに接続されているユーザ入力インタフェースを介して処理デバイスに接続されることが多いが、パラレルポート、ゲームポート又はユニバーサルシリアルバス(universal serial bus:USB)等の他のインタフェース及びバス構造によって接続してもよい。
【0054】
インタフェースを介してシステムバスに1つ又は複数のモニタ又は表示デバイスを接続してもよい。表示デバイスに加えて、コンピュータは、他の周辺出力デバイスも含むことができ、これらは、出力用周辺機器インタフェースを介して接続できる。本発明を実施するコンピュータは、1つ又は複数のリモートコンピュータへの論理接続を使用してネットワーク環境で動作でき、リモートコンピュータは、通常、上記の要素の多く又は全てを含む。
【0055】
本発明の実施形態では、有線又は無線ローカルエリアネットワーク(local area network:LAN)及びワイドエリアネットワーク(wide area network:WAN)、無線パーソナルエリアネットワーク(wireless personal area network:PAN)、及び他の種類のネットワークを含む様々なネットワークを用いることができる。LANネットワーキング環境で使用される場合、コンピュータは、ネットワークインタフェース又はアダプタを介してLANに接続してもよい。WANネットワーキング環境で使用される場合、コンピュータは、通常、モデム又は他の通信機構を含む。モデムは、内蔵でも外付けでもよく、ユーザ入力インタフェース又は他の適切な機構を介してシステムバスに接続できる。コンピュータは、インターネット、イントラネット、エクストラネット、イーサネット(商標)、又は通信を提供する他の任意のシステムを介して接続できる。幾つかの適切な通信プロトコルは、例えば、TCP/IP、UDP、又はOSIを含むことができる。無線通信の場合、通信プロトコルは、ブルートゥース(登録商標)、ジグビー(Zigbee)、IrDa又は他の適切なプロトコルを含むことができる。更に、システムの構成要素は、有線経路又は無線経路の組み合わせを介して通信できる。
【0056】
なお、コンピュータの他の多くの内部構成要素を図示していないが、このような構成要素及び相互接続は、当業者にとって周知である。したがって、本発明について、コンピュータの内部構造に関する更なる詳細を開示する必要はない。
【0057】
また、ここに開示する発明が広範囲に亘る産業に適用できることも当業者にとって明らかである。ここに開示した発明の様々な実施形態及び特徴は、任意に組み合わせて使用してもよく、これらの実施形態及び特徴の組み合わせも本発明の範囲に含まれる。前述の説明は、多くの詳細事項及び特定事項を含むが、これらは、説明のみを目的としており、本発明を限定するものと解釈されない。本発明の思想及び範囲から逸脱することなく、上述の実施形態を変更できることは、当業者にとって明らかである。したがって、そのような変更は、特許請求の範囲及びこれらの法的な均等物に含まれ、本発明の範囲内にあるとみなされる。
【0058】
以上の説明から、本発明は、システム及び方法に固有であり自明である他の利点と共に、上述した全ての目的及び目標を達成するために適合されたものであることがわかる。特定の特徴及び副次的組み合わせを用いてもよく、これは、他の特徴及び副次的組み合わせにかかわらず採用できる。これも特許請求の範囲に含まれる。
図1
図2
図3
図4A
図4B
図5