次に、本発明を実施するための、複数の形態について説明する。
[第1実施形態]
図1は、本実施形態による情報通信システムの、概略構成を示すブロック図である。図示するように、情報通信システム1は、バックエンドサーバー100と、ゲートウェイ200と、センサーデバイス300とを、含むシステムである。情報通信システム1は、例えば、L台(Lは、1以上の整数)のバックエンドサーバー100と、M台(Mは、2以上の整数)のゲートウェイ200と、N個(Nは、1以上の整数)のセンサーデバイス300とを含むよう構成される。情報通信システム1を構成するバックエンドサーバー100やゲートウェイ200やセンサーデバイス300の台数は、例えば、動的に変更されてもよい。なお、バックエンドサーバー100や、ゲートウェイ200や、センサーデバイス300のそれぞれは、複数台存在する場合があるため、それぞれ、符号にサフィックスを付けて説明する場合がある。例えば、第2番目のバックエンドサーバーを「バックエンドサーバー100-2」と呼んだり、第3番目のゲートウェイを「ゲートウェイ200-3」と呼んだり、第4番目のセンサーデバイスを「センサーデバイス300-4」と呼んだりすることがある。
図示する例では、L台のバックエンドサーバー100-1から100-Lまでの各々は、サーバー型コンピューターを用いて実現される。L台のバックエンドサーバー100-1から100-Lまでは、例えば、相互に協調し、全体として1つの論理的なサーバー装置として機能する。また、バックエンドサーバー100は、いわゆるクラウドサーバーとして実現されていてもよい。バックエンドサーバー100は、「バックエンドサーバー装置」とも呼ばれる。
M台(M≧2)のゲートウェイ200のそれぞれは、近傍に存在する他のゲートウェイ200との間で相互に通信を行うことができるよう、ネットワークに接続されている。個々のセンサーデバイス300は、1個または複数のゲートウェイ200と、直接通信を行えるようにネットワークに接続されている。また、1台のゲートウェイ200の配下に複数のセンサーデバイスが存在していてもよい。ゲートウェイ200は、「ゲートウェイ装置」とも呼ばれる。
センサーデバイス300は、「IoT機器」とも呼ばれるものである。センサーデバイス300は、各種のセンサーを備えている。センサーデバイス300は、センサーで検知したデータを、ゲートウェイ200経由で、バックエンドサーバー100に送ることができる。ここで、センサーが検知するデータは、例えば物理量を表すものであったり、画像や映像や音声であったりする。センサーが検知するデータはここに列挙したものには限られない。
センサーデバイス300とゲートウェイ200との間では、通信ネットワーク401を用いた双方向の通信が可能である。ゲートウェイ200とバックエンドサーバー100との間では、通信ネットワーク402を用いた双方向の通信が可能である。また、既述の通り、複数のゲートウェイ200の相互間でも、通信ネットワーク401または402等を用いた双方向の通信が可能である。通信ネットワーク401および402のそれぞれの通信方式は、有線通信あるいは無線通信のいずれかに限定されるものではない。通信ネットワーク401および402のそれぞれでは、適宜選択される、所定の通信方式が用いられる。
図2は、各々のバックエンドサーバー100の内部の概略機能構成を示すブロック図である。図示するように、バックエンドサーバー100は、サーバー制御部101と、ゲートウェイ通信部102と、統計情報計算部103と、受信データ加工部104と、統計情報格納部105と、受信データ格納部106とを含む。これらの各部の機能は、例えば、コンピューター内のCPU(中央処理装置)、メインメモリー、2次記憶装置等を用いて実現される。各部の機能は、CPU上で実行されるプログラムを用いて実現される。なお、各部の機能の少なくとも一部を、専用の回路(ハードウェア)で実現するようにしてもよい。各部の機能は、次の通りである。
サーバー制御部101は、バックエンドサーバー100の全体の動きを制御する機能を有する。
ゲートウェイ通信部102は、ゲートウェイ200との間での通信を行うものである。つまり、ゲートウェイ通信部102は、ゲートウェイ200から送信されるデータを受信したり、ゲートウェイ200に対してデータを送信したりする機能を有する。
統計情報計算部103は、各々のゲートウェイ200について、通信処理や通信状態に関する統計情報の計算を行うものである。具体的には、統計情報計算部103は、ゲートウェイ200から受信したデータから、ゲートウェイ間での委譲の際の中継の結果に関する情報を基に、ゲートウェイ200ごとの委譲優先度の情報を計算する。統計情報計算部103は、データ送信が成功した実績が特に直近において多いゲートウェイ200ほど、高い優先度となるように数値を算出する。
受信データ加工部104は、ゲートウェイ200側から受信したデータを加工する処理を行う。
統計情報格納部105は、統計情報計算部103が算出した統計情報を記憶するものである。統計情報格納部105は、統計情報を記憶するための統計情報格納テーブルを内部に備える。
受信データ格納部106は、受信データ加工部104によって加工されたデータを記憶するものである。
上記の統計情報格納部105や受信データ格納部106は、例えば、磁気ハードディスク装置や、半導体メモリー等を用いて実現される。統計情報格納部105や受信データ格納部106は、適宜、ファイルシステムやデータベース管理システム(DBMS)を用いて、データを管理する。なお、統計情報格納部105や受信データ格納部106のためのデータ記憶手段は、バックエンドサーバー100の外部に存在するデータベースサーバー装置やストレージサーバー装置等であってもよい。
図3は、各々のゲートウェイ200の内部の概略機能構成を示すブロック図である。図示するように、ゲートウェイ200は、ゲートウェイ制御部201と、サーバー通信部202(「第1通信部」と呼ぶ場合がある)と、センサー・ゲートウェイ通信部203(「第2通信部」と呼ぶ場合がある)と、受信データ加工部204と、受信データ格納部205と、近傍ゲートウェイ格納部206と、近傍ゲートウェイ処理委譲部207とを含む。これらの各部の機能は、例えば、コンピューター内のCPU(中央処理装置)、メインメモリー、2次記憶装置等を用いて実現される。各部の機能は、CPU上で実行されるプログラムを用いて実現される。なお、各部の機能の少なくとも一部を、専用の回路(ハードウェア)で実現するようにしてもよい。各部の機能は、次の通りである。
ゲートウェイ制御部201は、ゲートウェイ200の全体の動きを制御する機能を有する。ゲートウェイ制御部201は、ゲートウェイ200の全体や、各処理部の負荷状況を把握してもよい。この負荷状況に依り、ゲートウェイは、データの加工処理や送信処理を行うか否かを判断することができる。これらの判断の詳細については、フローチャートを参照しながら後で詳述する。また、ゲートウェイ制御部201は、他のゲートウェイ200からの委譲を受け付ける機能を有する。
サーバー通信部202は、バックエンドサーバー100との間での通信を行うものである。つまり、サーバー通信部202は、バックエンドサーバー100から送信されるデータを受信したり、バックエンドサーバー100に対してデータを送信したりする機能を有する。
センサー・ゲートウェイ通信部203は、センサーデバイス300や、他のゲートウェイ200との間で通信を行うものである。つまり、センサー・ゲートウェイ通信部203は、センサーデバイス300や他のゲートウェイ200から送信されるデータを受信したり、センサーデバイス300や他のゲートウェイ200に対してデータを送信したりする機能を有する。
受信データ加工部204は、センサーデバイス300から受信したデータを加工する処理を行う。受信データ加工部204は、センサーデバイス300から受信したデータを、例えば、バックエンドサーバー100側での収集に都合のよい形式等に加工する。
受信データ格納部205は、センサーデバイス300から受信したデータを記憶する。受信データ格納部205は、受信データ加工部204による加工処理前のデータと、加工処理後のデータとの、いずれかまたは両方を格納してよい。
近傍ゲートウェイ格納部206は、自装置(ゲートウェイ200)の、通信ネットワーク上における近傍に存在する他のゲートウェイ200に関する情報を記憶する。近傍ゲートウェイ格納部206は、具体的には、上記の他のゲートウェイ200の各々を識別するための識別情報(ゲートウェイID)と、各ゲートウェイ200の属性情報を記憶する。上記の識別情報により、各ゲートウェイ200を一意に特定可能である。また、近傍のゲートウェイ200の属性情報は、適宜、更新される情報であってもよい。近傍ゲートウェイ格納部206が保持するデータの構成等については、後で別の図を参照しながら説明する。
近傍ゲートウェイ処理委譲部207は、自装置に何らかの障害が発生した場合や自装置が高負荷の状態にある場合に、センサーデバイス300から受信したデータを加工する処理や、バックエンドサーバー100にデータを転送する処理を、近傍のゲートウェイ200に委譲するための処理を行うものである。
なお、実装の形態として、サーバー通信部202とセンサー・ゲートウェイ通信部203とがひとつの機能として統合されていてもよい。また、受信データ格納部205や近傍ゲートウェイ格納部206は、例えば、磁気ハードディスク装置や、半導体メモリー等を用いて実現される。
図4は、センサーデバイス300の内部の概略機能構成を示すブロック図である。図示するように、センサーデバイス300は、ゲートウェイ通信部301と、データ取得部302とを含む。これらの各部の機能は、例えば、コンピューターおよびプログラム等を用いて実現可能である。なお、各部の機能の少なくとも一部を、専用の回路(ハードウェア)で実現するようにしてもよい。各部の機能は、次の通りである。
ゲートウェイ通信部301は、ゲートウェイ200との間での通信を行うものである。つまり、ゲートウェイ通信部301は、ゲートウェイ200から送信されるデータを受信したり、ゲートウェイ200に対してデータを送信したりする機能を有する。ゲートウェイ通信部301が受信するデータとして、例えば、センサーデバイス300を設定したり制御したりするためのデータや、センサーデバイス300上で稼働するプログラム等が含まれてよい。
データ取得部302は、各種センサーを用いて実世界の情報を取得する。データ取得部302は、取得した情報を適宜、デジタルデータの形式で出力できるようにする。データ取得部302は、取得したデータを外部に送信するために、ゲートウェイ通信部301に渡す。
図5は、ゲートウェイ200内の近傍ゲートウェイ格納部206に格納されるデータの構成および例を示す概略図である。近傍ゲートウェイに関するこのデータは、例えば、テーブルの形式で表現され得る。近傍ゲートウェイ格納部206が記憶するテーブルは、ゲートウェイIDと、委譲優先度と、委譲可否の各項目を有する。このテーブルの各行のデータが、1台の近傍のゲートウェイ200に対応する。各項目のデータの意味は、次の通りである。
ゲートウェイIDは、委譲先となり得る近傍のゲートウェイを一意に識別するための識別情報である。委譲優先度は、委譲が可能なゲートウェイ200が複数存在する場合において、どのゲートウェイ200が優先されるかを表す数値のデータである。一例として、委譲優先度の数値が高いほど、そのゲートウェイ200が優先される度合いが高い。委譲可否は、その時点においてゲートウェイ200が委譲可能なものであるか否かを表すものである。このテーブルが有するデータのうち、委譲優先度および委譲可否の項目は、ゲートウェイの負荷の状況や、実際の委譲処理の状況および結果等に応じて、適宜更新され得るものである。
図5では、近傍ゲートウェイ格納部206のデータをテーブル形式で構成する例を示した。ただし、近傍ゲートウェイ格納部206は、代わりに、同等の情報を持つ他の形式で近傍のゲートウェイ200の情報を持つようにしてもよい。
図6は、バックエンドサーバー100が受信するデータの構成および例を示す概略図である。同図に示すデータは、JSON形式で記述されたデータである。なお、「JSON」は、JavaScript (登録商標) Object Notationの略である。JSON形式のデータでは、左右の中括弧(開くカーリーブレースおよび閉じるカーリーブレース)や、左右の大括弧(開く角括弧および閉じる角括弧)を用いたブロック構造が表されている。また、JSON形式のデータでは、基本的に、キーとキーバリュー(値)との対を用いて表現されている。なお、バックエンドサーバー100が受信するデータは、JSON形式に限らず、他の形式で記述されていてもよい。
図示するデータにおける、第2行目から第7行目までは、データを転送した複数のゲートウェイ200の全体に関する情報を持つ。第2行目の「gateway-id」というキーワードは、データ取得元のセンサーデバイス300が最初に転送を依頼したゲートウェイの識別情報を表す。本例では、その値は「gateway1」というゲートウェイIDである。第3行目の「relay-gateway」(中継ゲートウェイ)というキーワードは、ゲートウェイID「gateway1」のゲートウェイ200から委譲された複数のゲートウェイの情報を表す。その値は、3対の、ゲートウェイIDと状況情報との対のリストである。具体的には、そのリストの第1から第3の要素は、次の通りである。第1要素として、ゲートウェイID「gateway2」に、状況情報「connection error」(通信接続エラー)が対応付いている。第2要素として、ゲートウェイID「gateway3」に、状況情報「High load」(高負荷)が対応付いている。第3要素として、ゲートウェイID「gateway4」に、状況情報「success」(通信成功)が対応付いている。上記の情報は、次に記載する経過を表す。
(1)即ち、データ取得元のセンサーデバイス300は、まず、ゲートウェイID「gateway1」のゲートウェイ200に、データの転送を依頼した。
(2)ゲートウェイID「gateway1」のゲートウェイ200は、ゲートウェイID「gateway2」のゲートウェイ200に、処理および転送を委譲した。
(3)委譲先であるゲートウェイID「gateway2」のゲートウェイ200では、「通信接続エラー」の状況が生じた。このため、ゲートウェイID「gateway2」のゲートウェイ200は、ゲートウェイID「gateway3」のゲートウェイ200に、処理および転送をさらに委譲した。
(4)委譲先であるゲートウェイID「gateway3」のゲートウェイ200では、「高負荷」の状況が生じた。このため、ゲートウェイID「gateway3」のゲートウェイ200は、ゲートウェイID「gateway4」のゲートウェイ200に、処理および転送をさらに委譲した。
(5)委譲先であるゲートウェイID「gateway4」のゲートウェイ200では、通信を行うために障害となる状況がなく、処理および転送が成功した。これにより、状況情報「success」が記録された。
第8行目は、キーワード「datetime」を有し、データの転送が行われた日時のタイムスタンプの情報を表す。図示する例では、タイムスタンプの形式は「YYYY-MM-DDTHH:MM:SS.tttZ」である。「YYYY-MM-DD」は、年・月・日を表す。「HH:MM:SS」は、時・分・秒を表す。「.ttt」は、秒未満の時刻を表し、千分の一秒単位の数値である。「Z」は協定世界時(UTC,Coordinated Universal Time)による表記であることを表す。このタイムスタンプは、例えば、通信が成功した日時を表す。本例では、このタイムスタンプは、ゲートウェイID「gateway4」のゲートウェイ200によって付与される。
第9行目から第15行目までは、センサーデバイス300側で生成されたデータが引き継がれたものである。第9行目のキーワード「sensor-data」は、センサーデバイス300が生成したデータであることを表す。
第11行目から第13行目までは、3対の、キーワードと値の対のリストである。
第11行目の第1の対において、キーワード「sensor-id」は、センサーデバイス300を一意に識別するための識別情報であることを表す。そして、その値は「sensor1」である。第12行目の第2の対において、キーワード「datetime」は、日時のタイムスタンプであることを表す。タイムスタンプの形式については既に説明した通りである。タイムスタンプの値は「2018-08-01T12:25:00.000Z」(2018年08月01日12時25分00秒000 UTC)である。第13行目の第3の対において、キーワード「temperature」は、センサー値が温度であることを表す。値は「20」(単位は度、摂氏)である。
次に、情報通信システム1が動作する際の処理手順について説明する。なお、以下の説明における状況として、障害等が発生するよりも前には、センサーデバイス300が取得したデータが、ゲートウェイ200を介して、バックエンドサーバー100まで正常に送達されていた。ここで「障害等」には、通信接続段あるいはその他の理由による通信接続エラーの状況や、ゲートウェイ200等の装置の高負荷によって、バックエンドサーバーへのデータの送達を直接行うことができない状況を含む。障害等が発生した後には、ゲートウェイ200によって、他のゲートウェイ200への委譲が試みられる。他のゲートウェイ200への委譲は、複数の段階にわたって繰り返されてよい。つまり、委譲先であるゲートウェイ200は、障害等の事情に応じて、さらに他のゲートウェイ200への処理等の委譲を行うことができる。
図7は、情報通信システム1の処理手順を示すフローチャートである。以下、このフローチャートに沿って説明する。
ステップS11において、センサーデバイス300のデータ取得部302は、センサーを用いて、実世界の情報を取得する。データ取得部302が取得する情報の種類は、任意であるが、例えば、温度、湿度、圧力、流量等であり、また、静止画像や、動画や、音声等であってもよい。データ取得部302は、アナログセンサーあるいはデジタルセンサーを用いて取得した情報を、送信可能な形式のデジタルデータの形式に整える。また、データ取得部302は、センサーデバイスの属性情報(センサーデバイスの識別情報等)や、データを取得した日時の情報を、適宜、付加するようにしてもよい。
ステップS12において、ゲートウェイ通信部301は、データ取得部302が取得し、整形したデータを、接続されている所定のゲートウェイ200に送信する。
ステップS13において、ゲートウェイ200は、センサーデバイス300から送信されたデータを受信する。ゲートウェイ200がデータを受信する処理の詳細については、次に図8を参照しながら説明する。
図8は、情報通信システム1の処理手順を示すフローチャートである。このフローチャートは、特に、ゲートウェイ200による受信の処理を中心に示すものである。以下、このフローチャートに沿って説明する。
ステップS21において、ゲートウェイ200のセンサー・ゲートウェイ通信部203は、センサーデバイス300から送信されるデータを受信する。受信されたデータは、受信データ加工部204にも渡される。
ステップS22において、受信データ加工部204は、ステップS21で受信されたデータを加工する。加工処理の内容は様々であってよい。加工処理の内容の一つは、バックエンドサーバー100が期待するデータ形式に合うようにデータを加工することである。また、加工処理が、自装置(ゲートウェイ200)の識別情報(ゲートウェイID)を、データ内に付加する処理を含んでもよい。また、加工処理が、データの単位変換の処理を含むものでもよい。単位変換とは、例えば、温度の、摂氏から華氏への変換(あるいはその逆の変換)であってよい。また、単位変換とは、例えば、メートル法の系からヤード・ポンド法の系への変換(あるいはその逆の変換)であってよい。単位変換とは、例えば、外貨交換レートに基づく通貨単位の変換であってよい。また、ここに例示した変換以外の変換であってもよい。また、加工処理が、例えば複数のセンサーデバイス300から受信したデータを1本のデータに統合する処理を含むものでもよい。
ステップS23において、ゲートウェイ制御部201は、自装置(ゲートウェイ200)が、バックエンドサーバー100と通信可能であるか否かを調べ、判断する。具体的には、ゲートウェイ制御部201は、バックエンドサーバー100との通信が接続されている状態であるか否か、サーバー通信部202のその時点での処理負荷が充分に低いか否か。通信ネットワークのレイテンシーが充分に小さいか否か、通信に関するその他の障害が生じていないかどうか、といったことを判断する。これらに基づき、バックエンドサーバーと通信可能であるとゲートウェイ制御部201が判断する場合(ステップS23:YES)、次のステップS24に進む。何らかの理由で通信可能ではない場合(ステップS23:NO)、ステップS25の処理に進む。
ステップS24において、サーバー通信部202は、加工済みのデータを、バックエンドサーバー100に送信する。本ステップの処理が終わると、ステップS28に進む。
ステップS25に進んだ場合、ステップS25において、ゲートウェイ制御部201の制御により、受信データ加工部204は、バックエンドサーバー100に送信するための加工済みのデータを、一旦、受信データ格納部205に書き込む。なお、他のゲートウェイ200に送信を委譲することが決まると、そのデータは、受信データ格納部205から読み出される。
ステップS26において、近傍ゲートウェイ処理委譲部207は、処理委譲先のゲートウェイ200を選定する。この際、近傍ゲートウェイ処理委譲部207は、近傍ゲートウェイ格納部206を参照し、近傍のゲートウェイ200ごとに、委譲可否を判定する。また、近傍ゲートウェイ処理委譲部207は、近傍ゲートウェイ格納部206を参照し、近傍のゲートウェイ200ごとの委譲優先度を判断する。つまり、近傍ゲートウェイ処理委譲部207は、委譲可能であるゲートウェイ200のうち、最も優先度の高いゲートウェイ200を、処理委譲先として選定する。
ステップS27において、近傍ゲートウェイ処理委譲部207は、ステップS26で選定されたゲートウェイ200に、データの送信等の処理を委譲する。なお、処理の委譲の手順等の詳細については後で別の図を参照しながら説明する。
ステップS28において、バックエンドサーバー100は、当該ゲートウェイ200または委譲先のゲートウェイ200から送信されたデータを受信する。バックエンドサーバー100による受信の処理の詳細については、次の図9を参照しながら説明する。
上の、フローチャートを参照した説明では、ゲートウェイ200は、受信したデータの加工処理を行った後で、バックエンドサーバー100へのデータ送信を委譲するか否かの判定を行うようにした。代わりに、次のようにしてもよい。即ち、ゲートウェイ200は、データを受信した後で且つそのデータの加工処理を行う前に、その時点での処理負荷等に基づいて、データの加工処理とバックエンドサーバー100へのデータ送信の処理とを、他のゲートウェイ200に委譲するか否かを判断すてもよい。判断の結果、ゲートウェイ200は、データの加工処理とバックエンドサーバー100へのデータ送信の処理とをまとめて、他のゲートウェイ200に委譲することもできる。
図9は、バックエンドサーバー100がゲートウェイ200からデータを受信する際の処理の手順を示すフローチャートである。以下、このフローチャートに沿って説明する。
ステップS31において、バックエンドサーバー100のゲートウェイ通信部102は、ゲートウェイ200から送信されたデータを受信する。
ステップS32において、サーバー制御部101は、ステップS31で受信したデータの内部を参照して、そのデータがゲートウェイ200間で委譲された記録を持つものであるか否かを判定する。言い換えれば、そのデータが複数のゲートウェイ200を経由して送信されたものであるか否かを確認する。バックエンドサーバー100が受信するデータの構造は、図6に示して説明した通りである。つまり、受信されたデータの中の、キーワード「relay-gateway」で表される部分を参照することにより、そのデータがゲートウェイ200間での委譲によって送信されてきたものであるか否かがわかる。データの委譲があった場合(ステップS32:YES)、次のステップS33に進む。データの委譲がなかった場合(ステップS32:NO)、ステップS36の処理に飛ぶ。
ステップS33において、統計情報計算部103は、ステップS31で受信したデータから、中継ゲートウェイの情報を抽出する。つまり、統計情報計算部103は、キーワード「relay-gateway」で表される部分を抽出する。統計情報計算部103が抽出する中継ゲートウェイの情報は、図6を参照しながら説明したように、ゲートウェイ200の識別情報と状況情報の対のリストとして表されている。そのリストのうちの最後の対においては、状況情報が「success」(通信成功)である。そのリストのうちの最後以外の対においては、状況情報は委譲理由を表している。
図6に示した例においては、最後の対の、ゲートウェイIDは「gateway4」であり、状況情報は「success」(通信成功)である。その他の対は、次の通りである。即ち、ゲートウェイID「gateway2」に対応して、状況情報「connection error」(通信接続エラー)が格納されている。また、ゲートウェイID「gateway3」に対応して、状況情報「High load」(高負荷)が格納されている。
ステップS34において、統計情報計算部103は、中継ゲートウェイの経路途中のゲートウェイ200(ただし、「通信成功」である最後のゲートウェイ200を除く)の委譲理由を抽出する。上記の例における、「gateway2」に対して、状況情報「connection error」(通信接続エラー)が委譲理由である。また、「gateway3」に対して、状況情報「High load」(高負荷)が委譲理由である。統計情報計算部103は、これらの委譲理由を、それぞれのゲートウェイIDと関連付ける形で、統計情報格納部105の、統計情報格納テーブルに書き込む。
ステップS35において、受信データ加工部104は、受信したデータから、中継ゲートウェイの情報を削除する。
ステップS36において、受信データ加工部104は、受信したデータを、受信データ格納部106に書き込む。
ステップS37において、統計情報計算部103は、データ送信元のゲートウェイ200に関する統計情報を、統計情報格納部105に書き込む。本ステップで記録される統計情報としては、例えば、次のようなものがある。即ち、所定期間内における当該ゲートウェイ200からのデータ受信回数や、当該ゲートウェイ200からのデータ受信間隔や、受信データサイズなどの情報が含まれる。ただし、その他の情報を統計情報として統計情報格納部105に書き込むようにしてもよい。
図10はおよび図11は、ゲートウェイ200による委譲の処理を中心とした処理手順を示すフローチャートである。ここで、委譲元のゲートウェイはゲートウェイ200-1である。また、委譲先のゲートウェイはゲートウェイ200-2である。図10は、委譲元のゲートウェイ200-1の処理の手順を示す。また、図11は、委譲先のゲートウェイ200-2の処理の手順を示す。これらの両図のフローチャートは、結合子(A,B,C)で結合されている。このフローチャートは、ゲートウェイ200-1で生じた、バックエンドサーバー100に送信すべき1件のデータの処理に対応するものである。以下、これらのフローチャートに沿って、処理手順を説明する。
図10のステップS101において、ゲートウェイ制御部201は、バックエンドサーバー100に対してデータを送信する必要が生じた際に、バックエンドサーバー100との間の通信可否を調べ、判定する。
次にステップS102は、ステップS101での判定に基づく分岐の処理である。バックエンドサーバー100との間で通信が可能である場合には、ステップS103に進む。バックエンドサーバー100との間で通信が不可能である場合には、ステップS104に進む。
次にステップS103に進んだ場合、ゲートウェイ200-1は、他のゲートウェイ200への処理の委譲を行わない。この場合、ゲートウェイ200-1のサーバー通信部202は、データをバックエンドサーバー100に送信する。送信が完了すると、ゲートウェイ200-1は、本フローチャート全体の処理を終了する。
次にステップS104に進んだ場合、近傍ゲートウェイ処理委譲部207は、近傍ゲートウェイ格納部206から、近傍のゲートウェイの一覧リストの情報を読み出す。近傍ゲートウェイ格納部206が保持するデータについては、図5を参照しながら説明した通りである。
次にステップS105において、近傍ゲートウェイ処理委譲部207は、ステップS104において取得したリスト内に、委譲先となり得るゲートウェイ200が存在するか否かを判断し、処理を分岐する。この判定は、近傍ゲートウェイ格納部が保持していた、ゲートウェイ200ごとの委譲可否の項目に基づいて行われる。委譲先のゲートウェイ200がある場合には、ステップS106に進む。委譲先のゲートウェイ200がない場合には、ステップS107に進む。
次にステップS106に進んだ場合、近傍ゲートウェイ処理委譲部207は、ステップS104で取得したゲートウェイ200のリスト内から、委譲可否が「可」であり、且つ委譲優先度が最高である近傍のゲートウェイ200(これが、ゲートウェイ200-2)に、処理を委譲する。本ステップの処理の終了後、結合子Aにより、ゲートウェイ200-2側の、図11のステップS121の処理に移る。
次にステップS107に進んだ場合、即ち他のゲートウェイ200への委譲が不可である場合、受信データ加工部204は、受信データ格納部205にデータを格納する。このデータは、状況が変わったとき、つまりゲートウェイ200-1やゲートウェイ200―2からバックエンドサーバー100への通信が可能になったときに、改めて受信データ格納部205から取り出され得る。本ステップの処理の終了後、このフローチャート全体の処理を終了する。
ステップS108に処理が移るのは、委譲先であるゲートウェイ200-2の処理で、図11のステップS128あるいはステップS134の処理が終わったときである。つまり、委譲先のゲートウェイ200でデータの送信が完了したときに、委譲元に制御が戻され、ステップS108に移る。ステップS108において、受信データ加工部204は、受信データ格納部205から、委譲先への委譲の対象であったデータを削除する。本ステップの終了後、ステップS109に移る。
ステップS109に処理が移るのは、(1)ステップS108の処理を終えたときと、(2)委譲先であるゲートウェイ200-2の処理で、図11のステップS133あるいはステップS135の処理が終わったときである。この(2)は、つまり、委譲先においてもデータの送信が完了しなかった場合である。ステップS109において、近傍ゲートウェイ処理委譲部207は、近傍ゲートウェイ格納部206の、委譲可否の情報を更新する。つまり、委譲先のゲートウェイ200からデータの送信ができたか否かの通知を受け、その通知に依り、ゲートウェイ200ごとの委譲可否の情報を最新の状態に設定する。また、近傍ゲートウェイ処理委譲部207は、近傍ゲートウェイ格納部206の、委譲優先度の情報を併せて更新してよい。本ステップの処理の終了後、このフローチャート全体の処理を終了する。
図11のゲートウェイ200-2(委譲先)のフローチャートへの、委譲元側からのエントリーポイントは、ステップS121(結合子A)である。また、委譲元側への復帰のポイントは、ステップS128またはステップS134(結合子B)と、ステップS133またはステップS135(結合子C)とである。このフローチャートから、再委譲先のゲートウェイ200の処理に移るポイントは、ステップS132(結合子A)である。再委譲先からのこのフローチャートへの復帰のポイントは、S134(結合子B)と、S135(結合子C)とである。
なお、委譲先のゲートウェイ200から、再委譲先のゲートウェイ200への委譲が行われる場合の、再委譲先での処理の手順は、この図11と同じである。
図11のステップS121から始まる処理は、センサー・ゲートウェイ通信部203が、委譲元であるゲートウェイ200からデータ送信依頼を受信したことをトリガーとして実行される。ステップS121において、ゲートウェイ制御部201は、委譲を受け付けられるか否かを確認する。自装置(ゲートウェイ200)自身の重大な障害がない限りは、ゲートウェイ制御部201は、委譲を受け付ける。
次に、ステップS122において、ゲートウェイ制御部201は、バックエンドサーバー100との間の通信可否を調べ、判定する。
次のステップS123は、ステップS122での判定に基づく分岐の処理である。バックエンドサーバー100との間で通信が可能である場合には、ステップS124に進む。バックエンドサーバー100との間で通信が不可能である場合には、ステップS129に進む。
次に、ステップS124に進んだ場合、ゲートウェイ制御部201は、自装置(ゲートウェイ200)の負荷状況を確認する。言い換えれば、ゲートウェイ制御部201は、委譲元から委譲された処理を実行しても問題がない程度の負荷状況であるか否かを、確認する。具体的な方法としては、ゲートウェイ制御部201は、自装置(ゲートウェイ200)における、全体の、あるいは各機能部(サーバー通信部202や、センサー・ゲートウェイ通信部203や、受信データ加工部204等の各々)の、負荷状況等を常にモニタリングする。負荷状況の指標は、CPU使用率、入出力チャネル使用率、磁気ディスク装置等を使用する場合にはその使用率や入出力待ち時間等、主記憶装置と補助記憶装置との間のページング等の発生率などを含む。ゲートウェイ制御部201は、その負荷状況をトータルに数値化する。例えば、ゲートウェイ制御部201は、負荷を表す数値が大きいほど高負荷であるような数値を算出できるようにする。そして、ゲートウェイ制御部201は、ステップS124に進んで時点で算出された負荷の数値が、予め定めた閾値以上であるか否かにより、負荷状況を確認する。
次に、ステップS125において、ステップS124での確認の結果に基づく分岐を行う。自装置が低負荷(例えば、上記の負荷数値が閾値未満)である場合には、ステップS126に進む。自装置が高負荷(例えば、上記の負荷数値が閾値以上)である場合には、ステップS129に進む。
次に、ステップS126に進んだ場合、即ちバックエンドサーバー100にデータを送信することが可能である場合、受信データ加工部204は、送信するデータ内に委譲情報を格納する。具体的には、受信データ加工部204は、図6で説明したデータ内のキーワード「relay-gateway」で表されるデータを、送信用のデータ内に正しく設定する。
次に、ステップS127において、サーバー通信部202は、ステップS126で設定した委譲情報を含むデータを、バックエンドサーバー100に送信する。
次に、ステップS128において、ゲートウェイ制御部201は、バックエンドサーバーへの送信が完了したことを、委譲元のゲートウェイ200に通知する。このときに、自装置のゲートウェイIDに関連付けて委譲元のゲートウェイ200に対して通知される状況情報は「success」(通信成功)である。本ステップの処理が終了すると、図10のステップS108に戻る。
なお、この「success」(通信成功)の通知を受けたゲートウェイ200側では、近傍ゲートウェイ処理委譲部207が、近傍ゲートウェイ格納部206内の情報を更新する。つまり、「success」(通信成功)の通知を行ったゲートウェイ200のゲートウェイIDに関連付けられた委譲可否は「可」に更新される。また、そのゲートウェイIDに関連付けられた委譲優先度が上げられる。これにより、バックエンドサーバー100へのデータの送信が成功したゲートウェイ200は、次回以後に、委譲先として選定されやすくなる。
ステップS129に進んだ場合、即ち、自装置からバックエンドサーバー100へのデータ送信を行えなかった場合、近傍ゲートウェイ処理委譲部207は、再委譲先のゲートウェイ200を選定するための処理をする。
ステップS130において、近傍ゲートウェイ処理委譲部207は、近傍ゲートウェイ格納部206から、近傍のゲートウェイの一覧リストの情報を読み出す。このリストの情報については、図5を参照しながら説明した通りである。
次に、ステップS131において、近傍ゲートウェイ処理委譲部207は、ステップS130で取得したリスト内に、委譲先となり得る近傍のゲートウェイ200が存在するか否かを判定する。この判定は、近傍ゲートウェイ格納部が保持していた、ゲートウェイ200ごとの委譲可否の項目に基づいて行われる。委譲先のゲートウェイ200がある場合には、ステップS132に進む。委譲先のゲートウェイ200がない場合には、ステップS133に進む。
次に、ステップS132に進んだ場合、委譲可能であるゲートウェイ200のうち、最も優先度の高いゲートウェイ200を処理委譲先として選定し、そのゲートウェイ200に処理を委譲する。再委譲先のゲートウェイ200での処理は、本フローチャートのステップS121(結合子Aによる結合)である。
次に、ステップS133に進んだ場合、ゲートウェイ制御部201は、委譲不可理由を委譲元のゲートウェイ200に通知する。ここで通知される委譲不可理由は、前記のステップS123での判断結果に基づく「connection error」(通信接続エラー)や、ステップS125での判断結果に基づく「High load」(高負荷)である。委譲不可理由は、自装置のゲートウェイIDと関連付ける形で、委譲元に通知される。
ステップS134は、再委譲先の(あるいは、さらにその再委譲先等の)ゲートウェイ200において、バックエンドサーバー100へのデータの送信が完了した場合の、復帰ポイントである。ステップS134において、ゲートウェイ制御部201は、再委譲先のゲートウェイ200から通知された、単独の状況情報またはリスト化された状況情報に、自装置の状況情報を付加し、その情報を委譲元に通知する。自装置の状況情報は、「connection error」(通信接続エラー)や、「High load」(高負荷)等である(図6の「relay-gateway」も参照)。本ステップ終了後は、委譲元のゲートウェイ200の処理に戻る(結合子B)。
ステップS135は、再委譲先の(あるいは、さらにその再委譲先等の)ゲートウェイ200において、バックエンドサーバー100へのデータの送信が完了しなかった場合の、復帰ポイントである。ステップS135において、ゲートウェイ制御部201は、再委譲先のゲートウェイ200から通知された、単独の状況情報またはリスト化された状況情報に、自装置の状況情報を付加し、その情報を委譲元に通知する。自装置の状況情報は、「connection error」(通信接続エラー)や、「High load」(高負荷)等である(図6の「relay-gateway」も参照)。本ステップ終了後は、委譲元のゲートウェイ200の処理に戻る(結合子C)。
なお、再委譲先でのデータ送信が成功したか否かに関わらず、ステップS133や、S134や、S135における、委譲元への通知の際には、ゲートウェイ制御部201は、自装置においてデータ送信できなかった理由を通知する。この通知は、委譲元のゲートウェイ200において、近傍ゲートウェイ格納部206内の、委譲可否および委譲優先度の項目に反映される。つまり、それ自身でもデータの送信を行えず、委譲先(再委譲先)のゲートウェイも存在しないようなゲートウェイ200に関しては、委譲可否が「不可」と設定される。また、それ自身ではデータの送信を行えないものの、データ送信を行える委譲先(再委譲先)のゲートウェイ200を持っているようなゲートウェイ200に関しては、委譲可否が「不可」と設定され、委譲優先度がそれまでよりも相対的に下げられる。これらにより、委譲先のゲートウェイ200を選定する際の選定精度が向上する。
大元(委譲元)のゲートウェイ200においても、委譲先であるゲートウェイ200であっても、そこからの委譲先であるゲートウェイ200から状況情報の通知を受けた場合には、近傍ゲートウェイ格納部206の情報は更新される。状況情報は、委譲先のゲートウェイ200から、ゲートウェイIDに関連付けられた形で通知される。その通知は、複数のゲートウェイ200に関する状況情報を含む場合がある(図6の「relay-gateway」を参照)。それらの状況情報が関連付けられたゲートウェイIDごとに、近傍ゲートウェイ処理委譲部207は、近傍ゲートウェイ格納部206内の情報を更新する。具体的には、近傍ゲートウェイ処理委譲部207は、委譲可否のデータを切り替えたり、委譲優先度の値を上げたり下げたりする。
なお、委譲可否が一旦「不可」となったゲートウェイ200の情報が永久に「不可」であり続けることを避けるために、近傍ゲートウェイ処理委譲部207が、所定時間間隔ごとに委譲可否を強制的に「可」にリセットするようにしてもよい。委譲可否を強制的に「可」にリセットすることにより、そのゲートウェイ200に対する委譲が試みられることとなる。ここでの所定時間は、適宜設定されるものであり、例えば、1分、10分、1時間、3時間、12時間、24時間等といった長さである。
[変形例]
ここまでに説明した実施形態では、近傍ゲートウェイ格納部206に格納されているゲートウェイ200ごとの情報は、委譲処理の結果を受けた場合にのみ更新されていた。変形例として、バックエンドサーバー100が情報を配信するととによって、ゲートウェイ200内の近傍ゲートウェイ格納部206の情報を更新するようにしてもよい。
具体的には、バックエンドサーバー100の統計情報格納部105の情報は、受信したデータに含まれるゲートウェイ200ごとの状況情報に基づいて、随時更新される。また、統計情報計算部103は、統計情報格納部105に蓄積される統計情報を基に、ゲートウェイ200ごとの委譲優先度を計算する。つまり、ここで計算される委譲優先度は、ゲートウェイ200ごとに、データ送信が成功しやすい度合いを表す数値である。ゲートウェイ通信部102は、統計情報計算部103が算出したゲートウェイ200ごとの委譲優先度の値の集合を、ゲートウェイ200に対して配信する。バックエンドサーバー100とゲートウェイ200との間の通信が障害等で接続できない場合には、バックエンドサーバー100からの配信データが、他のゲートウェイ200を経由して届けられるようにしてもよい。ゲートウェイ200は、バックエンドサーバー100からこの配信を受信する。そして、ゲートウェイ200の近傍ゲートウェイ処理委譲部207は、配信された委譲優先度のデータを用いて、自装置の近傍ゲートウェイ格納部206の情報を更新する。
この変形例を用いる場合には、より広い範囲のゲートウェイ200から収集された情報に基づいて、各ゲートウェイ200の情報を一斉に更新できるメリットが生じる。つまり、各ゲートウェイ200の状況に基づく学習効果が、比較的早く多くのゲートウェイ200に伝搬する。
以上説明した本実施形態の機能の要点は、次に記載する通りである。なお、サーバー通信部202とセンサー・ゲートウェイ通信部203とゲートウェイ制御部201との機能を有する部分を、以下では、通信部と呼ぶ。また、受信データ加工部204と受信データ格納部205との機能を有する部分を、以下では、データ加工部と呼ぶ。また、近傍ゲートウェイ処理委譲部207と、近傍ゲートウェイ格納部206との機能を有する部分を、以下では、処理委譲部と呼ぶ。
通信部は、第1装置側(センサーデバイス300側)からデータを受信し、第2装置側(バックエンドサーバー100側)に前記データを送信するとともに、自装置(ゲートウェイ200)の処理負荷状況を把握する。データ加工部は、前記第1装置側から受信した前記データを所定の形式に加工して、加工後の前記データを前記第2装置側に送信するために通信部に渡す。処理委譲部は、少なくとも自装置の処理負荷状況に基づいて、所定の状況の場合(故障や高負荷等の場合)に、前記データを加工する処理と、前記データを前記第2装置側に送信する処理との、少なくともいずれかの処理を、他のゲートウェイ200に委譲する。
通信部が把握する前記の処理負荷状況は、前記データ加工部(受信データ加工部204)による処理の処理負荷状況を含むものである。
処理委譲部は、前記他のゲートウェイ200を識別するためのゲートウェイ識別情報(ゲートウェイID)と関連付けて、前記他のゲートウェイ装置への委譲優先度の情報(例えば、数値情報)を管理する。処理委譲部は、前記他のゲートウェイ200ごとの前記委譲優先度の情報に基づいて、前記他のゲートウェイ200に処理を委譲する際の、委譲先のゲートウェイ装置200を選定する。
処理委譲部は、処理を前記他のゲートウェイ200に委譲した結果として、他のゲートウェイ200から、前記ゲートウェイ識別情報と関連付けられた前記他のゲートウェイ200の状況情報を受け取り、前記他のゲートウェイ装置の状況情報に基づいて、前記委譲優先度の情報を更新する。
通信部が、委譲元のゲートウェイ200から、前記データを加工する処理と、前記データを前記第2装置側に送信する処理との、少なくともいずれかの処理を委譲するための委譲依頼を受信した場合に、前記データ加工部は、前記委譲依頼に含まれていた、ゲートウェイ識別情報と関連付けられた他のゲートウェイ装置の状況情報を抽出し、前記ゲートウェイ識別情報と関連付けられた前記他のゲートウェイ装置の前記状況情報を、前記データに付加する処理も行う(図6を参照)。
通信部は、前記ゲートウェイ識別情報と関連付けられた前記他のゲートウェイ装置の前記状況情報を前記データに付加した結果である前記データを受信した前記第2装置側から、前記ゲートウェイ識別情報と関連付けられた前記状況情報に基づく統計処理の結果として、前記他のゲートウェイ装置に関する前記委譲優先度の情報を受信する。処理委譲部は、前記第2装置から受信した前記委譲優先度の情報を用いて、前記処理委譲部が管理する前記委譲優先度の情報を更新する。これにより、第2装置から、多数のゲートウェイにおいて管理される委譲優先度の情報を一斉に更新することができる。つまり、システム内の全体に学習効果が早く伝搬する。
[第2実施形態]
次に、第2実施形態について説明する。なお、前実施形態において既に説明した事項については以下において説明を省略する場合がある。ここでは、本実施形態に特有の事項を中心に説明する。
図12は、第2実施形態による情報通信システムの、概略機能構成を示すブロック図である。図示するように、本実施形態による情報通信システム2は、バックエンドサーバー150と、ゲートウェイ250と、センサーデバイス350とを含んで構成される。バックエンドサーバー150と、ゲートウェイ250と、センサーデバイス350とが通信ネットワークで接続され、3層の構成を成すことは、第1実施形態における構成と同様である。このブロック図内においては、バックエンドサーバー150と、ゲートウェイ250とには、符号のサフィックスを付けている。なお、ゲートウェイ250を「第1装置」と呼ぶ場合がある。また、バックエンドサーバー150を「第2装置」と呼ぶ場合がある。
バックエンドサーバー150と、ゲートウェイ250と、センサーデバイス350とは、それぞれ、第1実施形態におけるバックエンドサーバー100と、ゲートウェイ200と、センサーデバイス300と同様の機能を有する。
ゲートウェイ250の各々は、通信部252と、データ加工部254と、処理委譲部257とを含んで構成される。これら各部と、第1実施形態におけるゲートウェイ200内の各部との機能の関係(対応付け)は、次の通りである。即ち、通信部252は、概ね、第1実施形態におけるサーバー通信部202と、センサー・ゲートウェイ通信部203と、ゲートウェイ制御部201との機能を有する。データ加工部254は、概ね、第1実施形態における受信データ加工部204と、受信データ格納部205との機能を有する。処理委譲部257は、概ね、第1実施形態における近傍ゲートウェイ処理委譲部207と、近傍ゲートウェイ格納部206との機能を有する。ただし、図12に示す各部への機能の配置のしかたが、上記の対応付けと異なっていてもよい。
本実施形態の各部の機能要点は、次の通りである。
通信部252は、第1装置側(センサーデバイス350側)からデータを受信し、第2装置側(バックエンドサーバー100側)に前記データを送信するとともに、自装置(ゲートウェイ250)の処理負荷状況を把握する。
データ加工部254は、前記第1装置側から受信した前記データを所定の形式に加工して、加工後の前記データを前記第2装置側に送信するために通信部252に渡す。
処理委譲部257は、少なくとも自装置の処理負荷状況に基づいて、所定の状況の場合(故障や高負荷等の場合)に、前記データを加工する処理と、前記データを前記第2装置側に送信する処理との、少なくともいずれかの処理を、他のゲートウェイ250に委譲する。
以上説明した複数の実施形態のいずれにおいても、各装置(バックエンドサーバー、ゲートウェイ、センサーデバイス等)の少なくとも一部の機能をコンピューターで実現することができる。その場合、この機能を実現するためのプログラムをコンピューター読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピューターシステムに読み込ませ、実行することによって実現しても良い。なお、ここでいう「コンピューターシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピューター読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM、DVD-ROM、USBメモリー等の可搬媒体、コンピューターシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピューター読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、一時的に、動的にプログラムを保持するもの、その場合のサーバーやクライアントとなるコンピューターシステム内部の揮発性メモリーのように、一定時間プログラムを保持しているものも含んでも良い。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピューターシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
以上説明した複数の実施形態のいずれかによれば、ゲートウェイが故障したり、高負荷であったり、通信不可である場合などに、他のゲートウェイにデータ送信を委譲することができる。つまり、ゲートウェイの処理の過負荷等の状況も考慮して、より適切なゲートウェイに対して処理を委譲することができる。そのとき、データ送信できた実績や、できなかった実績に基づいて、ゲートウェイごとの優先度の情報が更新される。これにより、ゲートウェイから他のゲートウェイに処理(加工処理や送信処理)を委譲する場合に、より成功しやすいゲートウェイに対して委譲することのできる度合いが高まる。また、これにより、委譲のためのオーバーヘッド処理が削減される。つまり、委譲先のゲートウェイの委譲可否および負荷状況等を、システム全体として学習することによって、無駄な委譲をなくす。これにより、ネットワークやゲートウェイの負荷をおさえながらデータ送信が可能となる。
言い換えれば、ゲートウェイが自身の負荷状況を他のゲートウェイに通知することで、データ送信処理の委譲先から除外し、ゲートウェイ、および、ネットワークに無駄な負荷をかけなくて済むようになる。
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。また、装置内の各部が有する機能を、他の部が有していてもよい。