以下、図面を参照してこの発明に係わる実施形態を説明する。
(第1の実施形態)
図1は、第1の実施形態に係る情報配信システムの構成を示す模式図である。図1において、ネットワークには複数の通信機器が接続される。通信機器は、パブリッシャ及びサブスクライバの役割のいずれか、又は、両方を担う。図1では、トピックT1を配信するパブリッシャ10、トピックT1の受信登録をしているサブスクライバ20,30、トピックT2を配信するパブリッシャ40及びトピックT2の受信登録をしているサブスクライバ50を例に記載している。
図2は、図1に示すパブリッシャ10の機能構成を示すブロック図である。なお、パブリッシャ及びサブスクライバは、通信機器が担う役割であるため、パブリッシャ10,40及びサブスクライバ20,30,50の構成はそれぞれ同様なものとする。
図2に示すパブリッシャ10は、キー生成部11、MKSG(Multi-Key Skip Graph)経路表維持管理部12及びパブリッシュ転送部13を具備する。
キー生成部11は、Multi-key Skip Graphを構築するため、自ノードに対して1つ以上のキーを生成する。このとき、キーは、例えば、トピックを識別可能な名称であるとする。Multi-key Skip Graphとは、データ構造であるskip listをP2Pネットワークに適用したオーバレイネットワークであり、このオーバレイネットワークを、通信機器毎に保持する複数のキーと1対1に対応させた仮想的なノードにより構築したものである。以下では、仮想的なノードを仮想ノードと称する。
MKSG経路表維持管理部12は、キー生成部11で生成されたキーと、他のパブリッシャ及び/又はサブスクライバに設けられるMKSG経路表維持管理部12から通知される他のノードについてのキーとを参照し、Multi-key Skip Graphにおける経路表の構築、更新及び保管を担う。
図3は、第1の実施形態に係るMulti-key Skip Graphの例を示す図である。図3では、トピック名をt0,t1,…として、このトピック名をキーとしてMulti-key Skip Graphを構築している。トピックtiに関する配送経路長は、トピックtiが割り当てられたパブリッシャ数とサブスクライバ数との合計をm(全通信機器数n>合計値m)とすると、O(logm)となる。これは、全通信機器数をnとしたときの配送経路長O(logn)よりも小さい値となる。
パブリッシュ転送部13は、MKSG経路表維持管理部12で保管される経路表に従い、メッセージを送信する。
図4は、図3に示すMulti-key Skip Graphにおける経路表の例を示す図である。トピックtiの配信に携わるノードは、図4に示すように、トピックtiがキーとして割り当てられた通信機器のみである。このため、トピックtiに関係のない通信機器がトピックtiについてのメッセージを転送することがなくなる。
以上のように、第1の実施形態では、キー生成部11は、各トピック名をキーとして生成する。そして、MKSG経路表維持管理部12は、パブリッシャの役割又はサブスクライバの役割が割り当てられたノードに対し、生成されたキーを参照してMulti-key Skip Graphを構築するようにしている。すなわち、情報配信システムは、分散トピックベースpub/subにおいて、Multi-key Skip Graphを構築するようにしている。これにより、情報配信システムは、キーであるトピックを指定して、メッセージのマルチキャストを実現することが可能となる。すなわち、情報配信システムは、転送に係る通信機器数を減らすことが可能となる。また、情報配信システムは、トピック毎の配送ツリーをトピックへの参加ノードのみで構築することが可能となる。
したがって、第1の実施形態に係る情報配信システムによれば、配送経路長を抑えることができ、かつ、無関係なトピックに関する情報の中継を避けることができる。
なお、Multi-key Skip Graphを用いてトピック名をキーとすることで、トピック毎の配送はそのトピックのパブリッシャにも届く。そのため、第1の実施形態に係る情報配信システムでは、根ノードにおいて子孫ノードとの情報交換によりサブスクライバの不在を検出すれば、検出した情報をパブリッシャへ通知することが可能である。
(第2の実施形態)
図5は、第2の実施形態に係るパブリッシャ60の機能構成を示すブロック図である。なお、パブリッシャ及びサブスクライバは、通信機器が担う役割であるため、パブリッシャ及びサブスクライバの構成はそれぞれ同様なものとする。
図5に示すパブリッシャ60は、キー生成部61、MKSG経路表維持管理部62、パブリッシャ初期状態判定部63、パブリッシャ状態管理部64、ランデブーポイント判定部65、サブスクライバ存在/不在検出部66、パブリッシュ開始/停止信号転送部67、パブリッシュ転送部68、パブリッシュ状態確認部69、不整合検出部610及び不整合是正信号転送部611を具備する。
キー生成部61は、Multi-key Skip Graphを構築するため、自ノードに対して1つ以上のキーを生成する。このとき、キー生成部61は、各トピック名にパブリッシャ及びサブスクライバを識別可能な名称を付したものをキーとして用いる。パブリッシャ及びサブスクライバを識別可能な名称とは、例えば、パブリッシャとサブスクライバとで異なる予約語による接尾辞である。例えば、トピックtiのサブスクライバの接尾辞には「_1」を付してキーを「ti_1」とし、パブリッシャの接尾辞には「_2」を付してキーを「ti_2」とする、というようにルールを決めておく。これにより、トピック名をキーとしてノード間の順序を定めることに加え、パブリッシャとサブスクライバとの間にキー(トピック名)よりも低いプライオリティで順序関係を持たせることが可能となる。
MKSG経路表維持管理部62は、キー生成部61で生成されたキーと、他のパブリッシャ及び/又はサブスクライバに設けられるMKSG経路表維持管理部62から通知される他のノードについてのキーとを参照し、Multi-key Skip Graphにおける経路表の構築、更新及び保管を担う。
トピック名をキーとして用いるのみの場合、図6で示すように、トピック名毎にノードがMulti-key Skip Graph上で隣接する。そのため、各トピックをノードのグループとみなすと、グループ単位でソートされている形となり、グループ内の順序は不定である。
一方、トピック名にノード種別(パブリッシャ又はサブスクライバ)を識別可能な接尾辞を付した場合、図7に示すように、グループ単位でソートされた上で、さらにグループ内でノード種別によってソートされている形となる。図7において、各トピックを表す箱の内部で、パブリッシャを示す白丸同士と、サブスクライバを示す黒丸同士とが必ずそれぞれ隣接する。
これにより、Multi-key Skip Graph上でトピック毎にサブスクライバ同士、又は、パブリッシャ同士が隣接する配置となる。以下では、サブスクライバが隣接する領域をサブスクライバゾーンと称し、パブリッシャが隣接する領域をパブリッシャゾーンと称する。図8は、図5に示すMKSG経路表維持管理部62により構築されるMulti-key Skip Graphの例を示す図である。
また、搭載されるノードがトピック毎のメッセージ配信にパブリッシャとして新たに参加する場合、MKSG経路表維持管理部62は、双方向リンクを形成するために通信を行うノードにパブリッシャが存在するかを判断する。通信するノードにパブリッシャが存在する場合、MKSG経路表維持管理部62は、そのパブリッシャが送信を停止しているか否かの情報を、そのパブリッシャに搭載されるMKSG経路表維持管理部62から取得する。隣接するパブリッシャが送信を停止しているか否かの情報を、以下では初期状態情報と称する。MKSG経路表維持管理部62は、取得した初期状態情報をパブリッシャ初期状態判定部63へ出力する。
また、MKSG経路表維持管理部62は、隣接するノードが変化した際、Multi-key Skip Graphについての経路表をランデブーポイント判定部65へ出力する。
なお、パブリッシャであると同時にサブスクライバでもある場合、MKSG経路表維持管理部62は、サブスクライバとしてのキー「ti_1」のみをMulti-key Skip Graphに挿入する。その上で、同一トピックのサブスクライバゾーンを対象としてメッセージの配信を実行し続ける。これにより、ノードは、自身を含め当該トピックについて存在するサブスクライバのみへデータを送信することとなる。
このようなノードは、自身が存在する限り、パブリッシャもサブスクライバも存在する状況となる。そのため、下記に示すように、サブスクライバの不在を検知したり、サブスクライバの不在を他のパブリッシャへ通知したり、あるいは他のパブリッシャからサブスクライバの不在を通知されたりといった処理が不要となる。
ランデブーポイント判定部65は、MKSG経路表維持管理部62から供給される経路表に基づき、自ノードがランデブーポイントに該当するか否かを判定する。ここで、ランデブーポイントとは、サブスクライバゾーンと境界を接するパブリッシャノードである。図9は、図5に示すMKSG経路表維持管理部62により構築されるMulti-key Skip Graphにおけるランデブーポイントを示す図である。
サブスクライバ存在/不在検出部66は、自ノードがランデブーポイントである際に、MKSG経路表維持管理部62から供給される経路表に基づき、対象となるキーが割り当てられたサブスクライバが存在するか否かを判定する。サブスクライバ存在/不在検出部66は、判定結果をパブリッシュ開始/停止信号転送部67へ出力する。
各トピックについて、パブリッシャが1つ以上存在する場合、サブスクライバの存在/不在を認知可能なノードが必ず存在することが保証される。この理由は以下である。なお、この説明において、各ノードは左右2つの隣接ノードを持つこととする。また、「隣接」とはMulti-key Skip Graphのレベル0における双方向リスト上の隣接を意味するものとする。
ノードXの左隣接ノードをXLとし、右隣接ノードをXRとすると、これらノードのキーの大小関係はXL≦X≦XRとなる。各ノードが隣接ノードについて持つ情報は、隣接ノードのキー、及び、これらキーと自身のキーとの大小関係である。また、サブスクライバゾーンと、パブリッシャゾーンとの順序関係は予め定義されているため、パブリッシャゾーンの下端又は上端のどちらが同一のキーが割り当てられたサブスクライバゾーンと接するかを各ノードは知っている。本説明では、パブリッシャゾーンの下端がサブスクライバゾーンと接するものとする。
あるキーが割り当てられたパブリッシャが1つ以上存在する場合、パブリッシャゾーンが存在すること、及び、パブリッシャゾーンに唯一つの下端点が存在することは自明である。各ノードは、自ノードが下端点か否かを判断することができる。すなわち、パブリッシャであるノードXは、XL<Xであるとき、パブリッシャゾーンの下端点である。
本実施形態において、各トピックのサブスクライバゾーンと、パブリッシャゾーンとは、必ず隣接する。すなわち、相隣接するサブスクライバゾーン及びパブリッシャゾーン以外の場所に、同一のキーが割り当てられたサブスクライバ及びパブリッシャが配置されることは無い。
したがって、サブスクライバが1つ以上存在する場合は、それらの中の1つが必ず、パブリッシャゾーンの下端点であるノードの左隣接ノードである。サブスクライバが存在しない場合は、異なるキーが割り当てられたノードが必ず、パブリッシャゾーンの下端点であるノードの左隣接ノードとなる。以上のことより、パブリッシャが1つ以上存在するとき、パブリッシャゾーンの下端点であるノードが唯一つ存在し、このノードのサブスクライバ存在/不在検出部66は、自身の左隣接ノードが同一のキーが割り当てられたサブスクライバであるか否かを見ることで、サブスクライバの存在/不在を判断する。
なお、複数のパブリッシャが存在する場合には、ランデブーポイント以外のノードでもサブスクライバの出現(不在→存在への変化)を検出が可能となる場合が存在する。具体的には、自ノードがパブリッシュ停止状態であるときに、新たに出現したサブスクライバノードがMulti-key Skip Graphのレベル1以上の双方向リストにおいて偶然隣接する可能性がある。その場合、新たに出現したサブスクライバノードと、レベル1以上の双方向リストにおいて隣接するパブリッシャノードのサブスクライバ存在/不在検出部66は、サブスクライバが存在すると判断することが可能である。
一方、サブスクライバの消滅(存在→不在への変化)をランデブーポイント以外のパブリッシャノードが検出することは不可能である。Multi-key Skip Graphにおいて,レベル1以上の双方向リストでは各ノードがどのノードと隣接する(=リンクを張る)かは乱数に基づいて決まる。そのため、自身の経路表にサブスクライバが存在しないときに「サブスクライバは存在するが自身の経路表には無いこと」と、「サブスクライバは存在せず自身の経路表にも無いこと」とを判断することが不可能となる。なお、レベル0のリストでは全てのノードが連結されているため、ランデブーポイントはレベル0における隣接ノードを見ることでサブスクライバの存在/不在を断言することが可能となっている。
パブリッシュ開始/停止信号転送部67は、サブスクライバ存在/不在検出部66から通知される、対象となるキーが割り当てられたサブスクライバが存在するか否かの判定結果に基づき、パブリッシュ開始信号又はパブリッシュ停止信号を発信する。パブリッシュ開始信号とは、パブリッシャにメッセージの配信を開始させる信号である。パブリッシュ停止信号とは、パブリッシャにメッセージの配信を停止させる信号である。また、パブリッシュ開始/停止信号転送部67は、他のノードから送信されるパブリッシュ開始信号又はパブリッシュ停止信号を受信した場合、受信した信号を他のノードへ転送する。また、パブリッシュ開始/停止信号転送部67は、他のノードから送信されるパブリッシュ開始信号又はパブリッシュ停止信号を受信した場合、受信した信号についての情報をパブリッシャ状態管理部64へ通知する。
例えば、あるトピックについて、ランデブーポイントに搭載されるサブスクライバ存在/不在検出部66により、サブスクライバが全て離脱してサブスクライバ数が0となったことが検出されると、ランデブーポイントのパブリッシュ開始/停止信号転送部67は、パブリッシュゾーンに対してパブリッシュ停止信号をマルチキャストする。マルチキャストは、Multi-key Skip Graphの範囲検索機構をそのまま用いることで実現可能である。図10は、図5に示すパブリッシュ開始/停止信号転送部67がパブリッシュ停止信号を送信することで、パブリッシャに配信を停止させる際の模式図を示す。
また、ランデブーポイントに搭載されるサブスクライバ存在/不在検出部66により、サブスクライバが不在のトピックに新たにサブスクライバが加入されたことが検出されると、ランデブーポイントのパブリッシュ開始/停止信号転送部67は、パブリッシュゾーンに対してパブリッシュ開始信号をマルチキャストする。図11は、図5に示すパブリッシュ開始/停止信号転送部67がパブリッシュ開始信号を送信することで、パブリッシャに配信を開始させる際の模式図を示す。
パブリッシャ初期状態判定部63は、搭載されるノードがトピック毎のメッセージ配信にパブリッシャとして新たに参加する場合、MKSG経路表維持管理部62から出力される初期状態情報に基づき、初期状態としてパブリッシュ開始及びパブリッシュ停止のいずれの状態を選択すべきかを判定する。 パブリッシャ初期状態判定部63は、判定結果をパブリッシャ状態管理部64へ通知する。
図12は、あるトピックについてのメッセージ配信に、新たなパブリッシャが参加する場合の模式図を示す。パブリッシャは、参加直後からメッセージの配信を行なうか否かを判断する必要がある。参加するトピックメッセージ配信に既にパブリッシャが存在する場合、新規パブリッシャは、Multi-key Skip Graphへのノード挿入処理の過程で少なくとも1つの既存パブリッシャとメッセージのやり取りを行う。そこで、既存パブリッシャは、新規パブリッシャへ送信するメッセージに、自ノードがパブリッシュ停止中か否かの情報を上乗せし、メッセージを送信する。パブリッシャ初期状態判定部63は、既存パブリッシャがパブリッシュ停止の状態である場合、自ノードをパブリッシュ停止状態とし、既存パブリッシャがパブリッシュ開始の状態である場合、自ノードをパブリッシュ開始状態とする。
なお、既存のパブリッシャが存在しない場合、新規パブリッシャ自身がランデブーポイントとなるため、ランデブーポイント判定部65、サブスクライバ存在/不在検出部66及びパブリッシュ開始/停止信号転送部67により、挿入完了後にパブリッシュを開始するか否かを判断する。
パブリッシャ状態管理部64は、自ノードについてパブリッシュ開始/パブリッシュ停止についての状態情報を管理する。パブリッシャ状態管理部64は、各部からの通知に基づいて状態情報を更新する。パブリッシャ状態管理部64は、状態情報がパブリッシュ停止になった場合、パブリッシュ停止になった旨をパブリッシュ転送部68へ通知する。パブリッシャ状態管理部64は、状態情報がパブリッシュ開始になった場合、パブリッシュ開始になった旨をパブリッシュ状態確認部69へ通知する。また、パブリッシャ状態管理部64は、不整合検出部610及びパブリッシュ状態確認部69からの要求に応じて状態情報を提示する。
パブリッシュ転送部68は、自ノードで発生したメッセージを送信する。
また、パブリッシュ転送部68は、他のノードから送信されたメッセージを受信する。パブリッシュ転送部68は、受信したメッセージを隣接するパブリッシャ及び/又はサブスクライバへ転送する。パブリッシャ状態管理部64からパブリッシュ停止である旨の通知を受けた場合、パブリッシュ転送部68は、メッセージの配信を停止する。
パブリッシュ転送部68がランデブーポイントに搭載されている場合、パブリッシュ転送部68は、他のノードから送信されたメッセージを受信した旨を、不整合検出部610へ通知する。
パブリッシュ状態確認部69は、パブリッシュ停止状態にある場合、Multi-key Skip Graphのレベル0リストにおいて隣接するパブリッシャへパブリッシュの状態を所定の周期で問い合わせる。パブリッシュ状態確認部69は、隣接ノードから応答される問合結果を、不整合検出部610へ出力する。パブリッシュ状態確認部69は、パブリッシャ状態管理部64からパブリッシュ開始である旨の通知を受信した場合、隣接パブリッシャへの問合せを停止する。
また、パブリッシュ状態確認部69は、隣接するパブリッシャからパブリッシュの状態の問い合わせを受ける。問い合わせを受けた場合、パブリッシュ状態確認部69は、パブリッシャ状態管理部64から状態情報を引き出し、問合せの要求元へ応答信号を送信する。
不整合検出部610は、パブリッシュ転送部68から、メッセージを受信した旨の通知を受けた場合、メッセージ配信の不整合が生じているか否かを判断する。この処理は、急なノードの離脱により生じる、図13に示す不整合に対応するためのものである。図13は、サブスクライバの不在時にメッセージが送信される不整合を示す図である。
図13に示す不整合は、ランデブーポイントでは発生することはなく、その他のパブリッシャノードにおいて発生の可能性がある。図13に示す不整合は、ランデブーポイントのパブリッシュ開始/停止信号転送部67から送信されるパブリッシュ開始信号/パブリッシュ停止信号が不達となった場合(転送経路上のノードが急に離脱した場合)に発生するからである。したがって、通知の発信元であるランデブーポイント自身に対し、パブリッシュ開始信号及びパブリッシュ停止信号が不達となることは起こり得ない。
なお、ランデブーポイント自身が急に離脱した場合、新たにランデブーポイントとなるノードに搭載されるMKSG経路表維持管理部62は、Multi-key Skip Graphのアルゴリズムに沿って経路表を更新する。新たにランデブーポイントとなったパブリッシャは、経路表が更新されたタイミングで、サブスクライバの存在/不在をチェックする。これにより、ランデブーポイント自身が急に離脱した場合であっても、不整合の発生を容易に防ぐことが可能となる。
ランデブーポイント以外のパブリッシャがサブスクライバ不在時にメッセージを送信した場合、そのメッセージは、図14に示すように、必ずランデブーポイントを経由する。ランデブーポイントに搭載されるパブリッシュ転送部68は、隣接するパブリッシャからのメッセージを受信した場合、受信した旨を自ノードに搭載される不整合検出部610へ出力する。不整合検出部610は、パブリッシュ転送部68からメッセージを受信した旨の通知を受けた場合、ランデブーポイント判定部65による自ノードがランデブーポイントであるとの判断と、パブリッシャ状態管理部64から読み出される状態情報とに基づき、不整合を検出する。不整合検出部610は、状態情報により自ノードがパブリッシュ停止状態にあると管理されている場合、不整合が発生したと判断する。不整合検出部610は、検出結果を不整合是正信号転送部611へ出力する。不整合是正信号転送部611は、不整合検出部610から検出結果を受け取ると、メッセージの送り元のパブリッシャへ不整合是正信号を送信する。このとき、不整合是正信号は、パブリッシュを停止させる信号である。
メッセージの送り元のパブリッシャに搭載される不整合是正信号転送部611は、ランデブーポイントからの不整合是正信号を受信すると、パブリッシュを停止させる旨をパブリッシャ状態管理部64へ通知する。
また、不整合検出部610は、隣接するパブリッシャから定期的に通知されるパブリッシャの状態情報に基づいてメッセージ配信の不整合が生じているか否かを判断する。この処理は、急なノードの離脱により生じる、図15に示す不整合に対応するためのものである。図15は、サブスクライバの存在時にメッセージの送信が停止されてしまう不整合を示す図である。
図15に示す不整合は、図13に示す不整合と同様に、ランデブーポイントでは発生することはなく、その他のパブリッシャノードにおいて発生の可能性がある。
パブリッシャに搭載されるパブリッシュ状態確認部69は、自ノードがパブリッシュを停止している際に、図16で示すように、Multi-key Skip Graphのレベル0リストにおける隣接ノードに対し、パブリッシュ停止状態であるか否かを定期的に問い合わせる。隣接ノードに搭載されるパブリッシュ状態確認部69は、問合せに対する応答信号を、問合せ元のノードへ送信する。不整合検出部610は、応答信号と、自ノードの状態とを比較し、自ノードと隣接ノードとの間でパブリッシュの状態に齟齬がないかを確認することで、不整合を検出する。不整合検出部610は、自ノードがパブリッシュ停止状態にある一方で、隣接ノードがパブリッシュ開始状態にある場合、不整合が発生したと判断する。不整合検出部610は、検出結果を不整合是正信号転送部611へ出力する。不整合是正信号転送部611は、不整合検出部610から検出結果を受け取ると、ランデブーポイントへ不整合是正信号を送信する。このとき、不整合是正信号は、全てのパブリッシャへパブリッシュを開始する指示の送信を要求する信号である。
ランデブーポイントに搭載される不整合是正信号転送部611は、パブリッシャから不整合是正信号を受信すると、サブスクライバ存在/不在検出部66により、サブスクライバの存在を確認する。サブスクライバが存在する場合、不整合是正信号転送部611は、全てのパブリッシャへ不整合是正信号を送信する。このとき、不整合是正信号は、パブリッシュを開始させる信号である。
ランデブーポイントから不整合是正信号を受信したパブリッシャは、パブリッシュを開始させる旨をパブリッシャ状態管理部64へ通知する。
次に、以上のように構成される情報配信システムの動作を詳細に説明する。
図17は、第2の実施形態における情報配信システムにおいて、ノードAがメッセージ配信に参加する際の動作を示すフローチャートである。また、図18は、図17に示すフローを実行する際に動作する構成要素を示す図である。
まず、ノードAは、トピックT及びノードの役割を指定する。役割は「サブスクライバ」、「パブリッシャ」及び「サブスクライバかつパブリッシャ」のいずれかである。ノードAに搭載されるキー生成部61は、トピック及び役割からキーを生成する。キー生成部61は、役割が「サブスクライバ」であるか否かを判断する(ステップS171)。サブスクライバである場合(ステップS171のYes)、キー生成部61は、トピックTに接尾辞「1」を付したキー「T_1」を生成する(ステップS172)。サブスクライバではない場合(ステップS171のNo)、キー生成部61は、トピックTに接尾辞「2」を付したキー「T_2」を生成する(ステップS173)。これにより、役割が「サブスクライバ」又は「サブスクライバかつパブリッシャ」の場合、キー「T_1」が付され、役割が「パブリッシャ」の場合、キー「T_2」が付されることとなる。
MKSG経路表維持管理部62は、Multi-key Skip Graphを用い、仮想ノードA1の挿入箇所を探索する(ステップS174)。このとき、ノードAが他のトピックに既に参加している場合、MKSG経路表維持管理部62は、自身の仮想ノードA2を起点として探索を行う。一方、ノードAがどのトピックにも参加していない場合、MKSG経路表維持管理部62は、例えば、トピックとは無関係な仮想ノードB1〜E1を全てのノードB〜Eが予め挿入しておくことで、仮想ノードB1〜E1を起点とした探索を行えるようにしておいても良い。また、ノードAがどのトピックにも参加していない場合、MKSG経路表維持管理部62は、既にMulti-key Skip Graph上に仮想ノードを挿入済みのノードの情報を何らかの方法で入手し、そのノードを起点として探索を行っても良い。
続いて、MKSG経路表維持管理部62は、仮想ノードA1のキーが「T_1」であるか否かを判断する(ステップS175)。仮想ノードA1のキーが「T_1」である場合(ステップS175のYes)、MKSG経路表維持管理部62は、Multi-key Skip Graphのアルゴリズムに沿って、仮想ノードA1の挿入処理を実施する(ステップS176)。仮想ノードA1のキーが「T_2」である場合(ステップS175のNo)、MKSG経路表維持管理部62は、Multi-key Skip Graphのアルゴリズムに沿って、仮想ノードA1の挿入処理を実施する(ステップS177)。
ステップS176にて挿入処理を実行した後、ノードAは、役割に応じた処理を開始する。すなわち、パブリッシュ転送部68は、役割が「サブスクライバかつパブリッシャ」であるか否かを判断する(ステップS178)。役割が「サブスクライバかつパブリッシャ」である場合(ステップS178のYes)、パブリッシュ転送部68は、メッセージの配信を開始する(ステップS179)。役割が「サブスクライバ」である場合(ステップS178のNo)、ノードAは、メッセージが配信されるまで待機する(ステップS1710)。
ステップS177にて挿入処理を実行した後、MKSG経路表維持管理部62は、双方向リンクを形成するために通信を行うノードにキー「T_2」が割り当てられたパブリッシャが存在するかを判断する(ステップS1711)。双方向リンクを形成するために通信を行うノードにキー「T_2」が割り当てられたパブリッシャが存在する場合(ステップS1711のYes)、MKSG経路表維持管理部62は、そのパブリッシャから初期状態情報を取得する(ステップS1712)。パブリッシャ初期状態判定部63は、MKSG経路表維持管理部62で取得された初期状態情報に基づき、初期状態としてパブリッシュ開始状態とするか否かを判断する(ステップS1713)。パブリッシュ開始状態とする場合(ステップS1713のYes)、パブリッシャ状態管理部64は、パブリッシャの状態をパブリッシュ開始状態とする(ステップS1714)。パブリッシュ転送部68は、パブリッシャ状態管理部64におけるパブリッシュ開始状態に基づき、メッセージの配信を開始する(ステップS1715)。
初期状態としてパブリッシュ停止状態とする場合(ステップS1713のNo)、パブリッシャ状態管理部64は、パブリッシャの状態をパブリッシュ停止状態とする(ステップS1716)。ノードAは、パブリッシュ開始信号があるまでメッセージの配信を停止する(ステップS1717)。
ステップS1711において、双方向リンクを形成するために通信を行うノードにキー「T_2」が割り当てられたパブリッシャが存在しない場合(ステップS1711のNo)、ランデブーポイント判定部65は、自ノードがランデブーポイントに該当すると判定する(ステップS1718)。サブスクライバ存在/不在検出部66は、レベル0における隣接ノードにキー「T_1」が割り当てられたノードが存在するか否かを判断する(ステップS1719)。レベル0における隣接ノードにキー「T_1」が割り当てられたノードが存在する場合(ステップS1719のYes)、パブリッシュ開始/停止信号転送部67は、パブリッシャ状態管理部64へパブリッシャの状態がパブリッシュ開始状態である旨を通知する(ステップS1720)。パブリッシュ転送部68は、パブリッシャ状態管理部64におけるパブリッシュ開始状態に基づき、メッセージの配信を開始する(ステップS1721)。
キー「T_1」が割り当てられたサブスクライバが隣接しない場合(ステップS1719のNo)、パブリッシュ開始/停止信号転送部67は、パブリッシャ状態管理部64へパブリッシャの状態がパブリッシュ停止状態である旨を通知する(ステップS1722)。ノードAは、パブリッシュ開始信号があるまでメッセージの配信を停止する(ステップS1723)。
図19は、第2の実施形態における情報配信システムにおいて、サブスクライバS1の不在を検知し、パブリッシャP1及びパブリッシャP2によるメッセージの送信を停止する際の動作を示すシーケンス図である。また、図20は、図19に示すシーケンスを実行する際に動作する構成要素を示す図である。
まず、サブスクライバS1は、トピックTのメッセージ配信についての登録を解除する(シーケンスS191)。サブスクライバS1のMKSG経路表維持管理部62は、Multi-key Skip Graphを用い、サブスクライバS1の離脱処理を実施する(シーケンスS192)。MKSG経路表維持管理部62は、サブスクライバS1の離脱によるリンクの張り替えを、サブスクライバS1と隣接するパブリッシャP1のMKSG経路表維持管理部62へ通知する(シーケンスS193)。
パブリッシャP1のMKSG経路表維持管理部62は、サブスクライバS1から通知される情報に基づいて経路表を更新する(シーケンスS194)。パブリッシャP1のランデブーポイント判定部65は、自ノードがランデブーポイントに該当すると判定する(シーケンスS195)。サブスクライバ存在/不在検出部66は、レベル0における自身の隣接ノードにキー「T_1」が割り当てられたノードが存在する状態から存在しない状態になったか否かを判断する(シーケンスS196)。キー「T_1」が割り当てられたノードが存在する状態のままである場合(シーケンスS196のNo)、パブリッシュ開始/停止信号転送部67は、処理を終了させる。キー「T_1」が割り当てられたノードが存在する状態から存在しない状態になった場合(シーケンスS196のYes)、パブリッシュ開始/停止信号転送部67は、パブリッシャ状態管理部64へパブリッシャの状態がパブリッシュ停止状態となる旨を通知すると共に(ステップS197)、パブリッシュ停止信号をキー「T_2」が割り当てられたノードへマルチキャストする(ステップS198)。パブリッシュ転送部68は、パブリッシャ状態管理部64で管理されるパブリッシュ停止状態に基づき、メッセージの配信を停止する(ステップS199)。
パブリッシャP2は、ランデブーポイントであるパブリッシャP1からマルチキャストされるパブリッシュ停止信号を、パブリッシュ開始/停止信号転送部67により受信する。パブリッシュ開始/停止信号転送部67は、パブリッシャP2の状態がパブリッシュ停止状態となったことを、パブリッシャ状態管理部64へ通知する(シーケンスS1910)。パブリッシュ転送部68は、パブリッシャ状態管理部64で管理されるパブリッシュ停止状態に基づき、メッセージの配信を停止する(ステップS1911)。
図21は、第2の実施形態における情報配信システムにおいて、サブスクライバS1の存在を検知し、パブリッシャP1及びパブリッシャP2によるメッセージの送信を開始する際の動作を示すシーケンス図である。また、図22は、図21に示すシーケンスを実行する際に動作する構成要素を示す図である。
まず、サブスクライバS1は、トピックTについてのメッセージが配信されるように受信登録を行う(シーケンスS211)。サブスクライバS1のMKSG経路表維持管理部62は、Multi-key Skip Graphを用い、サブスクライバS1の挿入処理を実施する(シーケンスS212)。MKSG経路表維持管理部62は、サブスクライバS1の挿入によるリンクの張り替えを、サブスクライバS1と隣接するパブリッシャP1のMKSG経路表維持管理部62へ通知する(シーケンスS213)。
パブリッシャP1のMKSG経路表維持管理部62は、サブスクライバS1から通知される情報に基づいて経路表を更新する(シーケンスS214)。パブリッシャP1のランデブーポイント判定部65は、自ノードがランデブーポイントに該当すると判定する(シーケンスS215)。サブスクライバ存在/不在検出部66は、レベル0における自身の隣接ノードにキー「T_1」が割り当てられたノードが存在しない状態から存在する状態になったか否かを判断する(シーケンスS216)。キー「T_1」が割り当てられたノードが存在しない状態のままである場合(シーケンスS216のNo)、パブリッシュ開始/停止信号転送部67は、処理を終了させる。キー「T_1」が割り当てられたノードが存在しない状態から存在する状態になった場合(シーケンスS216のYes)、パブリッシュ開始/停止信号転送部67は、パブリッシャ状態管理部64へパブリッシャの状態がパブリッシュ開始状態となる旨を通知すると共に(ステップS217)、パブリッシュ開始信号をキー「T_2」が割り当てられたノードへマルチキャストする(ステップS218)。パブリッシュ転送部68は、パブリッシャ状態管理部64で管理されるパブリッシュ開始状態に基づき、メッセージの配信を開始する(ステップS219)。
パブリッシャP2は、ランデブーポイントであるパブリッシャP1からマルチキャストされるパブリッシュ開始信号を、パブリッシュ開始/停止信号転送部67により受信する。パブリッシュ開始/停止信号転送部67は、パブリッシャP2の状態がパブリッシュ開始状態となったことを、パブリッシャ状態管理部64へ通知する(シーケンスS2110)。パブリッシュ転送部68は、パブリッシャ状態管理部64で管理されるパブリッシュ開始状態に基づき、メッセージの配信を開始する(ステップS2111)。
図23は、第2の実施形態における情報配信システムにおいて、サブスクライバ不在時の不整合を解消する際の動作を示すシーケンス図である。また、図24は、図23に示すシーケンスを実行する際に動作する構成要素を示す図である。
まず、パブリッシャP1は、トピックTについてのメッセージを配信する(シーケンスS231)。
パブリッシャP2は、パブリッシュ転送部68により、パブリッシャP1からのメッセージを受信する(シーケンスS232)。パブリッシャP2のランデブーポイント判定部65は、自ノードがランデブーポイントに該当すると判定する(シーケンスS233)。不整合検出部610は、パブリッシャ状態管理部64から状態情報を読み出し(シーケンスS234)、自ノードの状態がパブリッシュ停止状態であるか否かを判断する(シーケンスS235)。自ノードの状態がパブリッシュ停止状態である場合(シーケンスS235のYes)、不整合検出部610は、不整合が発生したと判断し(シーケンスS236)、不整合是正信号転送部611に、パブリッシュを停止させる旨の不整合是正信号をパブリッシャP1へ送信させる(シーケンスS237)。自ノードの状態がパブリッシュ開始状態である場合(シーケンスS235のNo)、不整合検出部610は、処理を終了させる。
パブリッシャP1の不整合是正信号転送部611は、ランデブーポイントからの不整合是正信号を受信すると、パブリッシュを停止させる旨をパブリッシャ状態管理部64へ通知する(シーケンスS238)。パブリッシュ転送部68は、パブリッシャ状態管理部64で管理されるパブリッシュ停止状態に基づき、メッセージの配信を停止する(ステップS239)。
図25は、第2の実施形態における情報配信システムにおいて、サブスクライバ存在時の不整合を解消する際の動作を示すシーケンス図である。また、図26は、図25に示すシーケンスを実行する際に動作する構成要素を示す図である。
まず、トピックTについてのメッセージ配信に参加し、かつ、メッセージの配信を停止しているパブリッシャP1は、パブリッシュ状態確認部69により、Multi-key Skip Graphのレベル0における隣接ノードのうちキー「T_2」が付されたノードに対し、パブリッシュ停止状態か否かの問い合わせを定期的に実施する(シーケンスS251)。
パブリッシャP2は、パブリッシュ状態確認部69により、パブリッシャP1から送信される問合せを受信する(シーケンスS252)。パブリッシュ状態確認部69は、パブリッシャ状態管理部64から状態情報を読み出し(シーケンスS253)、問合せに対する応答信号を、パブリッシャP1へ送信する(シーケンスS254)。
パブリッシャP1における不整合検出部610は、自ノードの状態がパブリッシュ停止状態であるのに対し、応答信号により示されるパブリッシャP2の状態がパブリッシュ開始状態である場合、パブリッシャP1及びパブリッシャP2間の不整合を検出する(シーケンスS255)。不整合検出部610は、パブリッシュを開始させる指示の全てのパブリッシャへの通知を要求する旨の不整合是正信号を、不整合是正信号転送部611にパブリッシャP3へ送信させる(シーケンスS256)。
パブリッシャP3は、パブリッシャP2から不整合是正信号を受信すると、ランデブーポイント判定部65により、自ノードがランデブーポイントであると判定する(シーケンスS257)。サブスクライバ存在/不在検出部66は、レベル0における隣接ノードにキー「T_1」が割り当てられたノードが存在するか否かを判断する(シーケンスS258)。レベル0における隣接ノードにキー「T_1」が割り当てられたノードが存在する場合(シーケンスS258のYes)、不整合検出部610は、不整合が発生したと判断し(シーケンスS259)、不整合是正信号転送部611に、パブリッシュを開始させる信号である不整合是正信号を全てのパブリッシャへ送信させる(シーケンスS2510)。レベル0における隣接ノードにキー「T_1」が割り当てられたノードが存在しない場合(シーケンスS258のNo)、不整合検出部610は、処理を終了させる。
パブリッシャP1の不整合是正信号転送部611は、パブリッシャP3からの不整合是正信号を受信し、パブリッシャ状態管理部64へパブリッシャの状態がパブリッシュ開始状態である旨を通知する(シーケンスS2511)。パブリッシュ転送部68は、パブリッシャ状態管理部64におけるパブリッシュ開始状態に基づき、メッセージの配信を開始する(シーケンスS2512)。
以上のように、第2の実施形態では、キー生成部61は、各トピック名をキーとして生成する。そして、MKSG経路表維持管理部62は、パブリッシャの役割又はサブスクライバの役割が割り当てられたノードに対し、生成されたキーを参照してMulti-key Skip Graphを構築するようにしている。すなわち、情報配信システムは、分散トピックベースpub/subにおいて、Multi-key Skip Graphを構築するようにしている。これにより、情報配信システムは、キーであるトピックを指定して、メッセージのマルチキャストを実現することが可能となる。すなわち、情報配信システムは、転送に係る通信機器数を減らすことが可能となる。また、情報配信システムは、トピック毎の配送ツリーをトピックへの参加ノードのみで構築することが可能となる。
したがって、第2の実施形態に係る情報配信システムによれば、配送経路長を抑えることができ、かつ、無関係なトピックに関する情報の中継を避けることができる。
また、従来の技術では、以下に示す課題も存在する。すなわち、従来の技術では、サブスクライバの不在時にメッセージの配信を停止できない。そのため、パブリッシャは、サブスクライバの不在を検知する術が無いため、サブスクライバの存在/不在に関わらず、まずはメッセージを根ノードに送る必要がある。送信頻度が高いトピックの場合、サブスクライバが不在にも関わらずメッセージが送信され続けるのはネットワーク資源の浪費となり望ましくない。
また、根ノードにおいて子ノードの存在/不在からサブスクライバの不在を検出可能であるが、根ノードに全パブリッシャへのリンクを持たせると負荷が集中してしまうため、スケーラビリティが失われてしまう。
そこで、第2の実施形態では、キー生成部61は、各トピック名にパブリッシャとサブスクライバとで異なる予約語を接尾辞として付したものをキーとして生成する。MKSG経路表維持管理部62は、生成されたキーを参照し、Multi-key Skip Graph上でトピック毎にサブスクライバ同士、又は、パブリッシャ同士が隣接するようにノードを配置する。そして、サブスクライバゾーンと境界を接するパブリッシャノードであるランデブーポイントに搭載されるサブスクライバ存在/不在検出部66は、サブスクライバの存在/不在を検出するようにしている。これにより、情報配信システムは、各ノードが局所的な情報のみを保持する状況下において、分散pub/subが備えるべきスケーラビリティを損なわずに、トピック毎にサブスクライバの存在/不在を検出することが可能となる。
また、第2の実施形態では、ランデブーポイントに搭載されるパブリッシュ開始/停止信号転送部67は、サブスクライバ存在/不在検出部66で検出されたサブスクライバの存在/不在に基づき、パブリッシュ開始信号又はパブリッシュ停止信号を、トピックに係る全てのパブリッシャへ送信する。これにより、情報配信システムは、サブスクライバの不在時に、メッセージの配信を停止させることが可能となる。
また、第2の実施形態では、パブリッシャ初期状態判定部63は、自ノードがパブリッシャとしてメッセージ配信に新たに参加する場合、隣接されるパブリッシャの状態に基づき、パブリッシュ開始及びパブリッシュ停止のいずれかを初期状態として選択するようにしている。これにより、新たにメッセージ配信に参加するパブリッシャは、参加直後からメッセージの配信開始/停止に対応することが可能となる。
また、第2の実施形態では、不整合検出部610は、パブリッシュ転送部68からメッセージを受信した旨の通知を受けた際に、自ノードがランデブーポイントであり、かつ、パブリッシュ停止状態にある場合、不整合が発生したと判断する。そして、不整合是正信号転送部611は、不整合が検出されると、配信を停止させる旨の不整合是正信号を、メッセージの送り元へ送信するようにしている。これにより、情報配信システムは、サブスクライバが不在にも関わらず、メッセージを配信するパブリッシャが存在する場合、このパブリッシャにメッセージの配信を停止させることが可能となる。
また、第2の実施形態では、パブリッシュ状態確認部69は、自ノードがパブリッシュを停止している場合、隣接ノードに対してパブリッシュ停止状態であるか否かを定期的に問い合わせる。そして、不整合検出部610は、隣接ノードがパブリッシュ開始状態である場合、不整合を検出する。そして、ランデブーポイントに搭載される不整合是正信号転送部611は、隣接ノードにて不整合が生じている場合、メッセージの配信を開始する旨の不整合是正信号を他のパブリッシャへ送信するようにしている。これにより、情報配信システムは、サブスクライバが存在するにも関わらず、配信を停止しているパブリッシャが存在する場合、このパブリッシャにメッセージの配信を開始させることが可能となる。
なお、この発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
また、本発明の情報配信システムは、コンピュータとプログラムによっても実現でき、プログラムを記録媒体に記録することも、ネットワークを通して提供することも可能である。