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

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

▶ 富士通株式会社の特許一覧

特許7381895イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム
<>
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図1
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図2
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図3
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図4
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図5
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図6
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図7
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図8
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図9
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図10
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図11
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図12
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図13
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図14
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図15
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図16
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図17
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図18
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図19
  • 特許-イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム 図20
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-08
(45)【発行日】2023-11-16
(54)【発明の名称】イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラム
(51)【国際特許分類】
   G06F 16/215 20190101AFI20231109BHJP
   G06F 9/54 20060101ALI20231109BHJP
【FI】
G06F16/215
G06F9/54 C
【請求項の数】 8
(21)【出願番号】P 2020072691
(22)【出願日】2020-04-15
(65)【公開番号】P2021170201
(43)【公開日】2021-10-28
【審査請求日】2023-01-12
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100094525
【弁理士】
【氏名又は名称】土井 健二
(74)【代理人】
【識別番号】100094514
【弁理士】
【氏名又は名称】林 恒徳
(72)【発明者】
【氏名】ミヒャエリス ユリウ
(72)【発明者】
【氏名】金政 泰彦
【審査官】原 秀人
(56)【参考文献】
【文献】特開2017-146892(JP,A)
【文献】特開2006-058938(JP,A)
【文献】特開2005-055961(JP,A)
【文献】特開2019-133579(JP,A)
【文献】特開平08-249201(JP,A)
【文献】米国特許出願公開第2019/0065246(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
G06F 9/54
(57)【特許請求の範囲】
【請求項1】
プロセッサと、
前記プロセッサがアクセスし、オブジェクトを特定するオブジェクト識別子と、前記オブジェクトのステート情報とを対応付けたオブジェクトテーブルと、前記ステート情報に対応する処理を実行するプラグインとを記憶するストレージとを有し、
前記プロセッサは、
イベント発生元のイベント発生機器からのイベントメッセージに応答して、前記オブジェクトテーブルを参照し、前記イベントメッセージのオブジェクト識別子に対応するオブジェクトテーブルのステート情報を更新し、前記更新したステート情報に対応する前記プラグインを実行するイベント処理部を有し、
前記イベント処理部は、第1のオブジェクト生成メッセージに応答して、前記第1のオブジェクト生成メッセージのオブジェクト識別子に対応する前記オブジェクトテーブルのエントリを生成するオブジェクト管理部を有し、
前記イベント処理部は、前記イベントメッセージに応答して、前記イベントメッセージのオブジェクト識別子の前記オブジェクトテーブルが未登録の場合に、前記イベントメッセージのオブジェクト識別子に対応する仮のオブジェクトテーブルを生成すると共に、前記イベントメッセージを前記仮のオブジェクトテーブルに対応付けて記憶し、前記オブジェクト識別子を有するエラーメッセージを発行し、
更に、
前記エラーメッセージに応答して、前記オブジェクト識別子を有する第2のオブジェクト生成メッセージを発行するオブジェクト発生部を有し、
前記イベント処理部は、前記第2のオブジェクト生成メッセージに応答して、前記第2のオブジェクト生成メッセージのオブジェクト識別子と一致する前記仮のオブジェクトテーブルから本オブジェクトテーブルを生成し、前記仮のオブジェクトテーブルに対応付けて記憶された前記イベントメッセージの前記オブジェクト識別子及びステート情報に対応するプラグインを実行する、
イベントストリーム処理システム。
【請求項2】
前記オブジェクトテーブルは、
前記オブジェクト識別子と前記オブジェクト識別子に対応付けられたステートとを対応付けたオブジェクトステートテーブルと、
前記オブジェクト識別子と前記オブジェクトの特徴を示すグループとを対応付けたオブジェクトグループテーブルと、
前記グループに属する前記ステート情報と前記プラグインとを対応付けたプラグイン管理テーブルとを有し、
前記プロセッサは、更に、
前記第1及び第2のオブジェクト生成メッセージに応答して、前記第1及び第2のオブジェクト生成メッセージ内のグループと、当該グループに属するオブジェクトの前記オブジェクト識別子とを対応付けたグループ所属オブジェクトテーブルを生成し、前記第1及び第2のオブジェクト生成メッセージを、前記第1及び第2のオブジェクト生成メッセージの前記オブジェクト識別子に対応する前記イベント処理部に転送するグループ管理部を有する、請求項1に記載のイベントストリーム処理システム。
【請求項3】
前記オブジェクト発生部は、前記エラーメッセージに含まれるオブジェクト識別子を、オブジェクト識別子に対応するグループを判定する複数のルールに基づいて分析し、前記オブジェクト識別子がマッチする前記ルールに対応するグループを検出し、前記オブジェクト識別子と前記検出したグループを含む前記第2のオブジェクト生成メッセージを生成し、
前記イベント処理部は、前記第2のオブジェクト生成メッセージのオブジェクト識別子と前記グループに基づいて、前記オブジェクトグループテーブルを生成する、請求項2に記載のイベントストリーム処理システム。
【請求項4】
前記イベント処理部は、前記仮のオブジェクトテーブルに対応付けて記憶された前記イベントメッセージを処理し、前記イベントメッセージに含まれるグループと、前記オブジェクトグループテーブル及び前記プラグイン管理テーブルとに基づいて、前記イベントメッセージ内の更新されたステート情報に対応するプラグインを実行する、請求項3に記載のイベントストリーム処理システム。
【請求項5】
前記オブジェクト発生部は、前記オブジェクト識別子がマッチする前記ルールに対応するグループを検出できない場合、前記仮のオブジェクトテーブルを削除する仮オブジェクト削除メッセージを発行し、
前記イベント処理部は、前記仮オブジェクト削除メッセージに応答して、前記仮のオブジェクトテーブルを削除する、請求項3に記載のイベントストリーム処理システム。
【請求項6】
前記グループ管理部は、前記第2のオブジェクト生成メッセージに応答して、前記第2のオブジェクト生成メッセージのオブジェクト識別子に対応する前記グループ所属オブジェクトテーブルのエントリが登録済みの場合、前記仮のオブジェクトテーブルを削除する仮オブジェクト削除メッセージを発行し、
前記イベント処理部は、前記仮オブジェクト削除メッセージに応答して、前記仮のオブジェクトテーブルを削除する、請求項2に記載のイベントストリーム処理システム。
【請求項7】
イベントストリーム処理方法であって、
プロセッサがアクセスし、オブジェクトを特定するオブジェクト識別子と、前記オブジェクトのステート情報とを対応付けたオブジェクトテーブルと、前記ステート情報に対応する処理を実行するプラグインとを記憶するストレージとを有し、
前記プロセッサは、
イベント発生元のイベント発生機器からのイベントメッセージに応答して、前記オブジェクトテーブルを参照し、前記イベントメッセージのオブジェクト識別子に対応するオブジェクトテーブルのステート情報を更新し、前記更新したステート情報に対応する前記プラグインを実行するイベント処理を実行し、
前記イベント処理は、第1のオブジェクト生成メッセージに応答して、前記第1のオブジェクト生成メッセージのオブジェクト識別子に対応する前記オブジェクトテーブルのエントリを生成するオブジェクト管理処理を有し、
前記イベント処理は、前記イベントメッセージに応答して、前記イベントメッセージのオブジェクト識別子の前記オブジェクトテーブルが未登録の場合に、前記イベントメッセージのオブジェクト識別子に対応する仮のオブジェクトテーブルを生成すると共に、前記イベントメッセージを前記仮のオブジェクトテーブルに対応付けて記憶し、前記オブジェクト識別子を有するエラーメッセージを発行し、
更に、
前記エラーメッセージに応答して、前記オブジェクト識別子を有する第2のオブジェクト生成メッセージを発行するオブジェクト発生処理を有し、
前記イベント処理は、前記第2のオブジェクト生成メッセージに応答して、前記第2のオブジェクト生成メッセージのオブジェクト識別子と一致する前記仮のオブジェクトテーブルから本オブジェクトテーブルを生成し、前記仮のオブジェクトテーブルに対応付けて記憶された前記イベントメッセージの前記オブジェクト識別子及びステート情報に対応するプラグインを実行する、
イベントストリーム処理方法。
【請求項8】
プロセッサにイベントストリーム処理を実行させるイベントストリーム処理プログラムであって、
前記イベントストリーム処理は、
オブジェクトを特定するオブジェクト識別子と、前記オブジェクトのステート情報とを対応付けたオブジェクトテーブルと、前記ステート情報に対応する処理を実行するプラグインとを記憶するストレージにアクセスし、
イベント発生元のイベント発生機器からのイベントメッセージに応答して、前記オブジェクトテーブルを参照し、前記イベントメッセージのオブジェクト識別子に対応するオブジェクトテーブルのステート情報を更新し、前記更新したステート情報に対応する前記プラグインを実行するイベント処理を有し、
前記イベント処理は、第1のオブジェクト生成メッセージに応答して、前記第1のオブジェクト生成メッセージのオブジェクト識別子に対応する前記オブジェクトテーブルのエントリを生成するオブジェクト管理処理を有し、
前記イベント処理は、前記イベントメッセージに応答して、前記イベントメッセージのオブジェクト識別子の前記オブジェクトテーブルが未登録の場合に、前記イベントメッセージのオブジェクト識別子に対応する仮のオブジェクトテーブルを生成すると共に、前記イベントメッセージを前記仮のオブジェクトテーブルに対応付けて記憶し、前記オブジェクト識別子を有するエラーメッセージを発行し、
前記イベントストリーム処理は、更に、
前記エラーメッセージに応答して、前記オブジェクト識別子を有する第2のオブジェクト生成メッセージを発行するオブジェクト発生処理を有し、
前記イベント処理は、前記第2のオブジェクト生成メッセージに応答して、前記第2のオブジェクト生成メッセージのオブジェクト識別子と一致する前記仮のオブジェクトテーブルから本オブジェクトテーブルを生成し、前記仮のオブジェクトテーブルに対応付けて記憶された前記イベントメッセージの前記オブジェクト識別子及びステート情報に対応するプラグインを実行する、
イベントストリーム処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、イベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラムに関する。
【背景技術】
【0002】
イベントストリーム処理システムは、複数のコンピュータノード(以下簡単にノードと称する。)を有し、車両やスマートフォン等の実世界のIoT機器で発生した大量のイベントを受信し、イベントのデータ処理をストリームに行う。イベント処理は、例えば、各イベントに対応付けられたプログラムを実行する処理である。イベントストリーム処理システムでは、大量のイベントのデータをリアルタイムにストリーム処理するために、イベントを発生するIoT機器に対応する「オブジェクト」を、複数のノードのイベント処理部に予め所定のルールで割り当てて登録しておく。オブジェクトは、イベントを発生する機器(IoT機器)からイベントデータが到着した際に実行されるプラグインと呼ばれるプログラムを関連付けることで、そのIoT機器から届いた各種イベントデータに対するストリーム処理の内容を規定する役割を果たす。そして、イベントストリーム処理システムは、到着するIoT機器からのイベントメッセージを、対応するオブジェクトを登録したイベント処理部に振り分け、イベント処理部にイベントメッセージに含まれるイベントに関連付けられたプラグインを実行させる。このように、イベントストリーム処理システムは、複数のIoT機器から送信される大量のイベントのストリームを受信し、イベントに対応するプラグインをリアルタイムにストリーム処理する。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2019-133579号公報
【文献】特開2014-157510号公報
【文献】特開2007-328716号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、大量のIoT機器が日々現れるのに伴い、IoT機器から送信されたイベントメッセージが到着した時点で、そのイベントメッセージを送信したIoT機器に対応付けられたオブジェクトが複数のノードのイベント処理部に未だ登録されていないことがしばしば発生する。この場合、オブジェクトが複数のノードのイベント処理部に事前に登録されていることを前提とするため、イベントストリーム処理システムは、イベントメッセージの処理を行うことができない。その結果、送信されたイベントメッセージのストリーム処理が行われず、イベントをリアルタイムに処理するサービスを適切に提供できない。例えば、イベントストリーム処理システムが、オブジェクトが登録されておらずにエラーとなったイベントメッセージをログに出力し、そのログ出力に基づいて人手もしくは自動的にイベントメッセージの新規のオブジェクトの登録を処理し、その後イベントのストリーム処理を再開した場合、イベントのリアルタイムなストリーム処理ができない。
【0005】
そこで、本実施の形態の第1の側面の目的は、未登録のIoT機器から送信されたイベントメッセージのストリーム処理を行うイベントストリーム処理システム、イベントムストリーム処理方法及びイベントストリーム処理プログラムを提供することにある。
【課題を解決するための手段】
【0006】
本実施の形態の第1の側面は、プロセッサと、前記プロセッサがアクセスし、オブジェクトを特定するオブジェクト識別子と、前記オブジェクトのステート情報とを対応付けたオブジェクトテーブル(オブジェクトTBL、グループ所属TBL)と、前記ステート情報に対応する処理を実行するプラグインとを記憶するストレージとを有し、
前記プロセッサは、
イベント発生元のイベント発生機器からのイベントメッセージに応答して、前記オブジェクトテーブルを参照し、前記イベントメッセージのオブジェクト識別子に対応するオブジェクトテーブルのステート情報(ステート値)を更新し、前記更新したステート情報に対応する前記プラグインを実行するイベント処理部を有し、
前記イベント処理部は、第1のオブジェクト生成メッセージに応答して、前記第1のオブジェクト生成メッセージのオブジェクト識別子に対応する前記オブジェクトテーブルのエントリを生成するオブジェクト管理部を有し、
前記イベント処理部は、前記イベントメッセージに応答して、前記イベントメッセージのオブジェクト識別子の前記オブジェクトテーブルが未登録の場合に、前記イベントメッセージのオブジェクト識別子に対応する仮のオブジェクトテーブルを生成すると共に、前記イベントメッセージを前記仮のオブジェクトテーブルに対応付けて記憶し、前記オブジェクト識別子を有するエラーメッセージを発行し、
更に、
前記エラーメッセージに応答して、前記オブジェクト識別子を有する第2のオブジェクト生成メッセージを発行するオブジェクト発生部を有し、
前記イベント処理部は、前記第2のオブジェクト生成メッセージに応答して、前記第2のオブジェクト生成メッセージのオブジェクト識別子と一致する前記仮のオブジェクトテーブルから本オブジェクトテーブルを生成し、前記仮のオブジェクトテーブルに対応付けて記憶された前記イベントメッセージの前記オブジェクト識別子及びステート情報に対応するプラグインを実行する、イベントストリーム処理システムである。
【発明の効果】
【0007】
第1の側面によれば、未登録のオブジェクトから送信されたイベントメッセージのストリーム処理を行うことができる。
【図面の簡単な説明】
【0008】
図1】イベントストリーム処理システムの概略を示す図である。
図2】イベントストリーム処理システムの処理の論理構成と物理構成とを示す図である。
図3】1台の物理マシンPMのオブジェクト処理用サブタスクの構成例を示す図である。
図4】オブジェクトテーブルOB_TBLに含まれるオブジェクトステートテーブルの一例を示す図である。
図5】第1の実施の形態におけるイベントストリーム処理システムの構成例を示す図である。
図6】オブジェクトテーブルとプラグイン管理テーブルとグループ所属オブジェクトテーブルの一例を示す図である。
図7】イベントメッセージ及び制御メッセージの一例を示す図である。
図8】イベント処理部のオブジェクト生成メッセージ及びイベントメッセージの処理の一例を示すフローチャートを示す図である。
図9】イベントストリーム処理システムでの未登録イベントに対するイベントメッセージについての処理の概略を示す図である。
図10】イベントストリーム処理システムでの未登録イベントに対するイベントメッセージについての処理のフローチャートを示す図である。
図11】イベント処理部内の種々の処理の関係を示すブロック図である。
図12】イベント処理部によるイベントメッセージの処理のフローチャート図である。
図13】イベント処理部によるイベントデータの処理のフローチャート図である。
図14】イベント処理部によるオブジェクト生成メッセージを含む制御オブジェクトの処理のフローチャート図である。
図15】イベント処理部によるオブジェクト生成メッセージを含む制御オブジェクトの処理のフローチャート図である。
図16】グループ管理部の種々の処理部の関係を示すブロック図である。
図17】グループ管理部の処理のフローチャートを示す図である。
図18】グループ管理部の処理のフローチャートを示す図である。
図19】オブジェクト自動生成ルールの一例を示す図である。
図20】第2の実施の形態のイベントストリーム処理システムの構成例を示す図である。
【発明を実施するための形態】
【0009】
[イベントストリーム処理システム概略]
イベントストリーム処理システムは、それぞれイベントを発生する実世界の複数のイベント発生機器(例えばコネクテッドカー等のIoT機器)から送信されるイベントを、複数のコンピュータノードが処理する並列分散ストリーム処理システムである。イベントデータは、例えばコネクテッドカーの速度や位置などの内部のステート(状態)の値(ステート値)である。イベントデータは、データセンター内にあるリアルタイム分散イベントストリーム処理システムに集められる。そして、イベントストリーム処理システムは、イベントメッセージ(イベントデータ)が到着するたびに、予め登録された処理を実行し、それに基づいてサービスを提供する。イベントストリーム処理システムは、オブジェクトが有するステート(状態)の値が変化したタイミングで、イベントドリブンにサービス処理を実行する。
【0010】
図1は、イベントストリーム処理システムの概略を示す図である。イベントストリーム処理システム1は、パーソナルコンピュータやサーバなどのコンピュータシステムである。コンピュータシステム1は、複数のCPU(Central Processing Unit)であるプロセッサ10と、プロセッサがアクセス可能なメインメモリ12と、外部のネットワークNWや周辺デバイス(図示せず)とのインターフェースIFと、それらを接続するバス28とを有する。コンピュータシステムは、イベント発生元であるイベント発生機器EVD_1, EVD_2から、バス28を経由してアクセスされる。また、イベントストリーム処理システム1は、各種プログラムが格納されるプログラムストレージPRG_STRGと、各種データが格納されるデータストレージDATA_STRGとを有する。複数のコンピュータシステム1または複数のプロセッサ10が、コンピュータノードに対応する。
【0011】
プログラムストレージPRG_STRG内には、イベント処理プログラムとグループ管理プログラムを含むイベントストリーム処理プログラムEV_PRC_PRGと、メッセージキュープログラムMSG_QUEとが格納される。また、データストレージDATA_STRGには、オブジェクトテーブルOB_TBLと、プラグイン管理テーブルPFG_TBLと、グループ所属オブジェクトテーブルGRP_OB_TBLと、グループ所属オブジェクトテーブルGRP_OB_TBLが格納される。オブジェクトテーブルOB_TBLは、オブジェクトステートテーブルとオブジェクトグループテーブルを含む。また、プラグイン管理テーブルPLG_TBLは、グループ定義テーブルと、プラグイン共通リポジトリを含む。これらのプログラムやテーブルについては後で詳述する。
【0012】
図2は、イベントストリーム処理システムの処理の論理構成と物理構成とを示す図である。処理の論理構成では、それぞれ多段の処理ステージのパイプライン構成が、各ノードに設けられる。イベントの発生元の複数のIoT機器から送信されたイベントメッセージEV_MSGは、予め決められた処理ステージに振り分けられ、各処理ステージが、イベントメッセージに含まれるオブジェクトのステート(状態)の更新に応答して、ステートに対応するプラグインを実行する。
【0013】
処理の論理構成に示されるとおり、各ノードの処理ステージは、例えば、入力処理部IN_PRCと、イベント処理部EV_PRCと、サービスのイベント処理部SV_EV_PRCを有する。到来するイベントメッセージEV_MSGは、任意のノードの入力処理部に転送される。転送先の入力処理部は、イベントメッセージの検証処理などを行い、イベントメッセージに含まれるオブジェクト識別子とステージ番号に基づいて割り当てられたイベント処理部EV_PRCに、イベントメッセージに含まれる情報、オブジェクト識別子とステート名とそのステート値を転送する。イベント処理部EV_PRCには、担当するオブジェクトのデータ(ステート名、グループ名)が登録されている。イベント処理部は、受信したイベントデータでステート値が更新された場合、更新されたステート値に対して予め決められたプラグインを実行する。
【0014】
オブジェクトは、実世界の車等に対応すると共に、サービス等にも対応付けられる。つまり、オブジェクトは、イベントの発生元である特定の事物(人、車)に対応付けられるか、それらのイベントデータを集約処理することで提供されるサービスに対応付けられる。そして、イベントは、オブジェクトのステート(状態)の更新である。
【0015】
前述のイベント処理部EV_PRCは、実世界のオブジェクト(例、車)のステート(例、車の内部状態)の更新についてプラグインを実行し、サービスのオブジェクト(例、ある地域の車の混雑度)のステートの更新(例、車の移動)を含むイベントメッセージを、後段のサービスイベント処理部SV_EV_PRCに転送する。そして、サービスイベント処理部は、サービスのオブジェクトのステートに対応するプラグインを実行する。
【0016】
図2の処理の物理構成に示されるとおり、イベントストリーム処理システムは、複数の物理マシンPMがそれぞれの複数のプロセッサコアCOREが生成するタスクスロットTASK_SLに、複数のサブタスクSUB_TASKを生成する。複数のサブタスクは、論理構成の入力処理部、イベント処理部、サービスイベント処理部にそれぞれ対応する。例えば、サブタスクSUB_TASK21は、論理構成のイベント処理部EV_PRCに登録されている複数のオブジェクト(例、車)のそれぞれのイベントを処理する。
【0017】
例えば、4台の物理マシンPM1~PM4がそれぞれ40個のプロセッサコアCOREを有する場合、160個のプロセッサコアCORE1~COREmがそれぞれのタスクスロットTASK_SL1~TASK_SLm(m=160)を生成する。そして、パイプライン構成された複数のイベント処理部、サービスイベント処理部は、それぞれパイプライン方向(図中右方向)のステージ番号に対応付けられる。
【0018】
イベントメッセージは、後述するとおり、オブジェクト識別子と、メッセージ種別と、ステージ番号と、ステート名及びステート値を有する。入力処理部IN_PRCは、イベントメッセージのオブジェクト識別子のハッシュ値を演算して生成し、ハッシュ値で特定されるタスクスロットTASK_SL内の、ステージ番号で特定されるサブタスクSUB_TASKのイベント処理部EV_PRCに、イベントメッセージを転送する。
【0019】
図3は、1台の物理マシンPMのオブジェクト処理用サブタスクの構成例を示す図である。この物理マシンPMは、3個のプロセッサコアCOREそれぞれのサブタスク21~23にイベント処理部EV_PRCが生成される。複数のイベント処理部に共通に、メッセージがキューインされるメッセージキューMSG_QUEが設けられる。メッセージキューには、オブジェクトから送信されるイベントメッセージと、サービス管理者等から送信される各種制御メッセージがキューインされる。そして、各イベント処理部は、各イベント処理部に登録されているオブジェクトテーブルOB_TBLと、複数のイベント処理に共通に登録されているプラグイン管理テーブルPLG_TBLを参照し、イベントメッセージのステート値でオブジェクトテーブルOB_TBLのステート値を更新し、更新されたステート値に対応するプラグイン管理テーブルPLG_TBL内のプラグインを実行する。プラグイン管理テーブルPLG_TBLは、オブジェクトグループテーブルOB_GRP_TBLとプラグイン共通リポジトリPLG_RPSを含む。
【0020】
物理マシンPMは、ランタイムライブラリRUN_LBと、プラグインのバイナリ(クラス)を実行プログラムに組み込んだロード済みクラスLD_CLSをストレージ内に記憶する。イベント処理部は、プラグイン実行時にロード済みクラスを実行する。
【0021】
図4は、オブジェクトテーブルOB_TBLに含まれるオブジェクトステートテーブルの一例を示す図である。図1に示されるとおり、オブジェクトテーブルOB_TBLは、オブジェクト識別子とステートとの対応を有するオブジェクトステートテーブルOB_ST_TBLを有する。また、オブジェクトテーブルOB_TBLは、オブジェクト識別子とオブジェクトの特徴または属性を示すグループとの対応を有するオブジェクトグループテーブルを有してもよい。図4には、オブジェクトステートテーブルOB_ST_TBLの例が示される。
【0022】
オブジェクトテーブルに含まれるオブジェクトステートテーブルOB_ST_TBLは、実世界のブルドーザに対応するオブジェクト識別子oid「bulldozer_4325」のエントリ内に、ブルドーザ内部の状態である複数のステート名ST_NM「speed(速度)」「latitude(緯度)」「longitude(経度)」と、各ステート名のステート値ST_VLを含む。例えば、イベント処理部が、イベントメッセージに含まれるステート名のステート値で、オブジェクトステートテーブルOB_ST_TBL内のステート値を更新すると、更新されたステートに対応付けられたプラグインPLGを実行する。
【0023】
オブジェクトは、イベントの発生元であり、具体例は、車やIoTの端末など実世界の人や物、更にサービスである。ステート(状態)は、オブジェクトの状態であり、具体例は、車の速度や位置(緯度と経度)である。ステート値はステートの値である。
【0024】
[第1の実施の形態]
[イベントストリームシステムの構成例]
図5は、第1の実施の形態におけるイベントストリーム処理システムの構成例を示す図である。イベントストリーム処理システム1では、複数の物理マシン(ノード)内の複数のプロセッサコアそれぞれが、複数ステージのイベント処理部EV_PRC_21~2n、EV_PRC_31~3n、EV_PRC_41~4nを生成する。プロセッサコアは、イベントストリーム処理プログラムEV_PRC_PRGに含まれるイベント処理プログラムを実行することで、それぞれのイベント処理部EV_PRCを生成する。イベント処理部EV_PRC_21~2n、EV_PRC_31~3nは、図2に示されたイベント処理部、サービスイベント処理部に対応する。
【0025】
イベントストリーム処理システムでは、更に、物理マシンのプロセッサコアが、オブジェクトの特徴、所属、属性などを示すグループのグローバルな登録を行うグループ管理部GRP_MNGを生成する。プロセッサコアは、イベントストリーム処理プログラムEV_PRC_PRGに含まれるグループ管理プログラムを実行することで、グループ管理部を生成する。
【0026】
イベントストリーム処理システムには、第1及び第2のメッセージキューMSG_QUE_1、MSG_QUE_2が設けられる。第1のメッセージキューMSG_QUE_1は、車などのオブジェクトが送信したイベントメッセージEV_MSGをキューインする。また、第2のメッセージキューMSG_QUE_2は、サービス管理者などから送信された制御メッセージCN_MSGをキューインする。物理マシンのプロセッサがメッセージキュープログラムを実行することで、メッセージキューを生成する。
【0027】
第1のメッセージキューMSG_QUE_1は、キューインされたイベントメッセージEV_MSGを、いずれかのタスクスロット内の入力処理部(図示せず)を経由して、イベントメッセージのオブジェクト識別子とステージ番号で特定されるイベント処理部に転送する。図5には、複数のタスクスロットに生成されているステージ番号2~3の複数のイベント処理部が示される。イベント内の複数のイベントメッセージは、そのオブジェクト識別子のハッシュ値とステージ番号で特定されるイベント処理部にそれぞれ割り振られ、リアルタイムに分散ストリーム処理される。
【0028】
第2のメッセージキューMSG_QUE_2は、キューインされた制御メッセージCN_MSGを、グループ管理部GRP_MNGを経由して、イベント処理部EV_PRCに転送する。制御メッセージが、例えば、新たなオブジェクトを生成するオブジェクト生成メッセージCreateObjectの場合、グループ管理部がグループに属するオブジェクトを登録し、メッセージに含まれるオブジェクト識別子のハッシュ値とステージ番号で特定されるイベント処理部にオブジェクト生成メッセージが転送される。イベント処理部は、転送されたオブジェクト生成メッセージを処理し、新たなオブジェクトに対応するオブジェクトテーブルOB_TBLを生成する。前述したとおり、オブジェクトテーブルはそのオブジェクトのイベントを処理するイベント処理部に対応付けられて、データストレージDATA_STRG内に記憶される。
【0029】
また、イベントストリーム処理システム1の物理マシンの外に、オブジェクト自動生成部OB_AT_GENが生成される。オブジェクト自動生成部は、受信したイベントメッセージのオブジェクトが未登録の場合にイベント処理部が発行するエラーメッセージに応答して、未登録のオブジェクトを生成するオブジェクト生成メッセージcreateObjectを発行する。このオブジェクト生成メッセージがグループ管理部とイベント処理部で処理され、オブジェクトテーブルが新規に登録される。そして、イベント処理部が受信したイベントメッセージの更新ステートを処理する。
【0030】
[オブジェクトテーブル、プラグイン管理テーブル、グループ所属オブジェクトテーブル]
図6は、オブジェクトテーブルとプラグイン管理テーブルとグループ所属オブジェクトテーブルの一例を示す図である。オブジェクトテーブルOB_TBLとプラグイン管理テーブルPLG_TBLはイベント処理部により生成され管理される。また、グループ所属オブジェクトテーブルGRP_OB_TBLはグループ管理部により生成され管理される。図3で示したとおり、オブジェクトテーブルは、そのオブジェクトテーブルを管理するイベント処理部に関連付けられ、一方、プラグイン管理テーブルは、全イベント処理部に共通に設けられる。
【0031】
オブジェクトテーブルOB_TBLは、オブジェクトステートテーブルOB_ST_TBLとオブジェクトグループテーブルOB_GRP_TBLを有する。オブジェクトステートテーブルOB_ST_TBLは、オブジェクト識別子oidのテーブルそれぞれに、単数または複数のステート情報(ステート名stateとステート値state_vlの対応)が含まれ、また、仮登録フラグP_FLGを有する。一方、オブジェクトグループテーブルOB_GRP_TBLは、オブジェクト識別子oidのテーブルそれぞれに、単数または複数のグループ識別子gidが含まれる。各オブジェクトグループテーブルには、オブジェクトの特徴、属性、所属などのグループ名が全て登録される。
【0032】
プラグイン管理テーブルPLG_TBLは、グループ定義テーブルGRP_DF_TBLとプラグイン共通リポジトリPLG_RPSを有する。グループ定義テーブルGRP_DF_TBLは、グループ識別子gidのテーブルに、単数または複数のステート名stateとプラグイン識別子plg_idの対応を含む。プラグイン共通リポジトリPGL_RPSは、単数または複数のプラグイン識別子plg_idとプラグインバイナリplg_binの対応を含む。プラグインバイナリは、コンピュータが実行可能な機械語のプログラムコードである。オブジェクト指向プログラムの場合、図3で説明したプラグインをデコードしてバイナリ(クラス)を取得し、そのバイナリをオブジェクト指向プログラムに組み込み、プラグイン共通リポジトリに登録される。
【0033】
図3で示したとおり、オブジェクトテーブルOB_TBLの各テーブルは、オブジェクト識別子oidに対応付けられ、そのオブジェクトのイベントの処理を担当するイベント処理部にそれぞれ対応付けてデータストレージDATA_STRGに格納される。一方、プラグイン管理テーブルPLG_TBLに含まれるグループ定義テーブルとプラグイン共通デポジトリは、複数のイベント処理部に共通にデータストレージDATA_STRGに格納される。
【0034】
イベントストリーム処理システムは、実世界の物や人とサービスなどの「こと」を含む複数のオブジェクトのステートが更新されたタイミングで、イベントドリブンにイベント処理を実行する。その場合、オブジェクトがある車「car124」の場合、車「car124」は、T社製、モデル名M1、2019年型M1など、様々な特徴等のグループに属し、それらのグループ毎にオブジェクト内のステート名とステート値が存在する。また、車「car124」と異なるオブジェクトの車は、車「car124」と同じグループに属することがあり、また異なるグループに属することもある。
【0035】
このように、全てのオブジェクトのステートはそれぞれが属するグループに依存して異なるが、各グループは複数のオブジェクトで共通にまとめられる。そのため、各オブジェクトに、それが属する全グループのステートとそれに対応するプラグイン識別子を対応つけると、各オブジェクトのステート・プラグイン識別子の対応の数が大きくなる。そのため、新規のオブジェクトを登録するときに、多くのステートとプラグイン識別子の対応を登録することが必要になる。そこで、本実施の形態では、オブジェクトグループテーブルに、オブジェクト識別子oidとそのオブジェクトが属する全グループを登録し、一方で、プラグイン管理テーブルを複数のオブジェクトに共通に生成し、プラグイン管理テーブルのグループ定義テーブルに、グループ識別子gidとそのグループに属する全てのステート名とプラグイン識別子の対応を登録する。さらに、プラグイン共通リポジトリに、全プラグイン識別子とプラグインバイナリの対応を登録する。これにより、オブジェクトが、そのグループを介して、ステート名とステート値の対応に対応付けられる。その結果、新規オブジェクトに生成するオブジェクトテーブルOB_TBLのデータ量を小さくできる。
【0036】
図6に示されるグループ所属オブジェクトテーブルGRP_OB_TBLは、ステージ番号テーブルSTG_TBLとグループ所属オブジェクト管理テーブルGRP_OB_MNG_TBLを有する。ステージ番号テーブルには、全てのオブジェクト識別子oidとステージ番号stageの対応が登録される。グループ所属オブジェクト管理テーブルには、グループ識別子gidのテーブルにそのグループに属する全てのオブジェクト識別子oidが登録される。グループ所属オブジェクト管理テーブルは、オブジェクトグループテーブルOB_GRP_TBLの逆引きテーブルであり、グループに関するグローバルな登録情報である。
【0037】
[イベントメッセージ、制御メッセージ、エラーメッセージ]
図7は、イベントメッセージ及び制御メッセージの一例を示す図である。イベントメッセージEV_MSGは、メッセージ識別子midと、オブジェクト識別子oidと、メッセージ種別type「イベント」と、ステージ番号stageと、イベント時間eventTimeと、単数または複数のステート名stateとステート値state_vlの対応を含む。
【0038】
制御メッセージCN_MSGのうちオブジェクト生成メッセージcreateObjectは、メッセージ識別子midと、オブジェクト識別子oidと、メッセージ種別type「オブジェクト生成」と、ステージ番号stageを含む。また、制御メッセージのうちプラグイン追加メッセージaddPluginは、メッセージ識別子midと、オブジェクト識別子oidと、メッセージ種別type「プラグイン追加」と、プラグイン識別子plg_id「plg_10」と、対応するステート名ST_NM「speed(速度)」と、プラグインコードplg_cd「yv66vgAADhoge..」を含む。さらに、エラーメッセージER_MSGは、メッセージ識別子midと、オブジェクト識別子oidと、ステージ番号stageを含む。
【0039】
[オブジェクト登録とイベント処理の概略]
図8は、イベント処理部のオブジェクト生成メッセージ及びイベントメッセージの処理の一例を示すフローチャートを示す図である。グループ管理部GRP_MNGは、オブジェクト生成メッセージcreateObjectを受信すると(S4)、ステージ番号テーブルにメッセージのオブジェクト識別子oidとステージ番号を登録し(S5)、グループ管理テーブルにオブジェクト識別子oidを登録する(S6)。そして、オブジェクト生成メッセージは、メッセージ内のオブジェクト識別子oidとステージ番号stageに基づいて特定されるイベント処理部EV_PRCに転送される。イベント処理部は、オブジェクト生成メッセージを受信し(S7)、オブジェクトテーブルOB_TBLのオブジェクトステートテーブルOB_ST_TBLにオブジェクト識別子oidのテーブルを生成し、更に、オブジェクトグループテーブルOB_GRP_TBLにオブジェクト識別子oidのテーブルを生成しメッセージ内の全グループを登録する(S8)。
【0040】
上記のとおりオブジェクトの2つのテーブルがイベント処理部に登録された後、イベント処理部は、オブジェクトからメッセージキューを経由してイベントメッセージを受信する(S1)。イベント処理部は、イベントメッセージのオブジェクト識別子oidと一致するオブジェクトステートテーブルOB_ST_TBLを検出し、オブジェクトステートテーブル内のステート値をイベントメッセージ内のステート値で更新する(S2)。そして、イベント処理部は、オブジェクト識別子oidと一致するオブジェクトグループテーブルOB_GRP_TBLの全グループについて、グループ定義テーブルGRP_DF_TBL内の更新されたステート値に対応するプラグインを実行する(S3)。プラグインバイナリはプラグイン共通リポジトリから取得される。
【0041】
上記の通り、最初にオブジェクト生成メッセージが発行され、オブジェクト生成メッセージ応答して、オブジェクトの処理を担当するイベント処理部が、予めオブジェクトテーブルを登録する。その後、イベント処理部が、イベントメッセージに応答して既登録のオブジェクトテーブル内のステートのステート値を更新し、更新ステート値についてプラグインを実行する。
【0042】
[概略:未登録オブジェクトのイベント処理]
一方、本実施の形態では、イベントストリーム処理システムは、オブジェクトテーブルが未登録の状態でイベントメッセージを受信した場合でも、以下のとおり、ストリーム処理への影響を最小限に抑えて、自動的にオブジェクトテーブルを生成し、イベントメッセージ内の更新ステート値に対するプラグインを実行する。
【0043】
図9は、イベントストリーム処理システムでの未登録イベントに対するイベントメッセージについての処理の概略を示す図である。図10は、イベントストリーム処理システムでの未登録イベントに対するイベントメッセージについての処理のフローチャートを示す図である。図8と同じ処理には同じ引用番号を付した。図9、10を参照して未登録イベントに対するイベントメッセージの処理の概略を説明する。
【0044】
1.イベント処理部にイベントメッセージが到着
イベントメッセージキューMSG_QUE_1を経由してイベントメッセージが到着し、イベントメッセージのオブジェクト識別子oidとステージ番号で特定されるイベント処理部が、イベントメッセージを受信する(S1)。イベント処理部は、オブジェクトテーブルOB_TBLのオブジェクトステートテーブルOB_ST_TBLを検索したが、オブジェクト識別子oidのオブジェクトテーブルOB_TBLが未登録であり検出できない(S10のNO)。
【0045】
そこで、イベント処理部は、オブジェクトテーブルOB_TLBに仮オブジェクト(仮のオブジェクトステートテーブルOB_ST_TBL)を作成し、イベントメッセージを仮オブジェクトに関連付けて記憶する(S11_1)。このとき、仮のオブジェクトステートテーブルにはオブジェクト識別子oid以外のステート名、ステート値は登録されない。さらに、イベント処理部は、エラーメッセージ(オブジェクト識別子oidとステージ番号stage含む)を発行する(S11_2)。エラーメッセージはエラーメッセージキューMSG_QUE_3にキューインされる。
【0046】
2.オブジェクト自動生成部がオブジェクト生成メッセージを発行
オブジェクト自動生成部は、エラーメッセージを読み出し、オブジェクト自動生成ルール定義ファイルRL_FLに基づいてエラーメッセージ内のオブジェクト識別子oidとステージ番号stageを分析し、オブジェクト識別子とステージ番号がマッチするルールに対応するグループを抽出する(S12_1)。そして、オブジェクト自動生成部が、オブジェクト生成メッセージcreateObject(oidとステージ番号とグループ名を含む)を発行する(S12_2)。オブジェクト生成メッセージは、制御メッセージキューMSG_QUE_2にキューインされる。
【0047】
3.グループ管理部がオブジェクト生成メッセージを処理してオブジェクトを登録
グループ管理部は、オブジェクト生成メッセージcreateObjectを受信し(S4)、ステージ番号テーブルSTG_TBLにオブジェクト識別子oidとステージ番号stageの対応を登録し(S5)、グループ所属オブジェクト管理テーブルGRP_OB_MNG_TBLにメッセージ内の全グループのエントリにオブジェクト識別子oidをそれぞれ登録する(S6)。そして、オブジェクト生成メッセージは、イベント処理部に転送される。転送先のイベント処理部は、メッセージに含まれるオブジェクト識別子oidのハッシュ値とステージ番号stageにより特定される。
【0048】
4.イベント処理部がオブジェクト生成メッセージを処理してオブジェクトを登録
イベント処理部は、オブジェクト生成メッセージcreateObjectを受信し(S7)、オブジェクトテーブルOB_TBLを検索し、オブジェクト生成メッセージのオブジェクト識別子oidと一致する仮オブジェクト(仮のオブジェクトステートテーブル)を検出する(S15のYES)。イベント処理部は、仮オブジェクト(仮のオブジェクトステートテーブル)から本オブジェクト(本オブジェクトステートテーブルOB_ST_TBL)を作成、または本オブジェクトに変更し、オブジェクトグループテーブルOB_GRP_TBLにオブジェクト識別子oidのエントリを作成し、オブジェクト生成メッセージ内の全グループ名を登録する(S16)。
【0049】
5.イベント処理部が保留していたイベントメッセージを処理してプラグイン実行
さらに、イベント処理部は、当該仮オブジェクトに関連付けて記憶されていた、仮オブジェクト登録時とそれ以降に受信した全イベントメッセージについて、イベントメッセージの処理(S2,S3)を行う。すなわち、イベント処理部は、イベントメッセージのオブジェクト識別子oidと一致するオブジェクトステートテーブルOB_ST_TBL内のステート名に対するステート値を、保留中のイベントメッセージのステート値で更新する(S2)。そして、イベント処理部は、オブジェクトグループテーブルOB_GRP_TBLからオブジェクト識別子oidのグループを取得し、プラグイン管理テーブルPGL_TBLを参照して、取得したグループに登録されたステートのうち更新されたステート値に対応するプラグインを実行する(S3)。
【0050】
6.オブジェクト自動生成に失敗したら仮オブジェクトを削除
なお、図9、10には示されないが、オブジェクト自動生成部が、エラーメッセージのオブジェクト識別子oidとマッチするルールが見つからなかった等の理由で、オブジェクト生成メッセージを生成しなかった場合、仮オブジェクト削除メッセージFlashGhostを生成し発行する。同メッセージは制御メッセージキューMSG_QUE_2にキューインされる。これに応答して、イベント処理部が仮オブジェクト削除メッセージFlashGhostを実行して、仮オブジェクト(仮のオブジェクトステートテーブル)を削除し、併せて保留中のイベントメッセージを削除する。
【0051】
[詳細説明:未登録オブジェクトのイベント処理]
次に、未登録オブジェクトのイベント処理の詳細を説明する。未登録オブジェクトへのイベントメッセージを受信した場合について、イベント処理部によるイベントメッセージに対するイベント処理及び制御メッセージに対する処理と、グループ管理部による制御メッセージに対する処理をそれぞれ説明する。
【0052】
[イベント処理部によるイベントメッセージに対するイベント処理]
図11は、イベント処理部内の種々の処理の関係を示すブロック図である。図11には、イベント処理部EV_PRCにより管理されるオブジェクトテーブル(オブジェクトステートテーブルOB_ST_TBL、オブジェクトグループテーブルOB_GRP_TBL)と、プラグイン管理テーブル(グループ定義テーブルGRP_DF_TBL、プラグイン共通リポジトリPLG_RPS)が示される。イベント処理部は、第1のメッセージキューMSG_QUE_1から入力されるイベントメッセージを処理する、イベントメッセージ検証部20と、ステート管理部21と、プラグイン実行部22を有する。また、イベント処理部は、第2のメッセージキューMSG_QUE_2からグループ管理部GRP_MNGを経由して入力される制御メッセージを処理する、メッセージ判別部23と、フラッシュゴースト処理部24と、オブジェクト管理部25と、プラグイン管理部26と、プラグインキャッシュ管理部27を有する。各部の処理内容は図12~15のフローチャートの説明で併せて行う。
【0053】
図12は、イベント処理部によるイベントメッセージの処理のフローチャート図である。イベント処理部は、イベントメッセージが到着するたびに次の処理を繰り返す(S20、S20_1)。イベント処理部は、第1のメッセージキューMSG_QUE_1から受信したイベントメッセージの記載を検証する(S21)。この処理は、図11内のイベントメッセージ検証部20が実行する。イベントメッセージの記載が適切の場合、イベント処理部は、イベントメッセージからオブジェクト識別子oidを取得し(S22)、オブジェクトステートテーブルOB_ST_TBL内の取得したオブジェクト識別子oidと一致するオブジェクトのテーブルを検索する(S23)。これらの処理は、図11内のステート管理部21が行う。これにより、イベント処理部はイベントメッセージのオブジェクトが既に登録済みか否かを検出する。
【0054】
オブジェクト識別子oidと一致するオブジェクト(オブジェクトステートテーブル)を検出すると(S24のYES)、イベント処理部は、検出したオブジェクトが仮オブジェクトでなければ(S25のNO)、イベントメッセージ内のイベントデータ(更新ステート値)の処理を実行する(S26)。この処理は、図11のステート管理部21とプラグイン実行部22が行う。このイベントデータの処理S26については図13で説明する。
【0055】
一方、イベントメッセージのオブジェクト識別子oidのオブジェクトが未登録の場合(S24のNO)、イベント処理部は、オブジェクト識別子oidと一致するオブジェクトステートテーブルを検出することができない。この場合、イベント処理部は、取得したオブジェクト識別子oidで仮オブジェクト(仮のオブジェクトステートテーブル)を生成し(S27)、生成した仮オブジェクトにイベントメッセージを格納する(S28)。そして、イベント処理部はエラーメッセージER_MSGを発行する(S29)。これらの処理S27~S29は、図11のステート管理部21が実行する。エラーメッセージER_MESには、イベントメッセージ内のオブジェクト識別子oidとステージ番号stageが含まれる。
【0056】
また、オブジェクト識別子oidと一致するテーブルが仮オブジェクト(仮のオブジェクトステートテーブル)の場合(S25のYES)、イベント処理部は、仮オブジェクト(仮のオブジェクトステートテーブル)にイベントメッセージを格納し記憶する(S30)。これは、仮オブジェクト生成後に到着する未登録オブジェクトへのイベントメッセージを一旦保留にし、仮オブジェクトが本オブジェクトに変更された後に処理するためである。
【0057】
[オブジェクト自動生成部によるオブジェクト生成と発行]
図9、10で説明したとおり、イベント処理部が発行したエラーメッセージER_MSGのオブジェクト識別子oidとステージstageが、オブジェクト自動生成部OB_AT_GENにより分析される。オブジェクト自動生成部OB_AT_GENは、オブジェクト自動生成ルール定義ファイルRL_FLのルールを参照し、オブジェクト識別子oidとマッチするルールを検索、またはオブジェクト識別子oidとステージstageがマッチするルールを検索する。
【0058】
図19は、オブジェクト自動生成ルールの一例を示す図である。図19には3つのルールが示され、各ルールの条件は文字列の集合を一つの文字列で表現する正規表現により記述されている。条件1は、(1)オブジェクト識別子oidが、「car_」の後ろに0~9のいずれかの数字([0-9])と、0~9のいずれかの数字([0-9])を0回以上繰り返し(*)、(2)任意のステージである。マッチするoidの文字列の例は「car_2456」である。オブジェクト識別子oidがこの条件にマッチする場合、グループは「car」と車のモデル1「M1」である。条件2は、(1)オブジェクト識別子oidが、「car_」の後ろに1つのアルファベット([a-z])と任意の文字(.)を0回以上繰り返し(*)であり、(2)ステージ0、2もしくは5である。マッチするoidの文字列の例は「car_ih34fg」である。オブジェクト識別子oidがこの条件にマッチする場合、グループは「car」と車メーカ1「T社」である。条件3は、(1)オブジェクト識別子oidは任意であり、(2)ステージは1である。oidがこの条件にマッチする場合、グループは路上「road」である。
【0059】
オブジェクト自動生成部OB_AT_GENが、エラーメッセージのオブジェクト識別子oidとステージ番号sageからオブジェクトのグループを検出すると、オブジェクト生成メッセージcreateObjectを発行する。図5に示したとおり、このオブジェクト生成メッセージは、一旦第2のメッセージキューMSG_QUE_2にキューインされる。
【0060】
次に、オブジェクト自動生成部が発行したオブジェクト生成メッセージを最初に処理するグループ管理部の処理(図16、17、18)を説明してから、イベント処理部によるオブジェクト生成メッセージを含む制御オブジェクトの処理(図11、14、15)とイベントデータの処理(図11、13)を説明する。
【0061】
[グループ管理部による制御メッセージの処理(図16、17、18)]
図16は、グループ管理部の種々の処理部の関係を示すブロック図である。図16には、グループ管理部GRP_MNGが管理するグループ所属オブジェクトテーブルGRP_OB_TBL(ステージ番号テーブルSTG_TBL、グループ所属オブジェクト管理テーブルGRP_OB_MNG_TBL)が示される。図1に示したとおり、プロセッサ10がグループ管理プログラムを実行して、グループ管理部GRP_MNGを、イベントストリーム処理システム内に、複数のイベント処理部に共通に生成する。
【0062】
グループ管理部は、制御メッセージの第2のメッセージキューMSG_QUE_2から入力される制御メッセージをグローバルに処理し、制御メッセージを、オブジェクト識別子とステージ番号で特定されるイベント処理部に転送する。グループ管理部は、制御メッセージ検証部30と、メッセージ種別判別部31と、オブジェクト削除メッセージ処理部32と、オブジェクト生成メッセージ処理部と、フラッシュゴーストメッセージ処理部34とを有する。これらの処理部の処理内容は、図17,18のフローチャートの説明で併せて説明する。
【0063】
図17図18は、グループ管理部の処理のフローチャートを示す図である。グループ管理部GRP_MNGは、制御メッセージを受信するたびに以下の処理を繰り返し実行する(S70~S70_1)。ここでは、オブジェクト生成メッセージCreateObjectと、オブジェクト削除メッセージDeleteObjectと、フラッシュゴーストメッセージFlushGhostの処理を説明する。
【0064】
図17に示すとおり、グループ管理部は、受信した制御メッセージの記載内容が正しいか検証する(S71)。この処理は制御メッセージ検証部30により行われる。正しい場合、グループ管理部は、制御メッセージの種別を判別する(S72)。この処理はメッセージ種別判別部31により行われる。
【0065】
種別がオブジェクト生成メッセージCreateObjectの場合、グループ管理部は、ステージ番号テーブルSTG_TBLを検索しオブジェクト生成メッセージのオブジェクト識別子oidが登録済みか否かチェックし(S73)、未登録の場合、オブジェクト生成メッセージ内のオブジェクト識別子oidとステージ番号stageの対応を、ステージ管理テーブルに登録する(S74)。これらの処理S73、S74は、オブジェクト生成メッセージ処理部33により実行される。
【0066】
図17には示されないが、グループ管理部は、ステージ番号テーブルSTG_TBLにオブジェクト生成メッセージのオブジェクト識別子oidが登録済みの場合、イベント処理部の仮オブジェクトを削除するフラッシュゴーストメッセージ(仮オブジェクト削除メッセージ)を発行しても良い。未登録のオブジェクトのイベントメッセージに対して仮のオブジェクトステートテーブルを生成した後のオブジェクト生成メッセージCreateObjectよりも前に、管理者が未登録オブジェクトを生成するためにオブジェクト生成メッセージを発行している可能性があるからである。この場合は、仮オブジェクト削除メッセージFlushGhostを発生して仮オブジェクトを削除する。
【0067】
そして、オブジェクト管理部は、グループ所属オブジェクト管理テーブルGRP_OB_MNG_TBLを参照して、オブジェクト生成メッセージ内の全グループについて以下の処理を繰り返し実行する(S75~S75_1)。この処理はオブジェクト生成メッセージ処理部33により実行される。オブジェクト管理部は、メッセージ内のグループがグループ所属オブジェクト管理テーブル内に存在しない場合(S76のNO)、グループ所属オブジェクト管理テーブルにグループのテーブルを生成する(S77)。グループが存在する場合及び存在しない場合(S76のYES、NO)、グループ所属オブジェクト管理テーブルの該当するグループのテーブルに、メッセージ内のオブジェクト識別子oidを登録する(S78)。以上で、オブジェクトのグローバルな登録が完了する。そこで、オブジェクト管理部は、オブジェクト生成メッセージをイベント処理部へ転送する(S80)。
【0068】
図18に示すとおり、制御メッセージの種別がオブジェクト削除メッセージDeleteObjectの場合、グループ管理部は、グループ所属オブジェクト管理テーブルGRP_OB_MNG_TBLを参照して、当該テーブル内の各グループについて以下の処理を繰り返し実行する(S82~S82_1)。この処理はオブジェクト削除メッセージ処理部32により実行される。オブジェクト管理部は、各グループのテーブル内にメッセージのオブジェクト識別子oidが登録中か否かチェックし(S83)、登録中であれば(S83のYES)、各グループのテーブルからオブジェクト識別子oidのエントリを削除する(S84)。グループ管理部は、oidのエントリを削除した結果、各グループのテーブル内のエントリが0になれば(S85のYES)、そのグループのテーブルをグループ所属オブジェクト管理テーブルから削除する(S86)。
【0069】
さらに、グループ管理部は、ステージ番号テーブルSTG_TBLからメッセージ内のオブジェクト識別子oidのエントリを削除し(S88)、オブジェクト削除メッセージをイベント処理部に転送する(S89)。これらの処理も、オブジェクト削除メッセージ処理部32により実行される。
【0070】
図17に示すとおり、グループ管理部は、受信した制御メッセージがフラッシュゴーストメッセージFlushGhostの場合(S72)、そのメッセージをイベント処理部に転送する(S81)。この処理は、フラッシュゴーストメッセージ処理部34により行われる。
【0071】
[イベント処理部によるオブジェクト生成メッセージを含む制御オブジェクトの処理(図11、14、15)]
オブジェクト自動生成部が生成したオブジェクト生成メッセージCreateObjectは、グループ管理部GRP_MNGを経由して、イベント処理部に転送される。前述したとおり、転送先のイベント処理部はメッセージ内のオブジェクト識別子oidとステージ番号stageで特定される。以下、イベント処理部による制御メッセージの処理について説明する。
【0072】
図14図15は、イベント処理部によるオブジェクト生成メッセージを含む制御オブジェクトの処理のフローチャート図である。図14は、オブジェクト生成メッセージCreateObjectとオブジェクト削除メッセージDeleteObjectの処理を、図15は、プラグイン追加メッセージAddPluginとフラッシュゴーストメッセージFluschGhostの処理をそれぞれ示す。
【0073】
図14において、イベント処理部EV_PRCは、制御メッセージが到着するたびに以下の処理S41~S60を繰り返し実行する(S40,S40_1)。イベント処理部は、受信した制御メッセージの種別を判別する(S41)。処理S41はメッセージ判別部23により実行される。オブジェクト生成メッセージCreateObjectの場合、イベント処理部は、メッセージからオブジェクト識別子oidとグループ名を取得し(S42)、オブジェクト識別子oidと一致する仮オブジェクト(仮のオブジェクトステートテーブルOB_ST_TBL)が存在するか否かチェックする(S43)。
【0074】
仮オブジェクトが存在する場合(S43のYES)、イベント処理部は、仮オブジェクト(仮のオブジェクトステートテーブル)から本オブジェクト(本オブジェクトステートテーブル)を生成する(S47)。この処理は、仮オブジェクトの仮フラグを無効にして仮オブジェクトを本オブジェクトに変更する処理でもよい。さらに、イベント処理部は、オブジェクトグループテーブルOB_GRP_TBLにオブジェクト識別子oidと一致するエントリを追加し、メッセージ内の全グループをエントリに追加する(S48)。そして、イベント処理部は、仮オブジェクト(仮のオブジェクトステートテーブル)に関連して記憶されている保留中のイベントメッセージのイベントデータの処理S26の実行を繰り返す(S49、S26、S49_1)。
【0075】
仮オブジェクトが存在しない場合(S43のNO)、イベント処理部は、オブジェクトステートテーブルにメッセージ内のオブジェクト識別子oidのテーブルを追加し(S44)、さらに、オブジェクトグループテーブルに同じoidのテーブルを追加し、そのテーブルにメッセージ内の全グループを登録する(S45)。上記の処理S42~S49_1はオブジェクト管理部25により実行され、イベントメッセージのイベントデータの処理S26はステート管理部21及びプラグイン実行部22により行われる。
【0076】
ここで、制御メッセージがオブジェクト削除メッセージDeleteObjectの場合、イベント処理部は、メッセージからオブジェクト識別子oidを取得し(S51)、オブジェクトステートテーブルからoidと一致するテーブルを削除し(S52)、オブジェクトグループテーブルからoidと一致するテーブルを削除する(S53)。これらの処理はオブジェクト管理部25により実行される。
【0077】
図15において、制御メッセージがプラグイン追加メッセージAddPluginの場合、イベント処理部は、メッセージからグループ名とステート名とエンコードされたプラグインを取得し(S56)、プラグインをデコードしてプラグインバイナリ(クラス)を取得し(S57)、プラグインバイナリを実行中のプログラムに組み込み(S58)、プラグイン共通リポジトリPRG_RPSに登録する(S59)。さらに、イベント処理部は、グループ名が一致するグループ定義テーブルGRP_DF_TBLにステート名とプラグインIDの対応を登録する(S60)。上記処理S56~S60は、プラグイン管理部26とプラグインキャッシュ管理部27により実行される。
【0078】
制御メッセージがフラッシュゴーストFlushGhostの場合、イベント処理部は、メッセージからオブジェクト識別子oidを取得し(S54)、オブジェクトステートテーブルからそのoidと一致する仮のオブジェクトステートテーブルを削除する(S55)。フラッシュゴーストFlushGhostは、オブジェクト自動生成部がオブジェクト生成メッセージを生成できない場合に発行し、未登録オブジェクトのイベントメッセージのために生成した仮オブジェクトを削除するメッセージである。この場合、仮オブジェクトに関連付けて記憶されていた保留中のイベントメッセージの処理は実行されない。これにより、イベント処理部に、処理されない仮オブジェクトが蓄積されることが回避される。
【0079】
[イベント処理部によるイベントデータの処理(図11、13)]
図13は、イベント処理部によるイベントデータの処理のフローチャート図である。イベント処理部は、(1)オブジェクトステートテーブルにメッセージのステート名がない場合はステート名を追加し、(2)オブジェクトステートテーブルOB_ST_TBLのステート値をイベントメッセージ内のステート値で更新する(S18)。上記(1)のステート名を追加する処理は、仮のオブジェクトステートテーブルを本オブジェクトステートテーブルに変更した場合に、本オブジェクトステートテーブルには未だステート名が登録されていない場合や、未登録のステート名がイベントメッセージに含められていた場合に行われる。イベント処理部は、この処理S18を、イベントメッセージ内のステート値について繰り返し実行する(S17、S17_1)。この処理S17、S18、S17_1はステート管理部21により実行される。
【0080】
そして、イベント処理部は、イベントメッセージ内のオブジェクト識別子oidと一致するオブジェクトグループテーブルOB_GRP_TBLからグループ名を抽出する(S19)。さらに、イベント処理部は、抽出したオブジェクト識別子oidのオブジェクトに所属するグループそれぞれについて、以下の処理を繰り返す(S31~S31_1)。イベント処理部は、グループ定義テーブルGRP_DF_TBLをグループ名で検索し(S32)、グループ名と一致するグループ定義テーブルに登録中の更新されたステート名に対応するプラグインを繰り返し実行する(S33~S33_1)。すなわち、イベント処理部は、登録中のステート名のステート値が更新されていた場合(S34のYES)、グループ定義テーブルから更新ステートに対応するプラグインIDを抽出する(S35)。そして、グループ処理部は、プラグイン共通リポジトリから、上記の抽出したプラグインIDに対応するプラグインバイナリ(またはプラグインクラス)を取得し(S36)、プラグインを実行する(S37)。上記の処理S19、S32~S37は、プラグイン実行部22により実行される。
【0081】
以上、本実施の形態によれば、オブジェクトとオブジェクトのステートとオブジェクトのグループとが、オブジェクトテーブルOB_TBLのオブジェクトステートテーブル及びオブジェクトグループテーブルで管理され、グループと、ステート及びプラグインの対応との関係が、グループ定義テーブルで管理される。そして、オブジェクトを新規に登録する場合、オブジェクト識別子oidのオブジェクトテーブル(オブジェクトステートテーブル及びオブジェクトグループテーブル)を登録する。一方、未登録オブジェクトについてのイベントオブジェクトを受信すると、イベント処理部が、仮のオブジェクトステートテーブルを生成し、エラーメッセージを発行し、イベントメッセージを仮のオブジェクトステートテーブルに関連付けて格納し保留にしておく。そして、オブジェクト生成メッセージが自動で生成されると、そのオブジェクト生成メッセージに応答して、イベント処理部が仮オブジェクトを本オブジェクトに変更し、保留にしておいたイベントメッセージを処理する。
【0082】
上記のとおり、自動生成されたオブジェクト(オブジェクトテーブル)に基づいて、イベントメッセージを処理することにより、オブジェクトを事前に登録していなくても、送られてきたイベントメッセージを漏れなく処理することができる。また、送信されたイベントメッセージが、オブジェクト未登録を理由に未処理にされることが回避される。
【0083】
未登録オブジェクトのイベントメッセージに応答して、イベント処理部がイベントメッセージを保留にし、エラーメッセージを発行し、そのエラーメッセージに基づいてオブジェクト生成メッセージが自動で発行され、仮オブジェクトを本オブジェクトに変更する。この処理により、イベントストリーム処理システムのストリーム処理への影響を抑えつつ、未登録オブジェクトのイベントメッセージに対して、オブジェクトの登録とイベントの処理を行うことができる。
【0084】
イベントメッセージを仮オブジェクト内にステートとして不揮発化して保持することで、各イベントメッセージは確実に1回だけ処理されることが保証される。もし、仮オブジェクトを生成したときに、オブジェクト生成メッセージの発行とイベントメッセージのメッセージキューMSG_QUE_1への再投入を自動で行うと、オブジェクト生成メッセージの処理が失敗すると、再発行したイベントメッセージに対して更に仮オブジェクトが生成され、無限ループになることが想定される。本実施の形態はそのような無限ループを回避できる。
【0085】
さらに、オブジェクト自動生成部がエラーメッセージから自動でオブジェクト生成メッセージを発行できない場合、フラッシュゴーストメッセージによりイベント処理部により仮に生成した仮オブジェクトが削除される。
【0086】
グループ管理部が、オブジェクト自動生成部がエラーメッセージから自動で発生したオブジェクト生成メッセージのグローバル登録を失敗した場合にも、フラッシュゴーストメッセージを発生して、イベント処理部により仮オブジェクトを削除するようにしてもよい。
【0087】
本実施の形態によれば、図5に示したメッセージキューMSG_QUEから複数のステージのイベント処理部への処理の流れに逆行するオブジェクト生成メッセージの発行ループが生成されない。これにより、イベントストリーム処理システムのストリーム処理への影響を抑制できる。
【0088】
[第2の実施の形態]
図20は、第2の実施の形態のイベントストリーム処理システムの構成例を示す図である。図5の例では、オブジェクト自動生成部OB_AT_GENの処理と、イベントストリーム処理システムの処理とが別々に生成され、オブジェクト自動生成部の処理が発行したオブジェクト生成メッセージが、第2のメッセージキューMSG_QUE_2を経由して、イベントストリーム処理システムの処理のグループ管理部に入力された。それに対して、図20の例では、オブジェクト自動生成部の処理とイベントストリーム処理システムの処理が、共通の処理にされる。それに伴い、オブジェクト自動生成部が発行したオブジェクト生成メッセージが第2のメッセージキューMSG_QUE_2を経由せずにイベントストリーム処理システム内のグループ管理部に入力される。処理が異なる場合は、メッセージがキューを介して転送されるが、同じ処理内ではその必要がなくなる。
【符号の説明】
【0089】
1:イベントストリーム処理システム
EV_PRC_PRG:イベントストリーム処理プログラム
EV_PRC:イベント処理部
SV_EV_PRC:サービスイベント処理部
GRP_MNG:グループ管理部
OB_AT_GEN:オブジェクト自動生成部
PM:物理マシン
10:プロセッサ
CORE:コア、プロセッサコア
TASK_SL:タスクスロット
SUB_TASK:サブタスク
MSG_QUE:メッセージキュープログラム、メッセージキュー
OB_TBL:オブジェクトテーブル
OB_ST_TBL:オブジェクトステートテーブル
OB_GRP_TBL:オブジェクトグループテーブル
PLG_TBL:プラグイン管理テーブル
GRP_DF_TBL:グループ定義テーブル
PLG_RPS:プラグイン共通リポジトリ
GRP_OB_TBL:グループ所属オブジェクトテーブル
GRP_OB_MNG_TBL:グループ所属オブジェクト管理テーブル
STG_TBL:ステージ番号テーブル
OBJ_1、OBJ_2:オブジェクト
EV_MSG:イベントメッセージ
CN_MSG:制御メッセージ
createObject:オブジェクト生成メッセージ
addPulugin:プラグイン追加メッセージ
deleteObject:オブジェクト削除メッセージ
oid:オブジェクト識別子
state:ステート名、ステート
state_vl:ステート値
gid:グループ識別子
plg_id:プラグイン識別子
plg_bin:プラグインバイナリ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20