(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-21
(45)【発行日】2022-10-31
(54)【発明の名称】ブローカ装置、通信システム、通信方法、およびプログラム
(51)【国際特許分類】
H04L 67/568 20220101AFI20221024BHJP
H04L 67/55 20220101ALI20221024BHJP
H04L 67/104 20220101ALI20221024BHJP
【FI】
H04L67/568
H04L67/55
H04L67/104
(21)【出願番号】P 2018140330
(22)【出願日】2018-07-26
【審査請求日】2021-06-16
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】598076591
【氏名又は名称】東芝インフラシステムズ株式会社
(74)【代理人】
【識別番号】100108855
【氏名又は名称】蔵田 昌俊
(74)【代理人】
【識別番号】100103034
【氏名又は名称】野河 信久
(74)【代理人】
【識別番号】100075672
【氏名又は名称】峰 隆司
(74)【代理人】
【識別番号】100153051
【氏名又は名称】河野 直樹
(74)【代理人】
【識別番号】100189913
【氏名又は名称】鵜飼 健
(72)【発明者】
【氏名】金井 遵
(72)【発明者】
【氏名】大西 直哉
(72)【発明者】
【氏名】高仲 徹
(72)【発明者】
【氏名】松山 拓紀
【審査官】羽岡 さやか
(56)【参考文献】
【文献】特開2017-224032(JP,A)
【文献】米国特許出願公開第2018/0167476(US,A1)
【文献】特開2018-046404(JP,A)
【文献】国際公開第2003/003673(WO,A1)
【文献】国際公開第2009/050794(WO,A1)
【文献】特開2015-192356(JP,A)
【文献】伊藤 克恭 Katsutaka ITO,IoT向けプロトコル用ハニーポットの初期検討 Primary Discussion about a Honeypot System for IoT Aimed Protocols,電子情報通信学会技術研究報告 Vol.116 No.522 IEICE Technical Report,日本,一般社団法人電子情報通信学会 The Institute of Electronics,Information and Communication Engineers,2017年03月06日,第116巻,p103-108,ISSN 0913-5685
(58)【調査した分野】(Int.Cl.,DB名)
H04L 67/55-67/59
G06Q 50/10
(57)【特許請求の範囲】
【請求項1】
第1のクライアント装置から受信した出版データを、第2のクライアント装置および他ブローカ装置へ送信するブローカ装置であって、
前記第2のクライアント装置によって購読されるトピックに対する購読要求を、前記第2のクライアント装置から受信する自購読情報受信部と、
前記第1のクライアント装置から、前記トピックに関連する出版データを受信する自出版データ受信部と、
前記自出版データ受信部によって受信された出版データを、前記第2のクライアント装置へ送信する自出版データ送信部と、
前記自出版データ受信部によって受信された出版データを、前記他ブローカ装置へ送信する他出版データ送信部と、
前記他ブローカ装置から、前記トピックに関連する出版データを受信する他出版データ受信部と、
前記自出版データ受信部および前記他出版データ受信部によって受信された前記出版データから、最新の出版データを前記トピック毎に抽出し保持する最新出版データ保持部と、
前記他ブローカ装置によって購読されるトピックに対する購読要求を、前記他ブローカ装置から受信する他購読情報管理部と、
前記ブローカ装置によって購読されるトピックを管理するとともに、前記管理しているトピックに変化があった場合には、このトピックを前記他ブローカ装置へ送信する自購読情報管理部とを備え、
前記自出版データ送信部は、前記
第2のクライアント装置から受信した購読要求に関連するトピックの最新の出版データを、前記最新出版データ保持部から取得し、前記第2のクライアント装置へ送信し、
前記他出版データ送信部は、前記他購読情報管理部によって受信された購読要求に関連するトピックに関連する最新の出版データを、前記最新出版データ保持部から取得し、前記他ブローカ装置へ送信し、
前記第2のクライアント装置から、あるトピックについての購読要求があった場合、前記自購読情報管理部は、当該トピックが新規のトピックであるかを判定するために、管理しているトピックを購読するクライアント装置が存在するか否かを判定し、
前記自購読情報管理部
は、前記管理
しているトピックを購読するクライアント装置が存在しない場合には、新たな購読登録の購読要求を
出力し、
前記他購読情報管理部は、2つ以上のブローカ装置で購読されているトピックのうち、前記自購読情報管理部によって管理されている前記トピックを購読するクライアント装置が存在しない場合には、購読解除の購読要求を前記自購読情報管理部へ出力する、ブローカ装置。
【請求項2】
第1のクライアント装置から受信した出版データを、第2のクライアント装置および他ブローカ装置へ送信するブローカ装置であって、
前記第2のクライアント装置によって購読されるトピックに対する購読要求を、前記第2のクライアント装置から受信する自購読情報受信部と、
前記第1のクライアント装置から、前記トピックに関連する出版データを受信する自出版データ受信部と、
前記自出版データ受信部によって受信された出版データを、前記第2のクライアント装置へ送信する自出版データ送信部と、
前記自出版データ受信部によって受信された出版データを、前記他ブローカ装置へ送信する他出版データ送信部と、
前記他ブローカ装置から、前記トピックに関連する出版データを受信する他出版データ受信部と、
前記自出版データ受信部および前記他出版データ受信部によって受信された前記出版データから、最新の出版データを前記トピック毎に抽出し保持する最新出版データ保持部と、
前記他ブローカ装置によって購読されるトピックに対する購読要求を、前記他ブローカ装置から受信する他購読情報管理部と、
前記ブローカ装置によって購読されるトピックを管理するとともに、前記管理しているトピックに変化があった場合には、このトピックを前記他ブローカ装置へ送信する自購読情報管理部とを備え、
前記自出版データ送信部は、前記第2のクライアント装置から受信した購読要求に関連するトピックの最新の出版データを、前記最新出版データ保持部から取得し、前記第2のクライアント装置へ送信し、
前記他出版データ送信部は、前記他購読情報管理部によって受信された購読要求に関連するトピックに関連する最新の出版データを、前記最新出版データ保持部から取得し、前記他ブローカ装置へ送信し、
前記第2のクライアント装置から、あるトピックについての購読要求があった場合、前記自購読情報管理部は、当該トピックが新規のトピックであるかを判定するために、管理しているトピックを購読するクライアント装置が存在するか否かを判定し、
前記自購読情報管理部は、前記管理しているトピックを購読するクライアント装置が存在しない場合には、新たな購読登録の購読要求を出力し、
前記他
購読情報管理部は、ブローカ装置毎に購読される前記トピックの数を計算し、前記ブローカ装置毎に購読される前記トピックの数の最小値が前記自購読情報管理部によって管理される前記トピックの数の合計値を上回る場合、新たな購読登録の購読要求を、前記自購読情報管理部へ出力する、
ブローカ装置。
【請求項3】
第1のクライアント装置から受信した出版データを、第2のクライアント装置および他ブローカ装置へ送信するブローカ装置であって、
前記第2のクライアント装置によって購読されるトピックに対する購読要求を、前記第2のクライアント装置から受信する自購読情報受信部と、
前記第1のクライアント装置から、前記トピックに関連する出版データを受信する自出版データ受信部と、
前記自出版データ受信部によって受信された出版データを、前記第2のクライアント装置へ送信する自出版データ送信部と、
前記自出版データ受信部によって受信された出版データを、前記他ブローカ装置へ送信する他出版データ送信部と、
前記他ブローカ装置から、前記トピックに関連する出版データを受信する他出版データ受信部と、
前記自出版データ受信部および前記他出版データ受信部によって受信された前記出版データから、最新の出版データを前記トピック毎に抽出し保持する最新出版データ保持部と、
前記他ブローカ装置によって購読されるトピックに対する購読要求を、前記他ブローカ装置から受信する他購読情報管理部と、
前記ブローカ装置によって購読されるトピックを管理するとともに、前記管理しているトピックに変化があった場合には、このトピックを前記他ブローカ装置へ送信する自購読情報管理部と、
前記トピック毎に、前記出版データの送受信に要求される信頼性の指標値を管理するとともに、前記出版データの複製が必要か否かを判定する指標値管理部
とを
備え、
前記自出版データ送信部は、前記第2のクライアント装置から受信した購読要求に関連するトピックの最新の出版データを、前記最新出版データ保持部から取得し、前記第2のクライアント装置へ送信し、
前記他出版データ送信部は、前記他購読情報管理部によって受信された購読要求に関連するトピックに関連する最新の出版データを、前記最新出版データ保持部から取得し、前記他ブローカ装置へ送信し、
前記第2のクライアント装置から、あるトピックについての購読要求があった場合、前記自購読情報管理部は、当該トピックが新規のトピックであるかを判定するために、管理しているトピックを購読するクライアント装置が存在するか否かを判定し、
前記自購読情報管理部は、前記管理しているトピックを購読するクライアント装置が存在しない場合には、新たな購読登録の購読要求を出力し、
前記他購読情報管理部は、前記他ブローカ装置から、購読解除の購読要求があった前記トピックについて、前記指標値管理部によって、前記出版データの複製が必要であると判定された場合に、購読登録の購読要求を、前記自購読情報管理部へ出力する、
ブローカ装置。
【請求項4】
前記他出版データ送信部から、複数の前記他ブローカ装置へ送信される前記出版データを、前記他ブローカ装置別に、一定時間毎に1つの集約済出版データに集約する集約部と、
前記集約部によって集約された前記集約済出版データを、予め定められた第1のアルゴリズムに従って圧縮する圧縮部とをさらに備えた、請求項1乃至
3のうち何れか1項に記載のブローカ装置。
【請求項5】
前記自出版データ受信部は、前記第1のクライアント装置から受信した前記出版データの受信時刻を記録し、
さらに、現在時刻から前記一定時間経過した時刻と、前記受信時刻との差が、前記トピック毎に予め定められた最大待機時間を超える前記出版データを、前記集約部による集約の対象であると判定するリアルタイム性判定部を備えた、請求項
4に記載のブローカ装置。
【請求項6】
前記他ブローカ装置から送信され、前記他出版データ受信部によって受信された、複数の出版データが集約および圧縮されてなる集約済出版データを、予め定められた第2のアルゴリズムに従って展開することによって、前記圧縮されてなる集約済出版データから、圧縮前の前記集約済出版データを復元する展開部と、
前記展開部によって復元された前記圧縮前の集約済出版データを分割して、前記圧縮前の集約済出版データから、集約前の複数の出版データを復元する分割部とをさらに備えた、請求項1乃至5のうち何れか1項に記載のブローカ装置。
【請求項7】
第1のクライアント装置から受信した出版データを、第2のクライアント装置および他ブローカ装置へ送信するために、ブローカ装置によって実施される通信方法であって、
前記ブローカ装置が、
前記第2のクライアント装置によって購読されるトピックに対する購読要求を、前記第2のクライアント装置から受信する第1工程と、
前記第1のクライアント装置から、前記トピックに関連する出版データを受信する第2工程と、
前記受信された出版データを、前記第2のクライアント装置へ送信する第3工程と、
前記受信された出版データを、前記他ブローカ装置へ送信する第4工程と、
前記他ブローカ装置から、前記トピックに関連する出版データを受信する第5工程と、
前記第2工程および前記第5工程で受信された出版データから、最新の出版データを前記トピック毎に抽出し保持する第6工程と、
前記他ブローカ装置によって購読されるトピックに対する購読要求を、前記他ブローカ装置から受信する第7工程と、
前記ブローカ装置によって購読されるトピックを管理するとともに、前記管理しているトピックに変化があった場合には、このトピックを前記他ブローカ装置へ送信する第8工程と、
前記
第2のクライアント装置から受信した購読要求に関連するトピックの最新の出版データを取得し、前記第2のクライアント装置へ送信する第9工程と、
前記第7工程で受信された購読要求に関連するトピックに関連する最新の出版データを、前記他ブローカ装置へ送信する第10工程と、
前記第2のクライアント装置から、あるトピックについての購読要求があった場合、当該トピックが新規のトピックであるかを判定するために、管理しているトピックを購読するクライアント装置が存在するか否かを判定する第11工程と、
前記管理されているトピックを購読するクライアント装置が存在しない場合には、新たな購読登録の購読要求を出力する第12工程と
、
2つ以上のブローカ装置で購読されているトピックのうち、前記管理されているトピックを購読するクライアント装置が存在しない場合には、購読解除の購読要求を出力する第13工程とを含む、通信方法。
【請求項8】
第1のクライアント装置から受信した出版データを、第2のクライアント装置および他ブローカ装置へ送信するためのプログラムであって、
前記第2のクライアント装置によって購読されるトピックに対する購読要求を、前記第2のクライアント装置から受信する第1機能、
前記第1のクライアント装置から、前記トピックに関連する出版データを受信する第2機能、
前記受信された出版データを、前記第2のクライアント装置へ送信する第3機能、
前記受信された出版データを、前記他ブローカ装置へ送信する第4機能、
前記他ブローカ装置から、前記トピックに関連する出版データを受信する第5機能、
前記第2機能および前記第5機能で受信された出版データから、最新の出版データを前記トピック毎に抽出し保持する第6機能、
前記他ブローカ装置によって購読されるトピックに対する購読要求を、前記他ブローカ装置から受信する第7機能、
ブローカ装置によって購読されるトピックを管理するとともに、前記管理しているトピックに変化があった場合には、このトピックを前記他ブローカ装置へ送信する第8機能、
前記
第2のクライアント装置から受信した購読要求に関連するトピックの最新の出版データを取得し、前記第2のクライアント装置へ送信する第9機能、
前記第7機能で受信された購読要求に関連するトピックに関連する最新の出版データを、前記他ブローカ装置へ送信する第10機能、
前記第2のクライアント装置から、あるトピックについての購読要求があった場合、当該トピックが新規のトピックであるかを判定するために、管理しているトピックを購読するクライアント装置が存在するか否かを判定する第11機能、
前記管理されているトピックを購読するクライアント装置が存在しない場合には、新たな購読登録の購読要求を出力する第12機能、
2つ以上のブローカ装置で購読されているトピックのうち、前記管理されているトピックを購読するクライアント装置が存在しない場合には、購読解除の購読要求を出力する第13機能、
をコンピュータに実現させるためのプログラム。
【請求項9】
複数のクライアント装置と、複数のブローカ装置とから構成される通信システムであって、
前記複数のブローカ装置のうち少なくとも1つのブローカ装置は、
前記複数のクライアント装置のうち第2のクライアント装置によって購読されるトピックに対する購読要求を、前記第2のクライアント装置から受信する自購読情報受信部と、
前記複数のクライアント装置のうち第1のクライアント装置から、前記トピックに関連する出版データを受信する自出版データ受信部と、
前記自出版データ受信部によって受信された出版データを、前記第2のクライアント装置へ送信する自出版データ送信部と、
前記自出版データ受信部によって受信された出版データを、前記複数のブローカ装置のうち他ブローカ装置へ送信する他出版データ送信部と、
前記他ブローカ装置から、前記トピックに関連する出版データを受信する他出版データ受信部と、
前記自出版データ受信部および前記他出版データ受信部によって受信された前記出版データから、最新の出版データを前記トピック毎に抽出し保持する最新出版データ保持部と、
前記他ブローカ装置によって購読されるトピックに対する購読要求を、前記他ブローカ装置から受信する他購読情報管理部と、
前記ブローカ装置によって購読されるトピックを管理するとともに、前記管理しているトピックに変化があった場合には、このトピックを前記他ブローカ装置へ送信する自購読情報管理部とを備え、
前記自出版データ送信部は、前記
第2のクライアント装置から受信した購読要求に関連するトピックの最新の出版データを、前記最新出版データ保持部から取得し、前記第2のクライアント装置へ送信し、
前記他出版データ送信部は、前記他購読情報管理部によって受信された購読要求に関連するトピックに関連する最新の出版データを、前記最新出版データ保持部から取得し、前記他ブローカ装置へ送信し、
前記第2のクライアント装置から、あるトピックについての購読要求があった場合、前記自購読情報管理部は、当該トピックが新規のトピックであるかを判定するために、管理しているトピックを購読するクライアント装置が存在するか否かを判定し、
前記自購読情報管理部
は、前記管理
しているトピックを購読するクライアント装置が存在しない場合には、新たな購読登録の購読要求
を出力し、
前記他購読情報管理部は、2つ以上のブローカ装置で購読されているトピックのうち、前記自購読情報管理部によって管理されている前記トピックを購読するクライアント装置が存在しない場合には、購読解除の購読要求を前記自購読情報管理部へ出力し、
前記複数のクライアント装置のうち少なくとも1つのクライアント装置は、
前記複数のブローカ装置のうち、接続先のブローカ装置から送信された、複数の出版データが集約および圧縮されてなる集約済出版データを展開して、圧縮前の前記集約済出版データを復元し、前記復元された前記集約済出版データを分割して、集約前の出版データを復元する分割展開部と、
前記接続先のブローカ装置へ送信される複数の出版データを、それぞれ関連するトピック毎に集約して集約済出版データを生成し、前記生成された集約済出版データを圧縮する集約圧縮部と、
前記集約圧縮部によって圧縮された前記集約済出版データを、前記接続先のブローカ装置へ送信するとともに、前記接続先のブローカ装置から送信された前記集約済出版データを受信して、前記分割展開部へ提供する通信部とを備えた、通信システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、出版・購読型(パブリッシュ・サブスクライブ)モデルに基づく通信に適用されるブローカ装置、通信システム、通信方法、およびプログラムに関する。
【背景技術】
【0002】
近年、分散アプリケーションにおいて非同期での出版データ授受が可能な通信方式として、出版・購読型(パブリッシュ・サブスクライブ)モデルと呼ばれる通信方式が知られている。
【0003】
出版・購読型モデルによれば、特許文献1に開示されているように、情報の購読者は、所望する情報のみを効率的に受信することが可能となる。
【0004】
特許文献1で開示されている技術によれば、出版・購読型モデルに基づく通信において、ブローカ装置の冗長化により信頼性を担保することができ、さらにコンテンツへのアクセスを制御することによってセキュリティ確保も実現することができる。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1で開示されている技術では、ブローカ装置の役割が細分化されており、冗長化する場合には各ブローカ装置についてそれぞれ冗長化する必要がある。さらに、特定の役割を担うブローカ装置に障害が発生した場合には、他のブローカ装置が正常であっても可用性を担保することが不可能となる。
【0007】
本発明が解決しようとする課題は、新たな冗長化を講じることなく、可用性を担保することができるブローカ装置、ブローカ装置とクライアント装置とを含む通信システム、および通信システムにおいて適用される通信方法、ならびにプログラムを提供することである。
【課題を解決するための手段】
【0008】
実施形態のブローカ装置は、第1のクライアント装置から受信した出版データを、第2のクライアント装置および他ブローカ装置へ送信するブローカ装置であって、自購読情報受信部と、自出版データ受信部と、自出版データ送信部と、他出版データ送信部と、他出版データ受信部と、最新出版データ保持部と、他購読情報管理部と、自購読情報管理部とを備える。
自購読情報受信部は、第2のクライアント装置によって購読されるトピックに対する購読要求を、第2のクライアント装置から受信する。
自出版データ受信部は、第1のクライアント装置から、トピックに関連する出版データを受信する。
自出版データ送信部は、自出版データ受信部によって受信された出版データを、第2のクライアント装置へ送信する。
他出版データ送信部は、自出版データ受信部によって受信された出版データを、他ブローカ装置へ送信する。
他出版データ受信部は、他ブローカ装置から、トピックに関連する出版データを受信する。
最新出版データ保持部は、自出版データ受信部および他出版データ受信部によって受信された出版データから、最新の出版データをトピック毎に抽出し保持する。
他購読情報管理部は、他ブローカ装置によって購読されるトピックに対する購読要求を、他ブローカ装置から受信する。
自購読情報管理部は、ブローカ装置によって購読されるトピックを管理するとともに、管理しているトピックに変化があった場合には、このトピックを他ブローカ装置へ送信する。
自出版データ送信部はさらに、第2のクライアント装置から受信した購読要求に関連するトピックの最新の出版データを、最新出版データ保持部から取得し、第2のクライアント装置へ送信する。
他出版データ送信部はさらに、他購読情報管理部によって受信された購読要求に関連するトピックに関連する最新の出版データを、最新出版データ保持部から取得し、他ブローカ装置へ送信する。
第2のクライアント装置から、あるトピックについての購読要求があった場合、自購読情報管理部はさらに、当該トピックが新規のトピックであるかを判定するために、管理しているトピックを購読するクライアント装置が存在するか否かを判定する。
自購読情報管理部は、管理しているトピックを購読するクライアント装置が存在しない場合には、新たな購読登録の購読要求を出力する。
他購読情報管理部は、2つ以上のブローカ装置で購読されているトピックのうち、自購読情報管理部によって管理されているトピックを購読するクライアント装置が存在しない場合には、購読解除の購読要求を自購読情報管理部へ出力する。
【図面の簡単な説明】
【0009】
【
図1】第1の実施形態の通信システムの構成例を示す概念図である。
【
図2】他ブローカ装置購読情報管理表の一例を示す図である。
【
図3】第1の実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【
図4】自ブローカ装置購読情報管理表の一例を示す図である。
【
図5】クライアント装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【
図6】購読情報購読数管理表の一例を示す図である。
【
図7】ブローカ装置購読数管理表の一例を示す図である。
【
図8】他ブローカ装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【
図9】クライアント装置からの出版データ出版要求時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【
図10】他ブローカ装置からの出版データ送信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【
図11】他ブローカ装置の終了時および異常検出時における処理手順の一例を示すフローチャートである。
【
図12】第1の実施形態の通信システムの変形例を示す概念図である。
【
図13】第1の実施形態の通信システムの変形例に適用されるブローカ装置およびサブブローカ装置の構成例を示すブロック図である。
【
図14】第2の実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【
図17】クライアント装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【
図18】他ブローカ装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【
図19】第3の実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【
図21】最大待機時間リストおよび時間条件の一例を示す図である。
【
図22】圧縮集約済出版データのパケット形式を例示するデータ構造図である。
【
図23】クライアント装置からの出版データの出版要求受信時における処理手順の一例を示すフローチャートである。
【
図24】出版要求に応じた出版データ送信時における処理手順の一例を示すフローチャートである。
【
図25】他ブローカ装置からの出版データ送信時における処理手順の一例を示すフローチャートである。
【
図26】第3の実施形態の通信システムの変形例に適用されるクライアント装置の構成例を示す概念図である。
【
図27】最大待機時間リストの一例を示す図である。
【
図29】圧縮集約済データのパケット形式を例示するデータ構造図である。
【
図30】クライアント装置からの出版データの出版要求受信時における処理手順の一例を示すフローチャートである。
【
図31】購読情報(トピック)毎にパケットの集約・圧縮および送信処理を行う際における処理手順の一例を示すフローチャートである。
【
図32】ブローカ装置からの出版データ送信時における処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下に、本発明の各実施形態の通信システムを、図面を参照して説明する。
【0011】
なお、以下の各実施形態の説明において、同一部分については、同一符号を用いて示し、重複説明を避ける。
【0012】
(第1の実施形態)
図1は、第1の実施形態の通信システムの構成例を示す概念図である。
【0013】
通信システム1は、ネットワーク20を介して互いに通信可能に接続された複数のブローカ装置10と、複数のブローカ装置10のうちの何れかとネットワーク20を介して通信可能に接続された任意の数のクライアント装置30とからなる。
【0014】
図1に示す例では、ネットワーク20を介して互いに通信可能に接続された4つのブローカ装置10(#0~#3)と、これらブローカ装置10(#0~#3)のうちの何れかにネットワーク20を介して通信可能に接続されたクライアント装置30(#1~#6)とが図示されている。
【0015】
図1に示す例ではまた、ブローカ装置10(#1)に、クライアント装置30(#1)、(#2)、(#3)が通信可能に接続され、ブローカ装置10(#2)に、クライアント装置30(#4)、(#5)が通信可能に接続され、ブローカ装置10(#3)に、クライアント装置30(#6)が通信可能に接続されている。
【0016】
ネットワーク20は、例えばLAN等のローカルな回線であってもよいし、インターネットや専用回線等の広域な有線通信回線や、3G等の広域な無線通信回線とすることができる。
【0017】
ブローカ装置10とクライアント装置30との間で授受される情報群は「トピック」によって分類される。クライアント装置30は、受信したいトピックを、接続しているブローカ装置10に登録する。以降、この登録動作を「購読」と称する。
【0018】
また、クライアント装置30は、接続しているブローカ装置10へ、トピックに関連する出版データを送信することができる。以降、この送信動作を「出版」と称する。
【0019】
ブローカ装置10は、クライアント装置30からトピックとともに出版データが出版された場合、このトピックを購読しているクライアント装置30へ、出版データを送信する。例えば
図1において、クライアント装置30(#1)が、情報群Aというトピックを購読している場合、ブローカ装置10(#1)は、クライアント装置30(#2)から情報群Aというトピックに関連する出版データが出版されると、この出版データをクライアント装置30(#1)のみへ転送する。このように、クライアント装置30(#1)は、購読している出版データのみを受信することができる。
【0020】
複数のブローカ装置10が存在する場合、各ブローカ装置10は、例えば、
図2に示すような他ブローカ装置購読情報管理表200を保持することによって、各ブローカ装置10において購読されているトピックに関する情報を共有する。
【0021】
図2は、他ブローカ装置購読情報管理表の一例を示す図である。
【0022】
他ブローカ装置購読情報管理表200(以下、単に「管理表200」と称する)は、一例として、購読されるブローカ装置10を示す購読ブローカ装置m1と、購読ブローカ装置m1で指定されたブローカ装置10において購読されるトピックを示す購読情報(トピック)m2との2つの項目から構成されるレコードが積まれたデータテーブルである。管理表200は、ブローカ装置10内の図示しないストレージに記憶されており、ブローカ装置10内の各部位によって参照されることが可能である。
【0023】
図2に例示する管理表200では、ブローカ装置10(#1)において情報群A、情報群B、情報群Cというトピックが購読され、ブローカ装置10(#2)において情報群A、情報群Cというトピックが購読され、ブローカ装置10(#3)において情報群Bというトピックが購読されることが示されている。
【0024】
管理表200を参照することによって、ブローカ装置10は、クライアント装置30から出版データが出版された場合、この出版データがどのトピックに関連しているのかに基づいて、他のどのブローカ装置10へ転送すべきかを判定する。
【0025】
例えば、クライアント装置30(#3)が、情報群Bというトピックに関連する出版データをブローカ装置10(#1)へ出版した場合、ブローカ装置10(#1)は、管理表200より、ブローカ装置10(#3)がこの出版データを必要としていると判定し、ブローカ装置10(#3)へ転送する。
【0026】
このように、通信システム1は、必要最小限の出版データしか転送しないので、ネットワーク帯域を効率的に利用する。
【0027】
また、MQTT(Message Queue Telemetry Transport)等の出版・購読型モデルを採用するプロトコルの中には、各ブローカ装置10が、トピック毎に最新の出版データを保持する機能(以下、「リテイン機能」と称する)を有するものがある。
【0028】
リテイン機能によれば、クライアント装置30は、出版データが出版された後に購読を開始した場合であっても、購読するトピックに関連する最新の出版データを常に取得することが可能となる。
【0029】
また、例えば、クライアント装置30は、バッテリ駆動タイプであれば、常に通信セッションを保持できる訳ではない。しかしながら、リテイン機能によれば、バッテリ駆動タイプのクライアント装置30のみならず、間歇的に起動するタイプのクライアント装置30であっても、ブローカ装置10に対して毎回通信セッションを張り、購読要求を行い、最新の出版データを取得し、所定の処理を実施した後に通信セッションを切断し、省電力状態に移行することも可能である。
【0030】
リテイン機能によればさらに、クライアント装置30が異常終了した場合であっても、再起動後に最新の出版データを取得することもできる。
【0031】
ところで、すべてのブローカ装置10に対して、最新の出版データを保持させようとすると、出版時にすべての出版データを、すべてのブローカ装置10へ転送する必要がある。しかしながら、すべてのブローカ装置10が、すべての出版データを必ずしも必要とするとは限らない。このため、出版されたすべての出版データを、すべてのブローカ装置10へ転送することは、通信リソースの浪費となり、非効率的である。そこで、通信システム1は、通信効率向上のために、出版データに関連するトピックの購読者であるクライアント装置30が接続されているブローカ装置10のみへ出版データを転送する。
【0032】
例えば、購読ブローカ装置と、購読情報(トピック)との関係が、管理表200に例示されるような場合、ブローカ装置10(#1)へ、情報群Bというトピックに関連する出版データが出版されると、ブローカ装置10(#1)は、この出版データを、ブローカ装置10(#3)のみへ転送する。ブローカ装置10(#3)は、転送された出版データを保持する。
【0033】
一方、情報群Bというトピックが、ブローカ装置10(#1)以外の複数のブローカ装置10において購読されている場合、情報群Bというトピックに関連する出版データが、ブローカ装置10(#1)へ出版されると、ブローカ装置10(#1)は、この出版データを、情報群Bが購読されているすべてのブローカ装置10へ転送する。出版データを転送された各ブローカ装置10は、各々出版データを保持する。
【0034】
ところで、最新の出版データが、1つのブローカ装置10にしか保持されていない場合、このブローカ装置10に異常が生じると、最新の出版データが喪失される恐れがある。これは信頼性の観点から好ましくない。そこで通信システム1では、以下に説明するように、通信の効率性を維持しつつ、信頼性をも向上させながら、出版データの保持状態に応じて、出版データの冗長性を担保する機能を有するブローカ装置10を採用している。
【0035】
図3は、本実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【0036】
ブローカ装置10は、通信部102、通信部104、自購読情報受信部106、自購読情報管理部108、自出版データ受信部110、自出版データ送信部112、最新出版データ保持部114、他出版データ送信部116、他出版データ受信部118、他購読情報管理部120、および終了検知部122を備える。
【0037】
通信部102は、ネットワーク20を介して、自ブローカ装置10以外の他ブローカ装置10と通信し、自ブローカ装置10内の各部位からの情報を、ネットワーク20を介して他ブローカ装置10へ送信したり、逆に、他ブローカ装置10から送信された情報をネットワーク20を介して受信し、自ブローカ装置10内の各部位へ出力する。
【0038】
通信部104は、ネットワーク20を介して、クライアント装置30と通信し、自ブローカ装置10内の各部位からの情報を、ネットワーク20を介してクライアント装置30へ送信したり、逆に、クライアント装置30から送信された情報をネットワーク20を介して受信し、自ブローカ装置10内の各部位へ出力する。
【0039】
なお、以下の説明では、例として、自ブローカ装置10をブローカ装置10(#0)とし、他ブローカ装置10をブローカ装置10(#1)、(#2)、(#3)とする。さらに、説明の容易のために、他ブローカ装置10(#1)、(#2)、(#3)については、単に他ブローカ装置10として表す。
【0040】
自購読情報受信部106は、クライアント装置30によって購読される情報群であるトピックに対する購読要求KRを、通信部104を介して、購読要求元のクライアント装置30(例えば、クライアント装置30(#2))から受信する。
【0041】
自購読情報受信部106は、購読要求KRが購読登録要求である場合には、自購読情報管理部108に対して、購読要求KRで指定されたトピックと、購読要求元のクライアント装置30とを、例えば
図4に例示される自ブローカ装置購読情報管理表205を使用して管理させる。
【0042】
図4は、自ブローカ装置購読情報管理表の一例を示す図である。
【0043】
自ブローカ装置購読情報管理表205(以下、単に「管理表205」と称する)は、自ブローカ装置10(#0)において購読される購読情報(トピック)を示す自ブローカ装置購読情報m3と、自ブローカ装置購読情報m3で指定された購読情報を購読するクライアント装置30を示す購読クライアント装置m4との2つの項目から構成されるレコードが積まれたデータテーブルである。管理表205は、ブローカ装置10内の図示しないストレージに記憶されており、ブローカ装置10内の各部位によって参照されることが可能である。
【0044】
図4に例示する管理表205では、自ブローカ装置10(#0)において、情報群Aというトピックが、クライアント装置30(#1)によって購読されることが示されている。
【0045】
自出版データ受信部110は、出版元のクライアント装置30(例えば、クライアント装置30(#1))から、通信部104を介して、トピックおよびその出版データSDを受信する。
【0046】
また、自購読情報受信部106が受信した購読要求KRが、購読解除要求である場合には、自購読情報管理部108は、管理表205から、購読要求元のクライアント装置30が購読クライアント装置m4に書き込まれているレコードを削除する。このように、管理表205は、自ブローカ装置10(#0)に接続されたクライアント装置30の購読情報(トピック)を管理するために使用される。
【0047】
自購読情報受信部106が受信した購読要求KRが、購読解除要求である場合にはさらに、自購読情報管理部108が、他ブローカ装置10の購読状況を考慮して、他ブローカ装置10への購読解除の通知可否を決定する。この決定の際、自購読情報管理部108は、例えば、管理表200を使用して、購読解除の対象とされたトピックを購読している他ブローカ装置10(購読ブローカ装置)の数を判定し、判定された数が2以上の場合にのみ購読解除を行うアルゴリズムを適用する。これによって、購読ブローカ装置10の数が1である場合には、購読解除されても購読解除は行われないので、出版データSDの冗長性を引き続き確保できる。
【0048】
また、このアルゴリズムでは、自ブローカ装置10(#0)が、大量のトピックを購読している場合、トラフィックの偏りが生じる可能性が高い。一方、購読しているトピックが最も少ないブローカ装置10が、当該トピックを購読すると、トラフィックを効率的に分散させることができる。そこで、購読ブローカ装置10の数が2以上ではない場合、自購読情報管理部108は、他ブローカ装置10と自ブローカ装置10(#0)との購読数を比較し、自ブローカ装置10(#0)の購読数が最も少ない場合にのみ購読を継続するようにしてもよい。
【0049】
自出版データ送信部112は、自出版データ受信部110によって受信された出版データSDを、通信部104を介して、購読要求元のクライアント装置30(例えば、クライアント装置30(#2))へ送信する。出版データSDの送信先であるクライアント装置30は、例えば管理表205を参照して決定される。管理表205によれば、自ブローカ装置購読情報m3として指定されたトピックが情報群Aである場合、送信先は、クライアント装置30(#1)であると決定される。
【0050】
他出版データ送信部116は、自出版データ受信部110によって受信された出版データSDを、通信部102を介して、他ブローカ装置10へ送信する。送信元のブローカ装置10を決定する際には、例えば管理表200が使用される。管理表200から、出版データSDに関連する購読情報(トピック)m2を把握し、対応する購読ブローカ装置m1を読み取ることによって、送信先のブローカ装置10が決定される。
【0051】
他出版データ受信部118は、他ブローカ装置10から、通信部102を介して、トピックおよびその出版データSDを受信する。
【0052】
他購読情報管理部120は、他ブローカ装置10が必要とするトピック(他ブローカ装置10に接続するクライアント装置30が購読しているトピック)を受信し、例えば管理表200を使用して管理する。
【0053】
最新出版データ保持部114は、前述したリテイン機能を実現するために、自出版データ受信部110および他出版データ受信部118によって受信された出版データSDから、最新の出版データSDをトピック毎に抽出し、保持する。
【0054】
他購読情報管理部120はさらに、新規の購読要求KRを、他ブローカ装置10から受信した場合、それが購読登録要求であれば、管理表200に登録するとともに、最新出版データ保持部114が、最新の出版データSDを保持している場合には、他出版データ送信部116に対して、その最新の出版データSDを、最新出版データ保持部114から取得させ、取得した出版データSDを、この出版データSDの購読を開始した他ブローカ装置10へ送信させる。
【0055】
なお、複数の他ブローカ装置10から最新の出版データSDが送信されることを回避するため、他購読情報管理部120は、各ブローカ装置10に単なる整理番号としてブローカ番号を振っておき、最新の出版データSDを保持するブローカ装置10のうち、最小のブローカ番号を振られたブローカ装置10のみの出版データSDの送信を許可するなど、1つのブローカ装置10のみが最新の出版データSDを送信する仕組みを採用してよい。
【0056】
また、他購読情報管理部120は、ブローカ番号を、整理番号として単純に付番することに限らず、ブローカ装置10の能力に応じて付番するようにしてもよい。例えば、能力の高いブローカ番号10ほど小さいブローカ番号を付番するようにすれば、最新の出版データSDを保持するブローカ装置10のうち、最も能力の高いブローカ装置10のみの出版データSDの送信を許可できるようになる。
【0057】
さらに、購読クライアント装置30が存在しないにも関わらず出版データSDを受信し続けることを回避するため、他購読情報管理部120は、他ブローカ装置10が購読開始したトピックの購読数が2(自ブローカ装置10(#0)は含まない)になった時点で、自ブローカ装置10(#0)がそのトピックを購読しており、かつ購読クライアント装置30が存在しない場合には、購読情報を削除し、購読解除要求である購読要求KRを送信するようにしてもよい。
【0058】
さらにまた、他購読情報管理部120は、他ブローカ装置10からの購読要求KRが、購読解除要求である場合に購読ブローカ装置10の数が2以下になることを回避するために、購読ブローカ装置10の数が1になる場合には、自ブローカ装置10(#0)が購読数最小の場合で、かつ購読数最小のブローカ装置10の中で最も小さいブローカ番号を有する場合に、そのトピックを購読することとし、購読要求KRを、他ブローカ装置10へ送信するようにしてもよい。
【0059】
自出版データ送信部112は、購読要求KRで指定されたトピックの最新の出版データSDを、最新出版データ保持部114から取得し、購読要求元のクライアント装置30(例えば、クライアント装置30(#2))へ送信する。出版データSDの転送先であるクライアント装置30は、前述したように、例えば管理表205を参照して決定される。
【0060】
なお、最新出版データ保持部114に最新の出版データSDが保持されていない場合、すなわち、どのクライアント装置30も出版データSDを出版していない場合、自出版データ送信部112は、上述した送信処理を行わない。
【0061】
他購読情報管理部120は、他ブローカ装置10によって購読される情報群であるトピックに対する購読要求KRを、通信部102を介して他ブローカ装置10から受信する。そして、受信した購読要求KRに応じて、管理表200の内容を更新する。例えば、購読要求元のブローカ装置10を、購読ブローカ装置m1として書き込み、購読要求KRで指定されたトピックを、購読情報(トピック)m2として書き込む。
【0062】
他購読情報管理部120によって受信された購読要求KRが、購読登録要求であれば、他出版データ送信部116は、購読要求KRで指定されたトピックに関連する最新の出版データSDを、最新出版データ保持部114から取得し、取得した出版データSDを、購読要求元の他ブローカ装置10へ送信する。購読要求元の他ブローカ装置10は、例えば管理表200を使用して決定される。
【0063】
自購読情報管理部108は、自ブローカ装置10(#0)によって購読される情報群であるトピックを管理するとともに、管理しているトピックに変化があった場合には、このトピックを、通信部102を介して、他ブローカ装置10へ送信する。
【0064】
自購読情報管理部108は、管理しているトピックを購読するクライアント装置30が存在しない場合には、新たな購読登録要求である購読要求KRを出力する。
【0065】
他購読情報管理部120は、受信された購読要求KRによって指定されたトピックのうち、2つ以上のブローカ装置10で購読されているトピックと、自購読情報管理部108によって管理されているトピックとを購読するクライアント装置30が存在しない場合には、購読解除要求である購読要求KRを自購読情報管理部108へ出力する。
【0066】
他購読情報管理部120は、ブローカ装置10毎に購読されるトピックの数を計算し、その最小値が自購読情報管理部108によって管理されるトピックの数の合計値を上回る場合にのみ、新たな購読登録要求である購読要求KRを、自購読情報管理部108へ出力する。
【0067】
自購読情報管理部108は、他出版データ受信部118から出力された新たな購読登録要求である購読要求KRや、購読解除要求である購読要求KRを、通信部102を介して、他ブローカ装置10へ転送する。自購読情報管理部108は、この転送を、すべてのブローカ装置10へ行ってもよいし、ネットワークトポロジを考慮して特定のブローカ装置10のみへ行ってもよい。特定のブローカ装置10のみに転送した場合には、そのブローカ装置10のみから、購読要求KRで指定されたトピックに関連する出版データSDが返送される。
【0068】
終了検知部122は、他ブローカ装置10の終了および異常のうちの少なくとも何れかを検知する。この検知のために、終了検知部122は、例えば、通信部102を介して、定期的にハートビートを他ブローカ装置10へ送信し、他ブローカ装置10がそのハートビートを受信ができなくなった段階で他ブローカ装置10の異常を検知する。また、他ブローカ装置10の終了時に自発的に送信された終了通知を検出した段階で他ブローカ装置10の終了を検知する。終了検知部122によって終了または異常が検知されると、管理表200から、終了または異常を検知されたブローカ装置10が購読ブローカ装置m1として書き込まれたレコードが削除される。
【0069】
これによって、他購読情報管理部120は、終了検知部122によって終了または異常を検知された他ブローカ装置10から購読要求KRを受信しないようになる。
【0070】
次に、以上のように構成した第1の実施形態の通信システムの動作例について説明する。
【0071】
図5は、クライアント装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【0072】
自ブローカ装置10(#0)では、クライアント装置30から送信された購読要求KRが、通信部104を介して、自購読情報受信部106によって受信される(S1)と、購読要求KRが、購読登録要求または購読解除要求であるかが判定される(S2)。購読登録要求であれば(S2:購読登録)、自購読情報管理部108によって、管理表205が参照され、購読登録要求された購読情報(例えば、情報群A)が、自ブローカ装置購読情報m3として書き込まれ、要求元のクライアント装置30が、購読クライアント装置m4として書き込まれることによって、購読情報が登録される(S3)。
【0073】
さらに自購読情報管理部108では、登録された購読情報が、自ブローカ装置10(#0)内で新規に購読するトピックであるか否かが判定される(S4)。新規に購読するトピックであると判定されると(S4:Yes)、他出版データ送信部116によって、通信部102を介して、他のブローカ装置10へ、新規購読を開始したトピックに関連する出版データSDが送信される(S5)。
【0074】
その後、他ブローカ装置10から、当該トピックの最新の出版データSDが送信され、通信部102を介して他出版データ受信部118によって受信されると(S6:Yes)、この出版データSDは、他出版データ受信部118から、最新出版データ保持部114へ出力され、最新出版データ保持部114において保持される(S7)。また、最新出版データ保持部114において保持されている出版データSDは、自出版データ送信部112へ出力され、自出版データ送信部112から、通信部104を経由して、当該トピックの購読を開始したクライアント装置30へ送信され(S8)、処理を終了する。
【0075】
一方、ステップS6において、他ブローカ装置10から当該トピックの最新の出版データSDが送信されない場合(S6:No)、すなわち、当該トピックの出版データSDがまだ一度も出版されていない場合には、処理を終了する。
【0076】
一方、ステップS4において、新たに登録要求されたトピックが、既に別のクライアント装置30によって購読されていた場合(S4:No)、最新出版データ保持部114に最新の出版データSDが保持されているか否かが、他出版データ受信部118によって確認され(S9)、保持されている場合(S9:Yes)、自出版データ送信部112から、通信部104を介して、クライアント装置30へ最新の出版データが送信される(S10)。一方、最新の出版データが保持されていない場合(S9:No)には、処理を終了する。
【0077】
一方、ステップS2において、購読要求KRが、購読解除要求であれば(S2:購読解除)、自購読情報管理部108によって、管理表205から、この購読要求KRで指定されたトピック(例えば、情報群A)が自ブローカ装置購読情報m3として書き込まれているレコードが削除される(S11)。
【0078】
その後、管理表205に、当該トピック(例えば、情報群A)に購読クライアント装置30が関連付けられているレコードが残っている(S12:Yes)のであれば、処理を終了する。
【0079】
一方、管理表205に、当該トピックに購読クライアント装置30が関連付けらえているレコードが残っていない(S12:No)のであれば、自購読情報管理部108によって、管理表200に基づいて、
図6に示すような購読情報購読数管理表210が作成され、さらに、管理表200、205に基づいて、
図7に示すようなブローカ装置購読数管理表215が作成されることによって、各ブローカ装置10のブローカ装置購読数状況が把握される(S13)。
【0080】
図6は、購読情報購読数管理表の一例を示す図である。
【0081】
図7は、ブローカ装置購読数管理表の一例を示す図である。
【0082】
購読情報購読数管理表210(以下、単に「管理表210」と称する)は、購読されるトピックを示す購読情報(トピック)m5と、購読情報(トピック)m5で指定されたトピックが購読される他ブローカ装置10の数を示す購読数m6との2つの項目から構成されるレコードが積まれたデータテーブルである。管理表200によれば、情報群Aというトピックの購読ブローカ装置は、ブローカ装置10(#1)と、ブローカ装置10(#2)との2つである。これに応じて、管理表210では、情報群Aというトピックに対応する購読数が2と示される。同様に、管理表200では、情報群Bというトピックの購読ブローカ装置が2つであり、情報群Cというトピックの購読ブローカ装置が2つであるので、管理表210では、情報群Bに対応する購読数が2、情報群Cに対応する購読数が2と示される。管理表210は、ブローカ装置10内の図示しないストレージに記憶されており、ブローカ装置10内の各部位によって参照されることが可能である。
【0083】
ブローカ装置購読数管理表215(以下、単に「管理表215」と称する)は、ブローカ装置が記載されたブローカ装置m7と、各ブローカ装置において購読されるトピックの数を示す購読数m8との2つの項目から構成されるレコードが積まれたデータテーブルである。管理表205では、自ブローカ装置10(#0)は、情報群Aという1つのトピックを購読することが示されている。これに応じて、管理表215では、自ブローカ装置10(#0)の購読数が1と示される。また、管理表200では、ブローカ装置10(#1)は、情報群A、情報群B、情報群Cという3つのトピックを購読することが示されている。したがって、管理表215では、ブローカ装置10(#1)の購読数が3と示される。同様に、管理表200における情報に基づいて、管理表215では、ブローカ装置10(#2)の購読数が2と、ブローカ装置10(#3)の購読数が1と示される。管理表215は、ブローカ装置10内の図示しないストレージに記憶されており、ブローカ装置10内の各部位によって参照されることが可能である。
【0084】
なお、管理表200、205の内容が更新された場合、自購読情報管理部108によって、管理表210、215もまたその更新内容に応じて更新される。
【0085】
ステップS13において、当該トピック(例えば、情報群A)を購読している他ブローカ装置10の数が2以上である場合(S13:Yes)、自購読情報管理部108によって、管理表205から、自ブローカ装置購読情報m3として当該トピック(例えば、情報群A)が書き込まれているレコードが削除され(S16)、当該トピックの購読解除要求が、通信部102を介して、他ブローカ装置10へと送信される(S17)。
【0086】
一方、ステップS13において、当該トピックを購読しているブローカ装置10の数が2未満である場合(S13:No)、管理表215に基づいて、他購読情報管理部120によって、各ブローカ装置10の購読数が把握され、さらに、自ブローカ装置10(#0)の購読数が、最小か否かが判定される(S14)。
【0087】
例えば、管理表215には、各ブローカ装置10の購読数は、自ブローカ装置10(#0)が1、ブローカ装置10(#1)が3、ブローカ装置10(#2)が2、ブローカ装置10(#3)が1であると示されている。この場合、自ブローカ装置10(#0)は、ブローカ装置11(#3)とともに、購読数が最小である(S14:Yes)。
【0088】
購読数が最小ではない場合(S14:No)には、前述したステップS16へ進む。
【0089】
一方、ステップS14において、購読数が最小である場合(S14:Yes)、購読数最小のブローカ装置10のうち、自ブローカ装置10のブローカ番号が最も小さいか否かが、他購読情報管理部120によって判定される(S15)。
【0090】
管理表215に示されるように、購読数最小のブローカ装置10は、購読数が1である自ブローカ装置10(#0)とブローカ装置10(#3)であり、そのうち、自ブローカ装置10(#0)のブローカ番号が0であり最小である(S15:Yes)ので、処理を終了する。
【0091】
一方、ステップS15において、最小ではない場合(S15:No)には、前述したステップS16へ進む。
【0092】
図8は、他ブローカ装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【0093】
他ブローカ装置10から購読要求KRが送信された場合、この購読要求KRは、通信部102を介して、他購読情報管理部120によって受信される(S21)。
【0094】
購読要求KRが、購読登録要求であれば(S22:購読登録)、他購読情報管理部120において、管理表200の購読ブローカ装置m1として、購読要求元のブローカ装置10が書き込まれ、購読情報(トピック)m2として、購読要求KRで指定された購読情報(トピック)が書き込まれることによって、登録がなされる(S23)。
【0095】
購読要求KRで指定されたトピックが、自ブローカ装置10(#0)で購読されており(S24:Yes)、そのトピックの最新の出版データSDが、最新出版データ保持部114に保持されており(S25:Yes)、自ブローカ装置10(#0)が、購読ブローカ装置10のうち、最も小さいブローカ番号である場合(S26:Yes)には、最新の出版データSDが、他出版データ送信部116によって、通信部102を介して、要求元のブローカ装置10へ送信される(S27)。
【0096】
ステップS25において、そのトピックの最新の出版データSDが、最新出版データ保持部114に保持されていない場合(S25:No)や、ステップS26において、購読ブローカ装置10のブローカ番号が、最も小さいブローカ番号ではない場合(S26:No)や、ステップ27の後は、ステップS28へ進む。
【0097】
ステップS28では、自購読情報管理部108によって、管理表205が参照されることによって、自ブローカ装置10(#0)内で当該トピックを購読するクライアント装置30が存在するか否かが判定され、存在すると判定される(S28:Yes)と、処理を終了する。
【0098】
一方、存在すると判定されない場合(S28:No)には、他購読情報管理部120によって、管理表210から、当該トピック(例えば、情報群A)を購読する他購読ブローカ装置10の数(購読数)が判定され、その数が2以上であれば(S29:Yes)、管理表205から、当該トピック(例えば、情報群A)が自ブローカ装置購読情報m3として書き込まれているレコードが削除され(S30)、自購読情報管理部108から、当該トピックに対する購読解除要求が、通信部102を介して、他ブローカ装置10へ送信される(S31)。
【0099】
一方、ステップS29において、購読ブローカ装置10の数が、2以上でない場合(S29:No)、自ブローカ装置10(#0)内で当該トピックを購読するクライアント装置30は存在しないものの、出版データSDの冗長化のために、自ブローカ装置10(#0)での購読を継続するために、何れの処理もなされずに、処理は終了する。
【0100】
ステップS24において、トピックが、自ブローカ装置10(#0)で購読されておらず(S24:No)、さらに他購読ブローカ装置10の数が1であり(S33:Yes)、自ブローカ装置10(#0)が、トピック購読数最小のブローカ装置であり(S34:Yes)、自ブローカ装置10(#0)のブローカ番号が、購読数最小のブローカ装置10の中で最も小さければ(S35:Yes)、出版データSDの冗長化のためにトピックを購読するために、自購読情報管理部108によって、管理表205の自ブローカ装置購読情報m3として該トピックの購読情報(例えば、情報群A)が書き込まれ(S36)、その後、通信部102を介して、該トピックを指定した購読要求KRが、他のブローカ装置10へ送信される(S37)。
【0101】
さらに、他ブローカ装置10から出力された最新の出版データSDが、通信部102を介して他出版データ受信部118によって受信された場合(S38:Yes)には、受信された最新の出版データSDが、最新出版データ保持部114へ出力され、保持され(S39)、処理が終了する。
【0102】
なお、ステップS33において、他ブローカ装置10の購読数が1ではない場合(S33:No)、ステップS34において、自ブローカ装置10(#0)の購読数が最小ではない場合(S34:No)、ステップS35において、自ブローカ装置10(#0)のブローカ番号が、最も小さいブローカ番号でない場合(S35:No)、ステップS38において、最新の出版データSDが送信されない場合(S38:No)には、何れの処理もなされず、処理が終了する。
【0103】
なお、ステップS22において、他ブローカ装置10から送信された購読要求KRが、購読解除要求である場合(S22:購読解除)には、他購読情報管理部120によって、管理表200から、購読要求KRで指定されたトピックが購読情報(トピック)m2として書き込まれているレコードが削除され(S32)、その後、ステップS33へ進む。
【0104】
なお、本実施形態では、ステップS15、S26、S35における判定のために使用される判定基準に、最小のブローカ番号であるか否かが使用されている。しかしながら、判定基準はこれに限定されず、代わりに、最大のブローカ番号であるか否かを使用してもよい。あるいは、ブローカ番号によらず、直近の通信量が最も少ないブローカ装置10の購読を継続する等のようなアルゴリズムを使用してもよい。
【0105】
図9は、クライアント装置からの出版データ出版要求時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【0106】
自ブローカ装置10(#0)では、クライアント装置30(例えば、クライアント装置30(#1))から、トピックおよびその出版データSDが送信されると、出版データSDは、通信部104を介して、自出版データ受信部110によって受信され、さらに自出版データ送信部112へ出力される(S41)。自出版データ送信部112では、管理表205が参照され、出版データSDに関連するトピックを購読しているクライアント装置(購読クライアント装置)30が存在するか否かが判定される(S42)。
【0107】
購読クライアント装置30が存在すると判定される(S42:Yes)と、判定されたクライアント装置30(例えば、クライアント装置30(#2))へ、自出版データ送信部112から、通信部104を介して、出版データSDが送信され(S43)、ステップS44へ進む。
【0108】
一方、購読しているクライアント装置30が存在しない場合(S42:No)は直接ステップS44へ進む。
【0109】
ステップS44では、他購読情報管理部120において、例えば管理表200が参照されることによって、出版データSDに関連するトピックを購読する他ブローカ装置10が存在するか否かが判定される(S44)。
【0110】
存在すると判定される(S44:Yes)と、判定されたブローカ装置10に向けて、他出版データ送信部116から、通信部102を介して、その出版データSDが送信される(S45)とともに、その出版データSDが最新出版データ保持部114に保持される(S46)。
【0111】
一方、ステップS44において、存在しないと判定される(S44:No)と、ステップS46へ進み、その出版データSDが、最新出版データ保持部114に保持される(S46)。
【0112】
なお、
図9には示されていないが、自ブローカ装置10(#0)、他ブローカ装置10共に購読していないトピックに関連する出版データSDがある場合(S42、S44の判定が共にNoである場合)には、そのトピックの購読登録要求が、他ブローカ装置10へ送信される。
【0113】
図10は、他ブローカ装置からの出版データ送信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【0114】
他ブローカ装置10から送信された出版データSDは、通信部102を介して、他出版データ受信部118によって受信される(S51)。
【0115】
これに応じて、自購読情報管理部108によって、管理表205が参照され、出版データSDに関連するトピックを購読するクライアント装置(購読クライアント装置)30が、自ブローカ装置10に接続されているか否かが判定される(S52)。
【0116】
接続されていると判定された場合(S52:Yes)には、自出版データ送信部112によって、通信部104を介して、判定されたクライアント装置30(例えば、クライアント装置30(#2))へ、出版データSDが送信される(S53)。また、この出版データSDが、最新出版データ保持部114に保持され(S54)、その後、処理を終了する。
【0117】
一方、接続されていないと判定された場合(S52:No)には、ステップS54へ進み、その出版データSDが、最新出版データ保持部114に保持される(S54)。
【0118】
図11は、他ブローカ装置の終了時および異常検出時における処理手順の一例を示すフローチャートである。
【0119】
他ブローカ装置10から、自ブローカ装置10(#0)の終了検知部122へ、自発的な終了通知が到着した場合(S61:Yes)、または、自ブローカ装置10(#0)の終了検知部122によって、他ブローカ装置10の異常が検知された場合(S62:Yes)、他購読情報管理部120によって、終了または異常を起こしたブローカ装置10が購読しているトピックが、管理表200の購読情報(トピック)m2として書き込まれているか否が確認される(S63)。
【0120】
自発的な終了通知が到着せず(S61:No)、その後、他ブローカ装置10の異常も検知されない場合(S62:No)には、ステップS61の処理へ戻る。また、ステップS63において、書き込まれていないと判定された場合、すなわち、終了または異常を起こしたブローカ装置10が購読しているトピックが存在しない場合(S63:No)にもまた、ステップS61の処理へ戻る。
【0121】
一方、ステップS63において、書き込まれている判定された場合、すなわち、終了または異常を起こしたブローカ装置10が購読しているトピックが存在する場合(S63:Yes)には、他購読情報管理部120によって、終了または異常を起こしたブローカ装置10が購読しているトピックが購読情報(トピック)m2として書き込まれているレコードが、管理表200から削除される(S64)。
【0122】
さらに、そのトピックが自ブローカ装置10(#0)でも購読されておらず(S65:No)、他購読ブローカ装置10の数が1であり(S66:Yes)、かつ自ブローカ装置10(#0)の購読数が最小であり(S67:Yes)、購読数最小のブローカ装置10の中で自ブローカ装置10(#0)のブローカ番号が最も小さい場合(S68:Yes)、そのトピックは、自ブローカ装置10での冗長化のために購読登録され(S69)、このトピックが、自購読情報管理部108から、通信部102を介して、他ブローカ装置10へ送信される(S70)。
【0123】
それ以外(S65:Yes、S66:No、S67:No、S68:No)の場合にはステップS63へ戻る。
【0124】
ステップS70の後、自ブローカ装置10(#0)が、最新の出版データSDを受信した場合(S71:Yes)には、最新の出版データSDが、最新出版データ保持部114に保持され(S72)、その後ステップS63へ戻る。
【0125】
一方、ステップS70の後、自ブローカ装置10(#0)が、最新の出版データSDを受信しない場合(S71:No)には、ステップS63へ戻る。
【0126】
以上の構成により、自ブローカ装置10(#0)は、出版データSDの冗長性を確保できるので、他ブローカ装置10の異常発生時にも出版データSDは喪失されない。これにより、出版・購読型モデルの通信プロトコルを採用するシステムにおいて、信頼性の向上を図ることが可能となる。またブローカ装置10が購読する出版データSDのデータ量に応じて、冗長化のための出版データSDの送信先を変更することもできるので、適切な負荷分散を実現することが可能となる。
【0127】
(変形例)
第1の実施形態の通信システムの変形例について説明する。
【0128】
図3に例示するブローカ装置10では、出版データSDの冗長化のために、トピックを購読するか否かを判定する機能を備えている。本変形例では、そのような機能を、ブローカ装置の外部に、サブブローカ装置として設ける。
【0129】
図12は、第1の実施形態の通信システムの変形例を示す概念図である。
【0130】
すなわち、本変形例の通信システム2では、
図12に示すように、ブローカ装置11の外部に、ネットワーク21を介して、サブブローカ装置40を接続している。
図12に示す例では、各ブローカ装置11に対して、サブブローカ装置40を1対1で設けているが、このような構成に限定されず、特定のブローカ装置11にのみサブブローカ装置40を設けてもよい。また、1つのサブブローカ装置40を、複数のブローカ装置11へ接続し、複数のブローカ装置11について1つのサブブローカ装置40が共通して機能するようにしてもよい。
【0131】
ネットワーク21もまた、ネットワーク20と同様に、例えばLAN等のローカルな回線であってもよいし、インターネットや専用回線等の広域な有線通信回線や、3G等の広域な無線通信回線とすることができる。
【0132】
図13は、第1の実施形態の通信システムの変形例に適用されるブローカ装置およびサブブローカ装置の構成例を示すブロック図である。
【0133】
ブローカ装置11は、ブローカ装置10から終了検知部122を削除した構成をしている。
【0134】
サブブローカ装置40は、終了検知部402および購読決定部404を備える。
【0135】
終了検知部402は、終了検知部122と同様の機能を有する。
【0136】
購読決定部404は、ブローカ装置11の自購読情報管理部108および他購読情報管理部120から、購読要求KRの購読変更要求を受信する。購読決定部404は、自購読情報管理部108と他購読情報管理部120との両方から購読変更要求を受信することに代えて、通信を監視すること等により、購読変更要求を認識するようにしてもよい。
【0137】
購読決定部404はさらに、購読変更要求の受信時に、購読変更要求元のブローカ装置11が、購読要求KRに関連付けられたトピックの新規購読要求なのか、購読解除要求なのか、購読継続要求なのか、購読解除継続要求なのかを判定する。
【0138】
この判定基準としては、例えば、管理表205の購読情報(トピック)m2として、当該トピック(例えば、情報群A)に購読クライアント装置30が関連付けられているレコードが残っているのであれば、購読を継続し、残っていない場合には、他ブローカ装置11の購読数や自ブローカ装置11(#0)の購読数に応じて、このトピックの購読を継続するか否かを判定することができる。
【0139】
購読決定部404はさらに、新規購読要求や、購読解除要求のために、購読要求KRを、ブローカ装置11の自購読情報管理部108へ出力する。
【0140】
以上説明したように、変形例によれば、サブブローカ装置40を設けることによって、新たな冗長化機能を設けていないブローカ装置11を使用した場合であっても、高い冗長化機能を実現することが可能な通信システム2を実現することが可能となる。
【0141】
(第2の実施形態)
MQTTのような一部の出版・購読型モデルを採用するプロトコルでは、QoS機能を有する。QoS機能を利用することにより、必ず到着が保証されるべき出版データSD、到着が保証されなくともよい出版データSD等を区別するために、出版データSDにラベル付けすることができる。
【0142】
第1の実施形態では、すべての出版データSDの冗長性の確保を前提としていたが、QoSの値によっては必ずしも冗長性を確保する必要はない。これに着目し、本実施形態では、通信量やブローカ装置10への負荷の低減を図るために、到着を保証する必要のない出版データSDについては、冗長性を確保しない。
【0143】
図14は、第2の実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【0144】
ブローカ装置12の構成は、ブローカ装置10の構成と類似しているが、ブローカ装置12は、ブローカ装置10が備えていないQoS管理部124を、他購読情報管理部120と自購読情報管理部108との間に備えていることが異なる。従って、以下では、ブローカ装置10と異なる点について説明する。
【0145】
他購読情報管理部120は、第1の実施形態で説明した機能に加えて、他ブローカ装置10から、購読解除要求である購読要求KRを受信すると、受信した購読解除要求に基づいて、
図15に例示する他購読情報管理表220の内容を更新する。
【0146】
【0147】
他購読情報管理表220(以下、単に「管理表220」と称する)は、管理表200の変形例であり、購読ブローカ装置m1および購読情報(トピック)m2に、新たにQoSm9を加えた3つの項目から構成されるレコードが積まれたデータテーブルである。管理表220は、ブローカ装置12内の図示しないストレージに記憶されており、ブローカ装置12内の各部位によって参照されることが可能である。
【0148】
QoS管理部124は、出版データSDの送受信に要求される信頼性の指標値であるQoS値を算出し、管理表220のQoSm9として書き込むことによって、購読情報(トピック)毎にQoS値を管理する。また、管理表220を使って、出版データSDの複製が必要か否かを判定する。
【0149】
他購読情報管理部120は、QoS管理部124によって出版データSDの複製が必要であると判定された場合にのみ、購読登録要求である購読要求KRを、自購読情報管理部108へ出力する。
【0150】
これに応じて、自購読情報管理部108は、第1の実施形態で説明したアルゴリズムに従って、その出版データSDの購読を、自ブローカ装置12(#0)内で実施するか否かを判定する。
【0151】
自購読情報管理部108は、第1の実施形態で説明した機能に加えて、
図16に例示するような自購読情報管理表225を管理する。
【0152】
【0153】
自購読情報管理表225(以下、単に「管理表225」と称する)は、管理表205の変形例であり、自ブローカ装置購読情報m3および購読クライアント装置m4に、新たにQoSm9を加えた3つの項目から構成されるレコードが積まれたデータテーブルである。管理表225は、ブローカ装置12内の図示しないストレージに記憶されており、ブローカ装置12内の各部位によって参照されることが可能である。
【0154】
自購読情報管理部108は、QoS管理部124によって出版データSDの複製が必要であると判定された場合、第1の実施形態で説明したアルゴリズムに従って、購読を継続するか否かを判定する。また、管理表225の変更内容を、他ブローカ装置10へ送信する際に、対応するQoS情報も併せて送信することができる。
【0155】
QoS管理部124は、他購読情報管理部120もしくは自購読情報管理部108からトピックを出力されることによって呼び出され、そのトピックに関連する出版データSDが、冗長性を担保すべき情報であるか否かを判定する。
【0156】
例えば、QoSが0または1の二値を取り、0が到着を保証しなくてもよい出版データSDであり、1が到着を保証すべき出版データSDを意味するとする。この場合、QoS管理部124は、管理表220、225を参照し、当該トピックのQoSの最大値を算出する。
【0157】
例えば、管理表220より、購読情報(トピック)が情報群Aの場合には、ブローカ装置10(#1)がQoS=0、ブローカ装置10(#2)がQoS=1となり、管理表225より、自ブローカ装置12(#0)購読情報が情報群Aの場合には、QoS=1であり、QoSの最大値は1となる。
【0158】
一方、情報群Cの場合には、管理表220より、ブローカ装置10(#1)がQoS=0、ブローカ装置10(#2)もQoS=0であり、最大値は0となる。
【0159】
QoS管理部124は、最大値が1の場合には、冗長化を行うべき出版データSDであると判定し、最大値が0の場合には、冗長化を行う必要のない出版データSDであると判定する。
【0160】
なお、QoSが、前述した二値以外を取る場合にも、例えば最大値が1以上であれば、冗長化を行うべき出版データSDであると判定する等、同様のアルゴリズムで冗長化の要否判定を行うことができる。
【0161】
例えば、管理表220に示される例では、情報群Bはブローカ装置10(#1)およびブローカ装置10(#3)で購読されている。情報群BのQoSの最大値は1であり、冗長化を行うべき出版データSDであるが、元々ブローカ装置10(#1)とブローカ装置10(#3)で購読されているため、既に冗長化されている。
【0162】
ここで、ブローカ装置10(#1)が購読解除要求を行うとする。すると、情報群Bはブローカ装置10(#3)のみが購読することになる。この場合、第1の実施形態では、最も購読数が少なくブローカ番号も小さな自ブローカ装置12(#0)は、情報群Bを購読するクライアント装置30が存在しないにも関わらず、ブローカ装置10(#1)に代わって情報群Bを購読する。
【0163】
しかしながら、第2の実施形態では、QoSの最大値が0となり、冗長化を行う必要のない出版データSDとなる。この場合には、ブローカ装置10(#3)のみが購読を継続し、自ブローカ装置12(#0)では購読を行わないため、通信帯域を効率的に利用できることに加え、自ブローカ装置12(#0)の処理負荷を低減する。
【0164】
次に、以上のように構成した第2の実施形態の通信システムの動作例について説明する。
【0165】
図17は、クライアント装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【0166】
図17に示すフローチャートは、
図5に示すフローチャートの、ステップS12と、ステップS13との間に、ステップS12aを追加したものである。
【0167】
したがって、以下では、ステップS12aに関連する処理について説明し、重複説明を避ける。
【0168】
ステップS12において、購読クライアント装置30が存在せず、購読解除時に他ブローカ装置10によって購読されている場合(S12:No)、ステップS12aでは、出版データSDの冗長化の必要性の可否を判定するために、QoS管理部124によって、QoS最大値がゼロであるか否かが判定される(S12a)。
【0169】
QoS最大値がゼロであると判定された場合(S12a:Yes)、ステップS16へ進み、ゼロであると判定されなかった場合(S12a:No)、ステップS13へ進む。
【0170】
図18は、他ブローカ装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【0171】
図18に示すフローチャートは、
図8に示すフローチャートの、ステップS28と、ステップS29との間に、ステップS28aを追加し、ステップS32と、ステップS33との間に、ステップS32aを追加したものである。
【0172】
したがって、以下では、ステップS28aとステップS32aとに関連する処理について説明し、重複説明を避ける。
【0173】
ステップS28において、購読登録時に当該トピックの購読を行っているクライアント装置30が存在すると判定されない場合(S28:No)、ステップS12aと同様に、QoS管理部124によって、QoS最大値がゼロであるか否かが判定される(S28a)。
【0174】
QoS最大値がゼロであると判定された場合(S28a:Yes)、ステップS30へ進み、ゼロであると判定されなかった場合(S28a:No)、ステップS29へ進む。
【0175】
また、ステップS32の後も、ステップS12aと同様に、QoS管理部124によって、QoS最大値がゼロであるか否かが判定される(S32a)。
【0176】
そして、QoS最大値がゼロであると判定された場合(S32a:Yes)、処理は終了し、ゼロであると判定されなかった場合(S32a:No)、ステップS33へ進む。
【0177】
また、自ブローカ装置12(#0)に接続されたクライアント装置30から出版データSDの出版要求があった場合の処理手順の一例は、
図9のフローチャートに示す通りであり、他ブローカ装置10から、出版データSDが送信された場合における処理手順の一例は、
図10のフローチャートに示す通りである。
【0178】
上述したように、第2の実施形態の通信システムによれば、QoSの値に応じて冗長化の必要性の可否を判定するために、すべての出版データSDについて冗長性を確保する必要はなくなるので、通信量やブローカ装置への負荷の低減を図ることが可能となる。
【0179】
(第3の実施形態)
第1および第2の実施形態では、出版データSDの出版時には、個々の出版データSDを個々のパケットとして送信する。IoT(Internet of things)用途でMQTTを利用する場合、パケット送信がなされると、センサ出版データ等の出版データが大量に発生して大量の通信パケットが送受信されることとなる。一般にルータ等のネットワーク機器の性能限界は、パケット数と出版データ総量で決まる。つまりパケット数および通信出版データの総量を減らすことが、より多くの出版データを送受信できるようにするために肝要である。第3の実施形態は、MQTTのパケットの総量および送信出版データ量を、通信の信頼性を保ったまま減らす技術を提供する。
【0180】
図19は、第3の実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【0181】
ブローカ装置13の構成は、ブローカ装置10の構成と類似しているが、ブローカ装置13は、ブローカ装置10が備えていない集約・圧縮部126と、リアルタイム性判定部128と、分割・展開部130とを備えている。従って、以下では、ブローカ装置10と異なる点について説明する。
【0182】
リアルタイム性判定部128は、周期的に送信すべき出版データSDを決定するために、他出版データ送信部116に接続され、現在時刻から一定時間経過した時刻と、受信時刻との差が、トピック毎に定められた最大待機時間を超える出版データSDを、集約・圧縮部126による集約の対象であると判定する。
【0183】
このため、自出版データ受信部110は、本実施形態ではさらに、クライアント装置30(例えば、クライアント装置30(#1))から受信した出版データSDの受信時刻を記録する。
【0184】
【0185】
送信待機リスト230には、一例として、出版データの宛先m10、購読情報(トピック)m11、出版データm12、受信日時m13、および処理済みフラグm14からなる各項目から構成されるレコードが積まれたデータテーブルである。送信待機リスト230は、ブローカ装置13内の図示しないストレージに記憶されており、ブローカ装置13内の各部位によって参照されることが可能である。
【0186】
リアルタイム性判定部128は、クライアント装置30から、出版データSDに対する要求があった場合、送信待機リスト230のレコードの内容を更新する。
【0187】
図21は、最大待機時間リストおよび時間条件の一例を示す図である。
【0188】
最大待機時間リスト235は、購読情報(トピック)m15および最大待機時間m16からなる2項目から構成されるレコードが積まれたデータテーブルである。最大待機時間リスト235および時間条件240は、ブローカ装置13内の図示しないストレージに記憶されており、ブローカ装置13内の各部位によって参照されることが可能である。
【0189】
時間条件240には、一例として、パケット送信周期T=10ms(ミリ秒)、現在時刻=2017/12/01 00:00:01.090が示されている。
【0190】
送受信に要求されるリアルタイム性は、出版データSD毎に異なるため、リアルタイム性判定部128はさらに、最大待機時間リスト235を使用して、購読情報(トピック)m15毎に、最大待機時間m16として書き込まれた送信までの最大待機時間を管理する。
【0191】
例えば、時間条件240に示されているように、T=10ミリ秒毎にパケット送信が行われる場合、10ミリ秒毎にリアルタイム性判定部128が呼びされ、次回呼出時刻において、リアルタイム性判定部128は、最大待機時間リスト235に示される最大待機時間m16を超過するパケットを取り出す。
【0192】
例えば、時間条件240に示されるように、「現在時刻」が「2017/12/01 00:00:01.090」である場合、次回のパケット送信時刻は、現在時刻にパケット送信周期T=10ミリ秒を加えた「2017/12/01 00:00:01.100」となる。すると、送信待機リスト230において次回パケット送信時刻において最大待機時間m16として書き込まれた最大待機時間を超過するパケットは、
図20に例示される送信待機リスト230における上から1、2、4番目のレコードに相当するパケットとなる。
【0193】
送信待機リスト230において、1番目のレコードに相当するパケットの購読情報(トピック)m11は情報群Aであるため、受信日時m13に、最大待機時間リスト235に示される情報群Aの最大待機時間m16である100ミリ秒を加算しても「00:00:01.095」としかならず、次回パケット送信時刻である「2017/12/01 00:00:01.100」には至らないために、待機時間は、最大待機時間m16を超過する。同様に、2番目のレコードに相当するパケットの購読情報(トピック)m11は情報群Bであるため、受信日時m13に、情報群Bの最大待機時間m16である15ミリ秒を加算しても「00:00:01.097」としかならず、次回パケット送信時刻である「2017/12/01 00:00:01.100」には至らないために、やはり、待機時間は、最大待機時間m16を超過する。また同様に、4番目のレコードに相当するパケットの購読情報(トピック)m11は情報群Cであるため、受信日時m13に、情報群Cの最大待機時間m16である50ミリ秒を加算しても「00:00:01.095」としかならず、次回パケット送信時刻である「2017/12/01 00:00:01.100」には至らないために、待機時間は、最大待機時間m16を超過する。
【0194】
一方、それ以外のパケットは、次回パケット送信時刻において、待機時間は、最大待機時間m16を超過しないため、送信は見送られる。
【0195】
集約・圧縮部126は、他出版データ送信部116に接続され、他ブローカ装置10へ送信される出版データSDを、他ブローカ装置10別に、一定時間毎に1つの集約済出版データに集約する。集約・圧縮部126はさらに、集約済出版データを、予め定められたアルゴリズムに従って圧縮する。
【0196】
具体的には、集約・圧縮部126は、リアルタイム性判定部128が取り出した他のブローカ装置10へ送信する複数の出版データSDを、送信待機リスト230の宛先m10で指定されたブローカ装置10毎に1つのパケットにまとめ、圧縮する。
【0197】
例えば
図20および
図21を用いて説明した例は、「現在時刻」である「2017/12/01 00:00:01.090」において、送信待機リスト230における上から1、2、4番目のレコードに相当するパケットを送信するが、送信待機リスト230の宛先m10は、1番目と2番目のレコードに相当するパケットがブローカ装置10(#1)であり、4番目のレコードに相当するパケットがブローカ装置10(#2)である。このため、集約・圧縮部126は、1番目と2番目のレコードに相当するパケットを1つのパケットにまとめ、圧縮する。また、4番目のレコードに相当するパケットを、1つのパケットとして圧縮する。圧縮されたパケット形式の一例は、
図22に示す通りである。
【0198】
図22は、圧縮集約済出版データのパケット形式を例示するデータ構造図である。
【0199】
圧縮集約済出版データ245は、集約・圧縮部126によって、集約された複数の出版データSDが、さらに圧縮されたものである。
【0200】
図22に示す例では、圧縮集約済出版データ245は、出版データSD1と出版データSD2とが並べられて1つの出版データとして集約された後に圧縮された構成をしている。出版データSD1は、購読情報(トピック)j1、データヘッダ(出版データサイズ等)h1、およびデータ本体b1を含み、出版データSD2は、購読情報(トピック)j2、データヘッダ(出版データサイズ等)h2、およびデータ本体b2を含む。なお、圧縮集約済出版データ245において集約される出版データSDの数は2つに限定されず、任意の数であってよい。
【0201】
分割・展開部130は、他出版データ受信部118に接続され、他ブローカ装置10から送信された圧縮集約済出版データ245を展開して集約済出版データへ復元し、集約済出版データを分割して、各出版データSD1、SD2へ復元し、復元された各出版データSD1、SD2を、他出版データ受信部118へ出力する。
【0202】
分割・展開部130はさらに、他ブローカ装置10から出力された圧縮集約済出版データを、予め定められたアルゴリズムに従って展開することによって、圧縮集約済出版データから、集約済出版データを復元する。さらに、集約済出版データを分割することによって、集約済出版データから、複数の出版データを復元する。
【0203】
次に、以上のように構成した第3の実施形態の通信システムの動作例について説明する。
【0204】
先ず、クライアント装置30からの出版データSDの出版要求受信時における処理について説明する。
【0205】
図23は、クライアント装置からの出版データの出版要求受信時における処理手順の一例を示すフローチャートである。
【0206】
クライアント装置30から送信された出版要求が受信される(S81)と、自購読情報管理部108によって、管理表205が参照され、出版要求があったトピックを自ブローカ装置購読情報m3とするクライアント装置30が、購読クライアント装置m4として書き込まれているレコードが存在するか否かが確認される(S82)。
【0207】
購読クライアント装置30が、購読クライアント装置m4として書き込まれているレコードが存在すると判定された場合(S82:Yes)、そのクライアント装置30へ、出版データSDが送信され(S83)、ステップS84へ進む。
【0208】
ステップS82において、存在しないと判定された場合(S82:No)には、直接ステップS84へ進む。
【0209】
ステップS84では、管理表200が参照され、出版要求があった購読情報(トピック)を購読する他ブローカ装置30が、購読ブローカ装置m1として書き込まれたレコードが存在するか否が判定される(S84)。
【0210】
存在すると判定された場合(S84:Yes)には、
図20に示すような送信待機リスト230における各項目に該当する情報が書き込まれることによって登録がなされ(S85)、最終的な出版データSDが最新出版データ保持部114へ保持され、処理を終了する(S86)。なお、複数のブローカ装置10が、単一の出版データSDのトピックを購読している場合には、送信待機リスト230に、宛先ブローカ装置10毎に出版データSDが保持される。
【0211】
一方、ステップS84において、存在しないと判定された場合(S84:No)には、最新の出版データSDの最新出版データ保持部114への保持だけが行われた後、処理を終了する。
【0212】
次に、出版要求に応じて出版データを送信する際における処理について説明する。
【0213】
図24は、出版要求に応じた出版データ送信時における処理手順の一例を示すフローチャートである。
【0214】
先ず、自ブローカ装置13(#0)以外のブローカ装置10毎に送信するパケットを生成するために、未処理の宛先があるか否かが確認される(S91)。
【0215】
未処理の宛先がない場合(S92:No)には、一定時間(例えば、T=10ミリ秒)待機した後(S99)、送信待機リスト230における対応する処理済みフラグm14に書き込まれたフラグがクリアされ(S100)、ステップS91に戻る。
【0216】
一方、ステップS91において、未処理の宛先がある場合(S91:Yes)には、その宛先が取得される(S92)。
【0217】
続いて、
図20に示す送信待機リスト230が参照され、取得された宛先が宛先m10に指定された未処理の、すなわち処理済みフラグm14が付いていない出版データSDが存在するか否かが判定される(S93)。
【0218】
出版データSDが存在すると判定された場合(S93:Yes)、その出版データSDが取り出され、送信待機リスト230の該当レコードの処理済みフラグm14にフラグが付与される(S94)。
【0219】
さらに、その購読情報(トピック)の最大待機時間(例えば、最大待機時間M)が、最大待機時間リスト235から取得される(S95)。なお、最大待機時間リスト235は、あらかじめ準備されたものでも、あるいは、クライアント装置30等からの要求により動的に生成されたものでもよい。
【0220】
さらに、実行日時が登録日時から最大待機時間Mを経過した後になるか否か、すなわち、(現在時刻+T)>(登録日時+M)となるか否かが判定される(S96)。
【0221】
実行日時が、登録日時から最大待機時間Mを経過した後になると判定された場合(S96:Yes)、今回の出版データSDを送信するために、当該出版データSDが、送信待機リスト230と同一の構成をしている送信リストに登録され(S97)、これに応じて、当該出版データSDが送信待機リスト230から削除され(S98)、ステップS93へ戻る。なお、送信リストは、送信待機リスト230と同一の構成をしているので、図示を省略する。
【0222】
一方、ステップS96において、実行日時が登録日時から最大待機時間Mを経過した後にならないと判定された場合(S96:No)もまた、ステップS93へ戻る。
【0223】
一方、ステップS93において、出版データSDが存在すると判定されなかった場合(S93:No)、送信リストに、保持した出版データSDが結合され(S101)、圧縮され(S102)、宛先ブローカ装置30へパケットが送信され(S103)、送信リストがクリアされ(S104)、ステップS91へ戻る。
【0224】
次に、他ブローカ装置10から出版データが送信された場合における処理について説明する。
【0225】
図25は、他ブローカ装置からの出版データ送信場合における処理手順の一例を示すフローチャートである。
【0226】
他ブローカ装置10から送信された出版データSDが、自ブローカ装置13(#0)によって受信される(S111)と、圧縮されているパケットが、分割・展開部130によって展開され、展開されたパケットに、複数の出版データSDが含まれている場合には、さらに展開されたパケットが分割され、各出版データSDが復元される(S112)。
【0227】
分割されたパケットに、未処理の出版データSDが存在しないと判定された場合(ステップS113:No)には、処理を終了する。
【0228】
一方、分割されたパケットに、未処理の出版データSDがあると判定された場合(ステップS113:Yes)には、未処理の出版データSDが1件取り出され(S114)、管理表205の購読ブローカ装置m1に、当該トピックの購読クライアント装置30が存在するか否かが判定される(S115)。
【0229】
購読クライアント装置30が存在すると判定された場合(S115:Yes)、そのクライアント装置30へ、出版データSDが送信され(S116)、最新の出版データSDが、最新出版データ保持部114に保持され(S117)、ステップS113へ戻る。
【0230】
一方、ステップS115において、購読クライアント装置30が存在しないと判定された場合(S115:No)、ステップS117へ進む。
【0231】
なお、自ブローカ装置13(#0)がクライアント装置30から購読要求を受信した際の処理手順は、
図5のフローチャートを用いて説明した通りであり、自ブローカ装置13(#0)が他ブローカ装置10から購読要求を受信した際の処理手順は、
図8のフローチャートを用いて説明した通りであり、他ブローカ装置10の終了時および異常検出時における処理手順は、
図11のフローチャートを用いて説明した通りである。
【0232】
このように、第3の実施形態によれば、パケットの総量および送信出版データ量を、通信の信頼性を保ったまま減らすことが可能となる。
【0233】
(変形例)
第3の実施形態の通信システムの変形例について説明する。
【0234】
第3の実施形態では、
図19に示すように、パケットの集約・圧縮および分割・展開は、集約・圧縮部126および分割・展開部130を備えたブローカ装置13によって実行されているが、本変形例では、ブローカ装置13ではなく、クライアント装置によって実行される。
【0235】
図26は、第3の実施形態の通信システムの変形例に適用されるクライアント装置の構成例を示す概念図である。
【0236】
変形例のクライアント装置31は、ブローカ装置10に、ネットワーク20を介して接続されている。ブローカ装置10の構成は、
図3に示す通りであるので、重複説明を避ける。
【0237】
クライアント装置31は、通信部302、分割・展開部304、購読・出版要求部306、集約・圧縮部308、異常検出部310、および負荷検出部312を備える。
【0238】
集約・圧縮部308は、同一のトピックに関連する複数の出版データSDを集約して1つの集約済出版データを生成し、生成された集約済出版データを圧縮し、集約圧縮済出版データを生成する。しかしながら、集約・圧縮部308は、各ブローカ装置10が購読しているトピックがわからないため、宛先ブローカ装置10毎にパケットを圧縮することができない。そこで、トピック毎に出版データSDを集約して圧縮する。
【0239】
図27は、最大待機時間リストの一例を示す図である。
【0240】
【0241】
図27に示す最大待機時間リスト250および時間条件255は、
図21に示す最大待機時間リスト235および時間条件240と同一である。最大待機時間リスト250および時間条件255は、クライアント装置31内の図示しないストレージに記憶されており、クライアント装置31内の各部位によって参照されることが可能である。
【0242】
図28に示す送信待機リスト260は、
図20に示す送信待機リスト230から、宛先m10を削除した構成となっている。送信待機リスト260もまた、クライアント装置31内の図示しないストレージに記憶されており、クライアント装置31内の各部位によって参照されることが可能である。
【0243】
例えば、各購読情報(トピック)m15毎の最大待機時間m16が
図27に示す通りであり、T=10ミリ秒毎にパケット送信が行われる場合、
図28に示す送信待機リスト260において、次回呼出時に最大待機時間を経過する購読情報(トピック)m1は、上から1~4番目のレコードに相当する情報群A、情報群B、情報群B、および情報群Cとなる。そこで、集約・圧縮部308は、情報群Aのパケット、情報群Bのパケット、情報群Cのパケットそれぞれを集約して圧縮する。情報群Aのデータは1番目のレコードのみ、情報群Cのデータは4番目のレコードのみであるためそのまま圧縮する。一方、情報群Bのパケットは2、3番目のレコードに相当するデータがあるため、2つのデータを集約してから圧縮する。
【0244】
図29は、圧縮集約済データのパケット形式を例示するデータ構造図である。
【0245】
圧縮集約済出版データ265は、集約・圧縮部308によって、集約された複数の出版データSDが、さらに圧縮されたものである。
【0246】
図29に示す例では、圧縮集約済出版データ265は、出版データSD1と出版データSD2とが1つの出版データとして集約された後に圧縮された構成をしている。ここで、出版データSD1と出版データSD2とは同じ購読情報(トピック)であるので、先頭に購読情報(トピック)jを出版データSD1と出版データSD2とに共通した情報として備え、その後、出版データSD1のデータヘッダh1およびデータ本体b1が続き、その後、出版データSD2のデータヘッダh2およびデータ本体b2が続くような形式であって良い。なお、圧縮集約済出版データ265において集約される出版データSDの数は2つに限定されず、任意の数であってよい。 ブローカ装置10側では、受信したパケットのトピック情報が参照されることによって、転送するクライアント装置31およびブローカ装置10が決定される。他ブローカ装置10へ転送する際には、さらに
図19の構成と組み合わせて、宛先ブローカ装置10毎にさらに出版データSDを集約してから送信してもよい。
【0247】
一方、ブローカ装置10から送信された出版データSDが、クライアント装置31によって受信された場合には、トピック毎に出版データSDが集約・圧縮されているため、分割・展開部304は、トピック毎に出版データSDが集約・圧縮されている集約圧縮済出版データを、個々の出版データに分割する機能を有する。
【0248】
すなわち、分割・展開部304は、集約圧縮済出版データを展開して、圧縮前の集約済出版データを復元し、復元された集約済出版データを分割して、複数の出版データSDを復元する。
【0249】
異常検出部310は、接続されたブローカ装置10の異常を検出すると、異常検出されたブローカ装置10から、別のブローカ装置10(例えば、ブローカ装置10(#1))へ接続先を変更する。
【0250】
負荷検出部312は、ブローカ装置10の負荷増大を検出すると、負荷増大を検出されたブローカ装置10から、別のブローカ装置10(例えば、ブローカ装置10(#1))へ接続先を変更する。
【0251】
通信部302は、異常検出部310および負荷検出部312によって接続先として変更されたブローカ装置10(例えば、ブローカ装置10(#1))へ、集約圧縮済出版データを送信するとともに、ブローカ装置10から送信された集約圧縮済出版データを、分割・展開部304へ出力する。
【0252】
なお、本変形例において、ブローカ装置10は、第1の実施形態で説明した機能に加えて、集約・圧縮されたパケットの購読情報(トピック)等を管理する機能を有する。
【0253】
図30は、クライアント装置からの出版データの出版要求受信時における処理手順の一例を示すフローチャートである。
【0254】
クライアント装置31が、出版要求を行う場合(S121)には、
図28に示すような送信待機リスト260に出版データSDの購読情報(トピック)m11、データm12、登録日時m13を保持して終了する(S122)。
【0255】
一方で、クライアント装置31は、定期的にブローカ装置10に対して出版データSDを送信するため、購読情報(トピック)毎にパケットの集約・圧縮および送信処理を行う。
【0256】
図31は、購読情報(トピック)毎にパケットの集約・圧縮および送信処理を行う際における処理手順の一例を示すフローチャートである。
【0257】
図31に示すフローチャートは、
図24に示すフローチャートに類似しているので、重複説明を避け、相違点について説明する。
【0258】
すなわち、
図24では、宛先ブローカ装置10毎にパケットの集約・圧縮処理を行うが、
図31では、トピック毎にパケットの集約・圧縮処理を行う。このため、
図31では、ステップS131において、未処理の購読情報(トピック)が存在するか否かが判定され、存在すると判定された場合には、ステップS132において、未処理の購読情報(トピック)が取得され、ステップS133において、取得された購読情報(トピック)に合致する送信待機データが存在するか否かが判定され、存在すると判定された場合には、ステップS134において、取得された購読情報に合致する送信待機データが取り出される。
【0259】
ステップS131において、存在すると判定されなかった場合(S131:No)には、
図24におけるステップS99以降の処理がなされ、ステップS133において、存在すると判定されなかった場合(S133:No)には、
図24におけるステップS101以降の処理がなされ、ステップS134の後は、
図24におけるステップS95以降の処理がなされる。
【0260】
図32は、ブローカ装置からの出版データ送信時における処理手順の一例を示すフローチャートである。
【0261】
クライアント装置31では、ブローカ装置10から送信された出版データSDが、通信部302によって受信される(S141)と、その出版データSDが分割・展開部304によって展開された後に、分割される(S142)。さらに個々の出版データSD毎に処理を行うため、分割された出版データSDに、未処理の出版データSDが存在するか否が判定される(S143)。
【0262】
未処理の出版データSDが存在しなければ(S143:No)、そのまま処理を終了し、未処理の出版データSDが存在すれば(S143:Yes)、1件の出版データSDが取り出され、処理が実行された後に、S144へ戻る。
【0263】
なお、購読要求時の処理手順は、ブローカ装置10に購読要求を送信するのみであるため、ここでは省略する。また、ブローカ装置10側での処理手順は、第1の実施形態において説明済みであるので、重複説明を避ける。
【0264】
このような変形例によっても、パケットの総量および送信出版データ量を通信の信頼性を保ったまま減らすことが可能となる。
【0265】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0266】
1 通信システム、2 通信システム、10 ブローカ装置、11 ブローカ装置、12 ブローカ装置、13 ブローカ装置、20 ネットワーク、21 ネットワーク、30 クライアント装置、31 クライアント装置、40 サブブローカ装置、102 通信部、104 通信部、106 自購読情報受信部、108 自購読情報管理部、110 自出版データ受信部、112 自出版データ送信部、114 最新出版データ保持部、116 他出版データ送信部、118 他出版データ受信部、120 他購読情報管理部、122 終了検知部、124 QoS管理部、126 集約・圧縮部、128 リアルタイム性判定部、130 分割・展開部、200 他ブローカ装置購読情報管理表、205 自ブローカ装置購読情報管理表、210 購読情報購読数管理表、215 ブローカ装置購読数管理表、220 他購読情報管理表、225 自購読情報管理表、230 送信待機リスト、235 最大待機時間リスト、240 時間条件、245 圧縮集約済出版データ、250 最大待機時間リスト、255 時間条件、260 送信待機リスト、265 圧縮集約済出版データ、302 通信部、304 分割・展開部、306 購読・出版要求部、308 集約・圧縮部、310 異常検出部、312 負荷検出部、402 終了検知部、404 購読決定部。