(57)【特許請求の範囲】
【請求項１】
送信ノードを構成するコンピュータ装置と、受信ノードを構成する複数のコンピュータ装置とから構成される、１対多型メッセージ伝送システムであって、
前記受信ノードは論理的にマトリックスに配列されており、
前記送信ノードは、第１のメッセージを前記マトリックスの各列の先頭の受信ノードに送信し、第２のメッセージを前記マトリックスの各行の先頭の受信ノードに送信し、前記マトリックスの各列の最後の受信ノードから成功応答信号を受信し、前記マトリックスの各行の最後の受信ノードから成功応答信号を受信し、ある列の受信ノードから成功応答信号を受信できないときに、前記第１のメッセージを、前記マトリックスの各行の先頭又は最後の受信ノードに送信し、前記マトリックスの各行の最後又は先頭の受信ノードから成功応答信号を受信し、ある行の受信ノードから成功応答信号を受信できないときに、前記第２のメッセージを、前記マトリックスの各列の先頭又は最後の受信ノードに送信し、各列の最後又は先頭の受信ノードから成功応答信号を受信し、
前記受信ノードは、受信した第１のメッセージを同一列の次の受信ノードに転送し、各列の最後の受信ノードが前記送信ノードに成功応答信号を送信し、受信した第２のメッセージを同一行の次の受信ノードに転送し、各行の最後の受信ノードが前記送信ノードに成功応答信号を送信する、
ことを特徴とする、１対多型メッセージ伝送システム。
【請求項２】
前記送信ノードは、
ある列の受信ノードとある行の受信ノードから成功応答信号を受信できないときに、その行と列の交点にある受信ノードが故障していると判別する、
ことを特徴とする、請求項１に記載の１対多型メッセージ伝送システム。
【請求項３】
前記送信ノードは、
ある列の受信ノードとある行の受信ノードとの一方のみから成功応答信号を受信できず、他の列及び行の受信ノードから成功応答信号を受信できた場合において、
前記ある列の受信ノードから該成功応答信号を受信できないときは、前記第１又は第２のメッセージを前記マトリックスの各行の先頭又は最後の受信ノードに再送信して、該成功応答信号を受信できない行と前記ある列との交点にある受信ノードを、障害の発生した受信ノードとして特定する手段と、
前記ある行の受信ノードから該成功応答信号を受信できないときは、前記第１の又は第２のメッセージを前記マトリックスの各列の先頭又は最後の受信ノードに再送信して、該成功応答信号を受信できない列と前記ある行との交点にある受信ノードを、障害の発生した受信ノードとして特定する手段を備える、
ことを特徴とする、請求項１又は２に記載の１対多型メッセージ伝送システム。
【請求項４】
前記送信ノードは、論理的マトリックスの構造を定義する定義情報を格納しており、前記第１のメッセージの伝送ルートを定義する第１のルート情報を前記第１のメッセージに付加して前記受信ノードに供給し、前記第２のメッセージの伝送ルートを定義する第２のルート情報を第２のメッセージに付加して前記受信ノードに供給し、
前記受信ノードは、受信した第１又は第２のメッセージに付加されている第１又は第２のルート情報に従って、第１又は第２のメッセージを伝送する、
ことを特徴とする、請求項１乃至３のいずれか１項に記載の１対多型メッセージ伝送システム。
【請求項５】
前記送信ノードは、送信対象のメッセージを分割して第１と第２のメッセージを生成する手段又は送信対象のメッセージを分類して第１と第２のメッセージを生成する手段を備える、
ことを特徴とする、請求項１乃至４のいずれか１項に記載の１対多型メッセージ伝送システム。
【請求項６】
論理的にマトリックス状に配列されたコンピュータにメッセージを伝送するためのコンピュータ装置であって、
第１のメッセージを論理的にマトリックス状に配列されている受信ノードのうちの各列の先頭の受信ノードに送信する手段と、
第２のメッセージを前記マトリックス状の配列されている受信ノードのうちの各行の先頭の受信ノードに送信する手段と、
前記マトリックスの各列の最後の受信ノードから成功応答信号を受信する手段と、
前記マトリックスの各行の最後の受信ノードから成功応答信号を受信する手段と、
ある列の受信ノードから成功応答信号を受信できないときに、前記第１のメッセージを、前記マトリックスの各行の先頭又は最後の受信ノードに送信し、前記マトリックスの各行の最後又は先頭の受信ノードから成功応答信号を受信する手段と、
ある行の受信ノードから成功応答信号を受信できないときに、前記第２のメッセージを、前記マトリックスの各列の先頭又は最後の受信ノードに送信し、各列の最後又は先頭の受信ノードから成功応答信号を受信する手段と、
を備えるコンピュータ装置。
【請求項７】
第１のメッセージを論理的にマトリックス状に配列された受信ノードのうちの各列の先頭の受信ノードに送信し、第２のメッセージを前記マトリックス状に配列された受信ノードのうちの各行の先頭の受信ノードに送信し、
前記論理的マトリックスの各列を構成する受信ノード間で、受信した第１のメッセージを順次転送し、各列の最後の受信ノードがメッセージの受信に成功したときに、成功応答信号を出力し、
前記論理的マトリックスの各行を構成する受信ノード間で、受信した第２のメッセージを順次転送し、各行の最後の受信ノードがメッセージの受信に成功したときに、成功応答信号を出力し、
ある列の受信ノードから成功応答信号を受信できないときに、前記第１のメッセージを、前記マトリックスの各行の先頭又は最後の受信ノードに送信し、前記マトリックスの各行の最後又は先頭の受信ノードから成功応答信号を受信し、
ある行の受信ノードから成功応答信号を受信できないときに、前記第２のメッセージを、前記マトリックスの各列の先頭又は最後の受信ノードに送信し、各列の最後又は先頭の受信ノードから成功応答信号を受信する、
ことを特徴とする、１対多型メッセージ伝送方法。
【請求項８】
コンピュータを、
第１のメッセージを論理的にマトリックス状に配列されている受信ノードの各列の先頭の受信ノードに送信し、第２のメッセージを前記マトリックス状に配列されている受信ノードの各行の先頭の受信ノードに送信し、前記マトリックスの各行と各列の最後の受信ノードから成功応答信号を受信し、ある列の受信ノードから成功応答信号を受信できないときに、前記第１のメッセージを、前記マトリックスの各行の先頭又は最後の受信ノードに送信し、前記マトリックスの各行の最後又は先頭の受信ノードから成功応答信号を受信し、ある行の受信ノードから成功応答信号を受信できないときに、前記第２のメッセージを、前記マトリックスの各列の先頭又は最後の受信ノードに送信し、各列の最後又は先頭の受信ノードから成功応答信号を受信する、
送信ノードとして機能させる、ことを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、１対多のメッセージ伝送システムに関する。
【背景技術】
【０００２】
複数のコンピュータ(ノード)を使用する分散アプリケーションにおいては、ノード間でメッセージ(アプリケーションデータ)を送受信する必要がある。そして、メッセージを、確実に届けること(高信頼なメッセージ送受信)が要求される。インターネット上で１対１のノード間で高信頼なメッセージ送受信を実現するための技術として、HTTPR(HTTP Reliable)、ebXML Message Service、WS-ReliableMessaging、WS-Reliability等が提案されている。
【０００３】
これらの技術の基本原理は、図１２に示すように、受信ノードがメッセージの応答確認(ＡＣＫと呼ばれる)を送信ノードに送信し、それをもとに送信ノードがメッセージ送達を確認するというポジティブ応答確認である。
【０００４】
一方、アプリケーションによっては、１対多のノード間での高信頼なメッセージ送受信が望まれる場合がある。この場合に、ポジティブ応答確認を原理とする上述の技術を使用すると、図１３に示すように、受信ノードの数が増加すると送信ノードへのＡＣＫの送信数が爆発的に増加するという「応答爆発」という問題が発生する。つまり、ＡＣＫの増加により、送信ノードの負荷が激増し、受信ノード数に対してスケーラブルでなくなってしまうという問題が発生する。
【０００５】
応答爆発の問題を解決しうる技術として、（１）木構造ＡＣＫ方式、（２）ネガティブ応答確認〈ＮＡＣＫ)方式、（３）冗長送信/前方誤り訂正(FEO=Forward Error Correction)方式等が知られている。
【０００６】
木構造ＡＣＫ方式は、図１４に示すように、受信ノードを木構造に配置し、各階層の上位ノードが下位ノードからの応答確認を集約することによって、送信ノードへの応答確認の数を減少させる方法である。各送信ノードは、一定時間ＡＣＫを受信できなかった場合には、その受信ノードに、木構造に従ってメッセージを再送する（例えば、非特許文献１参照）。
【０００７】
また、ネガティブ応答確認〈ＮＡＣＫ)方式は、受信ノードがメッセージを受信できなかったことを、送信ノードまたは他の受信ノードに通知する方法である(非特許文献２）。この方法は、一般にＮＡＣＫの発生頻度がＡＣＫに比べて低いことを考慮しており、確率的に応答爆発を抑えることができる。各送信ノードは、ＮＡＣＫを受信した場合にのみ、その受信ノードに、メッセージを再送する。
【０００８】
冗長送信/前方誤り訂正(FEO=Forward Error Correction)方式は、送信ノードが同一のメッセージを複数回送信したり、オリジナルメッセージと前方誤り訂正符号とを一緒に送受信することにより、受信したメッセージから受信できなかったメッセージを再構成できるようにし、メッセージの再送をなくす方法である(非特許文献３）。
【非特許文献１】TRAM: A Tree-based Reliable Multicast Protocol, Sun Microsystems Laboratory, 1998http://research.sun.com/technical-reports/1998/abstract-66.html
【非特許文献２】Negative-ACKnowledgment (NACK)-Oriented Reliable Multicast (NORM)Protocol, lETF RFC3940, 2004http=//www.ietf.org/rfc/rfc3940.txt
【非特許文献３】The Use of Forward Error Correction (FEC) in Reliable Multicast, IETF RFC3453,2002http://www.ietf.org/rfc/rfc3453.txt
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記木構造ＡＣＫ方式では、送信ノードに近い受信ノードで障害が発生すると、多くの受信ノードに影響する。また、障害が発生していない正常なノードに対してもメッセージ送受信が途絶えることとなる。また、送信ノードはＡＣＫが帰ってこない木構造のリーフを構成するノードグループ全体の受信状況を把握することはできるが、すべての受信ノード個々の受信状況を把握できない。
【００１０】
また、ネガティブ応答確認(ＮＡＣＫ)方式では、ポジティブ応答確認(ＡＣＫ)が明示的に送信されないため、ＮＡＣＫが送受信できなかった場合には、正常に送受信がされていないにもかかわらず、送受信されたとみなされてしまう。よって、ＮＡＣＫの送受信自体を確実に行える仕組みが必要となる。また、送信ノードは、一定時間ＮＡＣＫが来ないことで受信ノードの受信状況を把握することになるが、ＮＡＣＫでは確実に受信ノードがメッセージを受信したことを確認することはできない。
【００１１】
冗長送信/前方誤り訂正(FEC)方式では、いくら冗長に送信したとしても、確実にメッセージが送受信されたことを保証することはできない。メッセージ送受信が「確実に」行われることを考えた場合においても、受信側がメッセージ受信できるほどの冗長な送信をする必要があり、効率的とは言えない。また、送信ノードが受信ノードの受信状況を把握することもできない。
【００１２】
本発明は、上記問題に鑑みてなされたものであり、１対多のメッセージ伝送において、[ａ]応答爆発を起こすことなくメッセージを複数の受信ノードに送信でき、[ｂ]受信ノードのメッセージ受信状況を把握でき、[ｃ]ノード障害発生時にもその影響を小さく抑えることが可能なメッセージ伝送を可能とすることを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、この発明の第１の観点に係る管制指示生成装置は、
送信ノードを構成するコンピュータ装置と、受信ノードを構成する複数のコンピュータ装置とから構成される、１対多型メッセージ伝送システムであって、
前記受信ノードは論理的にマトリックスに配列されており、
前記送信ノードは、第１のメッセージを前記マトリックスの各列の先頭の受信ノードに送信し、第２のメッセージを前記マトリックスの各行の先頭の受信ノードに送信し、前記マトリックスの各列の最後の受信ノードから成功応答信号を受信し、前記マトリックスの各行の最後の受信ノードから成功応答信号を受信し、ある列の受信ノードから成功応答信号を受信できないときに、前記第１のメッセージを、前記マトリックスの各行の先頭又は最後の受信ノードに送信し、前記マトリックスの各行の最後又は先頭の受信ノードから成功応答信号を受信し、ある行の受信ノードから成功応答信号を受信できないときに、前記第２のメッセージを、前記マトリックスの各列の先頭又は最後の受信ノードに送信し、各列の最後又は先頭の受信ノードから成功応答信号を受信し、
前記受信ノードは、受信した第１のメッセージを同一列の次の受信ノードに転送し、各列の最後の受信ノードが前記送信ノードに成功応答信号を送信し、受信した第２のメッセージを同一行の次の受信ノードに転送し、各行の最後の受信ノードが前記送信ノードに成功応答信号を送信する、
ことを特徴とする。
【００１４】
前記送信ノードは、例えば、ある列の受信ノードとある行の受信ノードから成功応答信号を受信できないときに、その行と列の交点にある受信ノードが故障していると判別する。
【００１６】
前記送信ノードは、例えば、ある列の受信ノードとある行の受信ノードとの一方のみから成功応答信号を受信できず、他の列及び行の受信ノードから成功応答信号を受信できた場合において、前記ある列の受信ノードから該成功応答信号を受信できないときは、前記第１又は第２のメッセージを前記マトリックスの各行の先頭又は最後の受信ノードに再送信して、該成功応答信号を受信できない行と前記ある列との交点にある受信ノードを、障害の発生した受信ノードとして特定する手段と、前記ある行の受信ノードから該成功応答信号を受信できないときは、前記第１の又は第２のメッセージを前記マトリックスの各列の先頭又は最後の受信ノードに再送信して、該成功応答信号を受信できない列と前記ある行との交点にある受信ノードを、障害の発生した受信ノードとして特定する手段を備えてもよい。
【００１７】
例えば、前記送信ノードは、論理的マトリックスの構造を定義する定義情報を格納しており、前記第１のメッセージの伝送ルートを定義する第１のルート情報を前記第１のメッセージに付加して前記受信ノードに供給し、前記第２のメッセージの伝送ルートを定義する第２のルート情報を第２のメッセージに付加して受信ノードに供給し、前記受信ノードは、受信した第１又は第２のメッセージに付加されている第１又は第２のルート情報に従って、第１又は第２のメッセージを伝送する。
【００１８】
前記送信ノードは、送信対象のメッセージを分割して第１と第２のメッセージを生成する手段又は送信対象のメッセージを分類して、第１と第２のメッセージを生成する手段を備えてもよい。
【００１９】
上記目的を達成するため、この発明の第２の観点に係るコンピュータ装置は、
論理的にマトリックス状に配列されたコンピュータにメッセージを伝送するためのコンピュータ装置であって、
第１のメッセージを論理的にマトリックス状に配列されている受信ノードのうちの各列の先頭の受信ノードに送信する手段と、
第２のメッセージを前記マトリックス状の配列されている受信ノードのうちの各行の先頭の受信ノードに送信する手段と、
前記マトリックスの各列の最後の受信ノードから成功応答信号を受信する手段と、
前記マトリックスの各行の最後の受信ノードから成功応答信号を受信する手段と、
ある列の受信ノードから成功応答信号を受信できないときに、前記第１のメッセージを、前記マトリックスの各行の先頭又は最後の受信ノードに送信し、前記マトリックスの各行の最後又は先頭の受信ノードから成功応答信号を受信する手段と、
ある行の受信ノードから成功応答信号を受信できないときに、前記第２のメッセージを、前記マトリックスの各列の先頭又は最後の受信ノードに送信し、各列の最後又は先頭の受信ノードから成功応答信号を受信する手段と、
を備える。
【００２０】
上記目的を達成するため、この発明の第３の観点に係る１対多型メッセージ伝送方法は、
第１のメッセージを論理的にマトリックス状に配列された受信ノードのうちの各列の先頭の受信ノードに送信し、第２のメッセージを前記マトリックス状に配列された受信ノードのうちの各行の先頭の受信ノードに送信し、
前記論理的マトリックスの各列を構成する受信ノード間で、受信した第１のメッセージを順次転送し、各列の最後の受信ノードがメッセージの受信に成功したときに、成功応答信号を出力し、
前記論理的マトリックスの各行を構成する受信ノード間で、受信した第２のメッセージを順次転送し、各行の最後の受信ノードがメッセージの受信に成功したときに、成功応答信号を出力し、
ある列の受信ノードから成功応答信号を受信できないときに、前記第１のメッセージを、前記マトリックスの各行の先頭又は最後の受信ノードに送信し、前記マトリックスの各行の最後又は先頭の受信ノードから成功応答信号を受信し、
ある行の受信ノードから成功応答信号を受信できないときに、前記第２のメッセージを、前記マトリックスの各列の先頭又は最後の受信ノードに送信し、各列の最後又は先頭の受信ノードから成功応答信号を受信する、
ことを特徴とする。
【００２１】
上記目的を達成するため、この発明の第４の観点に係るコンピュータプログラムは、
コンピュータを、
第１のメッセージを論理的にマトリックス状に配列されている受信ノードの各列の先頭の受信ノードに送信し、第２のメッセージを前記マトリックス状に配列されている受信ノードの各行の先頭の受信ノードに送信し、前記マトリックスの各行と各列の最後の受信ノードから成功応答信号を受信し、ある列の受信ノードから成功応答信号を受信できないときに、前記第１のメッセージを、前記マトリックスの各行の先頭又は最後の受信ノードに送信し、前記マトリックスの各行の最後又は先頭の受信ノードから成功応答信号を受信し、ある行の受信ノードから成功応答信号を受信できないときに、前記第２のメッセージを、前記マトリックスの各列の先頭又は最後の受信ノードに送信し、各列の最後又は先頭の受信ノードから成功応答信号を受信する、
送信ノードとして機能させる、ことを特徴とする。
【発明の効果】
【００２２】
上記構成とすることにより、[ａ]応答爆発を起こすことなくメッセージを複数の受信ノードに送信でき、[ｂ]受信ノードのメッセージ受信状況を成功応答信号から把握でき、[ｃ]ノード障害発生時に、メッセージを再送信する等して、影響を小さく抑えることが可能となる。
【発明を実施するための最良の形態】
【００２３】
以下、この発明の実施の形態に係る高信頼メッセージマルチキャストシステムについて説明する。
【００２４】
本発明の実施の形態に係る高信頼メッセージマルチキャスト送受信システムは、図１に示すように、通信ネットワークＮ１により相互に接続されたコンピュータ装置１１から構成される。
【００２５】
コンピュータ装置１１は、通信ネットワークＮ１により相互に接続され、それぞれ、通信ノードとして機能する。
このうちの任意の１台のコンピュータ装置１１が、メッセージを送信する送信ノードとなり、残りの任意の複数台のコンピュータ装置１１が送信ノードからメッセージを受信する受信ノードとなる。
各コンピュータ装置１１は、メッセージや作業の内容に応じて、適宜、送信ノードとなることも受信ノードとなることもあり、送信ノードと受信ノードの組み合わせも台数も適宜変更・設定される。
【００２６】
次に、上記構成のメッセージマルチキャストシステムにおける、メッセージ送受信のシステム全体の手順を説明する。
コンピュータ装置１１の物理的な接続・配置構成とは別に、
複数のコンピュータ装置１１のうちの１台が送信ノード、他の任意の複数台数のコンピュータ装置１１が受信ノードとなる。
ここでは、理解を容易にするため、受信ノードを２５台とする。
【００２７】
送信ノードは、物理的な構成とは別に、受信ノードの論理的なメッシュ構成を保持する。論理的な構成なので物理的な構成には依存しない。
図２（ａ）はメッシュ構成の例を示しており、２５個の受信ノードを、５行×５列の二次元のメッシュ状（マトリックス）に配置する。
【００２８】
このメッシュ状の横軸のグルーピングをＸグループ（行列の列）とよび、個別には、グループａ〜ｅ（ａ列〜ｅ列）とする。また、縦軸のグルーピングをＹグループ（行列の行）と呼び、個別には、グループＡ〜Ｅ（Ａ〜Ｅ行）とする。
【００２９】
送信ノードは、図２（ｂ）に示すように、このメッシュ構成を定義するテーブルを保持している。
【００３０】
送信ノードは、送信するメッセージ２つを１組とし、１つをＸグループの各グループに、もう１つをＹグループの各グループに送信する。このとき、送信する１つのメッセージを２つに分割して送信してもよい。
【００３１】
[メッセージの送受信]
２つのメッセージをそれぞれＭＳＧ-１、ＭＳＧ-２とした場合、送信ノードは、図 ３（ａ）に例示するように、メッセージＭＳＧ-１をＸグループの各グループａ〜ｅ（列）に送信し、図３（ｂ）に示すように、メッセージＭＳＧ-２をＹグループの各グループＡ〜Ｅ（行）に送信する。
【００３２】
各グループのノードは、バケツリレー式に同一グループに属する受信ノード間でメッセージを配達していく。各グループの最後の受信ノードは、配達されたメッセージ(ＭＳＧ-１またはＭＳＧ-２)を送信ノードに配達する。
【００３３】
これが各グループのポジティブ応答確認(受信応答；ＡＣＫ)の役割を果たす。なお、配達されたメッセージをＡＣＫの代用とするのではなく、最後の受信ノードが別途ＡＣＫメッセージを送信ノードに送信してもよい。
【００３４】
送信ノードは、送信するメッセージに、ノード配置テーブルＴＮをもとにバケツリレーするルートを示す情報を付加する。たとえば、ＳＯＡＰ（Simple Object Access Protocol)仕様に基づくメッセージでは、ＳＯＡＰへッダ要素にルーテイング情報として辿るノードリストを付加する。
例えば、送信ノードは、グループａ〜ｅに送信するメッセージＭＳＧ-１に図４（ａ）に示すルート情報を付加する。
また、送信ノードは、グループＡ〜Ｅに送信するメッセージＭＳＧ-２に図４（ｂ）に示すルート情報を付加する。
【００３５】
各受信ノードは、受信したメッセージに付加されているルート情報に従って、受信したメッセージを次のノードに送信する。例えば、受信ノードＲ２は、送信ノードより、メッセージＭＳＧ-１を直接受信し、付加されているルート情報「Ｒ２→Ｒ７→Ｒ１２→Ｒ１７→Ｒ２２→Ｓ」より、自己（Ｒ２）の次の受信ノードＲ７を特定し、ノードＲ７にメッセージＭＳＧ-１を送信する。同様に、受信ノードＲ２は、ノードＲ２ノードより、メッセージＭＳＧ-２を受信し、付加されているルート情報「Ｒ１→Ｒ２→Ｒ３→Ｒ４→Ｒ５→Ｓ」より、自己（Ｒ２）の次の受信ノードＲ３を特定し、ノードＲ３にメッセージＭＳＧ-１を送信する。
同様に、例えば、受信ノードＲ２５は、メッセージＭＳＧ-１とＭＳＧ-２を受信すると、ヘッダに付加されているルート情報、自己（Ｒ２５）の次のノードが送信ノードＳであることを特定し、送信ノードＳにメッセージＭＳＧ-１とＭＳＧ-２を送信する。
【００３６】
[送信ノードによる受信ノードの受信状況の把握]
送信ノードにおいて、受信ノードのメッセージの受信状況を把握する。
上記のようなメッセージ送信形態をとった際に、１つのメッセージ(ＭＳＧ-１)のみでは、受信ノードの受信状況を把握することができない。例えば、図５に示すように、ノードＲ１８において、障害が発生したとする。その場合、ＭＳＧ-１の送信において、グループｃの応答確認メッセージ(受信ノードＲ２３から送信ノードＳに送られるメッセージ)が送られない。よって、グループｃの各受信ノードにはＭＳＧ-１が（完全には）届いていないということが送信ノードで把握できる。
【００３７】
同様に、送信ノードは、他のメッセージＭＳＧ-２に関するＡＣＫから、グループＤにはＭＳＧ-２が届いていないということを把握できる。この関係により、グループｃとグループＤに属するノードＲ１８が故障していることも把握できる。即ち、送信ノードは、各受信ノードがメッセージを受信できたかどうかを、各グループの最終ノードからのメッセージを受信することのみで判断できる。
【００３８】
なお、メッセージＭＳＧ-１の送信とメッセージＭＳＧ-２の送信の間にノード障害が発生した場合は、受信確認ができなかった未送信メッセージを再送することにより、受信状況が把握できる。この点は後述する。
【００３９】
また、未送信メッセージの再送受信ノードで障害が発生した場合、障害が発生していないノード(グループｃ、グループＤのノードでＲ１８以外のノード)へのメッセージ送信が必要である。図５に示したノードＲ１８の障害の例では、障害が発生していないノードＲ２３へのメッセージＭＳＧ-１、ノードＲ１９とＲ２０へのメッセージの送信が必要となる。よって、ノードＲ１９,Ｒ２０にはメッセージＭＳＧ-２を、ノードＲ２３にはメッセージＭＳＧ-１を再送する必要がある。ただし、送信ノードＳは、グループｃ内のすべてのノードにメッセージＭＳＧ-１が届けられておらず、グループＤ内のすべてのノードにメッセージＭＳＧ-２が届けられていないとして受信状況を把握する。
【００４０】
そこで、送信ノードＳは、故障ノードをルーテイングから外すと共に、組となっているメッセージ(ＭＳＧ-１、ＭＳＧ-２)を、最初に送ったグループとは逆のグループに対してかつ、逆の方向からメッセージを再送する。つまり、ＭＳＧ-１をＹグループの各グループに、ＭＳＧ-２をＸグループの各グループに前回とは逆の方向に送信する。そうすることにより、ノードＲ１９, Ｒ２０にはＭＳＧ-２が、ノードＲ２３にはＭＳＧ-１が配達され、障害のないノードにはメッセージが配達される。
【００４１】
具体的に説明すると、メッセージＭＳＧ-１に、グループＡの受信ノードを逆順に辿るための「Ｒ５→Ｒ４→Ｒ３→Ｒ２→Ｒ１→Ｓ」という付加情報を付加し、グループＡの受信ノードＲ５に送信する。同様に、メッセージＭＳＧ-２に、グループＢの受信ノードを逆順に辿るための「Ｒ５→Ｒ４→Ｒ３→Ｒ２→Ｒ１→Ｓ」という付加情報を付加し、グループＢの受信ノードＲ１０に送信する。グループＣ〜Ｅについても同様である。また、メッセージＭＳＧ-２に、グループａの受信ノードを逆順に辿るための「Ｒ２１→Ｒ１６→Ｒ１１→Ｒ６→Ｒ１→Ｓ」という付加情報を付加し、グループａの受信ノードＲ５に送信する。グループｂ〜ｅについても同様である。なお、送信ノードは、図４（ｃ）、（ｄ）に示すように、この異常発生時用の、ルート情報を予め用意しておく。
【００４２】
そして、各グループの最終ノードが送信側にメッセージを送信するため、送信ノードは、故障していないノードへのメッセージＭＳＧ-１, ＭＳＧ-２の送信（到着）が確認できる。また、この間、すでにＭＳＧ-１やＭＳＧ-２を受信しているノードは、ルーティング情報に合わせてメッセージをリレーするのみである。
【００４３】
このようなメッセージの送受信方法により、最初に送信したメッセージＭＳＧ-１の送信と次のメッセージＭＳＧ-２の送信の間でノード障害が発生した場合でも、再送が可能となる。たとえばメッセージＭＳＧ-１はすべてのグループに対して送信が成功し、その後メッセージＭＳＧ-２を送信して、このメッセージのグループＤの送信が失敗した場合、ノードＲ１６, Ｒ１７, Ｒ１８, Ｒ１９, Ｒ２０のうちのすべてか一部に送信ができていないことになる。この場合においても、Ｘグループ単位でも逆方向からのメッセージ再送により、障害ノード以外のノードへのメッセージ送信が行え、さらに、再送の結果から障害ノードを特定することができる。以上の方法により、高信頼な１対多のメッセージ送受信が実現できる。
【００４４】
以上説明したように、本実施の形態のメッセージ伝送システムにより、（１）応答爆発を起こすことなく同一メッセージを複数の受信ノードに確実に送信でき、（２）送信ノードが受信ノードのメッセージ受信状況(送信できたかどうか)を把握でき、（３）ノード障害発生時にもその影響を最小限に抑え、メッセージ送受信を続けることができる。さらに、１対多の高信頼メッセージ送受信においても、システム全体で負荷が分散でき、送信ノードに高性能が要求されない。
【００４５】
次に、上記の全体の送受信としてのメッセージの伝送処理を可能とするための、各送信ノード及び受信ノードの構成と動作を説明する。
【００４６】
コンピュータ装置１１は、物理的には、図６に示すように、通信装置２１と、制御装置２２と、記憶装置２３と、入力装置２４と、出力装置２５とから構成される。
【００４７】
通信装置２１は、他のコンピュータ装置１１と通信ネットワークＮ１を介して通信を行うためのインターフェイスである。例えば、NIC（Network Interface Card）等から構成される。
【００４８】
制御装置２２は、例えば、CPU（Central Processing Unit：中央演算処理装置）やワークエリアとなるRAM（Random Access Memory）などから構成され、後述する各通信制御処理を実行する。
【００４９】
記憶装置２３は、内蔵ハードディスク装置等から構成され、制御装置２２の処理プログラムや各種のデータを保管する。
記憶装置２３には、このコンピュータ装置１１が送信ノードとなる際の、受信ノードのマトリックス情報（図３（ｂ））とルート情報（図４（ａ）〜（ｄ））が登録されている。
【００５０】
入力装置２４は、キーボード、マウスなどを含み、種々の情報を制御装置２２に供給する。
出力装置２５は、表示装置やプリンタから構成、種々の情報を画面に表示し、或いは、ハードコピーを生成する。
【００５１】
図１に示す通信ネットワークＮ１は、例えば、TCP／IP（Transmission Control Protocol／Internet Protocol）などといった所定の通信プログラムに基づいてデータ伝送をおこなうネットワークであり、例えばLAN（Local  Area  Network）等から構成される。
【００５２】
次に、送信ノードとして機能するコンピュータ装置１１の動作を図７を参照して説明する。
まず、制御装置２２は、送信対象のメッセージを第１のメッセージＭＳＧ-１と第２のメッセージＭＳＧ-２に分割（分類）する（ステップＳ１１）。例えば、送信メッセージが１つだけの場合には、１つのメッセージを分割して、第１のメッセージＭＳＧ-１と第２のメッセージＭＳＧ-２とを生成する。また、送信メッセージが複数ある場合には、第１のメッセージＭＳＧ-１と第２のメッセージＭＳＧ-２とにグループ分けする。
【００５３】
続いて、制御装置２２は、記憶装置２３から、通常時Ｘグループ用ルート情報を読み出し、第１のメッセージＭＳＧ-１のヘッダ情報に付加して送信する（ステップＳ１２）。具体的には、第１のメッセージＭＳＧ-１のヘッダ情報にグループａ用のルート情報を付加して、受信ノードＲ１に送信し、第１のメッセージＭＳＧ-１のヘッダ情報にグループｂ用のルート情報を付加して、受信ノードＲ２に送信し、．．．第１のメッセージＭＳＧ-１のヘッダ情報にグループｅ用のルート情報を付加して、受信ノードＲ５に送信する。その後、タイムアウト用の計時を開始する。
【００５４】
続いて、制御装置２２は、記憶装置２３から、通常時Ｙグループ用ルート情報を読み出し、第２のメッセージＭＳＧ-２のヘッダ情報に付加して送信する（ステップＳ１３）。具体的には、第２のメッセージＭＳＧ-２のヘッダ情報にグループＡ用のルート情報を付加して、受信ノードＲ１に送信し、第２のメッセージＭＳＧ-２のヘッダ情報にグループＢ用のルート情報を付加して、受信ノードＲ６に送信し、．．．第２のメッセージＭＳＧ-２のヘッダ情報にグループＥ用のルート情報を付加して、受信ノードＲ２１に送信する。その後、タイムアウト用の計時を開始する。
【００５５】
続いて、制御装置２２は、各グループからのＡＣＫ（送信した第１のメッセージＭＳＧ-１又は第２のメッセージＭＳＧ-２）の受信を待機する（ステップＳ１４，Ｓ１５）。
【００５６】
この間、送信したメッセージは、受信ノードを順次転送され、各グループの最後の受信ノードから送信ノードに返送される。
規定時間内に、全てのＡＣＫを受信すると（ステップＳ１４；Ｙｅｓ）、正常にメッセージの全受信ノードへの送信が完了したと判別される（ステップＳ１６）。
【００５７】
一方、規定時間内に、少なくとも１つのＡＣＫを受信できなかった場合（ステップＳ１４；Ｎｏ、ステップＳ１５；Ｙｅｓ）、まず、異常状態の（故障した）ノードを特定する（ステップＳ１７）。
【００５８】
具体的に説明すると、制御装置２２は、図８に示すように、受信できないＡＣＫが、第１のメッセージＭＳＧ-１に対応するもの（Ｘグループからのもの）と、第２のメッセージＭＳＧ-２に対応するもの（Ｙグループからのもの）を両方をであるか否かを判別する（ステップＳ２１）。
【００５９】
ＡＣＫを受信できないグループがＸグループとＹグループの両方であると判別した場合（ステップＳ２１；Ｙｅｓ）、ＡＣＫを受信できないＸグループと、ＡＣＫを受信できないＹグループとの交点に位置するノードが故障（異常）であると判別する（ステップＳ２２）。例えば、Ｘグループのうちのグループｂと、ＹグループのうちのグループｂからＡＣＫを受信できていない場合には、その交点に位置するノードＲ７が異常（故障）であると判別する。
【００６０】
ＡＣＫを受信できないグループがＸグループとＹグループの一方であると判別した場合（ステップＳ２１；Ｎｏ）、そのグループ内のいずれかのノードが異常（故障）であると判別する（ステップＳ２３）。
【００６１】
なお、上述のように、Ｘグループ内のグループａ〜ｅと、Ｙグループ内のグループＡ〜Ｅ、のいずれかのみからＡＣＫを受信できない場合は、あるノードが一方のメッセージを転送した後に、故障した場合であると想定される。この場合には、例えば、図９の処理を行って、故障したノードを特定してもよい。
【００６２】
即ち、ＡＣＫを受信できないグループがＸグループ内のグループａ〜ｅであるか、Ｙグループ内のグループＡ〜Ｅのいずれかであるかを判別する（ステップＳ３１）。
【００６３】
ＡＣＫを受信できないグループがＸグループ内のグループａ〜ｅのいずれかである場合には、改めて、Ｙグループ内のグループＡ〜Ｅにメッセージを送信し（ステップＳ３２）、ＡＣＫを受信できないグループがＹグループ内のグループＡ〜Ｅのいずれかである場合には、改めて、Ｘグループ内のグループａ〜ｅにメッセージを送信する（ステップＳ３３）。
【００６４】
制御装置２２は、この処理により、送信されてくるＡＣＫを受信し、Ｘグループ内のＡＣＫを受信できないグループとＹグループ内のＡＣＫを受信できないグループとを特定し、故障箇所の判別を行う。
【００６５】
一方、図７のステップＳ１７で異常ノードを特定した後、制御装置２２は、ＡＣＫを受信できななかったメッセージを再送信する処理を行う（ステップＳ１８）。
この処理の詳細を図１０を参照して説明する。
【００６６】
まず、制御装置２２は、Ｘグループ内のグループａ〜ｅからＡＣＫを受信できていないかを判別する（ステップＳ４１）。
【００６７】
Ｘグループ内のグループａ〜ｅのいずれかからＡＣＫを受信できていない場合（ステップＳ４１；Ｙｅｓ）、ステップＳ４２に進む。一方、Ｘグループ内の全てのグループａ〜ｅからＡＣＫを受信できている場合（ステップ４１；Ｎｏ）、ステップＳ４２をスキップする。
【００６８】
ステップＳ４２では、記憶装置２３から、異常時用Ｙグループルート情報を読み出し、メッセージＭＳＧ-１のヘッダに付加して送信する（ステップＳ４２）。
【００６９】
具体的には、第１のメッセージＭＳＧ-１のヘッダ情報に、グループＡ用のルート情報（Ｒ５→Ｒ４→Ｒ３→Ｒ２→Ｒ１→Ｓ）を付加して、受信ノードＲ５に送信し、第１のメッセージＭＳＧ-１のヘッダ情報にグループＢ用のルート情報（Ｒ１０→Ｒ９→Ｒ８→Ｒ７→Ｒ６→Ｓ）を付加して、受信ノードＲ１０に送信する。グループＣ〜Ｅについても同様である。
【００７０】
次に、制御装置２２は、Ｙグループ内のいずれかのグループＡ〜ＥのいずれかからＡＣＫを受信できていないかを判別する（ステップ４３）。
【００７１】
Ｙグループ内のいずれかのグループＡ〜ＥのいずれかからＡＣＫを受信できていない場合（ステップＳ４３；Ｙｅｓ）、ステップＳ４４に進む。一方、Ｙグループ内の全てのグループＡ〜ＥからＡＣＫを受信できている場合（ステップ４３；Ｎｏ）、ステップＳ４４をスキップする。
ステップＳ４４では、記憶装置２３から、異常時用Ｘグループルート情報を読み出し、メッセージＭＳＧ-２のヘッダに付加して送信する（ステップＳ４２）。
【００７２】
具体的には、第２のメッセージＭＳＧ-２のヘッダ情報に、グループａ用のルート情報（Ｒ２１→Ｒ１６→Ｒ１１→Ｒ６→Ｒ１→Ｓ）を付加して、受信ノードＲ２１に送信する。また、第２のメッセージＭＳＧ-２のヘッダ情報に、グループｂ用のルート情報（Ｒ２２→Ｒ１７→Ｒ１２→Ｒ７→Ｒ２→Ｓ）を付加して、受信ノードＲ２２に送信する。グループｃ〜ｅについても同様である。
【００７３】
このようにして、故障したノード以外に確実にメッセージを伝送できる。
【００７４】
一方、受信ノードは、メッセージを受信すると、図１１に示す転送処理を開始する。まず、受信したメッセージを記憶装置２３に格納する（ステップＳ５１）。
次に、このメッセージを転送すべき次のノードを判別する（ステップＳ５２）。これは、受信したメッセージのヘッダ情報を分析すること等により求められる。
次に、判別した転送先ノードにこのメッセージを転送する（ステップＳ５３）。
【００７５】
以上説明したように、本実施の形態のメッセージ伝送システムは、高信頼メッセージマルチキャストシステムであり、(Ａ)論理的に受信ノードをメッシュ状に配置し、その一部の(全体数よりも十分少数の)受信側ードにのみポジティブ応答確認をさせることにより応答爆発を防ぐことができる。さらに、一定時間ＡＣＫを受信できなかった受信ノードにはメッセージを再送することにより、確実なメッセージ送受信ができる。また、(Ｂ)メッセージを２個１組とし、その２個のメッセージをメッシュ状の受信ノードに、異なるパスを使って送信することにより、メッセージが受信できなかった受信ノードを、送信ノードが把握できる。さらに、（Ｃ）送信ノードが、ノード障害を検知した際、最初に送信したパスとは逆の送信パスでメッセージを再送することにより、ノード障害発生時にも、故障しているノード以外のノードには可能な限りメッセージを送達させることができる。
【００７６】
なお、この発明は、上記実施の形態に限定されず、種々の変形及び応用が可能である。
【００７７】
例えば、上記実施の形態では、受信ノードを２５台として、マトリックスを５×５としたが、マトリックスの形状は任意である。例えば、６×４のマトリックスと１×１のマトリックスを想定して、ルート情報を設定してもよい。ルート情報が全ノードをＸ方向とＹ方向に通過するようにルート情報を定義できるならば、ノードの数やマトリックスの形状などは任意である。
【００７８】
また、上記実施の形態のマトリックスと他の従来の手法とを組み合わせて使用すること等も可能である。例えば、図２のマトリックス内の送信ノードに他の従来の手法を用いてメッセージを送信し、これを送信ノードが受信ノードに配信する等してもよい。
【００７９】
また、上記実施の形態においては、メッセージの配信順序を定義するルート情報を送信ノードが生成し、メッセージに付加して送信したが、ルート情報を各受信ノードが予め記憶しておいて、各受信ノードがメッセージ内の適当な識別情報により、メッセージの転送先を判別してメッセージを転送するようにしてもよい。
【００８０】
また、上記実施の形態においては、異常が生じたい場合に、図６に示すように通常とは別のルートで且つ逆向きにメッセージを送信したが、異常が生じた場合に、図６に示すように通常とは別のルート（行と列が逆）であるが行と列内では順方向にメッセージを送信するようにしてもよい。
【図面の簡単な説明】
【００８１】
【図１】本発明の実施の形態に係るメッセージ伝送システムのブロック図である。
【図２】（ａ）は、送信ノードＳと受信ノードＲが論理的に構成するマトリックスの構成図であり、（ｂ）は、受信ノードが構成する論理的マトリックスを定義するデータの例である。
【図３】図２のマトリックス状のノードでのメッセージの伝送経路を説明するための図である。
【図４】送信ノードに格納されるルート情報の例を示す図であり、（ａ）と（ｂ）は通常時用、（ｃ）と（ｄ）は異常（障害）時用、（ａ）と（ｃ）はＸグループ用、（ｂ）と（ｄ）はＹグループ用である。
【図５】マトリックスを構成する受信ノードＲ１８に障害が発生した場合の動作を説明するための図である。
【図６】図１に示すコンピュータ装置の構成を示すブロック図である。
【図７】送信ノードの動作を説明するためのフローチャートである。
【図８】図７のフローチャートにおける故障ノード判別処理の詳細を示すフローチャートである。
【図９】故障ノードを判別するために、図８の処理に加えて適宜実行される処理の詳細を示すフローチャートである。
【図１０】図７のフローチャートにおけるメッセージの再送信処理の詳細を示すフローチャートである。
【図１１】受信ノードの処理を説明するためのフローチャートである。
【図１２】１対１のノード間でのポジティブ応答確認を説明するための図である。
【図１３】１対多のノード間でのポジティブ応答確認を説明するための図である。
【図１４】木構造ＡＣＫ方式を説明するための図である。
【符号の説明】
【００８２】
１１    コンピュータ装置
２１    通信装置
２２    制御装置
２３    記憶装置
２４    入力装置
２５    出力装置
Ｎ１    通信ネットワーク
【図１】
0004646812.tif 000002
【図２】
0004646812.tif 000003
【図３】
0004646812.tif 000004
【図４】
0004646812.tif 000005
【図５】
0004646812.tif 000006
【図６】
0004646812.tif 000007
【図７】
0004646812.tif 000008
【図８】
0004646812.tif 000009
【図９】
0004646812.tif 000010
【図１０】
0004646812.tif 000011
【図１１】
0004646812.tif 000012
【図１２】
0004646812.tif 000013
【図１３】
0004646812.tif 000014
【図１４】
0004646812.tif 000015