以下、本発明の最良の実施形態を図面に基づいて説明する。
[1.コンテンツ分散保存システムの構成等]
始めに、図1等を参照して、本実施形態に係るコンテンツ分散保存システムの概要構成等について説明する。
図1は、本実施形態に係るコンテンツ分散保存システムSにおける各ノード装置の接続態様の一例を示す図である。
図1の下部枠101内に示すように、IX(Internet eXchange)3、ISP(Internet Service Provider)4a、4b、DSL(Digital Subscriber Line)回線事業者(の装置)5a、5b、FTTH(Fiber To The Home)回線事業者(の装置)6、及び通信回線(例えば、電話回線や光ケーブル等)7等によって、インターネット等のネットワーク(現実世界の通信ネットワーク)8が構築されている。なお、図1の例におけるネットワーク8には、データ(パケット)を転送するためのルータが、適宜挿入されているが図示を省略している。
このようなネットワーク8には、複数のノード装置(以下、「ノード」という)Nn(n=1,2,3・・・の何れか)がルータを介して接続されている。また、各ノードNnには、固有の製造番号およびIP(Internet Protocol)アドレスが割り当てられている。そして、本実施形態に係るコンテンツ分散保存システムSは、これらのノードNnのうち、図1の上部枠100内に示すように、何れか複数のノードNnの参加により形成されるピアツーピア方式のネットワークシステムとなっている。
なお、図1の上部枠100内に示すネットワーク9は、既存のネットワーク8を用いて形成された仮想的なリンクを構成するP2Pネットワーク(オーバーレイネットワーク、論理的なネットワーク)9である。かかるP2Pネットワーク9は、特定のアルゴリズム、例えば、DHTを利用したアルゴリズムにより実現される。
そして、コンテンツ分散保存システムS(言い換えれば、P2Pネットワーク9)に参加している各ノードNnには、所定桁数からなる固有の識別情報であるノードIDが割り当てられている。また、当該ノードIDは、例えば、各ノードNnに個別に割り当てられたIPアドレス或いは製造番号を共通のハッシュ関数(例えば、SHA−1等)によりハッシュ化した値(例えば、bit長が160bit)であり、一つのID空間に偏りなく分散して配置されることになる。
更に、コンテンツ分散保存システムSは、新しいコンテンツデータ(コンテンツの複製データであって、以下、「レプリカ」と言う)をコンテンツ分散保存システムS内に投入するコンテンツ投入サーバCSを備える。
なお、コンテンツ分散保存システムSへの参加は、参加していないノードNn(例えば、ノードN8)が、参加している任意のノードNn(例えば、当該システムSに常時参加しているコンタクトノード)に対して参加要求を示す参加(JOIN)メッセージを送信することによって行われる。
また、各ノードNnは、夫々、DHTを用いたルーティングテーブル(送信先テーブルの一例、以下、「DHTルーティングテーブル」という)を保持している。このルーティングテーブルは、コンテンツ分散保存システムS上における各種メッセージの転送先候補(送信先候補)先を規定しており、具体的には、ID空間内で適度に離れたノードNnの「ノードID」、「IPアドレス及びポート番号」、及びレプリカを記録し保存(格納)するためのコンテンツ記録手段の一例であるHD(Hard Disk)等によって構成される記憶部の「空き記録容量」を含むノード情報が複数登録されている。
なお、「IPアドレス及びポート番号」は、アドレス情報の一例であり、「空き記録容量」は、記憶部の“空き記録容量を特定するための情報”の一例である。この記憶部の“空き記録容量を特定するための情報”は、ノードNnの記憶部の空き記録容量を特定できる情報であれば、記憶部の空き記録容量そのもののほか、例えば、ノードNnの装置としての総稼働時間を示す情報、又は、ノードNnが過去にレプリカを取得した回数(ダウンロード回数)を示す情報、又は、ノードNnが取得したレプリカを再生した回数(視聴回数)を示す情報又は、ノードNnが過去に他のノードNn又はコンテンツ投入サーバCSから受けた保存指示の回数(事前配布回数)を示す情報、又は、ノードNnがレプリカを他のノードNnに利用可能とした回数(公開回数)を示す情報・・・・等でもよい。上述した総稼働時間は少ないほうが記憶部の空き記録容量が大きいと特定でき、ダウンロード回数、視聴回数・・・等の回数はいずれも少ないほうが記憶部の空き記録容量が大きいものと特定することができる。
コンテンツ分散保存システムSに参加している1台のノードNnは、該システムSに参加している全てのノードNnのうち、必要最低限のノードNn(つまり、該システムSに参加している全ノードNnの数より少ない数のノードNn)のノード情報をルーティングテーブルに登録しておき、ノード情報を知らない(記憶していない)ノードNnについては、各ノードNn間で互いに各種メッセージを転送し合って届けてもらうようになっている。
本実施形態では、種々の処理を要求するためのメッセージを発行した発行元(送信元の一例)のノードNnの空き記録容量を含むノード情報や、自己に転送してきた転送元(送信元の一例)のノードNnの空き記録容量を含むノード情報を、各種メッセージに含むことにより、メッセージを受信した各ノードNnが保持するルーティングテーブル及びインデックスキャッシュの登録及び更新がされるよう構成する。そして、各ノードNnが他のノードNnにコンテンツのレプリカの保存を指示する際には、ルーティングテーブル及びインデックスキャッシュに基づいて空き記録容量の大きいノードNnを抽出した保存先候補リストを生成し、当該リストから選択したノードNnに対してレプリカの保存を指示するよう構成する。
以下、コンテンツ分散保存システムSにおける各ノードNnの機能の説明と併せて、各ノードNnが保持する「ルーティングテーブル」、「インデックスキャッシュ」について詳細に説明する。次いで、ノードNnがコンテンツのレプリカの保存指示を行なう際に、ルーティングテーブル及びインデックスキャッシュに基づいて生成する「保存先候補リスト」について詳細に説明する。
[1−1.ルーティングテーブル]
ここで、図2及び図3を参照して、DHTルーティングテーブルについて詳しく説明する。
図2は、ノードN2が保持するDHTルーティングテーブルの一例を示す図であり、図3は、DHTのID空間の一例を示す概念図である。
なお、図2及び図3の例においては、説明の便宜上、ノードIDのbit長を2bit×3桁=6bitとし、各桁を4進数(0〜3の整数)で表している(実際には、もっと長いbit長を用い、各桁も例えば4bitに区切って0〜fの16進数で表現する)。
図2の例において、DHTルーティングテーブルは、レベル1(一段目)〜レベル3(三段目)の複数段のテーブルからなり、各レベルのテーブルエントリーには、エリア毎に、ノード情報として、ノードIDとこれに対応するノードNnのIPアドレス及びポート番号及び当該ノードNnの記憶部の空き記録容量が対応付けられて登録されている。
つまり、各ノードNnのノード情報は、複数段に区別して登録されており、最上位段をレベル1として、当該レベル1より下位の段であるレベル2、レベル3が続くことになる(レベル2はレベル3の上位の段ということになる)。
各レベルのテーブルにおける各エリアは、DHTのノードID空間を分割することにより得られるエリアである。例えば、図3に示すように、レベル1では、DHTのID空間全体が4分割され、“000”〜“033”のノードIDが存在するエリアを0XXのエリア、“100”〜“133”のノードIDが存在するエリアを1XXのエリア、“200”〜“233” のノードIDが存在するエリアを2XXのエリア、“300”〜“333” のノードIDが存在するエリアを3XXのエリアとする。また、レベル2では、レベル1のエリア(つまり、0XX〜3XXのエリア)が更に4分割、例えば1XXのエリアが4分割され、“100”〜“103”のノードIDが存在するエリアを10Xのエリア、“110”〜“113” のノードIDが存在するエリアを11Xのエリア、“120”〜“123” のノードIDが存在するエリアを12Xのエリア、“130”〜“133” のノードIDが存在するエリアを13Xのエリアとする。
そして、例えば、ノードN2のノードIDが“122”とすると、図2に示すように、かかるノードN2のレベル1における1XXのエリア(自己(つまり、自ノード)が存在するエリア)のテーブルには、自己のノードID、IPアドレス及び記憶部の空き記録容量(IPアドレス及び空き記録容量は自分のものであるので、当該ルーティングテーブルに登録しなくても良い)等が登録され、自己が存在しないエリア(つまり、0XXのエリア、2XXのエリア、及び3XXのエリア)には、夫々、他の任意のノードNnのノードID及びIPアドレス等が登録されている。
また、かかるノードN2のレベル2における12Xのエリア(自己が存在するエリア)のテーブルには、図2に示すように、ノードID、IPアドレス及び記憶部の空き記録容量(IPアドレス及び空き記録容量は自分のものであるので、当該ルーティングテーブルに登録しなくても良い)等が登録され、自己が存在しないエリア(つまり、10Xのエリア、11Xのエリア、及び13Xのエリア)等には、夫々、他の任意のノードNnのノードID、IPアドレス及び記憶部の空き記録容量等が登録されている。
更に、かかるノードN2のレベル3には、図2に示すように、ノードIDが“120”〜“122”のノードID、IPアドレス及び記憶部の空き記録容量(IPアドレス及び空き記録容量は自分のものであるので、当該ルーティングテーブルに登録しなくても良い)等が登録されている。
なお、図2及び図3の例では、ノードIDのbit長を3桁×2bitとしたので、レベル1〜3の3レベル分のテーブルで網羅できるが、ノードIDのbit長が増せば、その分のテーブルが必要となる(例えば、ノードIDのbit長を16桁×4bitとした場合、16レベル分のテーブルが必要となる)。
このように、本実施形態におけるDHTルーティングテーブルでは、レベルの数値が大きくなるほど、言い換えれば、下位の段にいくほど、エリアが狭まっていくようになっている。
そして、このようなDHTルーティングテーブルは、例えば、未参加のノードがコンテンツ分散保存システムSに参加する際に生成される。
ここで、図4を参照して、コンテンツ分散保存システムSへの参加時におけるDHTルーティングテーブルの生成手順について詳しく説明する。
図4は、コンテンツ分散保存システムSへの参加時におけるDHTルーティングテーブルの生成手順の一例を示す概念図である。
ここで、図4を参照して、コンテンツ分散保存システムSへの参加時におけるDHTルーティングテーブルの生成手順について詳しく説明する。
図4は、コンテンツ分散保存システムSへの参加時におけるDHTルーティングテーブルの生成手順の一例を示す概念図である。
図4に示すように、未参加のノードN8(例えば、ノードIDを“123”とする)がコンテンツ分散保存システムSに参加する場合、例えば、コンタクトノードのIPアドレスを用いて当該コンタクトノードにネットワーク8を介して接続し当該コンタクトノードに対して参加(JOIN)メッセージ(ノードN8のノード情報を含む)を送信する。当該参加メッセージを受信したコンタクトノードは、自己のDHTルーティングテーブルにおけるレベル1のテーブルに登録されているノード情報等を含む返信メッセージを、上記ノードN8に対して返信する。更に、コンタクトノードは、受信された参加メッセージに含まれるノードIDと、DHTルーティングテーブルに登録された他のノードNnのノードIDとの比較結果に基づいてDHTルーティングテーブルから一つのノードNnを選定する。例えば、参加メッセージに含まれるノードIDと最も近い(例えば、上位桁がより多く一致する)ノードIDを有するノードN35が、DHTルーティングテーブルから選定され、当該ノードN35に上記参加メッセージが転送される。このとき、当該参加メッセージには、次に返信させるべきテーブルの段数(ここでは、レベル2)を示す情報が含められる。
次に当該参加メッセージを受信したノードN35は、自己のDHTルーティングテーブルにおけるレベル2のテーブルに登録されているノード情報等を含む返信メッセージを、上記ノードN8に対して返信する。更に、ノードN35は、受信された参加メッセージに含まれるノードIDと、DHTルーティングテーブルに登録された他のノードNnのノードIDとの比較結果に基づいてDHTルーティングテーブルから一つのノードNnを選定する。例えば、参加メッセージに含まれるノードIDと最も近い(例えば、上位桁がより多く一致する)ノードIDを有するノードN2が、DHTルーティングテーブルから選定され、当該ノードN2に上記参加メッセージが転送される。このとき、当該参加メッセージには、次に返信させるべきテーブルの段数(ここでは、レベル3)を示す情報が含められる。
次に当該参加メッセージを受信したノードN2は、自己のDHTルーティングテーブルにおけるレベル3のテーブルに登録されているノード情報等を含む返信メッセージを、上記ノードN8に対して返信する。
以上のようにして参加メッセージは、ノードIDをキーとするDHTルーティングにより、未参加のノードN8のノードIDに一番近いノードIDを有するノードNnまで転送される。
そして、ノードN8は、各ノードNnから受信した返信メッセージに含まれるノード情報等を用いて自己のDHTルーティングテーブルを生成する。当該DHTルーティングテーブルを生成においては、例えば、コンタクトノードから受信されたノード情報が自己のDHTルーティングテーブルのテーブル1に登録され、ノードN35から受信されたノード情報が自己のDHTルーティングテーブルのテーブル2に登録され、ノードN2から受信されたノード情報が自己のDHTルーティングテーブルのテーブル3に登録される。
こうして、ノードN8は、コンテンツ分散保存システムSへの参加が完了することになる。
本実施形態では、上述したような参加メッセージや、後述するクエリ等の各種メッセージに、メッセージの転送元のノードNnのノード情報を含むことにより、ルーティングテーブルの登録及び更新が行われるよう構成する。
図5は各ノードNn間を転送するメッセージの様子を示す概念図であり、同図はノードN8からの参加メッセージがノードN31、ノードN35、ノードN2間を転送する様子を示す。
各ノードNn間を転送するメッセージには、当該メッセージを発行した発行元のノードNnのノードIDと、メッセージの内容(参加、パブリッシュ、クエリ等)と、当該メッセージを自己に転送してきた転送元のノードNnのノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量等)を含んで構成されている。なお、“メッセージの内容”は、参加メッセージの場合には、テーブルの登録情報の返信を要求する旨の情報等が含まれており、また、パブリッシュ(登録)メッセージ又はクエリであれば、パブリッシュ(登録)やクエリ(要求)の対象となるコンテンツのコンテンツID等が含まれている。
同図に示す例の場合、コンタクトノードであるノードN31から参加メッセージを受信したノードN35は、参加メッセージに含まれる転送元のノードN31のノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)を自己のルーティングテーブルに登録する。このとき、ルーティングテーブルにノードN31のノード情報が既に登録されている場合(ノードN31のノードIDが登録されている場合)には、登録済みのIPアドレス及びポート番号、記憶部の空き記録容量を、受信したノード情報に基づいて更新する。
同様に、ノードN35から参加メッセージを受信したノードN2は、参加メッセージに含まれる転送元のノードN35のノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)を自己のルーティングテーブルに登録、或いは更新する。
以上の手順に従い、ルーティングテーブルにノード情報を登録(更新)するので、ルーティングテーブルに登録されているノードNnの記憶部の空き記録容量(及びIPアドレス等)を常に最新の状態に保つことができるようになっている。
[1−2.インデックスキャッシュ]
ところで、コンテンツ分散保存システムSにおいては、内容の異なる様々なコンテンツ(例えば、映画や音楽等)のレプリカが所定のファイル形式で複数のノードNnに分散して保存(格納)されており、各ノードNn間で当該レプリカを授受可能になっている。例えば、ノードN5には、タイトルがXXXの映画のコンテンツのレプリカが保存されており、一方、ノードN3には、タイトルがYYYの映画のコンテンツのレプリカが保存されるというように、複数のノードNn(以下、「コンテンツ保持ノード」という)に分散されて保存されている。
また、これらのコンテンツのレプリカには、夫々、コンテンツ名(タイトル)、及びコンテンツID(コンテンツ毎に固有のコンテンツ識別情報)等の情報が付与されている。このコンテンツIDは、例えば、コンテンツ名+任意の数値(或いは、コンテンツデータの先頭数バイトでも良い)が、上記ノードIDを得るときと共通のハッシュ関数によりハッシュ化されて生成される(ノードIDと同一のID空間に配置)。或いは、システム管理者が、コンテンツ毎に一意のID値(ノードIDと同一ビット長)を付与しても良い。この場合は、コンテンツ名とそのコンテンツIDの対応が書かれたコンテンツカタログリストが、全ノードNnに配布される。
また、このように分散保存されているレプリカの所在、つまり、当該レプリカを保存したノードNnのノード情報と当該コンテンツのレプリカに対応するコンテンツID等の組が含まれるインデックス情報が、当該コンテンツのレプリカの所在を管理しているノードNn(以下、「ルートノード」、又は「コンテンツデータ(コンテンツID)のルートノード」という)等により記憶(インデックスキャッシュに記憶)、管理されるようになっている。
つまり、コンテンツのレプリカを保存しているコンテンツ保持ノードのノード情報は、他のノードNnからの問い合わせに応じて提供可能なようにルートノードにより管理されている。
例えば、タイトルがXXXの映画のコンテンツのレプリカについてのインデックス情報(コンテンツIDとコンテンツ保持ノードのノード情報)は、そのコンテンツ(コンテンツID)のルートノードであるノードN4により管理され、タイトルがYYYの映画のコンテンツのレプリカについてのインデックス情報は、そのコンテンツ(コンテンツID)のルートノードであるノードN7により管理される。また、このようなルートノードは、例えば、コンテンツIDと最も近い(例えば、上位桁がより多く一致する)ノードIDを有するノードNnであるように定められる。
図6は、ノードN2が保持する本発明のインデックス情報記憶手段としてのインデックスキャッシュの一例を示す図である。
ノードN2は、コンテンツ1、コンテンツ2、コンテンツ3・・・・を保存しているノード(コンテンツ保持ノード、コンテンツ事前保持ノード)のノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)を登録し管理している、コンテンツ1〜3のルートノードである。
ノードN2は、コンテンツ1〜3を保存しているノードNnから後述するパブリッシュ(登録)メッセージを受信すると、当該メッセージに含まれるコンテンツID、ノード情報をインデックス情報としてインデックスキャッシュに登録する。
そして、あるノードNnのユーザが、所望するコンテンツのレプリカを取得したい場合、当該レプリカの取得を望むノードNn(以下、「ユーザノード」という)は、当該ユーザにより例えばコンテンツカタログリストから選択されたコンテンツのコンテンツID及び自己のIPアドレス等を含むコンテンツ所在問合せ(検索)メッセージ(クエリ)を生成し、これを自己のDHTルーティングテーブルにしたがって他のノードNnに対して送出する。つまり、ユーザノードは、コンテンツ所在問合せ(検索)メッセージを、ルートノードに向けて(ルートノード宛に)送出する(つまり、ルートノードにコンテンツのレプリカの所在を問い合わせる)。これにより、コンテンツ所在問合せ(検索)メッセージは、コンテンツIDをキーとするDHTルーティングによって最終的にルートノードに到着することになる。
なお、このDHTルーティングについては、特開2006−197400号公報等で公知であるので、詳しい説明を省略する。
なお、各ノードNnにおいてユーザにより選択されるべきコンテンツのコンテンツ名、コンテンツID、公開日時等の属性情報は、コンテンツカタログリストに記述されている。また、上記コンテンツ所在問合せ(検索)メッセージに含まれるコンテンツIDは、ユーザノードによって、コンテンツ名が上記共通のハッシュ関数によりハッシュ化されて生成されるようにしても良い。
上記コンテンツ所在問合せ(検索)メッセージを受信したルートノードは、これに含まれるコンテンツIDに対応するインデックス情報をインデックスキャッシュから取得して、当該インデックス情報を、該コンテンツ所在問合せメッセージの送信元であるユーザノードに対して返信する。こうしてインデックス情報を取得したユーザノードは、当該インデックス情報に含まれるあるコンテンツ保持ノードのIPアドレス等に基づいて当該コンテンツ保持ノードに接続して、コンテンツ送信要求メッセージを送信し、そこからコンテンツのレプリカを取得(ダウンロード)する。
なお、ルートノードは、当該インデックス情報に含まれるIPアドレス等に示されたコンテンツ保持ノードに対してコンテンツ送信要求メッセージを送信し、これにより、ユーザノードは、上記コンテンツ保持ノードからそのレプリカを取得することもできる。また、上記ユーザノードは、コンテンツ所在問合せメッセージがルートノードに辿り着くまでの間に、当該ルートノードと同じインデックス情報をキャッシュしているキャッシュノードから当該インデックス情報を取得することもできる。
そして、コンテンツ保持ノードから取得したコンテンツのレプリカを保存(例えば、ハードディスク等の記憶部に記録)したユーザノードは、当該レプリカを保存したことをそのルートノードに知らせるために(言い換えれば、該システムSに参加している他のノードNnに対して公開するために)、当該レプリカのコンテンツID及び自己のノード情報(発行元ノード情報)(ノードID、IPアドレス及びポート番号、空き記録容量)が含まれるパブリッシュ(登録)メッセージを生成し(メッセージ生成手段)、該パブリッシュメッセージを、そのルートノードに向けて(ルートノード宛に)送出する(メッセージ送信手段)。
これにより、パブリッシュメッセージは、コンテンツ所在問合せ(検索)メッセージと同じように、コンテンツIDをキーとするDHTルーティングによってルートノードに到着することになる。そして、該ルートノードは、受信したパブリッシュメッセージに含まれる発行元のノード情報及びコンテンツIDの組を含むインデックス情報を登録(インデックスキャッシュに記憶)することになる。こうして、上記ユーザノードは、新たに、上記コンテンツのレプリカを保持するコンテンツ保持ノードとなる。
なお、上記パブリッシュメッセージに含まれる発行元のノード情報、メッセージの内容(コンテンツID)の組であるインデックス情報は、ルートノードに至るまでの転送経路におけるキャッシュノードにおいても登録(キャッシュ)される。
図7は各ノードNn間を転送するパブリッシュメッセージの様子を示す概念図であり、同図は任意のコンテンツのレプリカを保存したノードN1からのパブリッシュメッセージがノードN7、ノードN29、ノードN2間を転送する様子を示す。
パブリッシュメッセージには、当該パブリッシュメッセージを発行した発行元のノードNnのノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)、メッセージの内容(パブリッシュ(登録)の対象となるコンテンツのコンテンツIDや公開日時情報等)、当該パブリッシュメッセージを自己に転送してきた転送元のノードNnのノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)等を含んで構成される。
そして当該パブリッシュメッセージの転送経路のノードNnにおいて、
(i)発行元のノードNnのノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)はインデックスキャッシュに登録され、
(ii)転送元のノードNnのノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)はルーティングテーブルに登録される。
同図に示す例の場合、任意のコンテンツを保持したノードN1からパブリッシュメッセージを受信したノードN7は発行元のノードN1のノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)を自己のインデックスキャッシュに登録する。このとき、ノードN1のノード情報が既にインデックスキャッシュに登録されている場合(ノードN1のノードIDが登録されている場合)には、登録済みのIPアドレス及びポート番号、記憶部の空き記録容量を受信したノード情報に基づいて更新する。
そして、ノードN7からパブリッシュメッセージを受信したノードN29は、パブリッシュメッセージに含まれる当該パブリッシュメッセージの発行元のノードN1のノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)を自己のインデックスキャッシュに登録(又は更新)する。
また、ノードN29は、パブリッシュメッセージに含まれる当該パブリッシュメッセージの転送元のノードN7のノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)を自己のルーティングテーブルに登録する。このとき、ノードN7のノード情報が既にルーティングテーブルに登録されている場合(ノードN7のノードIDが登録されている場合)には、登録済みのIPアドレス及びポート番号、記憶部の空き記録容量と、受信したノード情報に基づいて更新する。
そして、ノードN29からパブリッシュメッセージを受信したノードN2は、パブリッシュメッセージの発行元のノードN1のノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)を自己のインデックスキャッシュに登録(又は更新)し、転送元のノードN29のノード情報(ノードID、IPアドレス及びポート番号、記憶部の空き記録容量)を自己のルーティングテーブルに登録(又は更新)する。
図6に示す例の場合、ノードN2はインデックスキャッシュに、コンテンツ1を保存しているノードN1、N14、N21及びN11と、コンテンツ2を保存しているノードN35と、コンテンツ3を保存しているノードN32、N22、及びN5の記憶部の空き記録容量を記憶しており、図7を用いて説明した手順に従い、インデックスキャッシュのノード情報を登録(更新)するので、インデックスキャッシュに登録されているノードNnの記憶部の空き記録容量(及びIPアドレス等)を常に最新の状態に保つことができる。
[1−3.コンテンツ分散保存システムSへのコンテンツの投入]
次に、コンテンツ分散保存システムSへのコンテンツの投入について説明する。
コンテンツ投入サーバCSが、コンテンツ分散保存システムSの任意のノードNnに対してレプリカの保存指示を行ない、保存指示を受けたノードNnが他のノードNnに対して保存指示を繰り返し行なうことにより、コンテンツ分散システムS内にてコンテンツの事前保存が行なわれる。
なお、本実施形態では、コンテンツ投入サーバCSがコンテンツのレプリカの保存を指示する際には、当該指示と共にコンテンツのレプリカが保存先のノードNnに共に送信される、いわゆる「プッシュ式」のコンテンツ保存が行なわれるよう構成する。
この際、コンテンツ投入サーバCSは、当該システムSに参加するノードNnのうち、ランダムに選択した任意台数(例えば第1所定数)のノードNnに対してレプリカの保存を指示するよう構成してもよく、或いは、コンテンツ投入サーバCSが、コンテンツ分散保存システムSに参加する際に各ノードNnが参加(登録)認証を受ける図示しない認証サーバに対して任意台数(例えば第1所定数)のノードNnのIPアドレス及びポート番号等を要求し、認証サーバから通知されたIPアドレス及びポート番号に従って新規レプリカの保存を指示するよう構成してもよく、或いは、コンテンツ投入サーバCSが、任意にノードIDを生成し、当該ノードIDのノードNnに向けて新規レプリカの保存を指示するよう構成してもよい。
そして、コンテンツ投入サーバCSから受信した新規レプリカを自己の記憶部に保存してコンテンツ事前保持ノードとなったノードNnは、自己が知っている他のノードNn対して新規レプリカの保存を指示する。具体的には、例えばコンテンツ事前保持ノードとなったノードN2は、自己が保持するルーティングテーブル及びインデックスキャッシュを参照して、空き記録容量が比較的大きい第2所定数のノード情報を抽出して、抽出されたノード情報に基づいて保存先候補リストを生成し、生成した保存先候補リストのうち、空き記録容量が最も大きい第1所定数(第1所定数<第2所定数)のノードNnから順に選択して、保存の対象となるレプリカと、当該レプリカの保存を指示する保存指示情報を送信する。なお、保存指示情報には、保存指示の対象となるレプリカが他のノードNn間で共用可能となる日時である公開日時を示す情報(公開日時情報)等を含む。
<保存先候補リスト>
図を用いて保存先候補リストについて詳細に説明する。
図8は、保存先候補リストの一例を示す図である。
ノードNnは、コンテンツ投入サーバCS又は他のノードNnから保存指示情報を受信すると、自己が保持するルーティングテーブル及びインデックスキャッシュを参照して、空き記録容量が比較的大きい第2所定数のノード情報を抽出して保存先候補リストを生成する。
図8は、任意のノードNnが自己が保持するルーティングテーブル及びインデックスキャッシュの中から空き記録容量が1番〜10番に大きいノード情報(Nx_1〜Nx_10)を抽出して生成した保存先候補リスト(第2所定数=10)であり、各ノード情報は、対応する各ノードのノードID、IPアドレス及びポート番号、記憶部の空き記録容量を含んでいる。
ノードNnは、このように生成した保存先候補リストから、空き記録容量が大きい方から順に第1所定数のノードNnを選択する。
例えば、ノード情報Nx_1、Nx_2、Nx_3、Nx_4・・・、Nx_10の順で空き記録容量が大きく、第1所定数が“2”である場合には、最初にノード情報Nx_1、Nx_2が選択され、当該ノード情報Nx_1、Nx_2に対応する2台のノードNnに対して保存指示の対象となるレプリカと保存指示情報が送信され、次いで、ノード情報Nx_3、Nx_4が選択され、当該ノード情報Nx_3、Nx_4に対応する2台のノードNnに対して保存指示の対象となるレプリカと保存指示情報が送信される。
このように、空き記録容量が大きい順にノードNnが選択され、レプリカの保存が指示される。
なお、リストに同じ空き記録容量のノードNnが複数ある場合には、優先順位に従って優先順位の高いノードNnに先にレプリカの保存が指示されるよう構成する。
また、ルーティングテーブル及びインデックスキャッシュから第2所定数のノードNnを抽出する際にも、最後のノードNnを抽出する際、つまり、第2所定数が10であって、10番目に空き記録容量が大きいノードNnが複数ある場合にも、優先順位の高いノードNnが抽出されるよう構成する。
このような優先順位は、空き記録容量が同じ複数のノードNnのうち、インデックスキャッシュから抽出されたノードNnを優先することとする。ID空間においてコンテンツをより偏りなく分散して保存させることができるからである。
また、これら複数のノードNnが何れもルーティングテーブルから抽出されたノードNnであれば、抽出元のテーブルをレベル1、レベル2、レベル3の順で(図2及び図3参照)優先する。レベル1はID空間において自己との距離が最も離れており、レベル1を最も優先して選択すれば、ID空間においてコンテンツをより偏りなく分散して保存させることができるからである。
さらに、最近通信が行われたほう(最も最近通信しあったほう)のノードNnを優先してもよい。ノードNnがコンテンツ分散保存システムSから脱退しており、通信ができないといったリスクを軽減するためである。
<2.各装置の構成及び機能>
<2−1.ノードNnの構成及び機能>
次に、図9を参照して、ノードNnの構成及び機能について説明する。
図9は、ノードNnの概要構成例を示す図である。
各ノードNnは、図9に示すように、演算機能を有するCPU,作業用RAM,各種データおよびプログラムを記憶するROM等から構成されたコンピュータとしての制御部11と、各種データ(例えば、コンテンツデータのレプリカ、インデックスキャッシュ、ルーティングテーブル、保存先候補リスト等)及び各種プログラム等を記憶保存(格納)するためのハードディスク等から構成されたコンテンツ記録手段及びノード情報記憶手段としての記憶部12と、受信されたコンテンツデータのレプリカ等を一時蓄積するバッファメモリ13と、コンテンツデータのレプリカに含まれるエンコードされたビデオデータ(映像情報)およびオーディオデータ(音声情報)等をデコード(データ伸張や復号化等)するデコーダ部14と、当該デコードされたビデオデータ等に対して所定の描画処理を施しビデオ信号として出力する映像処理部15と、当該映像処理部15から出力されたビデオ信号に基づき映像表示するCRT,液晶ディスプレイ等の表示部16と、上記デコードされたオーディオデータをアナログオーディオ信号にD(Digital)/A(Analog)変換した後これをアンプにより増幅して出力する音声処理部17と、当該音声処理部17から出力されたオーディオ信号を音波として出力するスピーカ18と、ネットワーク8を通じて他のノードNn、コンテンツ投入サーバCS、等間の情報の通信制御を行なうための通信部20と、ユーザからの指示を受け付け当該指示に応じた指示信号を制御部11に対して与える入力部(例えば、キーボード、マウス、或いは、操作パネル等)21と、を備えて構成され、制御部11、記憶部12、バッファメモリ13、デコーダ部14、通信部20、及び入力部21はバス22を介して相互に接続されている。なお、ノードNnとしては、パーソナルコンピュータ、STB(Set Top Box)、或いは、TV受信機等を適用可能である。
また、コンテンツ分散保存システムSが、当該システムSに参加する際のアクセス先となるコンタクトノードを備えている場合には、記憶部12には当該コンタクトノードのIPアドレス及びポート番号等が記憶されている。更に、記憶部12には、保存(記録)しているコンテンツのレプリカに関する情報(タイトル、コンテンツID等)を登録するための保存コンテンツ管理テーブルが記憶されている。
このような構成において、制御部11は、CPUが記憶部12等に記憶されたプログラム(本発明のノード処理プログラムを含む)を読み出して実行することにより、全体を統括制御し、コンテンツ分散保存システムSへの参加により上述したユーザノード、中継ノード、ルートノード、キャッシュノード、コンテンツ保持ノード、及びコンテンツ事前保持ノードの少なくとも何れか一つのノードとしての処理を行なうようになっている。
また、制御部11は、本発明におけるメッセージ生成手段、メッセージ送信手段、メッセージ受信手段、ノード情報記憶手段、選択手段、保存指示手段、更新手段判定手段、及び識別情報生成手段として機能する。なお、上記ノード処理プログラムは、例えば、ネットワーク8上の所定のサーバからダウンロードされるようにしてもよいし、例えば、CD−ROM等の記録媒体に記録されて当該記録媒体のドライブを介して読み込まれるようにしても良い。
そして、各種メッセージを他のノードNnに送信(転送)する際には、制御部11は、記憶部12の空き記録容量を取得する。例えば、記憶部12のレプリカが記録されるハードディスクのキャッシュ領域の全容量と、既に使用している記録容量(使用容量)を求め、全容量から使用容量を減算して求めればよい(空き記録容量=全容量―使用容量)。
そして、制御部11はメッセージ生成手段、メッセージ送信手段として機能し、パブリッシュやクエリ等の各種メッセージを生成する際には、空き記録容量、自己のノードID、IPアドレス及びポート番号を含むノード情報を付加してメッセージを生成し、当該メッセージを、記憶部12のルーティングテーブルに従い転送(送信)すべき他のノードNnに送信する。
また、制御部11は、コンテンツ投入サーバCS又は他のノードNnから、新たにコンテンツ分散保存システムSに投入すべきコンテンツのレプリカの保存指示を受けると、当該レプリカを記憶部12に記憶する。そして、記憶部12のルーティングテーブルとインデックスキャッシュに基づいて保存先候補リストを生成し、生成した保存先候補リストからレプリカの保存指示をすべきノードNnを選択する。そして、制御部11は、記憶部12の空き記録容量を取得し、自己のノードID、IPアドレス及びポート番号と共にノード情報として付加して保存指示情報を生成し、選択したノードNnに対してレプリカと当該レプリカの保存を指示する保存指示情報を送信する。
<2−2.コンテンツ投入サーバCSの構成及び機能>
続いて、コンテンツ投入サーバCSの概略構成について図10を用いて説明する。なお、図10は実施形態に係るコンテンツ投入サーバCSの概略構成を示すブロック図である。
図10に示すように、実施形態に係るコンテンツ分散保存システムSに含まれるコンテンツ投入サーバCSは、演算機能を有するCPU、作業用RAM(Random Access Memory)、各種データ及びプログラムを記録するROM(Read Only Memory)等から構成された制御部301と、投入するコンテンツデータや投入済みのコンテンツデータ、及びその他の必要なプログラム等を記録保存(格納)するためのHD等から構成されたノード情報記憶手段としての記憶部302と、ネットワーク8を通じて各ノードNn等、他の装置との間の情報の通信制御を行なうための通信部303と、当該コンテンツ投入サーバCSを操作する操作者からの指示を受け付け当該指示に応じた指示信号を制御部301に出力する入力部(例えば、キーボード、マウス或いは、操作パネル等)304と、を備えて構成され、制御部301、記憶部302、通信部303及び入力部304は、バス305を介して相互にデータの授受が可能に接続されている。
そして、制御部301におけるCPUが記憶部302等に記録されたプログラムを読み出して実行することにより、全体動作を統括制御する。
制御部301は、コンテンツ分散保存システムSに参加する何れかのノードNnに対して新たにコンテンツ分散保存システムSに投入するコンテンツのレプリカを送信してレプリカの保存を指示する。
また、コンテンツ投入サーバCSが、新たなコンテンツをシステム内に保存させる数(保存数)を当該コンテンツの人気度等に応じて決定し、当該保存数に応じて、コンテンツのレプリカを保存の指示を出すノードNnの数を適宜決定するよう構成してもよい。例えば、人気が高く公開後に多数のレプリカ配信要求が予測される場合には、保存数を多く決定し、少なくとも決定した保存数以上の数のノードNnをランダムに選択して、レプリカを送信し、保存を指示するよう構成すればよい。なお、コンテンツの人気度とは、例えば、コンテンツが映画であって、既に劇場公開されているような場合、その観客動員数に応じて決定したり、或いは、コンテスト等の受賞履歴等に基づいて決定したり、或いは、コンテンツが音楽である場合には、そのアーティストの過去の作品の売り上げ等を考慮して決定すればよい。
[3.各装置の処理]
以上の動作において各ノードNnにおける処理を、図を参照して、詳しく説明する。
[3−1.メッセージ受信処理]
図11は、コンテンツ分散保存システムSに参加している任意のノード装置Nnにおける制御部11の処理であり、他のノードNnからメッセージを受信した際のメッセージ受信処理を示すフローチャートである。
先ず、制御部11は、ノードNn自身の電源がオフとされたか否かを判定し(ステップS10)、オフとされていなければ(ステップS10:No)、コンテンツ分散保存システムSに参加する他のノードNnからメッセージを受信したか否かを判定する(ステップS11)。
判定の結果、メッセージを受信していない場合(ステップS11:No)には、ステップS10へ移行し、メッセージを受信した場合(メッセージ受信手段:ステップS11:Yes)には、受信したメッセージに含まれる転送元のノード情報を記憶部12のルーティングテーブルに登録する(ステップS12)。既にルーティングテーブルに転送元のノード情報が登録されている場合には受信したノード情報に従って更新する。
次いで、受信したメッセージがパブリッシュメッセージであるか否かを判定する(ステップS13)。判定の結果、パブリッシュメッセージではない場合(ステップS13:No)には、ステップS15へ移行し、パブリッシュメッセージである場合(ステップS13:Yes)には、受信したパブリッシュメッセージに含まれる発行元のノード情報を記憶部12のインデックスキャッシュに登録する(ステップS14)。既にインデックスキャッシュに発行のノード情報が登録されている場合には受信したノード情報に従って更新する。
続いて、受信したメッセージが、自分宛であるか否かを判定する(ステップS15)。つまり、記憶部12のルーティングテーブルに従って転送すべき他のノードNnが無い場合は、自分宛のメッセージであるため(ステップS15:Yes)、メッセージに応じた処理を行ない(ステップS16)、ステップS10へ移行する。
一方、受信したメッセージが、自分宛で無い場合(ステップS15:No)には、記憶部12の空き記録容量を取得し、自己のノードIDとIPアドレス及びポート番号に基づいて、受信したメッセージの転送元のノード情報を入れ替え更新する(ステップS17)。
そして、更新後のメッセージを記憶部12のルーティングテーブルに従ってメッセージを他のノードNnに転送し(ステップS18)、処理を終了する。
そして、電源がオフとなった場合に(ステップS10:Yes)、処理を終了する。
[3−2.レプリカの保存指示受け付け処理]
図12は、コンテンツ分散保存システムSに参加している任意のノードNnにおける制御部11の処理であり、コンテンツ投入サーバCS又は他のノードNnからコンテンツレプリカの保存が指示された際の保存指示受け付け処理を示すフローチャートである。
先ず、制御部11は、ノードNn自身の電源がオフとされたか否かを判定し(ステップS30)、オフとされていなければ(ステップS30:No)、コンテンツ投入サーバCSまたは他のノードNnからコンテンツのレプリカの保存が指示されたか否かを判定する(ステップS31)。
判定の結果、レプリカの保存が指示された場合には保存指示されたコンテンツのレプリカを自己の記憶部12に保存可能か否かを判定する(ステップS32)。具体的には、記憶部12の空き記録容量と保存指示されたレプリカのデータ容量等に基づいて、保存指示されたレプリカを保存可能か否かを判断することができる。なお、既に記憶しているレプリカの重要性と保存指示されたレプリカの重要性(例えば人気度が高いほうを優先して保存しておく等)を比較して、比較の結果、既に記憶しているレプリカを記憶部12から削除して空き記録容量を確保するよう構成してもよい。
判定の結果、保存指示されたコンテンツのレプリカを自己の記憶部12に保存可能である場合(ステップS32:Yes)、保存指示元(コンテンツ投入サーバCSまたは他のノードNn)からコンテンツのレプリカを受信して、コンテンツのレプリカを自己の記憶部12に保存する(ステップS33)。次いで、記憶部12のルーティングテーブル及びインデックスキャッシュから第2所定数のノード情報を抽出し送付先候補リストを生成して(ステップS34)、記憶部12に記憶する。保存先候補リストは、空き記録情報の大きい順に(先頭が最も空き記録情報が大きい)生成する。
一方、レプリカの保存が指示されていない場合(ステップS31:No)、及び保存指示されたレプリカの保存が可能でない場合(ステップS32:No)には、ステップS30へ移行する。
そして、送付先候補リストを記憶部12に記憶した後、保存先候補リストのノード情報に基づいて他のノードNnにレプリカの保存指示を行なう(ステップS35)。
先ず、制御部11は判定手段として機能し、記憶部12に保存先候補リストに第1所定数のノード情報があるか否かを判定する(ステップS36)。
判定の結果、保存先候補リストに第1所定数のノード情報がある場合(ステップS36:Yes)には、制御部11は選択手段として機能し、保存先候補リストの先頭から第1所定数のノードNnを選択する(ステップS37)。そして、制御部11は保存指示手段として機能し、選択したノードNnに、保存指示情報を送出してコンテンツのレプリカの保存を指示する(ステップS38)。そして、制御部11は更新手段として機能し、ステップS37で選択され、ステップS38にてレプリカの保存を指示したノードNnを保存先候補リストから削除して更新する(ステップS39)。
一方、保存先候補リストに第1所定数のノード情報がない場合(ステップS36:No)には、制御部11は識別情報生成手段として機能し、第1所定数のノードIDを生成し(ステップS40)、生成したノードIDのノードNnに向けて保存指示情報を送出してコンテンツの保存を指示する(ステップS41)。
このように、生成したノードIDに向けて送出された保存指示情報は、各種メッセージと同様に各ノードNn間をDHTルーティングに従って転送され、最終的に生成したノードIDと同一のノードIDを有するノードNn、或いは当該生成したノードIDに近いノードIDを有するノードNnに到達し、この保存指示情報の最終到達先であるノードNnがレプリカを保存することとなる。なお、この場合、保存指示情報とレプリカとを共に送出してレプリカを「プッシュ式」で送信する構成のほか、保存指示情報のみを保存指示メッセージとしてルーティングテーブルに従って送信し、保存指示情報の最終到達先であるノードNnが保存指示情報に含まれる保存指示元のノード情報(ノードID、IPアドレス等)に基づいて保存指示元(コンテンツ投入サーバ、又はノードNn)に対して保存すべきレプリカを要求してレプリカを取得するよう構成してもよい。
その後、制御部11は、受信した保存指示情報に含まれる公開日時情報に基づいてコンテンツのレプリカの公開日時まで上記ステップS36からS39のループ処理を行ない、公開日時に至るとループ処理を終了する(ステップS32)。
その後、ステップS30に移行し、電源がオフとなった場合に(ステップS30:Yes)、処理を終了する。
以上説明したように、コンテンツ分散保存システムSに新たなコンテンツのレプリカを投入する際に、ノードNnは、記録部12の空き記録容量が比較的大きいノードNnが掲載された保存先候補リストから第1所定数のノードNnを選択し、選択したノードNnに対して保存を指示するため、各ノードNnの記録部12の記録容量をバランスよく有効に利用することが可能なコンテンツ分散保存システムSを実現することができる。
また、本実施形態によれば、種々の処理(参加、パブリッシュ等)を要求するため、各ノードNn間を転送される各種メッセージに、空き記録容量を特定するための情報を含んで送信するよう構成したので、他のノード装置の空き記録容量を特定するための情報を容易に取得することができる。
更に、本実施形態によれば、各種メッセージに、メッセージの発行元と転送元のノードNnの空き記録容量とノードIDを含むノード情報を付加するよう構成し、これらメッセージのノード情報に基づいて登録や更新が行われる、メッセージの送信のために利用されるルーティングテーブルや、コンテンツデータを保存している他のノード装置の情報を記憶するインデックスキャッシュに、他のノードNnの空き記録容量を対応付けて記憶しておくことができ、比較的簡便な構成で他のノードNnの記憶部12の空き記録容量を把握、管理することができる。そして更に、これらルーティングテーブル及びインデックスキャッシュから保存先候補リストを生成し、当該リストから順に第1所定数のノードNnを選択するよう構成した。このルーティングテーブル及びインデックスキャッシュは、各ノードNn独自に保持されるものであることから、このようなルーティングテーブル及びインデックスキャッシュに基づいて生成された保存先候補リストからコンテンツレプリカの保存指示先となるノードNnを選択することにより、ID空間内に偏りなく分散してレプリカを保存することができる。
なお、第1所定数は、第2所定数に応じて、或いは、公開日時までの期間(例えば、公開日時まで時間が無い場合には第1所定数を大きくしてできるだけ早く多数のノードNnにレプリカの事前配布を完了させる等)等を考慮して適宜変更可能である。
また、ステップS40、S41において、ノードNnが、保存指示をすべき第1所定数のノードNnを選択できない場合には、第1所定数のノードIDを生成し、生成したノードIDのノードNnに向けてレプリカの保存を指示する保存指示情報を送出するよう構成したので、公開日時前に保存先候補リストのノード情報が無くなってしまい、第1所定数のノードNnを選択できない場合であっても、公開日時まで他のノードNnに対するレプリカの保存指示を滞らせることなく円滑に遂行することができる。
更に、レプリカの保存を指示したノードNnのノード情報を記憶部12に記憶した保存先候補リストから削除するよう構成したので、同じノードNnに重複してレプリカの保存指示を行なうことを防止することができる。
なお、ノードNnは、レプリカの保存を指示したノードNnにレプリカが確実に保存できたことを確認した後に、当該ノードNnのノード情報を保存先候補リストから削除するよう構成してもよい。この場合、保存指示を受けたノードNn(保存指示先)は、レプリカを保存した後に保存指示元であるノードNnに対して保存完了の報告等を通知するよう構成すればよい。そして、保存指示元のノードNnは、保存指示先のノードNnから保存完了の報告が通知されてこない場合には、保存指示先のノードNnを保存先候補リストから削除すると共に、保存指示先のノードNnのノード情報に掲載されたノードIDに向けてレプリカの保存を指示する保存指示情報を送出するよう構成すればよい。このメッセージは、当該ノードIDと近いノードIDを有するノードNnに到達することとなり、到達したノードNnがレプリカの保存指示を受け、レプリカを保存することとなる。
更に、ステップS32にて保存指示されたコンテンツのレプリカが保存不可能であると判断された場合には、保存指示元のノードNnに対して、保存指示不可報告を通知するよう構成すればよい。そしてこれを受けた保存指示元のノードNnは、上記と同様に、通知をしてきた保存指示元のノードNnのノードIDに向けてレプリカの保存を指示するよう構成すればよい。
なお、上記実施形態におけるコンテンツ分散保存システムSは、DHTを利用したアルゴリズムによって形成されることを前提として説明したが、本発明はこれに限定されるものではない。