以下、本発明の最良の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、コンテンツ配信システムに対して本発明を適用した場合の実施形態である。
[1.1.1コンテンツ配信システムの構成等]
始めに、図1を参照して、情報配信システムとしてのコンテンツ配信システムの概要構成等について説明する。
図1は、本実施形態に係るコンテンツ配信システムにおける各ノード装置の接続態様の一例を示す図である。
図1の下部枠101内に示すように、IX(Internet eXchange)3、ISP(Internet Service Provider)4、DSL(Digital Subscriber Line)回線事業者(の装置)5、FTTH(Fiber To The Home)回線事業者(の装置)6、及び通信回線(例えば、電話回線や光ケーブル等)7等によって、インターネット等のネットワーク(現実世界のネットワーク)8が構築されている。
コンテンツ配信システムSは、このようなネットワーク8を介して相互に接続された複数のノード装置1a,1b,1c・・・1x,1y,1z・・・を備えて構成されることになり、ピアツーピア方式のネットワークシステムとなっている。各ノード装置1a,1b,1c・・・1x,1y,1z・・には、ノード装置を示す情報としての固有の製造番号及びIP(Internet Protocol)アドレスが割り当てられている。なお、製造番号及びIPアドレスは、複数のノード装置1間で重複しないものである。なお、以下の説明において、ノード装置1a,1b,1c・・・1x,1y,1z・・・のうち何れかのノード装置を示す場合には、便宜上、ノード装置1という場合がある。
そして、このコンテンツ配信システムSにおいては、特定のアルゴリズム、例えば、後述する分散ハッシュテーブル(以下、DHT(Distributed Hash Table)という)を利用したアルゴリズムによって、図1の上部枠100内に示すような、オーバレイネットワーク9が構築されることになる。つまり、このオーバレイネットワーク9は、既存のネットワーク8を用いて形成された仮想的なリンクを構成するネットワークを意味する。
本実施形態においては、DHTを利用したアルゴリズムによって構築されたオーバレイネットワーク9を前提としており、このオーバレイネットワーク9上に配置されたノード装置1を、コンテンツ配信システムSに参加(言い換えれば、オーバレイネットワーク9に参加)しているノード装置1という。コンテンツ配信システムSへの参加は、未だ参加していないノード装置が、既に参加している任意のノード装置1に対して参加要求を送ることによって行われる。
コンテンツ配信システムSに参加している各ノード装置1のノードIDは、例えば、IPアドレスあるいは製造番号を共通のハッシュ関数によりハッシュ化した値であり、一つのID空間に偏りなく分散して配置されることになる。このように共通のハッシュ関数により求められた(ハッシュ化された)ノードIDは、当該IPアドレスあるいは製造番号が異なれば、同じ値になる確率が極めて低いものである。なお、ハッシュ関数については公知であるので詳しい説明を省略する。本実施形態では、IPアドレス(グローバルIPアドレス)を共通のハッシュ関数によりハッシュ化した値をノードIDとする。
また、コンテンツ配信システムSに参加している複数のノード装置1には、1のノード装置1から他のノード装置1に配信されるべき配信情報としてのコンテンツ(例えば、映画や音楽等)データが分散して保存(格納)されている。例えば、ノード装置1aには、タイトルがXXXの映画のコンテンツデータが保存されており、一方、ノード装置1bには、タイトルがYYYの映画のコンテンツデータが保存されるというように、互いに異なるコンテンツデータが、複数のノード装置1に分散されて保存される(ただし、同じコンテンツデータが複数のノード装置1に分散されて保存される場合もある)。
どのノード装置1に、どのコンテンツデータが保存されるようにしてもよいが、例えば、コンテンツデータに関する情報の一例としてのキーワード(例えば、コンテンツの名称(コンテンツタイトル)やコンテンツの概要情報(あらすじ)等のキーワード)が、上記ノードIDを得るときと共通のハッシュ関数によりハッシュ化され(つまり、ノード装置1のIPアドレスのハッシュ値と同一のID空間に配置)、そのハッシュ値と最も近い(例えば、上位桁がより多く一致する)ノードIDを有するノード装置1が、当該コンテンツデータを保存するか、あるいは、その所在情報を管理する。これにより、コンテンツデータを偏りなくコンテンツ配信システムS上に分散させることが可能となる。なお、異なるコンテンツデータであっても、同一のキーワード(例えば、コンテンツの名称)になる場合が想定されるが、この場合、同じハッシュ値になってしまうので、これを避けるために、ハッシュ化するキーワードを、例えば、コンテンツの名称と著作権情報(例えば、出演者名、監督名、原作者名、歌手名、作曲者名、又は作詞者名等)の組合せとすればよい。
このように分散保存されているコンテンツデータの所在は、各ノード装置1が、DHTにより少しずつ分担して保持しており、これらのDHTが用いられてコンテンツデータの所在、即ち、保存元であるノード装置1を検索(発見)できるようになっている。このDHTには、例えば、他のノード装置への経路情報、すなわち、ノードID空間内で適度に離れた他のノード装置のノードID(ハッシュ値)とそのIPアドレスが、複数登録されている。
[1.1.2.ノード装置の構成等]
次に、図2を参照して、ノード装置1の構成及び機能について説明する。
図2は、ノード装置1の概要構成例を示す図である。
各ノード装置1は、図2に示すように、演算機能を有するCPU,作業用RAM,各種データ及びプログラムを記憶するROM等から構成されたコンピュータとしての制御部11と、上記コンテンツデータ、上記キーワードリストL、上記DHT及びプログラム等を記憶保存(格納)するためのHDD等から構成された共用情報報記憶手段としての記憶部12(上記コンテンツデータは、保存されていないノード装置1もある)と、受信されたコンテンツデータを一時蓄積するバッファメモリ13と、コンテンツデータに含まれるエンコードされたビデオデータ(映像情報)及びオーディオデータ(音声情報)等をデコード(データ伸張や復号化等)するデコーダ部14と、当該デコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部15と、当該映像処理部15から出力されたビデオ信号に基づき映像表示するCRT,液晶ディスプレイ等の表示部16と、上記デコードされたオーディオデータをアナログオーディオ信号にD(Digital)/A(Analog)変換した後これをアンプにより増幅して出力する音声処理部17と、当該音声処理部17から出力されたオーディオ信号を音波として出力するスピーカ18と、コンテンツデータに含まれるビデオデータ及びオーディオデータ等をエンコード(データ圧縮や暗号化等)するエンコーダ部19と、ネットワーク8を通じて他のノード装置1との間の情報の通信制御を行うための通信部20と、ユーザからの指示を受け付け当該指示に応じた指示信号を制御部11に対して与える入力部(例えば、キーボード、マウス、或いは、操作パネル等)21と、を備えて構成され、制御部11、記憶部12、バッファメモリ13、デコーダ部14、エンコーダ部19、及び通信部20はバス22を介して相互に接続されている。
そして、制御部11におけるCPUが記憶部12等に記憶された各種プログラムを実行することにより、ノード装置1全体を統括制御するようになっており、また、入力部21からの指示信号に応じて、コンテンツデータ登録処理等を行うようになっている。
[1.2 コンテンツデータ関連情報を保持するノード装置の決定方法]
ここで、図3(a)を参照して、コンテンツデータを保持しているノード装置のアドレス情報を記憶するノード装置1の決定方法の一例について説明する。
コンテンツのタイトル、コンテンツデータの属性データ、コンテンツデータの先頭数バイトなどにハッシュ関数をかけた値をコンテンツIDと称することは前述したとおりである。このコンテンツIDとノードIDとは同一のリング状のID空間上に点在しているものとして考えることができる。
これらの関係を図3(a)に示す。図3(a)は、2つの同心円をあらわしており、内側の同心円C1はコンテンツIDの空間をあらわす。外側の同心円C2はノードIDの空間をあらわす。また、コンテンツIDはcIDとあらわし、ノードIDはnIDとしてあらわしている。さらにコンテンツIDおよびノードIDは32ビットのアドレスを持つものとし、図3(a)では32ビットのアドレスを4ビット毎に16進数であらわしている。さらに、同心円C1および同心円C2において、各アドレスは反時計方向の向きに回るに従って、アドレスの値が大きくなっている。点A1および点A2は、値0であり、点A1および点A2の1つ右側のIDは、232−1である。各同心円上では、各IDの生成にハッシュ関数を使用しているので、各ノード、各コンテンツは、この空間上に偏在することなく散らばって存在するようになる。
DHTでは、「あるコンテンツIDを管理するノードは、そのコンテンツIDに一番近いノードIDをもつノードである」。という約束にする。「近い」の定義は、本願においては、そのIDを超えないでID値の差が一番少ないIDを最も近いIDとする。例えば、図3(a)において同心円C2上にあるノードIDがA0334055であるノード装置およびノードIDがA03340FFであるノード装置について前記の条件に従えば、コンテンツIDがA0334080であるコンテンツデータは、ノードIDがA0334055であるノード装置が管理する。
このように各コンテンツを各ノードで管理することにより、様々なコンテンツを、多数のノードで分散して管理することができるようになる。ここで管理するという意味は、コンテンツ自体を保持することを意味するわけではなく、コンテンツが実際のネットワークに接続されたノード装置のうちどのアドレスを持つノード装置に保持されているかを示す情報を所有しているという意味である。このアドレスとは、図1におけるオーバレイネットワーク101におけるノード装置のIPアドレス等のアドレスを示す。
すなわち、実際のコンテンツが存在している場所は、前記のノード装置であってもよいし、別のノード装置であってもよいことを示す。
コンテンツの所在場所を管理するノード装置を「ルートノード」と称する。ルートノードは、コンテンツIDと、そのコンテンツを保持しているノード装置のIPアドレスとの組合せ情報を管理している。この組合せ情報を少なくとも有する情報をインデックス情報と称する。インデックス情報には、コンテンツタイトルやコンテンツ属性が含まれている場合もある。
また、1つのルートノードが、複数のインデックス情報を有している場合もある。これは、異なるコンテンツのコンテンツIDがたまたま近い値になった場合において、そのコンテンツIDの近くに他のノード装置がない場合に発生する。コンテンツ情報本体(MPEGファイルやMP3ファイルなどのコンテンツデータ)を保持しているノード装置のことを、コンテンツホルダと称する。インデックス情報の組合せの例を図3(b)に示す。図3(b)の上段には、インデックス情報の内容が示されている。最上段のインデックス情報には、コンテンツIDとして“54DE9878”、ホルダのIPアドレスとして“221:23:154:65”、コンテンツのタイトルとして“タイタニック”、コンテンツのジャンルとして“ラブロマンス”等の情報が含まれることがわかる。
[1.3 DHTのルーティングテーブルの原理説明]
前述したように全てのノード装置のIPアドレスを各ノード装置が記憶することは、現実的ではないので、あるノード装置は特定のノード装置のIPアドレスだけを記憶する。このために、DHTにおいては、特別なルーティングテーブルを用意している。このルーティングテーブルの構成を以下に説明する。
まず、ノードID空間をいくつかの領域に分割する必要があるがここでは4分割にした状態を図4に示す。ノードIDのアドレスを16ビットとし、4進数であらわしているので、図4の各ノードIDアドレスは8桁であらわされる。図4において領域A0を示す左上の部分がアドレス(00000000)からアドレス(03333333)までをあらわし、領域A1を示す図4において左下の部分がアドレス(10000000)からアドレス(13333333)までをあらわし、領域A2を示す図4において右下の部分がアドレス(20000000)からアドレス(23333333)までをあらわし、領域A3を示す図4において左上の部分がアドレス(30000000)からアドレス(33333333)までをあらわしている。
図4の例では、ノード装置N1(ノードIDアドレスは10230210。)のルーティングテーブルをどのように作製するかについて説明する。
[1.3.1 レベル1のルーティング]
図4に示すようにノードID空間を4分割する。4分割されたそれぞれの領域は、4進数で表現すると、領域A0が0×××××××(×は0乃至3までのいずれかの値である。)とあらわされ、領域A1が1×××××××とあらわされ、領域A2が2×××××××とあらわされ、領域A3が3×××××××とあらわされる。レベル1のルーティングでは、ノード装置N1が存在する領域A1以外の領域のノード装置を無作為に選んで、そのノード装置のノードIDアドレスとIPアドレスをノード装置N1のRAM等の記憶部に記憶する。例えば、レベル1のルーティングテーブルは図5のようになる。図5では領域A0のノード装置としてノード装置N0を選択しているので、ノード0のノードIDアドレス(01300000)とノード0のIPアドレスとをルーティングテーブルの1列目に対応付けて記憶する。2列目は、領域A1に存在するノード1自身をあらわしている。次に、領域A2のノード装置としてノード装置N2を選択しているので、ノード装置N2のノードIDアドレス(22031000)とノード装置N2のIPアドレスとを3列目に対応付けて記憶する。次に領域A3のノード装置としてノード装置N3を選択しているので、ノード装置N3のノードIDアドレス(32201010)とノード装置N3のIPアドレスとを3列目に対応付けて記憶する。このように各領域にノード装置が存在する場合には、自己が存在しない各領域の少なくとも一つのノード装置のノードIDアドレスとノードIPアドレスを組み合わせて、記憶部に記憶する。
[1.3.2 レベル2のルーティング]
次に、図4に示された自己のノード装置であるノード装置N1が存在する領域A1をさらに4分割する。領域A1が4分割された状態を図6にあらわす。図6に示すように自己のノード装置であるノード装置N1が存在する領域A1をさらに4分割する。4分割されたそれぞれの領域は、4進数で表現すると、領域A10が10××××××(×は0乃至3までのいずれかの値である。)とあらわされ、領域A11が11××××××とあらわされ、領域A12が12××××××とあらわされ、領域A13が13××××××とあらわされる。
レベル2のルーティングでは、ノード装置N1が存在する領域A10以外の領域である領域A11、領域A12および領域A13に存在するノード装置を無作為に選んで、そのノード装置のノードIDアドレスとIPアドレスをノード装置N1のRAM等の記憶部に記憶する。例えば、レベル2のルーティングテーブルは図7のようになる。レベル2のルーティングテーブルの1列目は、領域A10に存在するノード装置N1自身をあらわしている。2列目では領域A11のノード装置としてノード装置N4を選択しているので、ノード装置N4のノードIDアドレス(11320101)とノード装置N4のIPアドレスとをルーティングテーブルの2列目に対応付けて記憶する。次に、領域A12のノード装置としてノード装置N5を選択しているので、ノード装置N5のノードIDアドレス(12020230)とノード装置N5のIPアドレスとを対応付けて3列目に記憶する。次に領域A13のノード装置としてノード装置N6を選択しているので、ノード装置N6のノードIDアドレス(13210001)とノード装置N6のIPアドレスとを対応付けて4列目に記憶する。このように領域A10から領域A13の各領域にノード装置が存在する場合には、自己のノード装置N1が存在しない各領域の少なくとも一つのノード装置のノードIDアドレスとノードIPアドレスを組み合わせて記憶部に記憶する。
[1.3.3 レベル3のルーティング]
次に、図6に示された自己のノード装置であるノード装置N1が存在する領域A10をさらに4分割する。領域A10が4分割された状態を図8にあらわす。4分割されたそれぞれの領域は、4進数で表現すると、領域A100が100×××××(×は0乃至3までのいずれかの値である。)とあらわされ、領域A101が101×××××とあらわされ、領域A102が102×××××とあらわされ、領域A103が103×××××とあらわされる。
レベル3のルーティングでは、ノード装置N1が存在する領域A100以外の領域である領域A101、領域A102および領域A103に存在するノード装置を無作為に選んで、そのノード装置のノードIDアドレスとIPアドレスをノード装置N1のRAM等の記憶部に記憶する。例えば、レベル3のルーティングテーブルは図9のようになる。レベル3のルーティングテーブルの1列目では領域A100のノード装置としてノード装置N7を選択しているので、ノード装置N7のノードIDアドレス(10000302)とノード装置N7のIPアドレスとをルーティングテーブルの2列目に対応付けて記憶する。レベル装置N3のルーティングテーブルの2列目は、図8からあきらかなように領域A101に存在するノードが存在しないために何も書き込まれない。レベル3のルーティングテーブルの3列目は、領域A102に存在するノード装置N1自身をあらわしている。また、レベル3のルーティングテーブルの4列目は、図8からあきらかなように領域A103に存在するノードが存在しないために何も書き込まれない。
このように領域A100から領域A103の各領域にノード装置が存在する場合には、自己のノード装置N1が存在しない各領域の少なくとも一つのノード装置のノードIDアドレスとノードIPアドレスを組み合わせて記憶しておく。
しかし、本原理説明では、領域A101と領域A103にはノード装置が存在しないので、領域A101と領域A103に相当する記憶領域には、ノードIDとIPアドレスは前述したように何も記載されない。
このようにIDノード空間を均等に4分割した場合に、ノード装置が存在しない領域が発生してくる。この場合に、そのノード装置が存在しないノードID空間領域に対応するコンテンツIDがある場合には、その領域の直前の領域に存在するノード装置が前述したルートノードになる。
例えば、コンテンツIDが10100001の場合、対応するノードID空間の領域は、領域A101である。しかし、本原理説明では、領域A101内にはノード装置が存在しない。したがって、前述したように、コンテンツID10100001を管理するルートノードは最も近い領域に存在するノード装置N7になる。すなわちノード装置N7の記憶部に図3に示されるような、コンテンツID10100001とコンテンツ情報本体を保持しているノードであるコンテンツホルダのIPアドレスが記憶されることになる。
[1.3.4 レベル4移行のルーティング]
以上述べたようにように、ノードID空間を分割していくに従って、分割されたノードID空間とその領域に存在するノード装置とが特定されていくことになる。本実施形態では、ノードIDは8桁であらわされている。その8桁の最上位の桁をルーティングレベル1としているので、全てのノードIDを特定するためには、ルーティングレベル8まで、前述したようにノードID空間の分割を行えばよいことが分かる。
また、本原理説明において、ルーティングレベル4からルーティングレベル8までの説明は省略するが、ルーティングレベル8までルーティングを行った結果であるルーティングテーブルを図10に示す。
図10に示されるルーティングレベル8までのルーティングをノードID空間に存在する全てのノード装置が行う。そして、各ノード装置が自己のノードIDに関してレベル8までのルーティングテーブルをもつよようにする。
[1.4 ルーティングテーブルを使用した検索]
各ノード装置が、レベル8までのルーティングテーブルを使用することによって、コンテンツを保持しているノード装置を効率よく検索することができるようになる。
図11において、ノードIDが12003030であるノード装置N8が、コンテンツIDが31320100であるコンテンツ情報の所在を示すインデックス情報を所有するルートノードであるノード装置N11(ノードIDは31320100である。)に照会して、コンテンツ所在情報を検索する場合について説明する。
コンテンツIDとルートノードのノードIDとが一致しない場合があるが、ここの説明においては、コンテンツID31320100と一致するノードIDを持つノード装置N11が存在するものとする。
次に検索手順を説明する。
コンテンツIDの値と同じノードIDを持つノードIDが31320100のノード装置は、3×××××××の領域に存在する。従って、ノードIDが12003030であるノード装置N8は、自分が持つルーティングテーブルのレベル1から3×××××××の領域でIPアドレスがあらかじめ知られているノード装置を探す。この場合、ノードIDが30100000であるノード装置N9のIPアドレスが、自己の持つルーティングテーブルから既知であるので、ノード装置N9に検索対象コンテンツIDについて問い合わせをする(後述の、問い合わせメッセージ(“Query”メッセージ)を送信する。)。
ノードIDが30100000であるノード装置N9は、自分が持つルーティングテーブルを参照して、レベル2のルーティングテーブルから、ノードIDが31×××××の領域でIPアドレスがあらかじめ知られているノード装置を探す。この場合、ノードIDが31012001であるノード装置N10のIPアドレスが、自己の持つルーティングテーブルから既知であるので、ノード装置N10に検索対象コンテンツIDについて問い合わせをする。
ノードIDが31012001であるノード装置N10は、自分が持つルーティングテーブルを参照して、レベル3のルーティングテーブルから、ノードIDが313××××の領域でIPアドレスがあらかじめ知られているノード装置を探す。この場合、ノードIDが31320100であるノード装置N11のIPアドレスが、自己の持つルーティングテーブルから既知であることが分かる。この場合には、ノードIDとコンテンツIDとが同値であるので、ノード装置N11がルートノードであることが分かる。このルートノードは、コンテンツIDが31320100であるコンテンツデータを保持するノード装置のIPアドレスを含むインデックス情報を所持している。
この後、ノード装置N11は、コンテンツIDが31320100で示されるコンテンツを保持しているノード装置のIPアドレスを、検索を開始した先頭のノード装置N8に知らせる。この結果ノード装置N8は、紹介されたそのノード装置(コンテンツホルダ)からコンテンツIDが31320100で示されるコンテンツを転送してもらうことができる。
[1.5 DHTでのコンテンツデータの登録]
上述したDHTにおいて、コンテンツデータをネットワークに登録する場合について説明する。すなわち、あるノード装置が保持するコンテンツデータを、ネットワークに接続された他のノード装置がアクセスできるよう公開する(“Publish”すると称する。)場合を、そのコンテンツデータを登録するという。この場合には、当該コンテンツデータを保持するノード装置がコンテンツホルダとなる。このコンテンツホルダは、前述したように、コンテンツデータのタイトル等のコンテンツデータに特有の情報からコンテンツIDをノード装置が生成する。
その後、当該コンテンツIDと同じ値又は最も近い値を持つルートノードとなるべきノード装置を、当該コンテンツホルダが検索する。例えば、コンテンツホルダから、コンテンツ登録およびルートノード検索メッセージ(“Publish”メッセージ)を、コンテンツIDに基づいて、DHTルーティングを使用して検索する。コンテンツ登録メッセージは、前述したDHTルーティングに従って、ノード装置間を転送される。
図12に示した図において、コンテンツホルダであるノード装置N12から発信されたコンテンツ登録メッセージは、ノード装置N13およびノード装置N14を経由して、コンテンツIDと同じ値またはもっとも近いノードID値を持つルートノードであるノード装置N15に到達する。
このルートノードとなったノード装置N15は、コンテンツID、コンテンツIDに対応するコンテンツデータを保持するコンテンツホルダのIPアドレスおよび補助情報(コンテンツデータのタイトル、ジャンル、作者名などの補助情報)を、インデックス情報として登録する。
各ノード装置は、当該コンテンツIDに対応するコンテンツデータを取得する場合には、DHTルーティングによって、当該コンテンツIDに対応するルートノードに問い合わせメッセージ(“Query”メッセージ)を発信する。問い合わせメッセージを受信したルートノードは、問い合わせに係わるコンテンツIDに対応するコンテンツデータを保持するコンテンツホルダのIPアドレスを、問い合わせ元のノード装置に発信する。当該IPアドレスを受信した問い合わせ元のノード装置は、当該IPアドレスであらわされるコンテンツホルダからコンテンツデータを取得する。
[1.6 DHTでのインデックスキャッシュ]
前述したように、コンテンツIDの値とそのコンテンツデータを保持するノード装置のIPアドレスとの関係を示す情報であるインデックス情報を保持しているノード装置をルートノードと呼んでいる。このインデックス情報は、ルートノードが一台で保持する必要はない。すなわち、ルーティングテーブルを使用した検索において説明した、図11に示されたノード装置N9およびノード装置N10がインデックス情報をノード装置N9およびノード装置N10のそれぞれの記憶部に記憶しておくことも可能である。この場合には、ノード装置N8からの問い合わせメッセージは、ルートノードであるノード装置N11まで転送されなくとも、途上のノード装置N9が返答することで、速やかに処理され、ノード装置N8は、コンテンツIDが31320100であるコンテンツデータを保持するノード装置のIPアドレス情報を、ノード装置N9から取得することができる。
このような、各ノード装置が所有するインデックス情報を記憶している記憶部を、以下インデックスキャッシュと称する。
詳細について図12を用いて説明する。
図12は、ノード装置がインデックス情報を所持するノード装置へ問い合わせる経路をあらわした図である。図12に示された円C3は、DHTのノードID空間をあらわしており、円C3上にノード装置N12乃至ノード装置N18が分散して配置されている。
ノード装置N12はコンテンツデータを保持しているノード装置(コンテンツホルダ)である。ノード装置N15は、前述したDHTルーティングで検索されるインデックス情報を所有しているルートノードである。ノード装置N13は、ノード装置N12からノード装置N15に至るルーティング経路にあるノード装置である。例えば、レベル1のルーティングにおいてノード装置N12から検索されるノード装置である。また、ノード装置N14は、ノード装置13と同様にノード装置N12からノード装置N15に至るルーティング経路にあるノード装置である。例えば、レベル2のルーティングにおいて、ノード装置N13から検索されるノード装置である。ノード装置N16、N17、N19は、コンテンツを取得しようとしているノード(リクエスタ)である。
ノード装置N16から、ノード装置N12が検索しているコンテンツIDを管理するルートノードであるノード装置N15に至る経路は、経路K4、経路K2および経路K3である。ノード装置N16は、経路K4を経由して、ノード装置N13にコンテンツIDを管理しているノード装置を問い合わせる。ノード装置N13が特定されるのは、ノード装置N16が所有しているDHTのルーティングテーブルにノード装置N13が記憶されていることによって特定される。
ノード装置N16からルートノードであるノード装置N15に至る経路(問い合わせ時の経路)は、ノード装置N12からルートノードであるノード装置N15に至る経路(登録時の経路)の一部である、経路K2および経路K3を共有する。ノード装置N13およびノード装置N14が保持しているDHTのルーティングテーブルがノード装置N12およびノード装置N16の問い合わせに対して同じように機能するからである。
別のリクエスタであるノード装置N17に目を転ずると、ノード装置N17から、ノード装置N12が検索しているコンテンツIDを管理しているルートノードであるノード装置N15に至る経路は、経路K5、経路K6および経路K3である。ノード装置N17からノード装置N18に至る経路K5は、ノード装置N17が所有しているルーティングテーブルによって決定される。また、ノード装置N18からノード装置N14に至る経路K6は、ノード装置N18が所有しているルーティングテーブルによって決定される。
ノード装置N17からルートノードであるノード装置N15に至る経路(問い合わせ時の経路)は、ノード装置N12からルートノードであるノード装置N15に至る経路(登録時の経路)の一部である、経路K3を共有する。ノード装置N14が保持しているDHTのルーティングテーブルがノード装置N12およびノード装置N17の問い合わせに対して同じように機能するからである。
図13は、コンテンツホルダであるノード装置N12からルートノードであるノード装置N15に至る経路を直線としてあらわし、その直線に図12における各ノード装置と経路を加えた図である。
図13は、“Publish”されたコンテンツデータ(コンテンツホルダN12に保持されている)を取得しようとするノード装置(リクエスタ)N16、N17、およびN18が、問い合わせメッセージ(“Query”メッセージ)は、ルートノードに近づくに従って、コンテンツ登録メッセージ(“Publish”メッセージ)と同じ経路を経由するようになる。これらの経路が、一種の木構造に見えるので、図13にあらわされた経路構造のツリーを“スパニングツリー”と呼ぶ。
インデックス情報を所有するノード装置はルートノードであるノード装置N15だけが保持していてもよいが、経路が共通する始端であるノード装置N13およびノード装置N14もルートノードであるノード装置N15が所有しているインデックス情報と同じ情報をインデックスキャッシュに所有することにより、問い合わせ情報の通信量を減らすことができる。コンテンツの登録時に、当該インデックス情報は、転送されてノード装置N13、N14を通過するので、この情報をノード装置N13、N14が記憶しておく(キャッシュしておく)ことは、容易に行える。
この場合には、ノード装置N16からノード装置15までの経路K4、経路K2および経路K3のうち、経路K2および経路K3にメッセージを転送する必要がなくなる。経路K4の終端にあるノード装置N13がインデックス情報を記憶するインデックスキャッシュを所有するからである。すなわち、ノード装置N16は所望のコンテンツを所有するノード装置N12のIPアドレスを、ノード装置N13から取得することができる。
具体的には、ノード装置N16からノード装置N13に問い合わせられたコンテンツのIPアドレスは、ノード装置N13のインデックスキャッシュから経路K8を経由してノード装置N16に返信される。
また、ノード装置N17からノード装置15までの経路K5、経路K6および経路K3のうち、経路K3にメッセージを転送する必要がなくなる。経路K6の終端にあるノード装置N14がインデックス情報を記憶するインデックスキャッシュを所有するからである。すなわち、ノード装置N17は所望のコンテンツを所有するノード装置N12のIPアドレスを、ノード装置N14から取得することができる。
具体的には、ノード装置N17からノード装置N14に問い合わせられたコンテンツのIPアドレスは、ノード装置N14のインデックスキャッシュから経路K9を経由してノード装置N17に返信される。
以上説明したように、ルートノードに至る途中のノード装置がルートノードに所有されているインデックス情報と同じ情報をインデックスキャッシュに記憶する。このようにすると、所望のコンテンツデータを保持しているノードIDのIPアドレスを、各ノード装置が素早く取得することができる。
また、図13における経路K2および経路K3の情報伝達量が減るので、経路K2および経路K3を使用する他の情報の伝達速度が向上し、システム全体としての情報伝達効率が向上する。
[1.7 インデックスキャッシュの更新]
複数のノード装置で、あるコンテンツに対する同じ内容であるインデックス情報をインデックスキャッシュに所有するためには,インデックスキャッシュは適切に更新される必要がある。コンテンツデータを保持しているノード装置がネットワークに接続されなくなった場合にもかかわらず、インデックスキャッシュを検索した場合に、存在しなくなったコンテンツデータを保持していたIPアドレスを問い合わせ元のノード装置に返信すると不都合だからである。すなわち、存在しなくなったコンテンツデータを検索する無駄な情報のやりとりが発生するのである。
インデックスキャッシュを更新して、あるコンテンツデータに関する各インデックスキャッシュの内容が合っている状態をコヒーレントと称する。また、あるコンテンツデータに関する各インデックスキャッシュの内容が合っていない状態をインコヒーレントと称する。インコヒーレントな状態は、なるべく短い期間であることが、ノード装置が相互にネットワークとして接続されたシステムにとって望ましいのである。
しかし、インデックスキャッシュの内容を頻繁に確認していたのでは、システム全体に無駄な情報のやりとりが発生してしまい、システム全体に情報確認のために負荷が余分にかかってしまうことになる。この負荷が余分にかかる状態は、インデックスキャッシュを保持するノード装置が増えるほど顕著になる。
具体的には、コヒーレントな状態を保つために、コヒーレントを確認するメッセージ等の情報のやりとりが大量に発生することにより、その他の情報のやりとりに時間がかかってしまうという不具合が発生してしまう。
[2.1 本願の実施形態(インデックスキャッシュの更新)]
次に、図14乃至図19を用いて、本実施形態について説明する。本実施形態は、同一のコンテンツデータに関するインデックス情報をインデックスキャッシュに記憶するノード装置(キャッシュノード)から、そのコンテンツを有するノード装置(コンテンツホルダ)に対する問い合わせのタイミングをキャッシュノードごとに変化させるものである。例えば、コンテンツホルダからルートノードに至る経路に存在するキャッシュノードから、コンテンツホルダへの問い合わせの頻度を、コンテンツホルダからの距離によって変化させる。
図14は、DHTによるルートノードの検索およびコヒーレント確認方法の様子の一例を示す図である。図14には、あるコンテンツを有するコンテンツホルダCH、コンテンツホルダCHのIPアドレスとコンテンツIDとをインデックス情報として所有するルートノードRN1、インデックス情報を記憶するインデックスキャッシュを所有するキャッシュノードCN1、CN2およびCN3、コンテンツホルダCHのIPアドレスを取得しようとするノード装置であるリクエスタRQ1、RQ2、RQ3、RQ4およびRQ5、およびリクエスタからのコンテンツホルダCHのIPアドレスを取得しようとする情報を転送するノード装置N20、N21およびN22があらわされている。
ルートノードRN1および各キャッシュノードからコンテンツホルダCHに対して、コンテンツホルダCHがネットワークに接続されているか否かを確認する経路は、経路SK1、経路SK2、経路SK3および経路SK4であらわされている。各経路は、図1の下部枠101内において示されるインターネット等のネットワーク(現実世界のネットワーク)によって構成されている。ここでは、当該インターネット等のネットワークが実現されている構成による経路ではなく、図1上部枠100のオーバレイネットワークの経路について説明する。
経路SK1は、ルートノードRN1がコンテンツホルダCHに対して、コンテンツデータの存在確認をする経路である。例えば、コンテンツデータの存在確認をするためには、生存確認メッセージ(“Confirm”と称する)等の情報をルートノードRN1からコンテンツホルダCHに、ネットワークを介して伝送する。
すなわち、経路SK1を使用したコヒーレント状態の確認は、ルートノードRN1から発信された生存確認メッセージが、コンテンツホルダCHに到着し、その後コンテンツホルダCHから正常な応答メッセージ(“Alive”と称する)等の情報がルートノードRN1に到着するか否かによってコヒーレント状態の確認が行われる。
例えば、コンテンツホルダCHがネットワークに接続されていない場合には、ルートノードRN1から発信された生存確認メッセージ(“Confirm”)が、その行き先がみつからないため、ルートノードRN1には正常な応答メッセージ(“Alive”)が戻って来ない。このことにより、ルートノードRN1はコンテンツホルダCHがネットワークに接続されていないという情報を取得する。
この場合には、ルートノードRN1は、ルートノードRN1に記憶されているコンテンツデータに対応するインデックス情報を削除する。
また、コンテンツホルダCHがネットワークに接続されている場合であって、コンテンツホルダCHがコンテンツデータをすでに保持していない場合にも、ルートノードRN1には正常な応答メッセージ(“Alive”)が戻って来ない。このことにより、ルートノードRN1は、コンテンツデータがコンテンツホルダCHに存在しないという情報を取得する。または、コンテンツホルダCHが、コンテンツデータがコンテンツホルダCHにはもうありませんという旨の情報を、ルートノードRN1に返信することもできる。
この場合にも、ルートノードRN1は、ルートノードRN1に記憶されているコンテンツデータに対応するインデックス情報を削除する。
さらに、コンテンツデータを保持するコンテンツホルダCHがネットワークに正常に接続されている場合には、コンテンツデータが正常に存在する応答情報(“Alive”)をルートノードRN1が取得する。
この場合には、ルートノードRN1は、ルートノードRN1に記憶されているインデックス情報を削除しない。
次に経路SK2について説明する。経路SK2は、キャッシュノードCN3がコンテンツホルダCHに対して、コンテンツデータの存在確認をする経路である。
例えば、コンテンツデータの存在確認をするためには、生存確認メッセージ等の情報をキャッシュノードCN1からコンテンツホルダCHに、ネットワークを介して伝送する。
すなわち、経路SK2を使用したコヒーレント状態の確認は、キャッシュノードCN3から発信された生存確認メッセージが、コンテンツホルダCHに到着し、その後コンテンツホルダCHから正常な応答メッセージ等の情報がキャッシュノードCN3に到着するか否かによってコヒーレント状態の確認が行われる。
例えば、コンテンツホルダCHがネットワークに接続されていない場合には、キャッシュノードCN3から発信された生存確認メッセージが、その行き先がみつからないため、キャッシュノードCN3には正常な応答メッセージが戻って来ない。このことにより、キャッシュノードCN3はコンテンツホルダCHがネットワークに接続されていないという情報を取得する。
この場合には、キャッシュノードCN3は、キャッシュノードCN3に記憶されているコンテンツデータに対応するインデックス情報を削除する。
また、コンテンツホルダCHがネットワークに接続されている場合であって、コンテンツホルダCHがコンテンツデータをすでに保持していない場合にも、キャッシュノードCN3には正常な応答メッセージが戻って来ない。(あるいは、コンテンツが存在しないという旨の応答メッセージが戻る。)したがって、キャッシュノードCN3は、コンテンツデータがコンテンツホルダCHに存在しないという情報を取得する。
この場合にも、キャッシュノードCN3は、キャッシュノードCN3に記憶されているコンテンツデータに対応するインデックス情報を削除する。
さらに、コンテンツデータを保持するコンテンツホルダCHがネットワークに正常に接続されている場合には、コンテンツデータが正常に存在する応答情報をキャッシュノードCN3が取得する。
この場合には、キャッシュノードCN3は、キャッシュノードCN3に記憶されているコンテンツデータに対応するインデックス情報を削除しない。
経路SK3および経路SK4は、経路SK1および経路SK2と同様に、キャッシュノードCN2およびキャッシュノードCN1が、コンテンツホルダCHに生存確認メッセージ等の情報を送受信する経路である。
すなわち、キャッシュノードCN2またはキャッシュノードCN1から送信された生存確認メッセージに対して、コンテンツホルダCHから正常な応答情報である応答メッセージが送信され、キャッシュノードCN2またはキャッシュノードCN1がその応答メッセージを受信した場合には、キャッシュノードCN2またはキャッシュノードCN1はコンテンツデータに対応したインデックス情報を削除および書き換えを行わない。
また、キャッシュノードCN2またはキャッシュノードCN1が正常な応答メッセージを受信しない場合には、キャッシュノードCN2またはキャッシュノードCN1は発信された生存確認メッセージに対応するコンテンツデータのインデックス情報を削除する。
次に、図14に示されている経路SK5、経路SK6、経路SK7および経路SK8について説明する。
経路SK5はルートノードRN1とキャッシュノードCN3との間でメッセージ等の情報が伝送される経路である。
例えば、キャッシュノードCN3からコンテンツホルダCHに対して、生存確認メッセージ(“Confirm”)が送信された後に、コンテンツホルダCHから応答メッセージ(“Alive”)が送信されないために、キャッシュノードCN3が応答メッセージ(“Alive”)を受信しない場合がある。この場合には、キャッシュノードCN3は、該当するコンテンツデータのインデックス情報を削除する。
キャッシュノードCN3とルートノードRN1とのコヒーレント状態を保つ為には、それぞれのノード装置がコンテンツホルダCHに生存確認メッセージ(“Confirm”)を送信するだけではなく、上述した場合のように、キャッシュノードCN3が応答メッセージ(“Alive”)を受信しない場合には、その情報をルートノードRN1に経路SK5を経由して伝えてもよい。
例えば、キャッシュノードCN3は、コンテンツデータがコンテンツホルダCHに存在しなくなったことを示す消滅メッセージ(“Vanish”と称する。)をルートノードRN1に発信する。消滅メッセージを受信したルートノードRN1は、当該コンテンツデータに関するインデックス情報をルートノードRN1のインデックスキャッシュから削除する。
また、ルートノードRN1からコンテンツノードCHに生存確認メッセージを発信した後に、コンテンツノードCHから応答メッセージを受信しなかった場合には、ルートノードRN1は、コンテンツデータがコンテンツホルダCHに存在しなくなったことを示す消滅メッセージ(“Vanish”と称する。)をキャッシュノードCN3に発信する。消滅メッセージを受信したキャッシュノードCN3は、当該コンテンツデータに関するインデックス情報をキャッシュノードCN3のインデックスキャッシュから削除する。
このように、コンテンツホルダCHから応答メッセージを受信しなかった、キャッシュノードCN3またはルートノードRN1が、相互に消滅メッセージを送信しあうことで、あるコンテンツに対するインデックス情報のインコヒーレント状態をできるだけ早く解消し、コヒーレント状態を保つことができる。
経路SK6はキャッシュノードCN3とキャッシュノードCN2との間でメッセージ等の情報が伝送される経路である。
例えば、キャッシュノードCN2からコンテンツホルダCHに対して、生存確認メッセージ(“Confirm”)が送信された後に、コンテンツホルダCHから応答メッセージ(“Alive”)が送信されないために、キャッシュノードCN2が応答メッセージ(“Alive”)を受信しない場合がある。この場合には、キャッシュノードCN2は、該当するコンテンツデータのインデックス情報を削除する。
キャッシュノードCN2とキャッシュノードCN3とのコヒーレント状態を保つ為には、それぞれのノード装置がコンテンツホルダCHに生存確認メッセージ(“Confirm”)を送信するだけではなく、上述した場合のように、キャッシュノードCN2が応答メッセージ(“Alive”)を受信しない場合には、その情報をキャッシュノードCN3に経路SK4を経由して伝えてもよい。
例えば、キャッシュノードCN2は、コンテンツデータがコンテンツホルダCHに存在しなくなったことを示す消滅メッセージをキャッシュノードCN3に発信する。消滅メッセージを受信したキャッシュノードCN3は、当該コンテンツデータに関するインデックス情報をキャッシュノードCN3のインデックスキャッシュから削除する。
また、キャッシュノードCN3からコンテンツノードCHに生存確認メッセージを発信した後に、コンテンツノードCHから応答メッセージを受信しなかった場合には、キャッシュノードCN3は、コンテンツデータがコンテンツホルダCHに存在しなくなったことを示す消滅メッセージをキャッシュノードCN2に発信する。消滅メッセージを受信したキャッシュノードCN2は、当該コンテンツデータに関するインデックス情報をキャッシュノードCN2のインデックスキャッシュから削除する。
このように、コンテンツホルダCHから応答メッセージを受信しなかった、キャッシュノードCN2またはキャッシュノードCN3が、相互に消滅メッセージを送信しあうことで、あるコンテンツに対するインデックス情報のインコヒーレント状態をできるだけ早く解消し、コヒーレント状態を保つことができる。
経路SK7および経路SK8においても、上記と同様のメッセージの送受信が行われる。
経路SK7において、キャッシュノードCN2またはキャッシュノードCN1がコンテンツホルダCHから応答メッセージを受信しなかった場合には、キャッシュノードCN2またはキャッシュノードCN1が、キャッシュノードCN1またはキャッシュノードCN2に対して消滅メッセージを送信する。つまり、キャッシュノードCN2は、キャッシュノードCN1に対して消滅メッセージを送信する。キャッシュノードCN1は、該当するコンテンツに対するインデックス情報を、キャッシュノードCN1のインデックスキャッシュから削除する。また、キャッシュノードCN1は、キャッシュノードCN2に対して消滅メッセージを送信する。キャッシュノードCN2は、該当するコンテンツに対するインデックス情報を、キャッシュノードCN2のインデックスキャッシュから削除する。
このように、コンテンツホルダCHから応答メッセージを受信しなかった、キャッシュノードCN1またはキャッシュノードCN2が、相互に消滅メッセージを送信しあうことで、あるコンテンツデータに対するインデックス情報のインコヒーレント状態をできるだけ早く解消し、コヒーレント状態を保つことができる。
次に、経路SK8について説明する。コンテンツホルダCHの電源が切られた場合等のネットワークとの接続がなくなった場合には、コンテンツホルダCHがネットワークから離脱することになる。この場合に、キャシュノードCN1がコンテンツホルダCHに関するインデックス情報を持ち続けてしまうと、インコヒーレントな状態が続くので、好ましくない。そこで、コンテンツホルダCHがネットワークから離脱する場合には、コンテンツホルダCHから消滅メッセージをキャッシュノードCN1に発信する。キャッシュノードCN1は、該当するコンテンツに対するインデックス情報を、キャッシュノードCN1のインデックスキャッシュから削除する。このように、コンテンツホルダCHが保持していたコンテンツデータに対するインデックス情報のインコヒーレント状態をできるだけ早く解消し、コヒーレント状態を保つことができる。
上述したように、消滅メッセージは、経路SK5、SK6、SK7またはSK8を経由して、キャッシュノードCN1、CN2並びにCN3、およびルートノードRN1の間を自由に転送されることができる。
例えば、キャッシュノードCN1が消滅メッセージを受信した場合には、キャッシュノードCN1からキャッシュノードCN2に当該消滅メッセージが転送される。さらに、キャッシュノードCN2からキャッシュノードCN3に当該消滅メッセージが転送される。そして、キャッシュノードCN3からルートノードRN1に当該消滅メッセージが転送される。このように、キャッシュノードCN1が受信した消滅メッセージはルートノードRN1へ転送されることになる。このようにして経路上の全てのノード装置において、該当するコンテンツに対するインデックス情報をインデックスキャッシュから削除する。
また、例えば、キャッシュノードCN2が消滅メッセージを受信した場合には、キャッシュノードCN2からキャッシュノードCN3に当該消滅メッセージが転送される。さらに、キャッシュノードCN3からルートノードRN1に当該消滅メッセージが転送される。さらに、キャッシュノードCN2は、ルートノードRN1と逆方向にあるキャッシュノードCN1にも、当該消滅メッセージを転送する。このようにして経路上の全てのノード装置において、該当するコンテンツに対するインデックス情報をインデックスキャッシュから削除する。
なお、下流のキャッシュノードのIPアドレスを知るためには、登録時に、公開メッセージがコンテンツホルダからキャッシュノードを中継してルートノードに転送される過程で、各キャッシュノードがメッセージの送信元のIPアドレスを記憶(スパニングツリーの逆方向リンクを記憶)しておくことで、実現できる。
次にインデックスキャッシュの内容について説明する。
図15にルートノードRN1、キャッシュノードCN3、キャッシュノードCN2およびキャッシュノードCN1がインデックスキャッシュに記憶している内容の一例を示す。
図15(a)は、コンテンツIDが54DE9878(16進表示)である“タイタニック”というコンテンツデータについて、ルートノードRN1がインデックスキャッシュに保持している内容である。図15(a)の1列目はコンテンツIDを示し、2列目は、コンテンツホルダCHのIPアドレスを示す。また、図15(a)の4列目はコンテンツデータのタイトルを示し、5列目は、コンテンツデータのジャンルを示す。
図15(a)の3列目は転送数を示す。転送数とは、コンテンツホルダCHから発信されたメッセージが幾つのキャッシュノードを経由しているかを示す数である。コンテンツホルダCHからルートノードRN1にメッセージが発信された場合には、メッセージはキャッシュノード1、キャッシュノード2およびキャッシュノード3を経由してルートノードRN1に受信される。コンテンツホルダCHからルートノードRN1までにメッセージが経由したキャシュノードは3つになるので、転送数は3となる。したがって、ルートノードRN1のインデックスキャッシュの内容を示した図15(a)の3列目の転送数は3となる。
例えば、コンテンツ登録メッセージにカウンタを設け、各キャッシュノードで、コンテンツ登録メッセージを転送するたびに、カウンタ値を1つ増加させることによって実現できる。
次に、キャッシュノード3のインデックスキャッシュの内容を図15(b)に示す。図15(b)の1列目、2列目、4列目および5列目の内容は、ルートノードRN1のインデックスキャッシュの内容を示す図15(a)と同じである。コンテンツホルダCHからキャシュノードCN3にコンテンツ登録メッセージが発信された場合には、メッセージはキャッシュノード1およびキャッシュノード2を経由してキャシュノードCN3に受信される。コンテンツホルダCHからキャッシュノードCN3までにメッセージが経由したキャッシュノードは2つになるので、転送数は2となる。したがって、キャッシュノードCN3のインデックスキャッシュの内容を示した図15(b)の2列目の転送数は2となる。
次に、キャッシュノード2のインデックスキャッシュの内容を図15(c)に示す。図15(c)の1列目、2列目、4列目および5列目の内容は、ルートノードRN1のインデックスキャッシュの内容を示す図15(a)と同じである。コンテンツホルダCHからキャシュノードCN2にコンテンツ登録メッセージが発信された場合には、メッセージはキャッシュノード1を経由してキャシュノードCN2に受信される。コンテンツホルダCHからキャッシュノードCN2までにメッセージが経由したキャッシュノードは1つになるので、転送数は1となる。したがって、キャッシュノードCN2のインデックスキャッシュの内容を示した図15(c)の2列目の転送数は1となる。
次に、キャッシュノード1のインデックスキャッシュの内容を図15(d)に示す。図15(d)の1列目、2列目、4列目および5列目の内容は、ルートノードRN1のインデックスキャッシュの内容を示す図15(a)と同じである。コンテンツホルダCHからキャシュノードCN1にコンテンツ登録メッセージが発信された場合には、メッセージは直接キャシュノードCN1に受信される。コンテンツホルダCHからキャッシュノードCN1までにメッセージが経由したキャッシュノードは一つもないので、転送数は0となる。したがって、キャッシュノードCN2のインデックスキャッシュの内容を示した図15(d)の2列目の転送数は0となる。
次に、ルートノードRN1、キャッシュノードCN3、キャッシュノードCN2およびキャッシュノードCN1から、コンテンツホルダCHに対して生存確認
メッセージを発信するタイミングについて説明する。生存確認メッセージが頻繁に発信されると、コヒーレント状態の確認のためにネットワークに負荷がかかりすぎるので、ネットワークが効率的に利用されない。そこで、生存確認メッセージを発信するノード装置からコンテンツホルダCHまでの転送数に対応して、ノード装置から生存確認メッセージを発信させる頻度を変化させる。
例えば、式(1)に示すように生存確認メッセージの発信間隔PIを決める。
(数1)
PI=4(転送数)×10分 ・・・ (式1)
キャッシュノードCN1の転送数は0なので、PIの値は10分となる。従って、キャッシュノードCN1からキャッシュホルダCHへの生存確認メッセージは10分間隔で発信される。
また、キャッシュノードCN2の転送数は1なので、PIの値は40分となる。従って、キャッシュノードCN1からキャッシュホルダCHへの生存確認メッセージは40分間隔で発信される。
さらに、キャッシュノードCN3の転送数は2なので、PIの値は160分となる。従って、キャッシュノードCN1からキャッシュホルダCHへの生存確認メッセージは160分間隔で発信される。
さらに、ルートノードRN1の転送数は3なので、PIの値は640分となる。従って、キャッシュノードCN1からキャッシュホルダCHへの生存確認メッセージは640分間隔で発信される。
このようにして、経路SK1、経路SK2、経路SK3および経路SK4を経由して、コンテンツホルダCHに生存確認メッセージを送信する頻度を変化させることによってネットワークの負荷の軽減を図っている。
[2.2 実施形態の動作をあらわすフローチャートの説明]
図16、図17、図18および図19は、本実施形態の動作をあらわすフローチャートである。
図16は、メッセージの内容を分類するフローチャートである。図17は、Publishメッセージの処理をあらわすフローチャートである。図18は、Vanishメッセージの処理をあらわすフローチャートである。図19は、タイマーによる処理をあらわすフローチャートである。
各ノード装置は、コンテンツデータを取得しようとするノード装置であるリクエスタ、コンテンツデータを保持するコンテンツホルダおよびインデックス情報を所有するルートノードのいずれとしても機能するので、図16乃至図19を用いて、各種メッセージの処理を説明する。
最初に図16について説明する。図16はメッセージの内容を分類するフローチャートである。
ステップS1において、ノード装置は、メッセージを読み取る。
ステップS2において、受信したメッセージが“Publish”メッセージであるか否かを判断する。受信したメッセージが“Publish”メッセージである場合(ステップS2:YES)には、ステップS3に進む。受信したメッセージが“Publish”メッセージでない場合(ステップS2:NO)には、ステップS4に進む。
ステップS3において、“Publish”メッセージの処理を行う。“Publish”メッセージの処理内容は図17において詳細に説明する。
ステップS4において、受信したメッセージが“Confirm”メッセージであるか否かを判断する。受信したメッセージが“Confirm”メッセージである場合(ステップS4:YES)には、ステップS5に進む。受信したメッセージが“Confirm”メッセージでない場合(ステップS4:NO)には、ステップS6に進む。
ステップS5において、応答メッセージである“Alive”メッセージの送信を行う。この“Alive”メッセージの送信を行うノード装置は、コンテンツホルダとして機能している場合であって、問い合わせにかかわるコンテンツを保持している場合である。
ステップS6において、受信したメッセージが“Vanish”メッセージであるか否かを判断する。受信したメッセージが“Vanish”メッセージである場合(ステップS6:YES)には、ステップS7に進む。受信したメッセージが“Vanish”メッセージでない場合(ステップS6:NO)には、ステップS8に進む。
ステップS7において、“Vanish”メッセージの処理を行う。“Vanish”メッセージの処理内容は図18において詳細に説明する。
ステップS8において、受信したメッセージが“Publish”メッセージ、“Confirm”メッセージおよび“Vanish”メッセージのいずれでもない場合には、その他のメッセージ処理を行う。その他のメッセージとしては、コンテンツホルダの場所を問い合わせるメッセージ(“Query”メッセージ)などがある。“Query”メッセージの場合には、“Query”メッセージを受信したノード装置が所有するルーティングテーブルから、コンテンツIDに対応したノード装置を選択して、選択されたノード装置に“Query”メッセージを送信する。また、“Query”メッセージを受信したノード装置がルートノードである場合には、“Query”メッセージを最初に発信したノード装置に対して“Query”メッセージに対応するコンテンツデータを保持するコンテンツホルダのIPアドレスを含むメッセージを送信する。
次に、図17について説明する。図17は、Publishメッセージの処理をあらわすフローチャートである。
ステップS10において、ノード装置が受信したメッセージ情報に含まれるコンテンツID(cID)、IPアドレス、転送数(“Publish”メッセージが経由したキャッシュノードの数)をノード装置の記憶部に記憶する。
ステップS11において、転送数からコヒーレンシ確認(コヒーレント状態であるか、インコヒーレント状態であるかの確認)のための時間間隔を算出する。時間間隔は、式1に示された計算式に従って算出される。
ステップS12において、ステップS11において算出されたコヒーレンシ確認時間間隔後にタイマーイベントが発生するように、タイマーを設定する。
ステップS13において、コンテンツIDと自ノード装置のノードIDとを比較して、上位の桁から何桁まで同値であるか比較する。それによって、自ノード装置が所有するルーティングテーブルのどのレベルからメッセージを転送すべきノード装置を選択すべきかについて判断する。
ステップS14において、ステップS13において判断されたレベルとコンテンツIDとから、受信した“Publish”メッセージを転送すべきノード装置を決定する。
ステップS15において、転送先ノード装置が自ノード装置であるか否かを判断する。転送先ノード装置が自ノード装置である場合(ステップS15:YES)には、ステップS18に進む。転送先ノード装置が自ノード装置ではない場合(ステップS15:NO)には、ステップS16に進む。
ステップS16において、“Publish”メッセージ中に記録されている転送数を1増加させる。
ステップS17において、ステップS14において選択されたノード装置に対して、“Publish”メッセージを転送する。
ステップS18において、自ノード装置は、ルートノードになるべきノード装置であるので、“Publish”メッセージの内容を自ノード装置のインデックスキャッシュに追加記録する。
次に、図18について説明する。図18は、Vanishメッセージの処理をあらわすフローチャートである。
ステップS20において、ノード装置が受信したメッセージ情報に含まれるコンテンツID(cID)およびIPアドレスに該当する情報をノード装置のインデックスキャッシュから削除する。
ステップS21において、コンテンツIDと自ノード装置のノードIDとを比較して、上位の桁から何桁まで同値であるか比較する。それによって、自ノード装置が所有するルーティングテーブルのどのレベルからメッセージを転送すべきノード装置を選択すべきかについて判断する。
ステップS22において、ステップS21において判断されたレベルとコンテンツIDとから、受信した“Vanish”メッセージを転送すべきノード装置を決定する。
ステップS23において、転送先ノード装置が自ノード装置であるか否かを判断する。転送先ノード装置が自ノード装置である場合(ステップS23:YES)には、ステップS25に進む。転送先ノード装置が自ノード装置ではない場合(ステップS23:NO)には、ステップS24に進む。
ステップS24において、ステップS22において選択されたノード装置に対して、“Vanish”メッセージを転送する。
ステップS25において、ルートノードである自ノード装置のインデックス情報から、“Vanish”メッセージ情報に含まれるコンテンツID(cID)およびIPアドレスに該当する情報を削除する。
次に、図19について説明する。図19は、タイマーによる処理(タイマーイベントの処理)をあらわすフローチャートである。図19であらわされるフローチャートは、タイマーで設定された時間が到来するたびに起動される。
図19であらわされるタイマーは、一つの役割として、“Publish”メッセージを受信したキャッシュノードが、“Confirm”メッセージを送信した後の一定時間内に、コンテンツホルダからの“Alive”メッセージの受信の有無を判断するために使用される。また、もう一つの役目として、キャッシュノードとしてノード装置が動作する場合に設定されるコヒーレンシ確認時間間隔を設定するためのタイマーとして使用される(図17のステップS12)。
“Confirm”メッセージは、コンテンツ毎にノード装置から発信されるために、複数のタイマーを管理するためのタイマーマネージャが存在する(図示せず。)。タイマーを設定するノード装置は、設定時間とともに複数のタイマーを識別するためのタイマーIDをタイマーマネージャに設定する。本実施形態では、タイマーIDとしてコンテンツIDを使用する。タイマーに設定された時間が経過すると、図19に示されるタイマーの処理ルーチンが開始される。
ステップS30において、タイマーが設定された時のコンテンツID(cID)をタイマーマネージャから取得する。
ステップS31において、キャッシュノードとなっているノード装置は、ステップS30で取得されたコンテンツIDに相当するコンテンツデータを保持するコンテンツホルダ(コンテンツホルダは、当該コンテンツをネットワークへ登録させるために、“Publish”メッセージを発信したノード装置である。)
に対して“Confirm”メッセージを発信する。
ステップS32において、当該コンテンツIDに対応するコンテンツデータを保持するコンテンツホルダから“Alive”メッセージが送信され、自ノード装置に当該“Alive”メッセージが受信されるか、一定時間待つ。
ステップS33において、“Alive”メッセージが受信されたかを判断する。“Alive”メッセージが受信されなかった場合(ステップS33:NO)にはステップS35に進む。“Alive”メッセージが受信された場合(ステップS33:YES)にはステップS34に進む。
ステップS34において、図17のステップS12で算出されたコヒーレンシ確認時間間隔とコンテンツIDをタイマーマネージャに設定する。
ステップS35において、自ノード装置が、コンテンツIDのルートノードに該当するか否かを判断する。自ノード装置が、コンテンツIDのルートノードである場合(ステップS35:YES)には、ステップS38に進む。自ノード装置が、コンテンツIDのルートノードでない場合(ステップS35:NO)には、ステップS36に進む。
ステップS36において、ステップS35で判断されたコンテンツIDに対応するインデックス情報をインデックスキャッシュから削除する。
ステップS37において、自ノード装置からルートノード方向にあるキャッシュノードに対して“Vanish”メッセージを発信する。
ステップS38において、自ノード装置はルートノードであるので、ルートノードのステップS35で判断されたコンテンツIDに対応するインデックス情報を記憶部から削除する。
上記実施形態において、コヒーレンシ確認間隔時間は式1を用いて算出しているが、これに限られるわけではなく、転送数によって異なる時間を算出するのであれば任意の関数または数式を用いて、コヒーレンシ確認間隔時間を算出することができる。
また、上記実施形態において、ルートノードに近いノード装置ほどコヒーレンシ確認間隔時間が大きくなっているが、これに限定されるわけではない。例えば、ルートノードに近いノード装置ほどコヒーレンシ確認間隔時間を小さくするように構成することも可能である。すなわち、インデックス情報を所有するノード装置毎にコヒーレンシ確認間隔時間が異なるように設定することで、特定のネットワーク上の経路への負荷の集中を減少させることができる。なお、各コンテンツの複製(レプリカ)を複数のコンテンツホルダが保持して、それを一つのルートノードが管理するような構成においては、本実施例のように、コンテンツホルダに近いほど頻繁にコヒーレンシ確認を行うようにしたほうが、好適である。逆にすると、ルートノードに確認の仕事が集中するからである。
また、上記実施形態においては、DHTを利用したアルゴリズムによって構築されたオーバレイネットワークを前提とし、キーワード等のコンテンツデータに特有の情報をハッシュ化して、かかるハッシュ値及びDHTに基づいて、コンテンツデータの保存元であるノード装置、或いは、インデックス情報の管理元であるノード装置を特定するように構成したが、これの代わりに、例えば、キーワード等のコンテンツデータに特有の情報(或いは、これに付随する情報)を用いて所定の演算を行うアルゴリズムや関数(関数find(例えば、キーワードに対応する数値に変換したもの)=インデックス情報の管理元であるノード装置のIPアドレス)により、コンテンツデータの保存元であるノード装置、或いは、インデックス情報の管理元であるノード装置を特定するように構成してもよい。
また、上記実施形態においては、制御部11が、所定のハッシュ関数によりキーワードのハッシュ値を生成するように構成したが、これに限定されるものではなく、キーワードに基づいて、当該キーワードに対応するキーワードID(他と識別可能な)を生成して、これに基づいて、インデックス情報の管理元であるノード装置を特定するように構成してもよい。
また、上記実施形態においては、複数のノード装置において共通に使用される共用情報としてコンテンツデータを例にとって説明したが、これに限定されるものではなく、例えば複数のノード装置において共通に使用されるべきソースプログラム等、複数のユーザが共通して持つ必要のある共用データに対して適用してもよい。この場合も、各更新段階の共用データの管理元であるノード装置が複数存在することになり、図16に示す処理により、各ノード装置は、共用情報を保持するノード装置がネットワークから脱退することを検知すると、共用データに関する情報を速やかに削除する。