(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-12
(45)【発行日】2022-10-20
(54)【発明の名称】ユースケース仕様およびランタイム実行
(51)【国際特許分類】
G06F 8/20 20180101AFI20221013BHJP
G06F 9/50 20060101ALI20221013BHJP
【FI】
G06F8/20
G06F9/50 150B
(21)【出願番号】P 2021526390
(86)(22)【出願日】2020-03-05
(86)【国際出願番号】 US2020021182
(87)【国際公開番号】W WO2020185512
(87)【国際公開日】2020-09-17
【審査請求日】2021-05-13
(32)【優先日】2020-03-04
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-03-11
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】504080663
【氏名又は名称】エヌイーシー ラボラトリーズ アメリカ インク
【氏名又は名称原語表記】NEC Laboratories America, Inc.
(74)【代理人】
【識別番号】100123788
【氏名又は名称】宮崎 昭夫
(74)【代理人】
【識別番号】100127454
【氏名又は名称】緒方 雅昭
(72)【発明者】
【氏名】ヤン、 イ
(72)【発明者】
【氏名】ラオ、 クナル
(72)【発明者】
【氏名】チャクラッダー、 スリマット
(72)【発明者】
【氏名】コヴィエロ、 ジュゼッペ
(72)【発明者】
【氏名】フェン、 ミン
(72)【発明者】
【氏名】サンカラダス、 ムルガン
【審査官】中村 信也
(56)【参考文献】
【文献】特開2017-068480(JP,A)
【文献】特表2018-512087(JP,A)
【文献】特開2017-151523(JP,A)
【文献】国際公開第2013/145199(WO,A1)
【文献】国際公開第2009/098909(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/20
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
コンピュータによって実現される方法であって、
ユースケース仕様および該ユースケースに対応するユースケースランタイム仕様を取得すること(810)であって、該ユースケースは、各々がタスクを実行するための該ユースケース内の対応する機能を提供するマイクロサービスに関連付けられる複数のアプリケーションを含むことと、
前記複数のうちの少なくとも1つのアプリケーションの少なくとも1つのインスタンスが、前記ユースケース仕様および前記ユースケースランタイム仕様に基づいて、前記ユースケースの実行中に再利用され得ることを判定すること(820)と、
前記ユースケースの実行中に前記少なくとも1つのインスタンスを再利用すること(830)とを含む方法。
【請求項2】
請求項1に記載の方法において、
前記ユースケース仕様の取得は、さらに、
ユースケース識別子、ユースケース名およびユースケースメタデータを含む前記ユースケースに関連付けられたデータと、
アプリケーション依存関係およびアプリケーションインスタンスと、
インスタンス接続とを指定することによって前記ユースケースを指定することを含み、
前記ユースケースランタイム仕様の取得は、さらに
前記ユースケース識別子と、
インスタンス名と、
ユースケースノード/マシンと、
ユースケース構成とを指定することによってユースケース実行を指定することを含む方法。
【請求項3】
請求項1に記載の方法において、
前記ユースケースの実行中に再利用することができる前記少なくとも1つのインスタンスを判定することは、前記仕様からのインスタンス構成が前記複数のアプリケーションの少なくとも1つの既存のインスタンスと一致することを判定することをさらに含む方法。
【請求項4】
請求項1に記載の方法において、
前記ユースケースの実行中に再利用することができる前記少なくとも1つのインスタンスを判定することは、前記仕様からの前記インスタンスの構成およびインスタンスノード/マシンの構成が、前記複数のアプリケーションの少なくとも1つの既存のインスタンスと一致することを判定することをさらに含む方法。
【請求項5】
請求項1に記載の方法において、
前記ユースケースの実行中に再利用することができる前記少なくとも1つのインスタンスを判定することは、前記少なくとも1つのアプリケーションの前記少なくとも1つのインスタンスが既に存在することを判定することをさらに含む方法。
【請求項6】
請求項1に記載の方法において、
前記ユースケース仕様および前記ユースケースランタイム仕様に基づいて前記タスクを実行するために、ランタイムシステム内で前記ユースケースの実行を管理することをさらに含み、前記管理することは、
前記複数のアプリケーションに対応するユースケース子インスタンス間の接続をセットアップすることを含む前記複数のアプリケーションを組み合わせることによって前記ユースケースを構築することと、
前記マイクロサービスを提供するために前記ユースケース子インスタンスを実行することを含む前記ユースケースを実行することと、
前記ユースケースの実行を終了するためのハンドラをセットアップすることと、
前記ハンドラによって受信された信号に基づいて、所定の時間間隔の後に前記ユースケースを停止すべきであることを判定することと、
前記ユースケースの停止させることとを含む方法。
【請求項7】
請求項6に記載の方法において、
前記ユースケース子インスタンスを取得することをさらに含み、該取得することは、
子インスタンスと、メモリ内での生成型に基づいてセットアップされた前記子インスタンス間の接続とをロードすることと、
すべてのユースケース子インスタンスがメモリ内に存在しないと判定することと、
生成型に基づいてメモリ内に存在しない1つ以上の子インスタンスを生成することとを含み、
前記ユースケースが所定の時間間隔の後に停止されるべきであることを判定することは、
前記ランタイムシステムを前記所定の時間間隔の間スリープ状態にすることと、
前記ランタイムシステムがウェイクアップした後、前記ハンドラが前記ユースケースを停止する信号を受信したことを判定することとを含む方法。
【請求項8】
請求項6に記載の方法において、
前記ユースケースの実行を管理することは、前記ユースケースの実行が突然失敗したことに応答して、以前に存在していた子インスタンスを再利用することによって動作を再開することをさらに含む方法。
【請求項9】
コンピュータプログラムであって、該
コンピュータプログラムは、方法をコンピュータにより実行可能であり、前記方法は、
ユースケース仕様および該ユースケースに対応するユースケースランタイム仕様を取得すること(810)であって、該ユースケースは、各々がタスクを実行するための該ユースケース内の対応する機能を提供するマイクロサービスに関連付けられる複数のアプリケーションを含むことと、
前記複数のうちの少なくとも1つのアプリケーションの少なくとも1つのインスタンスが、前記ユースケース仕様および前記ユースケースランタイム仕様に基づいて、前記ユースケースの実行中に再利用され得ることを決定すること(820)と、
前記ユースケースの実行中に前記少なくとも1つのインスタンスを再利用すること(830)とを含む
コンピュータプログラム。
【請求項10】
請求項9に記載の
コンピュータプログラムにおいて、
前記ユースケース仕様の取得は、さらに、
ユースケース識別子、ユースケース名およびユースケースメタデータを含む前記ユースケースに関連付けられたデータと、
アプリケーション依存関係およびアプリケーションインスタンスと、
インスタンス接続とを指定することによって前記ユースケースを指定することを含み、
前記ユースケースランタイム仕様の取得は、さらに
前記ユースケース識別子と、
インスタンス名と、
ユースケースノード/マシンと、
ユースケース構成とを指定することによってユースケース実行を指定することを含む
コンピュータプログラム。
【請求項11】
請求項9に記載の
コンピュータプログラムにおいて、
前記ユースケースの実行中に再利用することができる前記少なくとも1つのインスタンスを判定することは、前記仕様からのインスタンス構成が前記複数のアプリケーションの少なくとも1つの既存のインスタンスと一致することを判定することをさらに含む
コンピュータプログラム。
【請求項12】
請求項9に記載の
コンピュータプログラムにおいて、
前記ユースケースの実行中に再利用することができる前記少なくとも1つのインスタンスを判定することは、前記仕様からの前記インスタンスの構成およびインスタンスノード/マシンの構成が、前記複数のアプリケーションの少なくとも1つの既存のインスタンスと一致することを判定することをさらに含む
コンピュータプログラム。
【請求項13】
請求項9に記載の
コンピュータプログラムにおいて、
前記ユースケースの実行中に再利用することができる前記少なくとも1つのインスタンスを判定することは、前記少なくとも1つのアプリケーションの前記少なくとも1つのインスタンスが既に存在することを判定することをさらに含む
コンピュータプログラム。
【請求項14】
請求項9に記載の
コンピュータプログラムにおいて、
前記方法は、前記ユースケース仕様および前記ユースケースランタイム仕様に基づいて前記タスクを実行するために、ランタイムシステム内で前記ユースケースの実行を管理することをさらに含み、前記管理することは、
前記複数のアプリケーションに対応するユースケース子インスタンス間の接続をセットアップすることを含む前記複数のアプリケーションを組み合わせることによって前記ユースケースを構築することと、
前記マイクロサービスを提供するために前記ユースケース子インスタンスを実行することを含む前記ユースケースを実行することと、
前記ユースケースの実行を終了するためのハンドラをセットアップすることと、
前記ハンドラによって受信された信号に基づいて、所定の時間間隔の後に前記ユースケースを停止すべきであることを判定することと、
前記ユースケースの停止させることとを含む
コンピュータプログラム。
【請求項15】
請求項14に記載の
コンピュータプログラムにおいて、
前記方法は、前記ユースケース子インスタンスを取得することをさらに含み、該取得することは、
子インスタンスと、メモリ内での生成型に基づいてセットアップされた前記子インスタンス間の接続とをロードすることと、
すべてのユースケース子インスタンスがメモリ内に存在しないと判定することと、
生成型に基づいてメモリ内に存在しない1つ以上の子インスタンスを生成することとを含み、
前記ユースケースが所定の時間間隔の後に停止されるべきであることを判定することは、
前記ランタイムシステムを前記所定の時間間隔の間スリープ状態にすることと、
前記ランタイムシステムがウェイクアップした後、前記ハンドラが前記ユースケースを停止する信号を受信したことを判定することとを含む
コンピュータプログラム。
【請求項16】
請求項14に記載の
コンピュータプログラムにおいて、
前記ユースケースの実行を管理することは、前記ユースケースの実行が突然失敗したことに応答して、以前に存在していた子インスタンスを再利用することによって動作を再開することをさらに含む
コンピュータプログラム。
【請求項17】
システムであって、
プログラムコードを記憶するためのメモリデバイスと、
メモリデバイスに動作可能に結合され、前記メモリデバイスに記憶されたプログラムコードを実行するように構成された少なくとも1つのプロセッサデバイスとを有し、前記少なくとも1つのプロセッサデバイスは、
ユースケース仕様および該ユースケースに対応するユースケースランタイム仕様を取得し(810)、該ユースケースは、各々がタスクを実行するための該ユースケース内の対応する機能を提供するマイクロサービスに関連付けられる複数のアプリケーションを含み、
前記複数のうちの少なくとも1つのアプリケーションの少なくとも1つのインスタンスが、前記ユースケース仕様および前記ユースケースランタイム仕様に基づいて、前記ユースケースの実行中に再利用され得ることを判定し(820)、
前記ユースケースの実行中に前記少なくとも1つのインスタンスを再利用する(830)システム。
【請求項18】
請求項17に記載のシステムにおいて、前記少なくとも1つのプロセッサデバイスはさらに、
ユースケース識別子、ユースケース名およびユースケースメタデータを含む前記ユースケースに関連付けられたデータと、
アプリケーション依存関係およびアプリケーションインスタンスと、
インスタンス接続とを指定することによって前記ユースケース仕様を取得し、
前記ユースケース識別子と、
インスタンス名と、
ユースケースノード/マシンと、
ユースケース構成とを指定することによって前記ユースケースランタイム仕様を取得するように構成されたシステム。
【請求項19】
請求項17に記載のシステムにおいて、
前記少なくとも1つのプロセッサデバイスはさらに、
前記複数のアプリケーションに対応するユースケース子インスタンス間の接続をセットアップすることを含む前記複数のアプリケーションを組み合わせることによって前記ユースケースを構築することと、
前記マイクロサービスを提供するために前記ユースケース子インスタンスを実行することを含む前記ユースケースを実行することと、
前記ユースケースの実行を終了するためのハンドラをセットアップすることと、
ランタイムシステムを所定の時間間隔の間スリープ状態にすることと、前記ランタイムシステムがウェイクアップした後、前記ハンドラが前記ユースケースを停止する信号を受信したことを判定することとを含む、前記ハンドラによって受信された信号に基づいて、前記所定の時間間隔の後に前記ユースケースを停止すべきであることを判定することと、
前記ユースケースの停止させることとによって、前記ユースケース仕様および前記ユースケースランタイム仕様に基づいて前記タスクを実行するために、前記ランタイムシステム内で前記ユースケースの実行を管理するために前記メモリデバイスに記憶されたプログラムコードを実行するように構成されたシステム。
【請求項20】
請求項19に記載のシステムにおいて、
前記少なくとも1つのプロセッサデバイスはさらに、前記ユースケースの実行が突然失敗したことに応答して、以前に存在していた子インスタンスを再利用することによって動作を再開することで、前記ユースケースの実行を管理するように構成されるシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願情報
本出願は、2019年3月11日に出願された仮出願シリアル番号62/816,427、および2020年3月4日に出願された米国特許出願第16/809,154号の優先権を主張し、その全体が参照により本明細書に組み込まれる。
【背景技術】
【0002】
本発明は、コンピュータアプリケーションに関し、より詳細には、ユースケースランタイム実行中のアプリケーションインスタンスを再利用することに関する。
関連技術の説明
【0003】
アプリケーションは、問題を解決するために使用される特定の機能を提供するマイクロサービスとして機能することができる。アプリケーションインスタンスまたはインスタンスを生成し、実行することができ、アプリケーションに関連するマイクロサービスを提供する。必要に応じて、アプリケーションの複数のインスタンスを生成し、それぞれが異なる入力データを処理できる。
【発明の概要】
【0004】
本発明の一態様によれば、コンピュータによって実現される方法が提供される。コンピュータによって実現される方法は、ユースケース仕様および該ユースケースに対応するユースケースランタイム仕様を取得することを含む。ユースケースは、各々がタスクを実行するための該ユースケース内の対応する機能を提供するマイクロサービスに関連付けられる複数のアプリケーションを含む。方法はさらに、前記複数のうちの少なくとも1つのアプリケーションの少なくとも1つのインスタンスが、前記ユースケース仕様および前記ユースケースランタイム仕様に基づいて、前記ユースケースの実行中に再利用され得ることを判定することと、前記ユースケースの実行中に前記少なくとも1つのインスタンスを再利用することとを含む。
【0005】
本発明の別の実施形態によれば、システムが提供される。システムは、プログラムコードを記憶するためのメモリデバイスと、メモリデバイスに動作可能に結合された少なくとも1つのプロセッサデバイスとを有する。少なくとも1つのプロセッサデバイスは、ユースケース仕様および該ユースケースに対応するユースケースランタイム仕様を取得するために前記メモリデバイスに記憶されたプログラムコードを実行するように構成される。該ユースケースは、各々がタスクを実行するための該ユースケース内の対応する機能を提供するマイクロサービスに関連付けられる複数のアプリケーションを含む。少なくとも1つのプロセッサデバイスはさらに、前記複数のうちの少なくとも1つのアプリケーションの少なくとも1つのインスタンスが、前記ユースケース仕様および前記ユースケースランタイム仕様に基づいて、前記ユースケースの実行中に再利用され得ることを判定し、前記ユースケースの実行中に前記少なくとも1つのインスタンスを再利用するために前記メモリデバイスに記憶されたプログラムコードを実行するように構成される。
【0006】
これらおよび他の特徴および利点は、添付の図面に関連して読まれるべき、その例示的な実施形態の以下の詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【0007】
本開示は、以下の図面を参照して、好ましい実施形態の以下の説明において詳細を提供する。
【0008】
【
図1】本発明の一実施形態による、ユースケース仕様、ユースケースランタイム仕様を指定し、ユースケース実行を管理するためのシステム/方法の高レベル概要図である。
【0009】
【
図2】本発明の一実施形態によるユースケース仕様の図である。
【0010】
【
図3】本発明の一実施形態によるユースケースランタイム仕様の図である。
【0011】
【
図4】
図4は、本発明の一実施形態による、ランタイムユースケース実行手順を実施するためのシステム/方法のブロック/フロー図である。
【0012】
【
図5】本発明の一実施形態による、ランタイム実行中に子インスタンスを生成するためのシステム/方法のブロック/フロー図である。
【0013】
【
図6】本発明の一実施形態による、ランタイム実行中に接続をセットアップするためのシステム/方法のブロック/フロー図である。
【0014】
【
図7】本発明の一実施形態による、ユースケースを指定し、ユースケースの実行を指定し、ユースケースの実行を管理するためのシステム/方法のブロック/フロー図である。
【0015】
【
図8】本発明の一実施形態による、アプリケーションインスタンスを再利用し、共有するためのシステム/方法のブロック/フロー図である。
【0016】
【
図9】本発明の一実施形態による、アプリケーションインスタンスを再利用または共有するように構成されたシステムの一例のブロック/フロー図である。
【0017】
【
図10】本発明の一実施形態によるコンピュータシステムを示すブロック/フロー図である。
【発明を実施するための形態】
【0018】
本明細書で説明される実施形態は、タスク(例えば、より高いレベルのリアルタイム/バッチタスク)を実行し、かつ/または実行時に複雑な問題を解決するために、「ビルディングブロック」としてそれぞれのマイクロサービスに関連付けられた複数のアプリケーションを単一のエンティティ(本明細書ではユースケースと呼ぶ)に結合することができるランタイムシステムを提供する。各マイクロサービスは、ユースケース内で対応する機能を提供することができ、アプリケーションインスタンスを生成および/または実行して、対応するマイクロサービスを提供することができる。アプリケーションの複数のインスタンスが生成され得るため、必要ならばタスクを実行し、ユースケースの個々のアプリケーションが解決できるよりもかなり多くの問題を解決することができる。本明細書で説明する実施形態によるユースケースは、例えば、エッジデバイス、サーバ、クラウドデバイス、またはそれらの任意の組合せ上で実行することができる。
【0019】
ここで、同様の数字が同じまたは同様の要素を表した図と、最初に
図1とを詳細に参照すると、ユースケース仕様、ユースケースランタイム仕様を指定し、ユースケース実行を管理するためのシステム/方法100の高レベルの概要を示すブロック/フロー図が提供される。
【0020】
図示のように、ユースケース仕様110およびユースケースランタイム仕様120は、ランタイムシステム130によって取得される。
【0021】
図2を参照して以下でさらに詳細に説明されるように、ユースケース仕様110は、ユースケースに含まれるアプリケーション、ユースケースの実行のためのインスタンス、インスタンスがどのように生成されるべきか、さまざまなインスタンス間の接続、個々のインスタンスの構成、およびそれらが実行されるべきノード/マシンなどを含むがこれらに限定されないユースケース詳細を指定することができる。
【0022】
図3を参照して以下でさらに詳細に説明するように、ユースケースランタイム仕様120は、生成される必要があるユースケースのインスタンスのユースケース識別子(ID)、ユースケースインスタンスの一意の名前、ユースケースの実行を開始するノード/マシン、およびユースケース全体の構成を含むが、これらに限定されない、ユースケースの実行に関する詳細を指定することができる。
【0023】
ランタイムシステム130は、仕様110,120に基づいて、ユースケースの実行を管理することができる。ランタイムシステム130は、複数のマイクロサービスを組み合わせるかまたはステッチすることによって、個々のアプリケーションの実行を管理することができ、その結果、個々のアプリケーションが一緒に働き、互いに話し合うことによるより小さな問題を解決することによって、より大きな問題を解決することができる。ランタイムシステム130は、その子インスタンスと、それらの間の任意の接続を含む、ユースケース全体の実行をきれいに停止し、終了することができる。
【0024】
さらに、ランタイムシステム130は、ユースケース実行の突然の中断の場合にフォールトトレランスを提供することができる。より具体的には、何らかの理由でユースケース実行が突然停止または失敗した場合(例えば、電源が落ちた場合)、ランタイムシステムが復帰したときに、ランタイムシステムは重複する子インスタンスを生成する必要がない。代わりに、ランタイムシステムは以前に存在したインスタンスを再利用することで操作を再開できる。
【0025】
ランタイムシステム130によるユースケース実行の管理に関する更なる詳細は、
図4を参照して以下に説明される。
【0026】
図2を参照すると、ユースケース仕様200を示す図が示されている。上述のように、ユースケースは、タスクを実行するために、それぞれのマイクロサービスに関連する複数のアプリケーションを含むことができる。各マイクロサービスは、対応する機能を提供することができ、アプリケーションのインスタンスを生成および/または実行して、対応するマイクロサービスを提供することができる。
【0027】
ユースケース仕様200は、ユースケースに含まれるアプリケーション、ユースケースの実行のためのインスタンス、インスタンスを生成する方法、様々なインスタンス間の接続、個々のインスタンスの構成、およびそれらが実行されるべきノード/マシンなどを含むが、これらに限定されないユースケース詳細を指定することができる。
【0028】
より具体的には、
図2に示すように、ユースケース仕様200は、ユースケースのためのユースケースIDを指定するユースケース識別子(ID)仕様202と、そのユースケースのための名前を指定するユースケース名仕様204と、そのユースケースに関連する他のメタデータを指定するユースケースメタデータ仕様206とを含むことができる。
【0029】
ユースケースIDは、複数のアプリケーションを含むことができるユースケースを参照するために内部で使用することができる。その他のメタデータは、ユースケースのバージョン番号、ユースケースに関連付けられた任意の説明、ユースケースに関連する詳細が見つかるユニバーサルリソース識別子(URI)またはユニバーサルリソースロケータ(URL)、ユースケースが実行されるオペレーティングシステム(OS)およびアーキテクチャ、ユースケースの管理者、およびユースケースに関連するその他の関連メタデータを含めることができる。
【0030】
ユースケース仕様200は、アプリケーション依存性仕様208をさらに含むことができる。上述したように、ユースケースは複数のアプリケーションを含むことができる。ユースケースを構成するアプリケーションは、ユースケースID、ユースケース名およびユースケースメタデータが提供された後に指定できる。
【0031】
各アプリケーションは、アプリケーションメタデータ210のセットに関連付けることができる。図示のように、アプリケーションメタデータ210のセットは、アプリケーションを内部的に参照するアプリケーションID212と、ユースケースの一部として使用されるアプリケーションのバージョンに対応するアプリケーションバージョン214とを含むことができる。
【0032】
アプリケーションは、アプリケーションが設計されている対応するマイクロサービスを実行および提供する1つまたは複数のインスタンスを含むことができる。ユースケース仕様200は、アプリケーションの1つまたはインスタンスを指定するアプリケーションインスタンス仕様216をさらに含むことができる。ユースケースがアプリケーションを必要とする場合、アプリケーションの複数のインスタンスが存在することができる。アプリケーションの各インスタンスは、異なる入力データに基づいて動作することができる。
【0033】
各インスタンスは、一組のインスタンスメタデータ220に関連付けることができる。インスタンスメタデータ220のセットは、インスタンス名222、インスタンスが属するアプリケーションID212およびインスタンスの生成型224を含むことができる。生成型224は、ランタイムシステムが対応するインスタンスを生成して生み出すべき方法を参照する。
【0034】
1つのインスタンスに対して、複数の生成型のうちの1つを指定することができる。インスタンスに対して指定することができる生成型の非限定的な例には、「新規」、「再利用」、「動的」、「UniqueSiteWide」、および「UniqueNodeWide」が含まれる。
【0035】
インスタンスに新規の生成型が指定されている場合、ランタイムシステムは常に新しいインスタンスを生成する。
【0036】
インスタンスに再利用の生成型が指定されている場合、ランタイムシステムはまず、同じ設定ですでに実行されている他のインスタンスがあるかどうかを確認する。指定されている場合、ランタイムシステムはユースケースの実行中にそのインスタンスを再利用する。それ以外の場合は、ランタイムシステムによって新しいインスタンスが生成される可能性がある。
【0037】
インスタンスに動的の生成型が指定されている場合、ユースケースの起動時にランタイムシステムはインスタンスを生成しない。代わりに、インスタンスは、ユースケースの実行が開始された後、オンデマンドで動的に生成される。
【0038】
インスタンスにUniqueSiteWideの生成型が指定されている場合、ランタイムシステムはサイト全体の広範な展開にわたって単一のインスタンスを生成する。インスタンスがすでに実行されている場合、ランタイムシステムはユースケースの実行中にそのインスタンスを使用する。インスタンスが実行されてない場合、新しいインスタンスが生成され、開始される。
【0039】
インスタンスにUniqueNodeWideの生成型が指定されている場合、ランタイムシステムは、インスタンスが実行される特定のノード/マシン上に単一のインスタンスを生成する。ノード/マシンは、ユースケースの実行中に指定することができる。指定されたノード/マシン上で、インスタンス構成に一致する別のインスタンスがすでに実行されている場合、ランタイムシステムは、ユースケースの実行中にそのインスタンスを使用する。インスタンス構成に一致する別のインスタンスが実行されていない場合、新しいインスタンスが生成され、開始される。
【0040】
ユースケース仕様200は、さらに、アプリケーションの様々なインスタンス間の接続を指定するインスタンス接続仕様128を含むことができる。接続は、特定のマイクロサービスによって提供される出力が入力として次のマイクロサービスに渡されるように、マイクロサービスが互いに接続し、話す方法を定義することができる。様々なマイクロサービスが接続されてもよく、これらのマイクロサービスのトポロジが生成されてもよく、それによってユースケース全体を形成する。
【0041】
各接続は、一組の接続メタデータ230に関連付けることができる。接続メタデータ230のセットは、ソースインスタンス232、宛先インスタンス234およびバインディング情報236を含むことができる。インスタンス間の通信は、適切なメッセージキューおよび/またはアプリケーションプログラミングインターフェース(API)(例えば、HTTP(S)ベースのRESTful API)を介して行われてもよく、ここで、バインディング情報236は、ランタイムシステムに、どのインスタンスがバインドし、どのインスタンスが接続し、必要な入力データを取得する必要があるかを伝えることができる。
【0042】
例えば、1つの適当なメッセージキューは、オープンソースの高性能非同期メッセージライブラリであるZeroMQによって提供される。メッセージ指向ミドルウェアとは異なり、ZeroMQは専用のメッセージブローカなしで実行できる。ソースインスタンス232および宛先インスタンス234には、接続時に使用するインスタンス名222およびエンドポイント名242を指定することができる。
【0043】
したがって、上述のユースケース仕様200を使用して、ユースケース全体が構築および実行するために様々なインスタンスにわたって行われる必要がある様々なアプリケーション、それらのインスタンスおよび接続を識別することができる。
【0044】
ユースケース仕様200は、ユースケースをコンパイルし、ユースケースのバイナリパッケージを生成するための入力として使用することができる。バイナリパッケージを生成するために、ユースケース内の各アプリケーションは、アプリケーションメタデータ210のセット(例えば、アプリケーションID212およびアプリケーションバージョン214)に基づいて、そのバイナリパッケージを生成するために1つずつコンパイルすることができる。
【0045】
ユースケースの統一された設定は、インスタンスメタデータ220のセット(例えば、インスタンス名222、アプリケーションID212および生成型224)に基づいて、ランタイムに起動される各インスタンスの設定の組み合わせとして生成することができる。
【0046】
ユースケースのサンプル構成は、インスタンスメタデータ220のセット(例えば、インスタンス名222、アプリケーションID212および生成型224)に基づいて、ランタイムに起動される各インスタンスのサンプル構成の組み合わせとして生成することができる。
【0047】
バイナリパッケージ、統一構成、サンプル構成を含むユースケースのパッケージを生成できる。
【0048】
図3を参照すると、ユースケースランタイム仕様300を示す図が示されている。ユースケースランタイム仕様300は、ユースケースの実行に関する詳細を規定することができる。
【0049】
より具体的には、図示されるように、ユースケースランタイム仕様300は、生成される必要があるユースケースのインスタンスのためのユースケースIDを指定するユースケース識別子(ID)仕様302、ユースケースインスタンスの固有の名前を指定するインスタンス名仕様304、ユースケースの実行を開始するノード/マシンを指定するユースケースノード/マシン仕様306およびユースケース全体のための構成を指定するユースケース構成仕様308を含むことができる。
【0050】
ユースケース構成仕様308は、ユースケースに属する各インスタンスの構成に関連付けることができる。例えば、各インスタンスの構成は、一組の構成メタデータ310に基づいて、インスタンス名304、インスタンスを起動する必要があるインスタンスノード/マシン312およびインスタンス自体のインスタンス構成314を含むことができる。
【0051】
ユースケースランタイム仕様300は、デフォルトのユースケース設定(個々のアプリケーションインスタンスのデフォルト設定を組み合わせたもの)とユースケースインスタンスを実行する必要があるノードとをオーバーライドできる。この設定がユースケースランタイム仕様で提供されていない場合、ランタイムシステムはデフォルトのユースケース設定を使用し、デフォルトのノードはユースケースを実行する。
【0052】
いったんランタイムシステムがユースケース指定とユースケースランタイム指定(
図1~3を参照して前述したものなど)を持つと、ランタイムシステムは、ユースケースを構築、生成および実行するためのランタイム実行手順を開始できる。ランタイム実行手順に関するさらなる詳細を、
図4を参照して以下に説明する。
【0053】
図4を参照すると、タスクを実行するためにランタイムでユースケースの実行を管理するためのシステム/方法400を示すブロック/フロー図が提供されている。
図1のランタイムシステム130のようなランタイムシステムは、ユースケース仕様と、ユースケースに対応するユースケースランタイム仕様とを用いて、ユースケースを構築し実行することができる。
【0054】
ブロック410において、ランタイムシステムが入力を受け取ると、アプリケーションまたは子インスタンスおよびそれらの接続が読み込まれ、メモリ内にロードされる。インスタンスと接続とがメモリ内にロードされた後、ランタイムシステムは実行用のユースケースの構築を開始し、必要な子インスタンスを生成できる。
【0055】
より具体的には、ユースケースを構築することは、ユースケースを構築するためのユースケース子インスタンスを取得することを含むことができる。システム/方法400は、インスタンスの設定がアプリケーションの既存のインスタンスと一致する場合、インスタンスの設定が実行すべきノード/マシンと一致する場合などに、既存のユースケース子インスタンスを再利用することができる。したがって、ブロック420で、すべてのユースケース子インスタンスが存在するかどうかが判定される。例えば、ランタイムシステムは、ユースケースに対して既に存在する、以前に生成された任意の子インスタンスについてデータベースをチェックすることができる。これは、ユースケースの実行が中断した場合にランタイムシステムによって提供されるフォールトトレランスの一部になる。さらに具体的には、ユースケースの実行が突然停止したり失敗したりする(電源が切れるなど)場合に、ランタイムシステムが復帰したときに、ランタイムシステムが重複する子インスタンスを生成する必要はない。代わりに、以前に存在した子インスタンスを再利用することで、ランタイムシステムは操作を再開できる。
【0056】
すべてのユースケース子インスタンスが存在する場合、子インスタンスを生成する必要はない。すべてのユースケース子インスタンスが存在しなければ、ランタイムシステムは、ブロック430において、1つ以上のユースケース子インスタンスを生成することができる。ユースケース子インスタンスは、すべてのユースケース子インスタンスを反復処理し、それらを1つずつ生成することによって、ブロック430で生成することができる。ブロック430におけるユースケース子インスタンスの生成に関するさらなる詳細を、
図5を参照して以下に説明する。
【0057】
図5を参照すると、
図3のブロック430でユースケース子インスタンスを生成するための例示的なシステム/方法500を示すブロック/フロー図が提供されている。
【0058】
ブロック510において、ランタイムシステムは、生成すべき子インスタンスがさらにあるか否かを決定する。例えば、ランタイムシステムは、子インスタンスが以前に生成され、そのユースケースに対してすでに存在しているかどうかを、データベース内をチェックできる。生成すべき子インスタンスがない場合、子インスタンス間の接続は、
図4を参照して上述したように、ブロック440でセットアップされる。
【0059】
生成すべき子インスタンスがさらにある場合、ブロック520で、次の子インスタンスが取得され、ブロック530で、ランタイムシステムは、次の子インスタンスの生成型が「動的」であるかどうかを判定する。次の子インスタンスの生成型が「動的」である場合、次の子インスタンスの生成はスキップされ、方法は、ブロック510に戻って、生成するために他の子インスタンスが残されているかどうかを判定する。
【0060】
次の子インスタンスの生成型が「動的」でない場合、ブロック540で、ランタイムシステムは、次の子インスタンスの生成型が「新規」かどうかを判定する。次の子インスタンスの生成型が「新規」である場合、ランタイムシステムは、ブロック550において、次の子インスタンスに対する新しい子インスタンスを生成し、ブロック560において、ユースケースに対する子インスタンスIDを登録する。子インスタンスIDは、ユースケースのデータベースに登録できる。
【0061】
次の子インスタンスの生成型が「新規」でない場合、ランタイムシステムは、ブロック570で使用可能なインスタンスがすでに存在するかどうかを判断する。
【0062】
生成型が「再利用」である場合、ランタイムシステムは、このインスタンスが必要とする同じ設定を持つこのアプリケーションの別の既存インスタンスが存在するかどうかをチェックできる。存在する場合、そのインスタンスを使用する。
【0063】
生成型が「UniqueSiteWide」である場合、ランタイムシステムは、このアプリケーションの別のインスタンスがすでに存在するかどうかをチェックする。存在する場合、そのインスタンスを再利用する。
【0064】
生成型が「UniqueNodeWide」である場合、ランタイムシステムは、インスタンスが実行されるはずのノード/マシン上に同じ設定を持つこのアプリケーションのインスタンスがすでに存在するかどうかをチェックできる。存在する場合、ランタイムシステムはそのインスタンスを使用する。
【0065】
その後、ランタイムシステムは、ブロック560において、ユースケースの子インスタンスIDを登録することができる。
【0066】
このアプリケーションの既存のインスタンスが見つからない場合、ランタイムシステムは、ブロック550において、次の子インスタンスのための新しい子インスタンスを生成し、ブロック560において、ユースケースのための子インスタンスIDを登録することができる。
【0067】
図5のプロセスは、生成すべき子インスタンスがなくなるまで繰り返すことができる。
【0068】
再び
図4を参照すると、ブロック420またはブロック430の後、子インスタンス間の接続は、ブロック440において、ユースケースの子インスタンスを一緒にステッチして、子インスタンスが互いに話すことができるようにすることによってセットアップすることができる。ランタイムシステムは、すべての接続を反復処理でき、接続を1つずつ設定することができる。ブロック440で接続がセットアップされた後、ブロック450でユースケース子インスタンスを実行することによって、ランタイムシステムがユースケースを実行することができる。ユースケース子インスタンスは接続され、それにより連係し、互いに会話するため、各ユースケース子インスタンスは、その結果または出力の生成を開始し、接続されたユースケース子インスタンスへの入力として出力を提供することができ、ランタイムシステムによって全体のユースケースをアクションに設定することができる。ブロック440におけるユースケース子インスタンス間の接続のセットアップに関する更なる詳細は、
図6を参照して以下に説明される。
【0069】
図6を参照すると、
図4のブロック440でユースケース子インスタンス間の接続をセットアップするための例示的なシステム/方法600を示すブロック/フロー図が提供されている。
【0070】
ブロック610で、生成すべき接続がさらにあるかどうかが判定される。生成すべき接続が無い場合には、
図4を参照して上述したように、ブロック450において、ユースケース子インスタンスの実行が開始される。
【0071】
生成すべき接続がさらにある場合、ブロック620で、接続のソース/宛先インスタンスが「動的」の生成型を有するかどうかが判定される。生成型が「動的」である場合、接続はスキップされ、方法はブロック610に戻り、生成すべき次の接続があるかどうかを判定する。
【0072】
生成型が「動的」でない場合、ランタイムシステムは、ブロック630で、ソースインスタンスと宛先インスタンスとの間の接続を行うことができる。接続中、ランタイムシステムはソース/宛先がバインドしているかどうかを確認し、それに応じて接続を行うことができる。ユースケース指定のインスタンス名とエンドポイント名は、ソースインスタンスと宛先インスタンスの間の接続を確立しながら、ランタイムシステムによって使用される場合がある。
【0073】
図4に戻って参照すると、ブロック460において、ランタイムシステムは、ユースケースの実行を終了するためにハンドラをセットアップする。ハンドラは、ユースケースを停止するための信号を受信するように設定される。例えば、ハンドラは、SIGTERM信号を受信するように設定することができる。SIGTERM信号は、その終了を要求するためにプロセスに送信することができる汎用信号である。SIGKILL信号は、プロセスを直ちに終了または停止させるが、SIGKILL信号とは異なり、SIGTERM信号は、プロセスによってブロックされ、処理され、無視されることが可能である。
【0074】
ブロック470において、ランタイムシステムは、所定の時間間隔の間、スリープ状態にされる。所定の時間間隔は、デフォルトの時間間隔として初期設定することができ、ユーザが構築および設定することができる。所定の時間間隔は、秒のオーダーであってもよい。例えば、デフォルト時間間隔は、例えば、10秒に設定することができる。
【0075】
所定の時間間隔の後にランタイムシステムがウェイクアップした後、ブロック480において、ランタイムシステムは、ユースケースを停止すべきか否かを判定する。より具体的には、ランタイムシステムは、ユースケースを停止するための信号を受信したかどうかを判定する。
【0076】
ランタイムシステムが、ユースケースインスタンスを停止する必要があると判定した場合、ランタイムシステムは、ブロック490でユースケースを停止し、子インスタンスを削除することができ、方法は終了する。子インスタンスの停止には、子インスタンスの削除が含まれる場合がある。ユースケースインスタンスを停止する必要があると判定しない場合、方法はブロック470に戻って、所定の時間間隔(所定の時間間隔と同じまたは異なる場合がある)の間、ランタイムシステムをスリープ状態にすることができる。
【0077】
図7を参照すると、ユースケースを指定し、ユースケース実行を指定し、ランタイムユースケース実行手順を実施するためのシステム/方法700を示すブロック/フロー図が提供されている。
【0078】
ブロック710で、それぞれのマイクロサービスに関連する複数のアプリケーションを含むユースケースが、ユースケース仕様を得るためのタスクを実行するために指定される。各マイクロサービスは、タスクを実行するためにユースケース内に対応する機能を提供することができる。ユースケース仕様は、構築および実行するために、ユースケース全体でさまざまなインスタンス間で行う必要があるさまざまなアプリケーション、インスタンスおよび接続を識別するために使用できる。各アプリケーションは、アプリケーションメタデータのセットに関連付けることができる。アプリケーションメタデータのセットには、アプリケーションを内部的に参照するアプリケーションIDと、ユースケースの一部として使用されるアプリケーションのバージョンに対応するアプリケーションバージョンとを含めることができる。アプリケーションのインスタンスは、実際にはアプリケーションが設計されている対応するマイクロサービスを実行し、提供する。ユースケースがアプリケーションを必要とする場合、アプリケーションの複数のインスタンスが存在することができる。アプリケーションの各インスタンスは、異なる入力データに作用することができる。1つのインスタンスに対して、複数の生成型のうちの1つを指定することができる。インスタンスに対して指定することができる生成型の非限定的な例には、「新規」、「再利用」、「動的」、「UniqueSiteWide」、および「UniqueNodeWide」が含まれる。
【0079】
より具体的には、ユースケースを指定することは、ブロック712において、ユースケースに関連するデータを指定することを含み得る。ユースケースに関連付けられたデータには、識別子(ID)、名前およびユースケースに関連付けられたその他のメタデータが含まれる場合がある。ユースケースIDは、複数のアプリケーションを含むことができるユーザケースを参照するために内部で使用することができる。その他のメタデータには、ユースケースのバージョン番号、ユースケースに関連付けられた任意の説明、ユースケースに関連する詳細が見つかるユニバーサルリソース識別子(URI)またはユニバーサルリソースロケータ(URL)、ユースケースが実行されるオペレーティングシステム(OS)およびアーキテクチャ、ユーザケースの管理者およびユースケースに関連するその他の関連メタデータを含めることができる。
【0080】
ユースケースを指定することは、ブロック714において、複数のアプリケーションに関連する依存関係およびインスタンスを指定し、ブロック716において、インスタンス間の接続を指定することをさらに含み得る。接続は、特定のマイクロサービスによって提供される出力が入力として次のマイクロサービスに渡されるように、マイクロサービスが互いに接続し、話す方法を定義することができる。様々なマイクロサービスを接続することができ、これらのマイクロサービスのトポロジを生成することができ、それによってユースケース全体を形成する。
【0081】
各接続は、接続メタデータのセットに関連付けることができる。接続メタデータのセットには、ソースインスタンス、宛先インスタンスおよびバインディング情報を含めることができる。インスタンス間の通信は、適切なメッセージキューおよび/またはAPI(HTTP(S)ベースのRESTful APIなど)を介して実行できる。この場合、バインディング情報は、どのインスタンスがバインドされ、どのインスタンスが接続して必要な入力データを取得する必要があるかをランタイムシステムに伝えることができる。
【0082】
ユースケース指定は、ユースケースをコンパイルし、ユースケースのバイナリパッケージを生成するための入力として使用できる。バイナリパッケージを生成するには、ユースケースの各アプリケーションを1つずつコンパイルして、アプリケーションメタデータのセット(アプリケーションIDやアプリケーションバージョンなど)に基づいてバイナリパッケージを生成できる。
【0083】
ユースケースの統一された設定は、インスタンスメタデータのセット(インスタンス名、アプリケーションID、生成型など)に基づいて、ランタイムに起動される各インスタンスの設定の組み合わせとして生成できる。
【0084】
ユースケースのサンプル設定は、インスタンスメタデータのセット(インスタンス名、アプリケーションID、生成型など)に基づいて、ランタイムに起動される各インスタンスのサンプル設定の組み合わせとして生成できる。
【0085】
バイナリパッケージ、統一構成、サンプル構成を含むユースケースのパッケージを生成できる。
【0086】
ブロック710~716に関するさらなる詳細は、
図2を参照して上述される。
【0087】
ブロック720で、ユースケースランタイムが、ユースケースランタイム仕様を得るために指定される。ユースケース実行の仕様は、ユースケース仕様に基づくことができる。
【0088】
より具体的には、ユースケース実行を指定することは、ブロック722において、生成されるべきインスタンスのためのユースケースIDを指定することを含み得る。
【0089】
ユースケース実行を指定することは、ブロック724において、生成されるべきインスタンスのための固有名を指定することをさらに含み得る。
【0090】
ユースケース実行を指定することは、ブロック726において、ユースケースを実行するためのノードを指定することをさらに含み得る。
【0091】
ユースケース実行を指定することは、ブロック728において、ユースケースのための構成を指定することをさらに含み得る。より具体的には、構成は、ユースケースに属する各インスタンスの構成に関連付けることができる。例えば、各インスタンスの設定は、インスタンス名、インスタンスの起動が必要なノード、インスタンス自体の設定など、設定メタデータのセットに基づいて行うことができる。
【0092】
ブロック720~728に関するさらなる詳細は、
図3を参照して上述される。
【0093】
ブロック730において、ランタイムシステム内のユースケースの実行は、ユースケース仕様およびユースケースランタイム仕様に基づいてタスクを実行するように管理される。ユースケースおよびユースケースランタイム仕様を使用して、ランタイムシステムは、ユースケースを構成するアプリケーション、生成および起動されるアプリケーションのインスタンスの数およびインスタンス、インスタンス構成、インスタンスの実行場所および様々なインスタンス間の接続を含むが、これらに限定されない情報を得ることができる。
【0094】
より具体的には、ユースケースの実行を管理することは、ブロック732において、複数のアプリケーションに対応するユースケースの子インスタンス間の接続をセットアップすることを含む、複数のアプリケーションを組み合わせることによってユースケースを構築することを含むことができる。
【0095】
一実施形態では、ユースケースを構築することは、ユースケース子インスタンスを取得することを含むことができる。子インスタンスの取得には、子インスタンスのロードと、メモリ内の子インスタンス間のロードおよびすべてのユースケース子インスタンスが存在するかどうかの確認を含めることができる。すべてのユースケース子インスタンスが存在する場合、子インスタンスを生成する必要はなく、したがって、現在のユースケース子インスタンス間の接続をセットアップすることができる。それ以外の場合は、1つ以上のユースケース子インスタンスを生成できる。1つまたは複数のユースケース子インスタンスは、生成型(例えば、「動的」、「新規」、「再利用」、「UniqueSiteWide」、「UniqueNodeWide」)に基づいて生成することができる。
【0096】
ユースケースの子インスタンス間の接続は、子インスタンスが互いに話すことができるように、子インスタンスを一緒にステッチすることによって設定することができる。ランタイムシステムは、すべての接続を反復処理し、接続を1つずつ設定するように設定できる。さらに、ユースケース子インスタンス間の接続は、生成型に基づいて設定できる。例えば、生成型が「動的」の場合、接続はスキップされる。
【0097】
ユースケースの実行を管理することは、ブロック734において、マイクロサービスを提供するためにユースケース子インスタンスを実行することによってユースケースを実行することをさらに含むことができる。子インスタンスは接続され、したがって、一緒に動作し、互いに会話するため、各子インスタンスは、その結果または出力の生成を開始することができ、接続された子インスタンスへの入力として出力を提供することができる。したがって、ユースケース全体をランタイムシステムによってアクションに設定することができる。
【0098】
ユースケースの実行を管理することは、ブロック736において、ユースケースの実行を終了するためにハンドラをセットアップすることと、ブロック738において、ハンドラによって受信された信号に基づいて、ユースケースが所定の時間間隔の後に停止されるべきであることを決定することとをさらに含むことができる。例えば、ランタイムシステムは、所定の時間間隔の間スリープ状態に置くことができ、ランタイムシステムがウェイクアップした後、ランタイムシステムは、ユースケースを停止する信号を受信したことを判定することができる。一実施形態では、ハンドラによって受信される信号は、SIGTERMを含む。ランタイムシステムが信号を受信した場合、ブロック740で、ランタイムシステムは、ユースケースを停止または終了し、ユースケース子インスタンスを削除する。そうでない場合、所定の時間間隔の間、ランタイムシステムがスリープ状態に戻る。
【0099】
ブロック730~740に関するさらなる詳細は、
図4~6を参照して上述される。
【0100】
システム/方法700は、サイトワイド展開全体のためのアプリケーションの1つのインスタンスのみを制御し、生成し、実行するように構成することができる。さらに、システム/方法700は、特定のノード/マシン上のアプリケーションの1つのインスタンスのみを制御し、生成し、実行するように構成することができる。
【0101】
ユースケースのアプリケーションは、複雑な問題を解決するために、互いに「話す」ことができ、一緒に動作することができる。これは、少なくとも部分的に、アプリケーションインスタンスを再利用または共有することによって達成することができる。アプリケーションインスタンスを再利用するか共有するかの判定は、ブロック734におけるユースケースの実行の前に、またはその一部として行うことができる。アプリケーションインスタンスの再利用または共有に関するさらなる詳細を、
図8を参照して以下に説明する。
【0102】
図8を参照すると、本発明の一実施形態による、アプリケーションインスタンスを再利用または共有するためのシステム/方法800を示すブロック/フロー図が提供されている。
【0103】
ブロック810では、ユースケースに対応するユースケース仕様およびユースケースランタイム仕様が取得され、ユースケースは、それぞれがタスクを実行するためのユースケース内の対応する機能を提供するマイクロサービスに関連付けられる複数のアプリケーションを含む。例えば、
図2、
図3および
図7を参照して上述した実施形態に従って、ユースケースおよびユースケースランタイム仕様を指定することによって、ユースケース仕様およびユースケースランタイム仕様を得ることができる。
【0104】
ブロック820で、複数のアプリケーションのうちの少なくとも1つのアプリケーションの少なくとも1つの既存のインスタンスが、ユースケース仕様およびユースケースランタイム仕様に基づいて、ユースケースの実行中に再利用され得ることが判定される。
【0105】
一実施形態では、ユースケースの実行中に少なくとも1つのインスタンスを再利用できると判定することは、ブロック822で、仕様からのインスタンス構成が複数のアプリケーションの少なくとも1つの既存のインスタンスに一致すると判定することを含む。
【0106】
別の実施形態では、ユースケースの実行中に少なくとも1つのインスタンスが再利用されることができると判定することは、ブロック824で、仕様からのインスタンス構成およびインスタンスノード/マシン構成が、少なくとも1つの既存のインスタンスに一致すると判定することを含む。
【0107】
さらに別の実施形態では、ユースケースの実行中に少なくとも1つのインスタンスを再利用することができると判定することは、ブロック826で、少なくとも1つのアプリケーションのインスタンスが既に存在すると判定することを含む。
【0108】
ブロック830で、少なくとも1つの既存のインスタンスが、ユースケースの実行中に再利用される。ユースケースは、
図4~7を参照して上述した実施形態に従って実行することができる。
【0109】
図8のシステム/方法を示す例示的な実施形態を、
図9を参照して以下に説明する。
【0110】
本明細書で説明される実施形態は、タスクを実行するか、または問題を解決するかするために、様々な現実世界環境内で使用することができる。
【0111】
一例では、本明細書で説明する実施形態は、カメラから取得された画像データ(例えば、ビデオストリーム)に基づいてウォッチリスト内の個人を監視するために顔認識システム内でアプリケーションインスタンスを再利用または共有するために使用することができる。顔認識システムは、個人が、ウォッチリスト内の顔データ(例えば、事前に登録された顔データ)と一致する顔を有するときに、警告を生成するように構成され得る。
【0112】
別の例では、本明細書で説明される実施形態は、カメラから取得された画像データ(例えば、ビデオストリーム)に基づいて個人の年齢および性別を検出するために、年齢および性別検出システム内でアプリケーションを再利用または共有するために使用することができる。
【0113】
図9を参照すると、アプリケーションインスタンスを再利用または共有するように構成された例示的なシステム900を示すブロック/フロー図が提供されている。この例示的な実施例におけるシステム900は、顔認識システムと、それぞれが複数のアプリケーションを含む年齢および性別検出システムとを含む。
【0114】
図示のように、システム900は、ワーカノード902、マスタノード904および画像取得装置906(例えば、ビデオカメラ)を含むことができる。ワーカノード902およびマスタノード904はそれぞれ、画像取得装置906によって取得された画像に基づいて顔認識および/または年齢および性別検出を実行するための複数のアプリケーションを含むことができる。
【0115】
より具体的には、ワーカノード902は、顔検出アプリケーション914との通信での映像センサアプリケーション912、顔照合アプリケーション920および顔検出アプリケーション914との通信での年齢-性別アプリケーション930、および顔照合920および年齢-性別アプリケーション930との通信での警告キャッシュマネージャ940を含むアプリケーション910のセットを含むことができる。
【0116】
映像センサ912および顔検出アプリケーション914のインスタンスは、同じ構成を有するため、生成型「再利用」を有し、共有される。顔照合920および年齢-性別アプリケーション930のインスタンスは、「新規」の生成型を有することができる。警告キャッシュマネージャ940のインスタンスは、「UniqueNodeWide」の生成型を有することができ、同じ構成および同じワーカノード902を有するため、共有される。実行するユースケースインスタンスがさらにある場合、ワーカノード902は、より多くの共有インスタンスを持つことができる。さらに、このようなワーカノードが複数配置されてもよい。
【0117】
マスタノード904は、顔照合アプリケーション920と通信する生体認証マネージャ952と、警告キャッシュマネージャ940と通信する警告マネージャ954とを含むアプリケーションのセット950と、生体認証マネージャ952および警告マネージャ954と通信するグラフィカルユーザインタフェースアプリケーション(GUI)960とを含むことができる。生体認証マネージャ952および警告マネージャ954のインスタンスは、「UniqueSiteWide」生成型を有し、したがって、サイト全体の配備にわたって共有される。GUIアプリケーション960のインスタンスは、「UniqueSiteWide」の生成型を有することもできる。
【0118】
したがって、システム900におけるインスタンスの共有は、異なるレベルで行われている。より具体的には、インスタンスの共有は、個々のインスタンスレベル(例えば、映像センサ912および顔検出アプリケーション914)、個々の作業者レベル(例えば、警告キャッシュマネージャアプリケーション940)、およびサイトレベル(例えば、警告マネージャ954および生体認証マネージャ952)で行われている。
【0119】
顔認識および年齢-性別検出システムの実施形態の両方において、映像センサアプリケーション912のインスタンスは、装置906からフレームを取り出し、フレームを出力として提供する(出力フレームでエンドポイントを公開する)。顔検出アプリケーション914のインスタンスは、映像センサアプリケーション912のインスタンスによって出力されたフレームを受信し、フレーム内の顔を検出し、顔(検出された顔でエンドポイントを公開する)を出力する。
【0120】
顔認識システムでは、生体認証マネージャアプリケーション952のインスタンスは、監視/監視される人々の名前および写真を含むウォッチリスト情報を維持する(ウォッチリストを管理するためにエンドポイントを公開する)。顔照合アプリケーション920のインスタンスは、顔検出アプリケーション914のインスタンスによって出力された顔を受信し、検出された顔をウォッチリストと照合し(例えば、ウォッチリスト情報をメモリにロードすることによって)、照合された顔情報を出力する。警告キャッシュマネージャ940のインスタンス(これは、ワーカノード904上のローカル警告を管理するためにエンドポイントを公開する)は、顔照合アプリケーション920のインスタンスによって出力された一致した顔情報を受信し、警告マネージャ954に接続して、ワーカノード904上のすべての警告をポストし、警告をポストする間にネットワーク動作がない場合、警告をキャッシュ内に保持し、再試行する。警告マネージャ954(エンドポイントを公開してSite-Wide警告を管理する)は、照合した警告情報を維持する。
【0121】
年齢・性別検出システムでは、年齢-性別アプリケーション930のインスタンスが、検出された顔を受信し、年齢および性別を検出し、年齢および性別情報を出力する。警告キャッシュマネージャ940(これは、エンドポイントを公開してワーカノード904上のローカル警告を管理する)は、年齢-性別アプリケーション930のインスタンスによって出力された年齢と性別情報を受信し、警告マネージャ954に接続して、ワーカノード904上にすべての警告をポストし、警告をポストする間、ネットワーク動作がない場合、キャッシュ内に警告を維持し、は再試行する。
【0122】
顔認識および年齢および性別検出システムの両方において、GUIアプリケーション960のインスタンスは、生体認証マネージャ952および/または警告マネージャ954のインスタンスから情報を取り出し、1人または複数のエンドユーザにリアルタイム結果を表示することができる。
【0123】
本明細書に記載する実施形態は、完全にハードウェアであってもよく、完全にソフトウェアであってもよく、または、ハードウェアおよびソフトウェア要素の両方を含むものであってもよい。好ましい実施形態では、本発明は、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むが、これらに限定されないソフトウェアで実施される。
【0124】
実施形態は、コンピュータまたは任意の命令実行システムによって、またはそれに関連して使用するためのプログラムコードを提供する、コンピュータ使用可能またはコンピュータ可読媒体からアクセス可能なコンピュータプログラム製品を含むことができる。コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって、またはそれに関連して使用するためのプログラムを格納、通信、伝搬、またはトランスポートする任意の装置を含むことができる。媒体は、磁気、光学、電子、電磁気、赤外線、または半導体システム(または装置またはデバイス)、または伝搬媒体とすることができる。媒体は、半導体または固体ステートメモリ、磁気テープ、リムーバブルコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、リジッド磁気ディスクおよび光ディスクなどのコンピュータ読み取り可能な記憶媒体を含むことができる。
【0125】
各コンピュータプログラムは、本明細書に記載する手順を実行するために、記憶媒体または装置がコンピュータによって読み取られるときに、コンピュータの操作を構成し制御するために、汎用または特殊目的のプログラム可能コンピュータによって読み取り可能な、機械読み取り可能な記憶媒体または装置(例えば、プログラムメモリまたは磁気ディスク)に実体的に記憶することができる。本発明のシステムはまた、コンピュータプログラムで構成された、コンピュータ読み取り可能な記憶媒体で実施されるものと考えることができ、その場合、構成された記憶媒体は、コンピュータを特定の所定の方法で動作させて、本明細書に記載する機能を実行させる。
【0126】
プログラムコードを記憶および/または実行するのに適したデータ処理システムは、システムバスを介してメモリ要素に直接的または間接的に結合された少なくとも1つのプロセッサを含んでもよい。メモリ要素は、プログラムコードの実際の実行中に採用されるローカルメモリ、バルクストレージ、および実行中にバルクストレージからコードが検索される回数を減らすために少なくとも何らかのプログラムコードの一時記憶を提供するキャッシュメモリを含むことができる。入力/出力またはI/O装置(キーボード、ディスプレイ、ポインティング装置などを含むが、これらに限定されない)は、直接または介在するI/Oコントローラを介してシステムに結合され得る。
【0127】
介在する専用ネットワークまたは公衆ネットワークを介して、データ処理システムを他のデータ処理システムあるいはリモートプリンタまたはストレージデバイスに結合できるようにするために、ネットワークアダプタをシステムに結合することもできる。モデム、ケーブルモデム、およびイーサネット(登録商標)カードは、現在使用可能なネットワークアダプタのタイプの一例に過ぎない。
【0128】
次に
図10を参照すると、本発明の一実施形態による、サーバまたはネットワークデバイスを表すことができる例示的なコンピュータシステム1000が示されている。コンピュータシステム1000は、システムバス1002を介して他の構成要素に動作可能に結合された少なくとも1つのプロセッサ(CPU)1005を含む。キャッシュ1006、リードオンリーメモリ(ROM)1008、ランダムアクセスメモリ(RAM)1010、入力/出力(I/O)アダプタ1020、音声アダプタ1030、ネットワークアダプタ1090、ユーザインタフェースアダプタ1050、およびディスプレイアダプタ1060は、システムバス1002に動作可能に結合される。
【0129】
第1の記憶デバイス1022および第2の記憶デバイス1029は、I/Oアダプタ1020によってシステムバス1002に動作可能に結合される。記憶デバイス1022および1029は、ディスク記憶デバイス(例えば、磁気または光ディスク記憶デバイス)、固体ステート磁気デバイスなどのいずれであってもよい。記憶デバイス1022および1029は、同じタイプの記憶デバイスまたは異なるタイプの記憶デバイスとすることができる。
【0130】
スピーカ1032は、音声アダプタ1030によってシステムバス1002に動作可能に結合することができる。トランシーバ1095は、ネットワークアダプタ1090によってシステムバス1002に動作可能に結合される。ディスプレイデバイス1062は、ディスプレイアダプタ1060によってシステムバス1002に動作可能に結合される。
【0131】
第1のユーザ入力デバイス1052、第2のユーザ入力デバイス1059、および第3のユーザ入力デバイス1056は、ユーザインタフェースアダプタ1050によってシステムバス1002に動作可能に結合される。ユーザ入力デバイス1052,1059,1056は、センサ、キーボード、マウス、キーパッド、ジョイスティック、画像取得デバイス、動作感知デバイス、電力測定デバイス、マイクロフォン、前述のデバイスのうちの少なくとも2つの機能を組み込んだデバイスなどのいずれかとすることができる。もちろん、本発明の精神を維持しながら、他のタイプの入力装置を使用することもできる。ユーザ入力デバイス1052,1059,1056は、同じタイプのユーザ入力デバイスまたは異なるタイプのユーザ入力デバイスとすることができる。ユーザ入力装置1052,1059,1056は、システム1000との間で情報を入出力するために使用される。
【0132】
ユースケース(UC)構成要素1070は、システムバス1002に動作可能に結合することができる。UC構成要素1070は、上述の動作のうちの1つまたは複数を実行するように構成される。UC構成要素1070は、スタンドアロンの特殊目的のハードウェア装置として実現することも、記憶デバイスに記憶されたソフトウェアとして実現することもできる。UC構成要素1070がソフトウェア実装される実施形態では、コンピュータシステム1000の別個の構成要素として示されているが、UC構成要素1070は、例えば、第1の記憶デバイス1022および/または第2の記憶デバイス1029に格納することができる。代替的に、UC構成要素1070は、別個の記憶デバイス(図示せず)に格納され得る。
【0133】
もちろん、コンピュータシステム1000は、当業者によって容易に企図されるように、他の要素(図示せず)を含むこともでき、また、特定の要素を省略することもできる。例えば、当業者によって容易に理解されるように、他の様々な入力デバイスおよび/または出力デバイスを、その特定の実装に応じて、コンピュータシステム1000に含めることができる。例えば、様々なタイプの無線および/または有線の入力および/または出力デバイスを使用することができる。さらに、様々な構成の追加のプロセッサ、コントローラ、メモリなども、当業者には容易に理解されるように利用することができる。コンピュータシステム1000のこれらおよび他の変形は、本明細書で提供される本発明の教示を与えられれば、当業者によって容易に企図される。
【0134】
上記は、あらゆる点で例示的かつ例示的であるが、限定的ではないと理解されるべきであり、本明細書に開示される本発明の範囲は、詳細な説明からではなく、むしろ特許法によって許容される全範囲に従って解釈されるような特許請求の範囲から決定されるべきである。本明細書に示され、説明された実施形態は、本発明の例示にすぎず、当業者は、本発明の範囲および精神から逸脱することなく、様々な修正を実施することができることを理解されたい。当業者は、本発明の範囲および精神から逸脱することなく、様々な他の特徴の組み合わせを実施することができる。このように、本発明の態様を、特許法によって要求される詳細および特殊性と共に説明してきたが、特許状によって保護されることが請求され、望まれるものは、添付の特許請求の範囲に記載されている。