JP6539617B2 - 分散連携プロキシおよびそれを用いた非同期メッセージングシステム - Google Patents

分散連携プロキシおよびそれを用いた非同期メッセージングシステム Download PDF

Info

Publication number
JP6539617B2
JP6539617B2 JP2016117119A JP2016117119A JP6539617B2 JP 6539617 B2 JP6539617 B2 JP 6539617B2 JP 2016117119 A JP2016117119 A JP 2016117119A JP 2016117119 A JP2016117119 A JP 2016117119A JP 6539617 B2 JP6539617 B2 JP 6539617B2
Authority
JP
Japan
Prior art keywords
proxy
distributed
communication means
cooperation
broker
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016117119A
Other languages
English (en)
Other versions
JP2017224032A (ja
Inventor
遼平 坂野
遼平 坂野
亨 竹内
亨 竹内
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NTT Inc
NTT Inc USA
Original Assignee
Nippon Telegraph and Telephone Corp
NTT Inc USA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp, NTT Inc USA filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2016117119A priority Critical patent/JP6539617B2/ja
Publication of JP2017224032A publication Critical patent/JP2017224032A/ja
Application granted granted Critical
Publication of JP6539617B2 publication Critical patent/JP6539617B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Transfer Between Computers (AREA)

Description

本発明は、非同期メッセージングシステムにおいて非同期メッセージングサーバの負荷分散を実現するための技術に関する。
リアルタイムなデータのやり取りを実現する方法として、pub/subと呼ばれる非同期メッセージング手法が知られている。pub/subに基づいた非同期メッセージングシステム(pub/subメッセージングシステム)は、一般的には、パブリッシャ(publisher)、非同期メッセージングサーバとしてのブローカ(broker)、サブスクライバ(subscriber)から構成される。
pub/subメッセージングシステムでは、クライアント(パブリッシャまたはサブスクライバ)は、ブローカとの間でデータのやり取りを行なえばよいため、通信機能を軽量化することができる。しかし、クライアント数が増大すると、ブローカに負荷が集中しやすくなる。従来のpub/subメッセージングシステムには、負荷分散を実現するために、ブローカ同士を連携させる連携機能を持つブローカを複数設けたものがある。しかしながら、ブローカ同士の連携は実装に依存する機能である。異なる動作環境のブローカ同士を連携させることができない場合があり、また、連携機能を持たないブローカを実装に用いることができない。例えば、MQTT(MQ Telemetry Transport)やJMS(Java(登録商標) Message Service)などのプロトコルは、単一ブローカの動作のみを規定しており、複数のブローカの連携については標準化されていない。
"Building a two node high availability MQTT cluster"(URL:http://www.hivemq.com/blog/building-a-high-availability-mqtt-cluster) "Distributed RabbitMQ brokers"(URL:https://www.rabbitmq.com/distributed.html) "mosquitto.conf - the configuration file for mosquitto"(URL:http://mosquitto.org/man/mosquitto-conf-5.html)
本発明は、上記事情に着目してなされたものであり、その目的とするところは、任意のブローカ同士の連携を可能にする分散連携プロキシ、およびこの分散連携プロキシを用いた非同期メッセージングシステムを提供することである。
上記課題を解決するために、本発明の第1の態様は、クライアントとブローカとの間に設けられる分散連携プロキシであって、前記クライアントと通信するための第1の通信手段と、前記ブローカと通信するための第2の通信手段と、隣接する分散連携プロキシと通信するための第3の通信手段と、を備え、前記第1の通信手段および前記第2の通信手段が、前記クライアントと前記ブローカとの間の通信の中継を行なうように連動し、前記第3の通信手段が、前記第1の通信手段を介して前記クライアントから受信したメッセージまたは前記第2の通信手段を介して前記ブローカから受信したメッセージに基づいて、前記ブローカと前記隣接する分散連携プロキシに接続された他のブローカとの間の通信の中継を行なうようにしたものである。
本発明の第2の態様は、複数のブローカと、前記複数のブローカにそれぞれ対応する複数の分散連携プロキシと、を備える非同期メッセージングシステムであって、前記複数の分散連携プロキシの各々が、当該分散連携プロキシに対応するブローカとクライアントとの間に設けられ、前記複数の分散連携プロキシの各々が、前記クライアントと通信するための第1の通信手段と、前記対応するブローカと通信するための第2の通信手段と、前記複数の分散連携プロキシのうちの隣接する分散連携プロキシと通信するための第3の通信手段と、を備え、前記第1の通信手段および前記第2の通信手段が、前記クライアントと前記対応するブローカとの間の通信の中継を行なうように連動し、前記第3の通信手段が、前記第1の通信手段を介して前記クライアントから受信したメッセージまたは前記第2の通信手段を介して前記対応するブローカから受信したメッセージに基づいて、前記対応するブローカと前記隣接する分散連携プロキシに対応するブローカとの間の通信の中継を行なうようにしたものである。
本発明によれば、非同期メッセージングシステムにおいて任意のブローカ同士を連携させることができる。
第1の実施形態に係るpub/subメッセージングシステムの構成例を示すブロック図。 第1の実施形態に係る連携方式(PFA)を説明するための図。 第1の実施形態に係る分散連携プロキシの構成例を示すブロック図。 第1の実施形態に係るpub/subメッセージング方法の説明に使用するシステム構成を示すブロック図。 第1の実施形態に係るpub/subメッセージング方法を例示するシーケンス図。 第2の実施形態に係る連携方式(SFA)を説明するための図。 第2の実施形態に係るpub/subメッセージング方法の説明に使用するシステム構成を示すブロック図。 第2の実施形態に係るpub/subメッセージング方法を例示するシーケンス図。 第3の実施形態に係るループ回避機構を説明するための図。
以下、図面を参照して本発明の実施形態を説明する。実施形態は、パブリッシャがトピックと呼ばれる論理チャネルを指定してメッセージを送信すると、同じトピックを指定して事前に受信登録しているサブスクライバに届く仕組みであるトピックベースpub/subに関する。
[第1の実施形態]
図1は、第1の実施形態に係るpub/subメッセージングシステムの構成例を示している。図1に示されるpub/subメッセージングシステムは、複数のブローカ(ブローカB1、B2、B3)と、複数のブローカそれぞれに対応して設けられた複数の分散連携プロキシ(分散連携プロキシD1、D2、D3)と、を備える。ブローカB1には分散連携プロキシD1が接続され、ブローカB2には分散連携プロキシD2が接続され、ブローカB3には分散連携プロキシD3が接続されている。さらに、分散連携プロキシD1は分散連携プロキシD2に接続され、分散連携プロキシD2は分散連携プロキシD1、D3に接続され、分散連携プロキシD3は分散連携プロキシD2に接続されている。
分散連携プロキシには、0台以上のクライアントが接続されることができる。言い換えると、分散連携プロキシには、クライアントが動的に追加または削除されることができる。クライアントは、パブリッシャおよびサブスクライバの一方または両方の機能を果たすことができる。図1に示される例では、パブリッシャP1およびサブスクライバS1が分散連携プロキシD1に接続され、サブスクライバS2が分散連携プロキシD1に接続されている。パブリッシャ(例えば、パブリッシャP1)が、あるトピックにメッセージをパブリッシュした場合、このメッセージは、ブローカB1、B2、B3と分散連携プロキシD1、D2、D3とから構成される通信ネットワークを通じて、そのトピックをサブスクライブしているサブスクライバ(例えば、サブスクライバS1、S2)へ提供される。
分散連携プロキシは、クライアントとブローカとの間に位置し、クライアントとブローカとの間の通信の中継を行なう。例えば、分散連携プロキシD1は、パブリッシャP1およびサブスクライバS1とブローカB1との間に位置し、パブリッシャP1とブローカB1との間の通信およびサブスクライバS1とブローカB1との間の通信の中継を行なう。さらに、分散連携プロキシは、隣接する分散連携プロキシと通信することでブローカ同士の連携を実現する。例えば、分散連携プロキシD1は、ブローカB1、パブリッシャP1、またはサブスクライバS1から受信したメッセージを分散連携プロキシD2に転送することができ、分散連携プロキシD2から受信したメッセージをブローカB1に転送することができる。
本実施形態は、サブスクライブメッセージを伝搬させずに、パブリッシュメッセージを全てのブローカに伝搬させる連携方式を使用する。この連携方式をPFA(Publish Flooding Algorithm)と称する。PFAでは、サブスクライバ(例えば、サブスクライバS1)が、所望するトピックにサブスクライブする(購読を申し込む)ためのサブスクライブメッセージを送信すると、このサブスクライブメッセージは、サブスクライバ(例えば、サブスクライバS1)が接続されている分散連携プロキシ(例えば、分散連携プロキシD1)によって、対応するブローカ(例えば、ブローカB1)に転送される。これにより、サブスクライブメッセージを受信したブローカ(例えば、ブローカB1)において、サブスクライバ(例えば、サブスクライバS1)がトピックにサブスクライブしている状態となる。一方で、パブリッシャ(例えば、パブリッシャP1)が、パブリッシュしたいデータを含むパブリッシュメッセージを送信すると、このパブリッシュメッセージは、全ての分散連携プロキシ(例えば、分散連携プロキシD1、D2、D3)によって全てのブローカ(例えば、ブローカB1、B2、B3)に転送される。ブローカ(例えば、ブローカB1)は、パブリッシュメッセージを受信すると、トピックにサブスクライブしているサブスクライバ(例えば、サブスクライバS1)に分散連携プロキシ(例えば、分散連携プロキシD1)経由でパブリッシュメッセージを転送する。PFAでは、接続されている全ての分散連携プロキシにパブリッシャメッセージを転送するので、個々の分散連携プロキシの処理は容易になる。
図2を参照してPFAをより詳細に説明する。図2(a)に示されるpub/subメッセージングシステムでは、5台のブローカB1、B2、B3、B4、B5が分散連携プロキシD1、D2、D3、D4、D5にそれぞれ接続されており、分散連携プロキシD1は分散連携プロキシD2に接続され、分散連携プロキシD2は分散連携プロキシD1、D3、D4に接続され、分散連携プロキシD3は分散連携プロキシD2に接続され、分散連携プロキシD4は分散連携プロキシD2、D5に接続され、分散連携プロキシD5は分散連携プロキシD4に接続されている。
まず、図2(a)に示されるように、サブスクライバS1は、サブスクライブメッセージを分散連携プロキシD2に送信し、分散連携プロキシD2は、サブスクライバS1から受信したサブスクライブメッセージをブローカB2に転送する。また、図2(b)に示されるように、サブスクライバS2は、サブスクライブメッセージを分散連携プロキシD4に送信し、分散連携プロキシD4は、サブスクライバS2から受信したサブスクライブメッセージをブローカB4に転送する。ここでは、サブスクライバS1、S2が同じトピックにサブスクライブしたものとする。これにより、図2(c)に示されるように、ブローカB2においてサブスクライバS1がトピックにサブスクライブした状態となり、ブローカB4においてサブスクライバS2がトピックにサブスクライブした状態となる。図2(c)において、サブスクライバから分散連携プロキシへ向かう実線矢印は、サブスクライブ方向を表す。
次に、図2(d)に示されるように、分散連携プロキシD5に接続されたパブリッシャP1は、分散連携プロキシD5にパブリッシュメッセージを送信し、分散連携プロキシD5は、パブリッシャP1から受信したパブリッシュメッセージをブローカB5に転送する。さらに、分散連携プロキシD5は、パブリッシュメッセージを分散連携プロキシD4に転送する。分散連携プロキシD4は、分散連携プロキシD5から受信したパブリッシュメッセージをブローカB4に転送し、さらに、分散連携プロキシD3に転送する。分散連携プロキシD3は、分散連携プロキシD4から受信したパブリッシュメッセージをブローカB3に転送し、さらに、分散連携プロキシD1、D3に転送する。分散連携プロキシD1は、分散連携プロキシD2から受信したパブリッシュメッセージをブローカB1に転送し、分散連携プロキシD3は、分散連携プロキシD2から受信したパブリッシュメッセージをブローカB3に転送する。このようにして、パブリッシュメッセージは、分散連携プロキシD1〜D5による中継によって全てのブローカB1〜B5に伝搬される。ここで、パブリッシャP1が指定したトピックは、サブスクライバS1、S2がサブスクライブしたトピックと同じであるとする。すなわち、パブリッシャP1が送信したパブリッシュメッセージは、サブスクライバS1、S2によるサブスクライブの対象であるとする。
分散連携プロキシD4からパブリッシュメッセージを受信したブローカB4は、パブリッシュメッセージのトピックにサブスクライバS2がサブスクライブしていることを検出し、分散連携プロキシD4を介してサブスクライバS2にパブリッシュメッセージを転送する。さらに、分散連携プロキシD2からパブリッシュメッセージを受信したブローカB2は、パブリッシュメッセージのトピックにサブスクライバS1がサブスクライブしていることを検出し、分散連携プロキシD2を介してサブスクライバS1にパブリッシュメッセージを転送する。このようにして、パブリックメッセージは、該当するトピックにサブスクライブしているサブスクライバに届けられる。
図3は、第1の実施形態に係る分散連携プロキシの構成例を示している。図3に示されるように、分散連携プロキシD1は、クライアントC1、ブローカB1、および分散連携プロキシD2に接続されている。分散連携プロキシD2は、分散連携プロキシD1と同様の構成を有することができる。ここでは、分散連携プロキシD1について説明を行なう。
分散連携プロキシD1は、ローカル連携部301、リモート連携部302、およびブローカ連携部303を備える。ローカル連携部301は、クライアントC1と通信を行ない、リモート連携部302に情報を伝達しつつ、ブローカ連携部303と連動してクライアントC1とブローカB1との間の通信を仲介する。ブローカ連携部303は、ブローカB1と通信を行ない、リモート連携部302に情報を伝達しつつ、ローカル連携部301と連動してクライアントC1とブローカB1との間の通信を仲介する。リモート連携部302は、分散連携プロキシD2と通信を行ない、ローカル連携部301およびブローカ連携部303からの情報に基づいてブローカB1と分散連携プロキシD2に接続されたブローカとの間の通信を仲介する。
ローカル連携部301は、クライアントC1からメッセージを受信すると、ブローカ連携部303を介してブローカB1にこのメッセージを送信するとともに、リモート連携部302にこのメッセージを渡す。リモート連携部302は、クライアントC1からのメッセージがパブリッシュメッセージである場合には、擬似的なパブリッシャとして分散連携プロキシD2にこのメッセージを送信するが、クライアントC1からのメッセージがサブスクライブメッセージである場合には、分散連携プロキシD2へのメッセージ送信を行なわない。
リモート連携部302は、分散連携プロキシD2からパブリッシュメッセージを受信すると、ブローカ連携部303を介してブローカB1にこのパブリッシュメッセージを送信する。分散連携プロキシD2以外に隣接する分散連携プロキシがある場合、リモート連携部302は、擬似的なパブリッシャとして、当該分散連携プロキシに、分散連携プロキシD2から受信したパブリッシュメッセージをさらに送信する。ブローカ連携部303は、ブローカB1からパブリッシュメッセージを受信すると、ローカル連携部301を介してサブスクライバS1にこのパブリッシュメッセージを送信する。
分散連携プロキシD1はブローカB1の外部に設けられ、すなわち、ブローカ同士を連携させる連携機能がブローカB1の外部に切り出されている。分散連携プロキシD1は、例えば、メモリおよびプロセッサ(例えば、CPU)を備えるコンピュータなどの情報処理装置において、メモリに格納されるコンピュータプログラムをプロセッサに実行させることにより実現することができる。分散連携プロキシD1は、ブローカB1が実装される装置(例えば、サーバ)上に実装されてもよく、ブローカB1が実装される装置と異なる装置上に実装されてもよい。
上述した構成を有する分散連携プロキシを用いることにより、複数台のブローカを含むpub/subメッセージングシステムにおいて、実装に依存せず任意のブローカ間の連携が可能となる。言い換えると、pub/subメッセージングシステムに利用可能なブローカの選択肢が増大する。具体的には、動作環境の異なるブローカ同士の連携や連携機能を持たないブローカ同士の連携が可能となる。一例として、Windows(登録商標)サーバ上のブローカとAndroid(登録商標)ホームゲートウェイ上のブローカを連携させることが可能となる。他の例では、異なるサービスベンダーがそれぞれの都合で選んだブローカ同士を相互接続することが可能になる。また、付加機能やライセンス・価格等の面で連携機能を持たないブローカに優位性がある場合に、これらのブローカを用いてpub/subメッセージングシステムを構築することが可能となる。その結果、負荷分散を実現する際の自由度が高くなり、すなわち、負荷分散を実現できるシチュエーションが広がる。さらに、非同期メッセージングシステムの信頼性が向上する。
次に、図4および図5を参照して、第1の実施形態に係るpub/subメッセージングシステムの動作例について説明する。
図4に示されるpub/subメッセージングシステムでは、分散連携プロキシD1がブローカB1に対応して設けられ、分散連携プロキシD2がブローカB2に対応して設けられ、分散連携プロキシD1、D2が互いに接続されている。さらに、パブリッシャP1およびサブスクライバS1が分散連携プロキシD1に接続され、サブスクライバS2が分散連携プロキシD2に接続されている。
まず、サブスクライバS1が、ブローカB1に対して、所望するトピックにサブスクライブする。具体的には、サブスクライバS1が、サブスクライブメッセージを分散連携プロキシD1に送信し(図5のS501)、分散連携プロキシD1が、このサブスクライブメッセージをブローカB1に転送する(S502)。一方で、サブスクライバS2が、ブローカB2に対して、所望するトピック(ここでは、サブスクライバS1と同じトピック)にサブスクライブする。具体的には、サブスクライバS2が、サブスクライブメッセージを分散連携プロキシD2に送信し(S503)、分散連携プロキシD2が、そのサブスクライブメッセージをブローカB2に転送する(S504)。
次に、パブリッシャP1が、ブローカB1に対して、所望するトピック(ここでは、サブスクライバS1、S2がサブスクライブしたものと同じトピック)にメッセージをパブリッシュする。具体的には、パブリッシャP1が、パブリッシュメッセージを分散連携プロキシD1に送信し(S505)、分散連携プロキシD1が、このパブリッシュメッセージをブローカB1に転送する(S506)。分散連携プロキシD1は、擬似的なパブリッシャとして、分散連携プロキシD2の中継によってブローカB2にパブリッシュメッセージをパブリッシュする。具体的には、分散連携プロキシD1が、当該パブリッシュメッセージを分散連携プロキシD2に転送し(S507)、分散連携プロキシD2が、パブリッシュメッセージをブローカB2に転送する(S508)。
続いて、サブスクライバS1は、分散連携プロキシD1の中継によってブローカB1からパブリッシュメッセージを受信する。具体的には、ブローカB1が、パブリッシュメッセージを分散連携プロキシD1に転送し(S509)、分散連携プロキシD1が、このパブリッシュメッセージをサブスクライバS1に転送する(S510)。さらに、サブスクライバS2は、分散連携プロキシD2の中継によってブローカB2からパブリッシュメッセージを受信する。具体的には、ブローカB2が、パブリッシュメッセージを分散連携プロキシD2に転送し(S511)、分散連携プロキシD2が、このパブリッシュメッセージをサブスクライバS2に転送する(S512)。
このように、分散連携プロキシD1、D2は、異なるブローカに収容されたクライアント同士が単一ブローカを用いる場合と同様に通信可能となるように、相互連携する。
以上のように、第1の実施形態に係る分散連携プロキシは、クライアントとブローカとの間に設けられており、クライアントと通信を行なうローカル連携部と、隣接する分散連携プロキシと通信を行なうリモート連携部と、ブローカと通信を行なうブローカ連携部と、を備え、ローカル連携部およびブローカ連携部が、前記クライアントと前記ブローカとの間の通信の中継を行なうように連動し、リモート連携部が、ローカル連携部を介して前記クライアントから受信したメッセージまたはブローカ連携部を介してブローカから受信したメッセージに基づいて、ブローカと隣接する分散連携プロキシに接続された他のブローカとの間の通信の中継を行なう。すなわち、分散連携プロキシは、ブローカとクライアントとの通信を仲介し、ブローカとクライアントとの通信内容に応じて他の分散連携プロキシと連携する。上記の分散連携プロキシを用いることにより、複数台のブローカを含むpub/subメッセージングシステムにおいて、実装に依存せず任意のブローカ間の連携が可能となる。その結果、負荷分散を実現する際の自由度が高くなり、非同期メッセージングシステムの信頼性が向上する。
[第2の実施形態]
第1の実施形態では、サブスクライブメッセージを伝搬させずに、パブリッシュメッセージを全てのブローカに伝搬させる連携方式(PFA)を説明した。第2の実施形態では、サブスクライブメッセージを全てのブローカに伝搬させ、パブリッシュメッセージを必要なブローカにのみ転送する連携方式について説明する。この連携方式をSFA(Subscribe Flooding Algorithm)と称する。第2の実施形態に係るpub/subメッセージングシステムは、第1の実施形態に係るpub/subメッセージングシステムと同様の構成を有し、メッセージの転送処理を除いて同様の動作を行なうので、ここでは、第1の実施形態と異なる点について主に説明する。
図6を参照してSFAについて説明する。図6(a)に示されるpub/subメッセージングシステムでは、5台のブローカB1、B2、B3、B4、B5が分散連携プロキシD1、D2、D3、D4、D5にそれぞれ接続されており、分散連携プロキシD1は分散連携プロキシD2に接続され、分散連携プロキシD2は分散連携プロキシD1、D3、D4に接続され、分散連携プロキシD3は分散連携プロキシD2に接続され、分散連携プロキシD4は分散連携プロキシD2、D5に接続され、分散連携プロキシD5は分散連携プロキシD4に接続されている。
まず、図6(a)に示されるように、サブスクライバS1が、サブスクライブメッセージを分散連携プロキシD2に送信し、分散連携プロキシD2は、サブスクライバS1から受信したサブスクライブメッセージをブローカB2に転送するとともに、サブスクライブメッセージを分散連携プロキシD1、D3、D4に転送する。分散連携プロキシD1は、分散連携プロキシD2から受信したサブスクライブメッセージをブローカB1に転送する。分散連携プロキシD3は、分散連携プロキシD2から受信したサブスクライブメッセージをブローカB3に転送する。分散連携プロキシD4は、分散連携プロキシD2から受信したサブスクライブメッセージをブローカB3に転送し、さらに、サブスクライブメッセージを分散連携プロキシD5に転送する。分散連携プロキシD5は、分散連携プロキシD4から受信したサブスクライブメッセージをブローカB5に転送する。これにより、ブローカB1〜B5においてサブスクライバS1がトピックにサブスクライブした状態となる。図6(b)に示される実線矢印は、サブスクライブ方向を表す。パブリッシュメッセージは、サブスクライブ方向と逆向きにのみ転送される。サブスクライブ方向に関する情報は、各分散連携プロキシのリモート連携部302(図3)によって管理される。
続いて、図6(b)に示されるように、サブスクライバS2は、サブスクライブメッセージを分散連携プロキシD4に送信する。ここでは、サブスクライバS1、S2が同じトピックにサブスクライブしたものとする。分散連携プロキシD4は、サブスクライバS2から受信したサブスクライブメッセージをブローカB4に転送するとともに、分散連携プロキシD2にこのサブスクライブメッセージを転送する。分散連携プロキシD4は、以前に、サブスクライバS1からのサブスクライブメッセージを分散連携プロキシD5に転送しており、あるパブリッシャがブローカB5に対してパブリッシュメッセージを送信した場合には、そのパブリッシュメッセージは、分散連携プロキシD5から転送されることになっている。このため、分散連携プロキシD4がサブスクライバS2からのサブスクライブメッセージを分散連携プロキシD5に転送する必要がない。分散連携プロキシD2は、サブスクライバS1から受信したサブスクライブメッセージをブローカB2に転送する。上述したものと同様の理由により、分散連携プロキシD2は、サブスクライバS2からのサブスクライブメッセージを分散連携プロキシD1、D3に転送しなくてよい。これにより、図6(c)に示されるように、ブローカB1〜B5においてサブスクライバS1がトピックにサブスクライブした状態となり、ブローカB2、B4においてサブスクライバS2がトピックにサブスクライブした状態となる。
次に、図6(d)に示されるように、分散連携プロキシD5に接続されたパブリッシャP1は、分散連携プロキシD5にパブリッシュメッセージを送信し、分散連携プロキシD5は、パブリッシャP1から受信したパブリッシュメッセージをブローカB5に転送する。ブローカB5は、パブリッシュメッセージのトピックにサブスクライバS1がサブスクライブしていることを検出し、パブリッシュメッセージを分散連携プロキシD5に転送する。分散連携プロキシD5は、ブローカB5からのパブリッシュメッセージを受信すると、自身で管理しているサブスクライバ方向に関する情報を参照して、パブリッシュメッセージを分散連携プロキシD4に転送する。分散連携プロキシD4は、分散連携プロキシD5から受信したパブリッシュメッセージをブローカB4に転送する。ブローカB4は、パブリッシュメッセージのトピックにサブスクライバS1、S2がサブスクライブしていることを検出し、パブリッシュメッセージを分散連携プロキシD4に転送する。分散連携プロキシD4は、ブローカB4からのパブリッシュメッセージを受信すると、自身で管理しているサブスクライバ方向に関する情報を参照して、パブリッシュメッセージをサブスクライバS2および分散連携プロキシD2に転送する。同様にして、分散連携プロキシD2がパブリッシュメッセージをブローカB2に転送し、ブローカB2がパブリッシュメッセージを分散連携プロキシD2に転送し、分散連携プロキシD2がパブリッシュメッセージをサブスクライバS1および分散連携プロキシD1、D3に転送し、分散連携プロキシD1、D2がそれぞれブローカB1、B3に転送する。
再び図3を参照して、本実施形態に係るローカル連携部301、リモート連携部302、およびブローカ連携部303を説明する。
ローカル連携部301は、クライアントC1からメッセージを受信すると、ブローカ連携部303を介してブローカB1にこのメッセージを送信するとともに、リモート連携部302にこのメッセージを渡す。この場合において、リモート連携部302は、クライアントC1からのメッセージがサブスクライブメッセージである場合には、擬似的なサブスクライバとして分散連携プロキシD2にこのメッセージを送信するが、クライアントC1からのメッセージがパブリッシャメッセージである場合には、分散連携プロキシD2へのメッセージ送信を行なわない。
リモート連携部302は、分散連携プロキシD2からサブスクライブメッセージを受信すると、ブローカ連携部303を介してブローカB1にこのサブスクライブメッセージを送信する。分散連携プロキシD2以外に隣接する分散連携プロキシがある場合、リモート連携部302は、擬似的なサブスクライバとして、当該分散連携プロキシに、分散連携プロキシD2から受信したサブスクライブメッセージをさらに送信する。リモート連携部302は、分散連携プロキシD2からパブリッシュメッセージを受信すると、ブローカ連携部303を介してブローカB1にこのパブリッシュメッセージを送信する。ブローカ連携部303は、ブローカB1からパブリッシュメッセージを受信すると、ローカル連携部301を介してクライアントC1にこのパブリッシュメッセージを送信するとともに、リモート連携部302にこのパブリッシュメッセージを渡す。リモート連携部302は、必要に応じて、例えば、サブスクライブ方向に関する情報を参照して、隣接する分散連携プロキシにパブリッシュメッセージを送信する。
次に、図7および図8を参照して、第2の実施形態に係るpub/subメッセージングシステムの動作例について説明する。
図7に示されるpub/subメッセージングシステムでは、分散連携プロキシD1がブローカB1に対応して設けられ、分散連携プロキシD2がブローカB2に対応して設けられ、分散連携プロキシD1、D2が互いに接続されている。さらに、パブリッシャP1およびパブリッシャP2が分散連携プロキシD1に接続され、サブスクライバS1が分散連携プロキシD2に接続されている。
まず、サブスクライバS1が、ブローカB2に対して、所望するトピックにサブスクライブする。具体的には、サブスクライバS1が、サブスクライブメッセージを分散連携プロキシD2に送信し(図8のS801)、分散連携プロキシD2が、このサブスクライブメッセージをブローカB2に転送する(S802)。分散連携プロキシD2は、擬似的なサブスクライバとして、ブローカB2と異なるブローカに対して、上記トピックにサブスクライブする。具体的には、分散連携プロキシD2は、隣接する分散連携プロキシD1にサブスクライブメッセージを転送し(S803)、分散連携プロキシD1が、サブスクライブメッセージをブローカB1に転送する(S804)。このようにして、サブスクライブメッセージが全てのブローカB1、B2に伝搬される。
続いて、パブリッシャP1は、ブローカB1に対して、サブスクライバS1がサブスクライブしたものと同じトピックにパブリッシュメッセージをパブリッシュする。具体的には、パブリッシャP1が、指定したトピックが付与されたパブリッシュメッセージを分散連携プロキシD1に送信し(S805)、分散連携プロキシD1が、パブリッシュメッセージをブローカB1に転送する(S806)。ブローカB1は、受信したパブリッシュメッセージに関するトピックがサブスクライブされていることを検出し、分散連携プロキシD1にパブリッシュメッセージを転送する(S807)。さらに、分散連携プロキシD1は、擬似的なパブリッシャとして、ブローカB1と異なるブローカに対して、パブリッシュメッセージをパブリッシュする。具体的には、分散連携プロキシD1が、隣接する分散連携プロキシD2にパブリッシュメッセージを転送し(S808)、分散連携プロキシD2が、ブローカB2にパブリッシュメッセージを転送する(S809)。ブローカB2は、受信したパブリッシュメッセージに関するトピックがサブスクライブされていることを検出し、分散連携プロキシD2にパブリッシュメッセージを転送し(S810)、分散連携プロキシD2が、サブスクライバS1にパブリッシュメッセージを転送する(S811)。
さらに、パブリッシャP2は、ブローカB1に対して、サブスクライバS1がサブスクライブしているトピックと異なるトピックにパブリッシュメッセージをパブリッシュする。具体的には、パブリッシャP1が、指定したトピックが付与されたパブリッシュメッセージを分散連携プロキシD1に送信し(S812)、分散連携プロキシD1が、パブリッシュメッセージをブローカB1に転送する(S813)。ブローカB1は、受信したパブリッシュメッセージに関するトピックがいずれのサブスクライバにもサブスクライブされていないことを検出し、パブリッシュメッセージの転送を行なわない。
このように、分散連携プロキシD1、D2は、異なるブローカに収容されたクライアント同士が単一ブローカを用いる場合と同様に通信可能となるように、相互連携する。
第2の実施形態によれば、第1の実施形態と同様の効果を得ることができる。第2の実施形態に係る連携方式SFAでは、必要な分散連携プロキシに対してパブリッシュメッセージを転送すればよいので、トラフィックを低減させることができる。
[第3の実施形態]
第1の実施形態で説明したPFAおよび第2の実施形態で説明したSFAにおいては、図9を参照して以下に説明するように、分散連携プロキシがメッセージを隣接する分散連携プロキシに転送することによって無限ループが発生することがある。第3の実施形態では、無限ループを回避する方法について説明する。
図9に示されるpub/subメッセージングシステムでは、分散連携プロキシD1がブローカB1に対応して設けられ、分散連携プロキシD2がブローカB2に対応して設けられ、分散連携プロキシD1、D2が互いに接続され、パブリッシャP1およびサブスクライバS1が分散連携プロキシD1に接続され、サブスクライバS2が分散連携プロキシD2に接続されている。ここで、パブリッシャP1のパブリッシュメッセージに対してサブスクライバS1、S2がサブスクライブしているものとする。
まず、パブリッシャP1がパブリッシュメッセージを分散連携プロキシD1に送信する(S901)。分散連携プロキシD1は、パブリッシュメッセージをブローカB1に転送し(S902)、ブローカB1は、パブリッシュメッセージを分散連携プロキシD1に転送する(S903)。分散連携プロキシD1は、サブスクライバS1にパブリッシュメッセージを転送し(S904−1)、さらに、隣接する分散連携プロキシD2にパブリッシュメッセージを転送する(S904−2)。続いて、分散連携プロキシD2は、ブローカB2にパブリッシュメッセージを転送する(S905)。ブローカB2は、パブリッシュメッセージを分散連携プロキシD2に転送する(S906)。分散連携プロキシD2は、サブスクライバS2にパブリッシュメッセージを転送し(S907−1)、さらに、隣接する分散連携プロキシD1にパブリッシュメッセージを転送する(S907−2)。そして、分散連携プロキシD1は、パブリッシュメッセージをブローカB1に再び転送する(S908)。以降、S903〜S908に示す手順が繰り返される。このようにして、無限ループが発生する。
本実施形態では、リモート連携部302(図3)は、隣接する分散連携プロキシからメッセージを受信したときに、当該メッセージの同一性を確認可能な情報を、当該メッセージの送信元を示す情報とともに、伝搬ログ(履歴情報ともいう)として記録し保持する。メッセージの同一性を確認可能な情報としては、例えば、クライアントまたはブローカがメッセージに付与した識別情報(ID)を用いてもよく、メッセージのハッシュ値を計算して用いてもよい。そして、リモート連携部302は、クライアントまたはブローカから受信したメッセージを隣接する分散連携プロキシに送信するときに、当該メッセージの同一性を確認可能な情報で伝搬ログを参照して、メッセージ送信を行なうか否かを判定する。
あるいは、リモート連携部302は、隣接する分散連携プロキシにメッセージを送信するときに、当該メッセージの同一性を確認可能な情報を、当該メッセージの送信先を示す情報とともに、伝搬ログとして記録し保持してもよい。この場合、リモート連携部302は、クライアントまたはブローカから受信したメッセージを隣接する分散連携プロキシに送信するときに、当該メッセージの同一性を確認可能な情報で伝搬ログを参照して、メッセージ送信を行なうか否かを判定する。
例えば、分散連携プロキシD2のリモート連携部302は、図9の手順S904−2において受信したパブリッシュメッセージのIDとこのパブリッシュメッセージの送信元(この例では分散連携プロキシD1)を示す情報とのペアを伝搬ログとして記録し保管する。分散連携プロキシD2のリモート連携部302は、手順S906においてブローカB2から受信したパブリッシュメッセージのIDから当該パブリッシュメッセージの伝搬ログを参照し、過去に当該パブリッシュメッセージを分散連携プロキシD1から受信していることを確認する。これを受けて、分散連携プロキシD2のリモート連携部302は、手順S907−2の実行を中止する。これにより、無限ループの発生を回避することができる。
以上のように、第3の実施形態によれば、リモート連携部302において、メッセージの同一性を確認可能な情報とメッセージの送信先を示す情報とを伝搬ログとして保管することにより、隣接する分散連携プロキシ間で同じメッセージの転送を繰り返すことが防止され、無限ループを回避することができる。
[他の実施形態]
一実施形態に係るpub/subメッセージングシステムは、第1の実施形態に係る連携方式PFAおよび第2の実施形態に係る連携方式SFAを選択的に使用してメッセージ配信を行なう。連携方式は、例えばシステムの通信状況に応じて、PFAまたはSFAに切り替えられる。PFAは、パブリッシャメッセージを、接続されている全ての分散連携プロキシに転送するので、分散連携プロキシの処理は楽になる。しかしながら、本来メッセージを必要としない分散連携プロキシにも転送を行なうことになるため、トラフィックの無駄が生じることがある。一方、SFAは、要求のあったサブスクライバが接続されている分散連携プロキシに対してパブリッシュメッセージを転送するので、トラフィックの無駄はないが、分散連携プロキシの処理が難しくなる。このため、通信が全体に対して局所的に行なわれる部分がある場合には、PFAではトラフィックの無駄が大きくなるので、SFAが選択される。
本発明は、上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、各実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
B1〜B5…ブローカ、D1〜D5…分散連携プロキシ、P1,P2…パブリッシャ、S1,S2…サブスクライバ、C1…クライアント、301…ローカル連携部、302…リモート連携部、303…ブローカ連携部。

Claims (8)

  1. クライアントとブローカとの間に設けられる分散連携プロキシであって、
    前記クライアントと通信するための第1の通信手段と、
    前記ブローカと通信するための第2の通信手段と、
    隣接する分散連携プロキシと通信するための第3の通信手段と、
    を具備し、
    前記第1の通信手段および前記第2の通信手段は、前記クライアントと前記ブローカとの間の通信の中継を行なうように連動し、
    前記第3の通信手段は、前記第1の通信手段を介して前記クライアントから受信したメッセージまたは前記第2の通信手段を介して前記ブローカから受信したメッセージに基づいて、前記ブローカと前記隣接する分散連携プロキシに接続された他のブローカとの間の通信の中継を行なう、ことを特徴とする分散連携プロキシ。
  2. 前記第3の通信手段が前記第1の通信手段を介して前記クライアントからパブリッシュメッセージを受信した場合、前記第3の通信手段は、前記クライアントから受信した前記パブリッシュメッセージを前記隣接する分散連携プロキシに送信し、
    前記第3の通信手段が前記隣接する分散連携プロキシのうちの1つの分散連携プロキシからパブリッシュメッセージを受信した場合、前記第3の通信手段は、前記隣接する分散連携プロキシのうちの他の分散連携プロキシに、前記1つの分散連携プロキシから受信したパブリッシュメッセージを送信するとともに、前記第2の通信手段を介して、前記隣接する分散連携プロキシから受信した前記パブリッシュメッセージを前記ブローカに送信する、ことを特徴とする請求項1に記載の分散連携プロキシ。
  3. 前記第3の通信手段が前記第1の通信手段を介して前記クライアントからサブスクライブメッセージを受信した場合、前記第3の通信手段は、前記クライアントから受信した前記サブスクライブメッセージを前記隣接する分散連携プロキシに送信し、
    前記第3の通信手段が前記隣接する分散連携プロキシのうちの1つの分散連携プロキシからサブスクライブメッセージを受信した場合、前記第3の通信手段は、前記隣接する分散連携プロキシのうちの他の分散連携プロキシに、前記1つの分散連携プロキシから受信したサブスクライブメッセージを送信するとともに、前記第2の通信手段を介して、前記隣接する分散連携プロキシから受信した前記サブスクライブメッセージを前記ブローカに送信する、ことを特徴とする請求項1に記載の分散連携プロキシ。
  4. 前記第3の通信手段は、メッセージの同一性を識別可能な情報と、当該メッセージの送信相手または受信相手を示す情報と、を履歴情報として保持し、前記履歴情報に基づいてメッセージ送信を行なうか否かを判定することを特徴とする請求項1乃至3のいずれか一項に記載の分散連携プロキシ。
  5. 複数のブローカと、前記複数のブローカにそれぞれ対応する複数の分散連携プロキシと、を備える非同期メッセージングシステムであって、
    前記複数の分散連携プロキシの各々は、当該分散連携プロキシに対応するブローカとクライアントとの間に設けられ、
    前記複数の分散連携プロキシの各々は、
    前記クライアントと通信するための第1の通信手段と、
    前記対応するブローカと通信するための第2の通信手段と、
    前記複数の分散連携プロキシのうちの隣接する分散連携プロキシと通信するための第3の通信手段と、
    を具備し、
    前記第1の通信手段および前記第2の通信手段は、前記クライアントと前記対応するブローカとの間の通信の中継を行なうように連動し、
    前記第3の通信手段は、前記第1の通信手段を介して前記クライアントから受信したメッセージまたは前記第2の通信手段を介して前記対応するブローカから受信したメッセージに基づいて、前記対応するブローカと前記隣接する分散連携プロキシに対応するブローカとの間の通信の中継を行なう、ことを特徴とする非同期メッセージングシステム。
  6. 前記第3の通信手段が前記第1の通信手段を介して前記クライアントからパブリッシュメッセージを受信した場合、前記第3の通信手段は、前記クライアントから受信した前記パブリッシュメッセージを前記隣接する分散連携プロキシに送信し、
    前記第3の通信手段が前記隣接する分散連携プロキシのうちの1つの分散連携プロキシからパブリッシュメッセージを受信した場合、前記第3の通信手段は、前記隣接する分散連携プロキシのうちの他の分散連携プロキシに、前記1つの分散連携プロキシから受信したパブリッシュメッセージを送信するとともに、前記第2の通信手段を介して、前記隣接する分散連携プロキシから受信した前記パブリッシュメッセージを前記対応するブローカに送信する、ことを特徴とする請求項5に記載の非同期メッセージングシステム。
  7. 前記第3の通信手段が前記第1の通信手段を介して前記クライアントからサブスクライブメッセージを受信した場合、前記第3の通信手段は、前記クライアントから受信した前記サブスクライブメッセージを前記隣接する分散連携プロキシに送信し、
    前記第3の通信手段が前記隣接する分散連携プロキシのうちの1つの分散連携プロキシからサブスクライブメッセージを受信した場合、前記第3の通信手段は、前記隣接する分散連携プロキシのうちの他の分散連携プロキシに、前記1つの分散連携プロキシから受信したサブスクライブメッセージを送信するとともに、前記第2の通信手段を介して、前記隣接する分散連携プロキシから受信した前記サブスクライブメッセージを前記対応するブローカに送信する、ことを特徴とする請求項5に記載の非同期メッセージングシステム。
  8. 前記第3の通信手段は、メッセージの同一性を識別可能な情報と、当該メッセージの送信相手または受信相手を示す情報と、を履歴情報として保持し、前記履歴情報に基づいてメッセージ送信を行なうか否かを判定することを特徴とする請求項5乃至7のいずれか一項に記載の非同期メッセージングシステム。
JP2016117119A 2016-06-13 2016-06-13 分散連携プロキシおよびそれを用いた非同期メッセージングシステム Active JP6539617B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016117119A JP6539617B2 (ja) 2016-06-13 2016-06-13 分散連携プロキシおよびそれを用いた非同期メッセージングシステム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016117119A JP6539617B2 (ja) 2016-06-13 2016-06-13 分散連携プロキシおよびそれを用いた非同期メッセージングシステム

Publications (2)

Publication Number Publication Date
JP2017224032A JP2017224032A (ja) 2017-12-21
JP6539617B2 true JP6539617B2 (ja) 2019-07-03

Family

ID=60686414

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016117119A Active JP6539617B2 (ja) 2016-06-13 2016-06-13 分散連携プロキシおよびそれを用いた非同期メッセージングシステム

Country Status (1)

Country Link
JP (1) JP6539617B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7163093B2 (ja) * 2018-07-26 2022-10-31 株式会社東芝 ブローカ装置、通信システム、通信方法、およびプログラム
JP7207145B2 (ja) * 2019-05-13 2023-01-18 富士通株式会社 情報処理装置、配送プログラムおよび分散処理システム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0305066D0 (en) * 2003-03-06 2003-04-09 Ibm System and method for publish/subscribe messaging
KR101197365B1 (ko) * 2005-04-06 2012-11-05 삼성전자주식회사 멀티미디어 메시지 서비스 방법 및 장치
JP2009110165A (ja) * 2007-10-29 2009-05-21 Hitachi Ltd パブリッシュ/サブスクライブ通信における負荷分散処理方法及びその実施装置と処理プログラム
US9144082B2 (en) * 2012-06-13 2015-09-22 All Purpose Networks LLC Locating and tracking user equipment in the RF beam areas of an LTE wireless system employing agile beam forming techniques
JP6368624B2 (ja) * 2014-11-06 2018-08-01 日本電信電話株式会社 非同期メッセージングサーバ連携方式の評価装置及び評価方法

Also Published As

Publication number Publication date
JP2017224032A (ja) 2017-12-21

Similar Documents

Publication Publication Date Title
Hwang et al. Design and implementation of a reliable message transmission system based on MQTT protocol in IoT
JP3956365B2 (ja) 分散コンピュータ・ネットワーク内の資源要求に応答するシステムおよび方法
JP3851275B2 (ja) 分散コンピュータ・ネットワークのスケーラブルなリソース・ディスカバリおよび再構成
US20120079066A1 (en) System and method to create bi-directional event subscriptions
CN101854338B (zh) 订户设备及其订阅管理方法、实时通信方法和系统
US8423619B2 (en) Message brokering in a consuming broker device
US7543023B2 (en) Service support framework for peer to peer applications
US7426194B2 (en) System and method for asynchronous wireless services using reverse service schema generation
US7493413B2 (en) APIS to build peer to peer messaging applications
US8726079B2 (en) Handling of messages in a message system
CN110661871A (zh) 一种数据传输方法及mqtt服务器
JP2009522690A (ja) スケーラブルなピア・グループを使用して通信を最適化すること
JP6539617B2 (ja) 分散連携プロキシおよびそれを用いた非同期メッセージングシステム
CN102037712A (zh) 受限广播、dht之间的对等化、仅广播受限内容的put
EP3920035B1 (en) Message transmission/reception method, communication device, and program
Pautasso et al. The web as a software connector: integration resting on linked resources
US20090006563A1 (en) Dynamic peer network extension bridge
KR20060089624A (ko) 런타임 통신 채널의 플러그가능한 모듈러 채널 컴포넌트를통한 메시지 프로세싱 방법
Bayramcavus et al. Interoperability of microservice-based systems
JP2017073688A (ja) 通信ネットワークシステム
JP6089363B2 (ja) ネットワーク通信システム、サーバプッシュ通信制御サーバ、クライアント端末、サーバプッシュ通信制御方法、情報処理方法、およびプログラム
JP2005092872A (ja) サービス処理システムおよびその処理方法並びにその処理プログラム
JP7649162B2 (ja) パブリッシュ・サブスクライブ・システム
Lever Bidirectional Remote Procedure Call on RPC-over-RDMA Transports
Papazoglou SOAP: Simple Object Access Protocol

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180822

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190604

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190531

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190610

R150 Certificate of patent or registration of utility model

Ref document number: 6539617

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350