以下、本発明の実施形態を図面に基づいて説明する。なお、以下に説明する実施の形態は、配信システムに本発明を適用した場合の実施形態である。
[1.配信システムの構成及び動作概要]
始めに、図1を参照して、本実施形態の配信システムの構成及び動作概要について説明する。図1は、本実施形態の配信システムの概要構成例を示す図である。図1に示すように、本実施形態の配信システムSは、センターサーバSS、及びノード装置Nn(n=1,2,3・・・k)等により構成されている。なお、配信システムSは、本発明の情報通信システムの一例である。ノード装置Nnを、以下、「ノード」という。また、センターサーバSS及びノードはネットワークNWに接続されている。ネットワークNWは、インターネット等からなる。なお、ノードは、本発明における第2ノード装置の一例である。
また、図1に示すように、配信システムSには、複数の拠点Pnごとに拠点ネットワークNLnが構築されている。この拠点の例としては、例えばカラオケ店舗、学校、会社、住宅、またはその他の施設等が挙げられる。拠点ネットワークNLnは、例えば、通信手段としてのLAN(Local Area Network)等のプライベートネットワークである。
また、各拠点ネットワークNLnには、ノードと複数の拠点端末Tn−l(l=1,2,3・・・j)とが接続されている。ノードは、同じ拠点ネットワークNLnに接続されている拠点端末Tn−lへコンテンツを提供するエッジサーバとしての機能を有する。一方、拠点端末Tn−lは、コンテンツを再生する機能を有する。例えば、拠点Pnがカラオケ店舗の場合、拠点端末Tn−lは、カラオケ用のコンテンツを再生するコマンダである。また、例えば拠点Pnが学校である場合、教材用のコンテンツを再生する視聴端末である。また、例えば拠点Pnが会社である場合、研修用のコンテンツを再生する視聴端末である。また、例えば拠点Pnが住宅である場合、放送番組用のコンテンツを再生するセットトップボックスである。
また、図1に示すように、配信システムSには、ネットワークNWを介して互いに通信可能な複数のノードの参加によりオーバーレイネットワークONが構成されている。オーバーレイネットワークONは、仮想的なリンクを構成する論理的なネットワークである。オーバーレイネットワークONは、特定のアルゴリズム、例えば、分散ハッシュテーブルを利用したアルゴリズムにより実現される。なお、分散ハッシュテーブルを、以下、「DHT(Distributed Hash Table)」という。ここで、オーバーレイネットワークONに参加するとは、DHTを用いたルーティングテーブルに基づいてオーバーレイネットワークONを介して他のノードとの間で各種メッセージを送受信できる状態に稼動することをいう。なお、DHTを用いたルーティングテーブルについては、特開2006−197400号公報等で公知であるので、詳しい説明を省略する。
また、オーバーレイネットワークONに参加している各ノードには、ノードIDが付与されている。このノードIDは、ノードを、オーバーレイネットワークONに参加しているノードの中から識別する固有の識別情報である。
配信システムSにおいては、様々なコンテンツが複数のノードに分散して保存される。各コンテンツには、それぞれコンテンツIDが付与されている。コンテンツIDは、コンテンツを、オーバーレイネットワークONに保存されるコンテンツの中から識別する固有の識別情報である。センターサーバSSは、コンテンツをオーバーレイネットワークONに投入する。コンテンツの投入とは、コンテンツを何れかのノードに保存させ、保存されたコンテンツを、各ノードがオーバーレイネットワークONから取得可能にすることである。各コンテンツのコンテンツID等の属性情報は、コンテンツカタログ情報に記述されている。コンテンツカタログ情報は、センターサーバSSにより作成される。そして、センターサーバSSが、コンテンツカタログ情報を全てのノードに配信する。
また、各コンテンツは、複数のデータに分割されている。コンテンツから分割されたデータを、「チャンク」という。各チャンクは、例えば、センターサーバSSにより、コンテンツを所定のデータサイズで分割することにより生成される。各チャンクは、複数のノードに分散されて保存される。これにより、元となるコンテンツが複数のノードに分散して保存されることになる。各チャンクのオリジナルは、センターサーバSSに保存されている。各チャンクには、それぞれシーケンス番号及びチャンクIDが付与されている。シーケンス番号は、例えば、分割された複数のチャンクを、元となるコンテンツを構成するように並べたときの並び順に相当する。チャンクIDは、チャンクを、オーバーレイネットワークONに保存されるチャンクの中から識別する固有の識別情報である。なお、チャンクは、本発明におけるデータの一例である。また、チャンクIDは、本発明における識別情報、第1識別情報の一例である。
コンテンツを構成する各チャンクのシーケンス番号及びチャンクIDは、コンテンツごとにメタファイルに記載されている。コンテンツのメタファイルは、そのコンテンツのコンテンツIDと対応付けられている。メタファイルは、チャンクと同様に、複数のノードに分散されて保存される。なお、チャンクを保存しているノードを、「チャンクの保持ノード」という。また、チャンクの所在を示す情報は、インデックス情報として、コンテンツの所在を管理しているノードに記憶される。チャンクの所在を管理しているノードを、以下、「ルートノード」という。インデックス情報には、チャンクを保存している保持ノードのノード情報と、チャンクのチャンクIDとの組が含まれる。ノード情報には、例えば、保持ノードのIPアドレス、ポート番号、及びノードIDが含まれる。ルートノードは、例えば、チャンクIDと最も近いノードIDが割り当てられたノードであるように定められる。チャンクIDと最も近いノードIDとは、例えば、IDの上位桁が最も多く一致するノードIDである。なお、ルートノードは、本発明における第1ノード装置及び第2ノード装置の一例である。また、チャンクの保持ノードは、本発明における第2ノード装置の一例である。
ノードが、あるコンテンツをオーバーレイネットワークONから取得する場合、ノードは、先ず、コンテンツのメタファイルを取得する。コンテンツを取得するノードを、以下、「ユーザノード」という。なお、メタファイルの取得方法は、基本的にこの後説明するチャンクの取得方法と同様である。そのため、メタファイルの取得方法の詳しい説明を省略する。なお、メタファイルの取得の場合、チャンクIDではなく、コンテンツIDが用いられる。
ユーザノードは、メタファイルを取得する。次いで、ユーザノードは、メタファイルに記載されている各チャンクIDに基づいて、取得するコンテンツを構成する各チャンクの保持ノードを検索する。具体的に、ユーザノードは、検索メッセージを送信する。検索メッセージは、取得対象のチャンクの所在をチャンクのルートノードに問い合わせるためのメッセージである。検索メッセージには、取得対象のチャンクのチャンクIDが含まれる。ルートノードは、受信した検索メッセージに含まれるチャンクIDに対応するインデックス情報をインデックス情報キャッシュから取得する。ルートノードは、取得したインデックス情報を、検索メッセージの送信元のユーザノードに返信する。これにより、ユーザノードは、ルートノードから保持ノードのIPアドレス等を受信する。そして、ユーザノードは、保持ノードにアクセスし、チャンクをダウンロードする。なお、チャンクの所在をルートノードに問い合わせる処理は、例えば特開2007−053662号公報等で公知であるので、詳しい説明を省略する。
ユーザノードは、保持ノードからチャンクを取得したとき、チャンクを公開する。チャンクの公開とは、ユーザノードが取得したチャンクを、オーバーレイネットワークONから取得可能にすることをいう。具体的に、ユーザノードは、取得したチャンクを保存する。そして、ユーザノードは、ルートノードへパブリッシュメッセージを送信する。パブリッシュメッセージは、チャンクを保存したことをルートノードへ通知するためのメッセージである。パブリッシュメッセージは、保存したチャンクのチャンクIDと、チャンクを保存したユーザノードのノード情報とを含む。ルートノードは、受信したパブリッシュメッセージに含まれるチャンクIDとノード情報との組を含むインデックス情報を、インデックス情報キャッシュに記憶する。このとき、ルートノードは、インデックス情報の受信時刻に対応付けて、インデックス情報を記憶する。こうして、ユーザノードは、新たに、チャンクを保存する保持ノードとなる。
保持ノードは、例えば、現在保存しているチャンクについて、定期的にパブリッシュメッセージを送信する。そのため、ルートノードが記憶しているインデックス情報に対応付けられている受信時刻が、定期的に更新される。保持ノードは、オーバーレイネットワークONから離脱すると、パブリッシュメッセージを送信することができない。そのため、ルートノードが記憶しているインデックス情報に対応付けられている受信時刻が更新されない。そこで、ルートノードは、受信時刻が古くなったインデックス情報を、インデックス情報キャッシュから削除する。これにより、チャンクの保持ノードのうち、現時点でチャンクを取得可能な保持ノードの数を、ルートノードが記憶しているインデックス情報の数から特定することができる。なお、チャンクの保持ノードのうち、現時点でチャンクを取得可能な保持ノードの数を、「保持ノード数」という。
ところで、オーバーレイネットワークONに参加したノードは、オーバーレイネットワークONから離脱する場合がある。オーバーレイネットワークONから離脱とは、参加していたノードが他のノードと通信することができない状態になったことをいう。ノードが他のノードと通信することができない状態になる場合としては、例えば、ノードの電源がOFFになった場合がある。また、例えば、ノードが故障した場合がある。この場合、各ノードは、離脱したノードからチャンクを取得することができない。また、ノードが保存しているチャンクが、削除されたり、壊れたりする場合がある。この場合、削除または壊れたチャンクを、そのノードから取得することができない。例えば、あるチャンクを保存する全てのノードが、オーバーレイネットワークONから離脱したとする。すると、そのチャンクは、オーバーレイネットワークONから取得することができない。チャンクがオーバーレイネットワークONから取得できなくなることを、「チャンクの消失」という。消失したチャンクが構成要素となっているコンテンツは、完全な状態ではオーバーレイネットワークONから取得することができない。
配信システムSにおいては、消失したチャンクを復元するため、パリティが利用される。具体的には、コンテンツを構成する複数のチャンクが、例えば、所定数のチャンクごとにグループ化される。このグループ化されたチャンクを、「チャンクグループ」という。そして、1つのチャンクグループに対して、1つ以上のパリティデータが生成される。パリティデータは、チャンクグループの復元に用いられる。各パリティデータには、それぞれパリティIDが付与されている。パリティIDは、パリティデータを、オーバーレイネットワークONに保存されるパリティデータの中から識別する固有の識別情報である。なお、パリティデータは、本発明における誤り検出符号の一例である。また、パリティIDは、本発明における第2識別情報の一例である。また、チャンクグループは、本発明におけるデータ群の一例である。
センターサーバSSは、例えば、コンテンツの投入時に、投入するコンテンツを構成するチャンクをグループ化する。例えば、センターサーバSSは、コンテンツを複数のチャンクに分割する。次いで、センターサーバSSは、分割した各チャンクにチャンクIDを付与する。また、センターサーバSSは、分割した複数のチャンクを、予め設定された数のチャンクごとにグループ化する。チャンクグループを構成するチャンクの数は、例えば、システムの管理者により予め設定されている。また、センターサーバSSは、チャンクグループごとに、パリティデータのパリティIDを付与する。そして、センターサーバSSは、チャンクグループごとに、チャンクグループ定義情報を生成する。チャンクグループ定義情報は、チャンクグループを構成するチャンクのチャンクIDと、パリティデータのパリティIDと、を含む。センターサーバSSは、生成したチャンクグループ定義情報を記憶する。
パリティデータは、例えば、チャンクグループを構成する全てのチャンクの排他的論理和を計算することにより求められる。各ノードは、パリティデータを用いて、生成元のチャンクグループを復元することができる。つまり、ノードは、チャンクグループを構成する複数のチャンクのうち何れのチャンクが消失した場合であっても、パリティデータと、チャンクグループを構成する他のチャンクとを用いて、復元することができる。生成されたパリティデータは、複数のノードに分散して保存される。ノードに保存されたパリティデータも、オーバーレイネットワークONから取得可能になる。パリティデータの取得方法は、チャンクの取得方法と同様である。なお、パリティデータを保存するノードを、「パリティデータの保持ノード」という。また、パリティデータの所在を管理しているノードを、「パリティノード」という。パリティノードは、パリティデータごとに定められるので、パリティデータの所在を管理の負荷を、複数のノードに分散することができる。なお、パリティノードは、本発明における第1ノード装置及び第2ノード装置の一例である。また、パリティデータの保持ノードは、本発明における第2ノード装置及び第3ノード装置の一例である。
センターサーバSSは、オーバーレイネットワークONに投入されるコンテンツのうち、全てのノードが保存するべきであると定められていないコンテンツについてのみ、チャンクグループ定義情報を生成する。つまり、センターサーバSSは、全てのノードが保存するべきであると定められていないコンテンツを構成するチャンクについてのみ、パリティデータが生成されるようにする。ここで、全てのノードが保存するべきであると定められたコンテンツを、「定常配信コンテンツ」という。また、全てのノードが保存するべきであると定められていないコンテンツを、「非定常配信コンテンツ」という。例えば、定常配信コンテンツとしては、各ノードが配信システムSに関する処理を実行する上で必要なコンテンツが挙げられる。また、例えば、拠点Pnがカラオケ店舗の場合、定常配信コンテンツとしては、新着のカラオケデータが挙げられる。定常配信コンテンツは、例えば、センターサーバSSから全てのノードに配信される。定常配信コンテンツを構成するチャンクは、非定常配信コンテンツを構成するチャンクよりも、オーバーレイネットワークONから消失しにくい。そのため、定常配信コンテンツは、非定常配信コンテンツと比較して、パリティデータの必要性が低い。そこで、定常配信コンテンツについては、パリティデータを生成しないことで、各ノードの記憶容量の空きを増やすことができる。なお、定常配信コンテンツであるか、非定常配信コンテンツであるかに関わらず、全てのコンテンツについて、パリティデータが生成されるようにしても良い。
配信システムSにおいては、パリティデータを利用して、チャンクグループを構成するチャンクがオーバーレイネットワークONから確実に取得することができるように制御される。すなわち、非定常配信コンテンツが、オーバーレイネットワークONから確実に取得することができるように制御される。
具体的に、ルートノードが所在を管理するチャンクが、非定常配信コンテンツを構成するチャンクである場合、ルートノードは、そのチャンクを監視する。チャンクの監視とは、チャンクがオーバーレイネットワークONから消失しないように監視することである。具体的に、チャンクの監視とは、チャンクの保持ノード数を条件として、パリティデータの生成、チャンクの復元等の処理を行うために、チャンクの保持ノード数を、例えば、定期的に確認することである。
ルートノードは、所在を管理しているチャンクが、非定常配信コンテンツであるか否かを、例えば、次の方法で判定する。ルートノードは、所在を管理しているチャンクが非定常配信コンテンツであるか否かを、センターサーバSSに問い合わせる。ルートノードは、パブリッシュメッセージを受信して、チャンクのインデックス情報を記憶する。このとき、ルートノードは、所在を管理するチャンクとして、オーバーレイネットワークONに初めて保存されたチャンクのチャンクIDを含むインデックス情報を記憶したとする。この場合、ルートノードは、この新しいチャンクのチャンクIDを含む問い合わせメッセージを、センターサーバSSに送信する。センターサーバSSは、受信した問い合わせメッセージに含まれるチャンクIDで、記憶しているチャンクグループ定義情報を検索する。そして、センターサーバSSは、問い合わせメッセージに含まれるチャンクIDが設定されたチャンクグループ定義情報を、ルートノードに返信する。ルートノードは、受信したチャンクグループ定義情報と、新しいチャンクのチャンクIDと、を対応付けて記憶する。これにより、ルートノードは、所在を管理しているチャンクが非定常配信コンテンツであると判定することができる。一方、センターサーバSSは、問い合わせメッセージに含まれるチャンクIDが設定されたチャンクグループ定義情報が記憶されていない場合、チャンクグループ定義情報がない旨を示すメッセージを、ルートノードに返信する。
次に、配信システムSにおけるパリティデータの生成時の動作概要について説明する。図2(A)は、本実施形態の配信システムSにおけるパリティデータの生成時の動作概要を示す図である。例えば、ある非定常配信コンテンツを構成するチャンクのうち、チャンクA、B及びCがチャンクグループXを構成するとする。また、このチャンクグループXに対して、パリティデータPが生成されるとする。図2(A)に示すように、ノードN1は、パリティデータPのパリティノードである。また、ノードN2は、チャンクAのルートノードである。また、ノードN3は、チャンクBのルートノードである。また、ノードN4は、チャンクCのルートノードである。また、ノードN5は、チャンクAの保持ノードである。また、ノードN6は、チャンクBの保持ノードである。また、ノードN7は、チャンクCの保持ノードである。
チャンクAのルートノードであるノードN2は、チャンクAの監視の際、チャンクAの保持ノード数がパリティ生成閾値以下であるか否かを判定する。パリティ生成閾値は、パリティデータを生成するための条件を示す保持ノード数である。パリティ生成閾値は、例えば、システムの管理者により予め設定されている。なお、パリティ生成閾値は、本発明における第1の数の一例である。
例えば、チャンクAを構成要素とするコンテンツの投入直後、チャンクAの保持ノード数がパリティ生成閾値以下である場合がある。また、チャンクAの保持ノードがオーバーレイネットワークONから離脱することにより、チャンクAの保持ノード数がパリティ生成閾値以下となる場合がある。すると、ノードN2は、チャンクAの保持ノード数がパリティ生成閾値以下であると判定する(図2(A)(1))。すると、ノードN2は、パリティ生成要求メッセージを送信する。パリティ生成要求メッセージは、パリティデータの生成の指令を示すメッセージである。具体的に、ノードN2は、パリティデータPの生成元となるチャンクのチャンクIDを含むリストを生成する。パリティデータPの生成元となるチャンクは、チャンクグループXを構成するチャンクである。そして、ノードN2は、パリティ生成要求メッセージを生成する。パリティ生成要求メッセージは、生成したリストと、生成対象のパリティデータPのパリティIDとを含む。また、ノードN2は、リストにチャンクIDが設定されているチャンクA、B及びCのうち、少なくとも何れかの保持ノードを検索する。そして、ノードN2は、何れかの保持ノードに、パリティ生成要求メッセージを送信する。例えば、ノードN2は、ノードN5にパリティ生成要求メッセージを送信する(図2(A)(2))。なお、パリティ生成要求メッセージは、本発明における第2指令情報の一例である。
ノードN5は、受信したパリティ生成要求メッセージに含まれるリストに設定された各チャンクIDに対応するチャンクを取得する。ここで、チャンクAは、ノードN5が保存している。そのため、ノードN5は、チャンクBの保持ノード及びチャンクCの保持ノードを検索する。そして、ノードN5は、ノードN6からチャンクBを取得する。また、ノードN5は、ノードN7からチャンクCを取得する(図2(A)(3))。そして、ノードN5は、パリティデータPを生成する(図2(A)(4))。つまり、ノードN5は、P=A+B+Cを計算する。なお、「+」は排他的論理和である。次いで、ノードN5は、生成したパリティデータPを公開する(図2(A)(5))。具体的に、ノードN5は、パリティデータPを記憶する。また、ノードN5は、パリティデータPのパリティIDを含むパブリッシュメッセージを、ノードN1へ送信する。パリティノードは、受信したパブリッシュメッセージに基づいて、パリティデータPのインデックス情報を記憶する。
このように、チャンクの保持ノード数がパリティ生成閾値以下になると、そのチャンクを復元するためのパリティデータが生成される。そして、生成されたパリティデータが、オーバーレイネットワークONから取得可能になる。そのため、チャンクがオーバーレイネットワークONから消失した場合であっても、消失したチャンクを復元することができる。従って、各ノードは、オーバーレイネットワークからチャンクを確実に取得することができる。
なお、パリティデータの生成に必要な処理を1台のノードが全て行うのではなく、パリティデータの生成に必要な処理を、複数のノードが分担して行っても良い。例えば、パリティ生成要求メッセージを受信した保持ノードは、パリティデータPを生成する処理のうち、実行可能な処理を実行する。そして、保持ノードは、パリティ生成要求メッセージを、他のノードに転送する。具体的に、保持ノードは、パリティ生成要求メッセージに含まれるリストに設定されている各チャンクIDに対応するチャンクのうち、何れかのチャンクを記憶しているかを判定する。そして、保持ノードは、パリティデータを生成する処理のうち、記憶していると判定したチャンクを用いて実行可能な処理を実行する。そして、保持ノードは、実行した処理で得られた途中結果をパリティ生成要求メッセージに設定する。また、保持ノードは、実行した処理に用いたチャンクのチャンクIDを、パリティ生成要求メッセージに含まれるリストから削除する。そして、パリティ生成要求メッセージを転送する。
例えば、ノードN5は、チャンクAをそのまま途中結果としてパリティ生成要求メッセージに設定する。そして、ノードN5は、パリティ生成要求メッセージをノードN6に転送する。ノードN6は、チャンクBとパリティ生成要求メッセージに含まれる途中結果との排他的論理和を計算する。次いで、ノードN6は、計算結果を途中結果としてパリティ生成要求メッセージに上書きする。そして、ノードN6は、パリティ生成要求メッセージをノードN7に転送する。ノードN7は、チャンクCとパリティ生成要求メッセージに含まれる途中結果との排他的論理和を計算する。この計算結果がパリティデータPである。そこで、ノードN7は、パリティデータPを公開する。また、ルートノードが、所在を管理するチャンクを復元するためのパリティデータを生成しても良い。
次に、チャンクの復元時の動作概要について説明する。図2(B)は、本実施形態の配信システムSにおけるチャンクの復元時の動作概要を示す図である。チャンクBのルートノードであるノードN3は、チャンクBの監視の際、チャンクBの保持ノード数がチャンク復元閾値以下であるか否かを判定する。チャンク復元閾値は、チャンクを復元するための条件を示す保持ノード数である。チャンク復元閾値は、チャンク復元閾値<パリティ生成閾値を満たす。チャンク復元閾値は、例えば、システムの管理者により予め設定されている。チャンク復元閾値は、例えば、0であっても良い。なお、チャンク復元閾値は、本発明における第2の数の一例である。
例えば、チャンクBの保持ノードであるノードN6が、オーバーレイネットワークONから離脱する。これにより、ノードN3は、チャンクBの保持ノード数がチャンク復元閾値以下となったと判定したとする(図2(B)(1))。すると、ノードN3は、チャンクBの復元に必要なチャンクA、C及びパリティデータPを取得する(図2(B)(2))。ここで、ノードN3は、ノードN5から、チャンクA及びパリティデータPを取得する。また、ノードN3は、ノードN7から、チャンクCを取得する。そして、ノードN3は、チャンクBを復元する(図2(B)(3))。つまり、ノードN3は、B=A+C+Pを計算する。次いで、ノードN5は、復元したチャンクBを公開する。ノードN3は、チャンクBのルートノードである。そのため、ノードN3は、ノードN3のノード情報及びチャンクBのチャンクIDを含むインデックス情報を記憶する。
なお、ルートノードは、パリティデータの生成時と同様に、他のノードにチャンクを復元させても良い。この場合、ルートノードは、チャンク復元要求メッセージを送信する。チャンク復元要求メッセージは、チャンクの復元の指令を示すメッセージである。具体的に、ルートノードは、リストを生成する。生成されるリストは、チャンクの復元に必要なチャンクのチャンクID及びパリティデータのパリティIDと、を含む。そして、ノードN1は、チャンク復元要求メッセージを生成する。チャンク復元要求メッセージは、生成したリストと、復元対象のチャンクのチャンクIDとを含む。チャンク復元要求メッセージを受信したノードの処理内容は、パリティ生成要求メッセージを受信した場合の処理内容と同様である。ここで、チャンクの復元に必要な処理を、複数のノードが分担して行っても良い。また、チャンク復元閾値が1以上である場合、チャンクの復元時において、1台以上のノードが復元対象のチャンクを保存している場合がある。この場合、ルートノードは、何れかのノードに、復元対象となるチャンクを保持ノードから取得させて、公開させても良い。チャンクの保持ノード数がチャンク復元閾値以下にならないように制御される。従って、各ノードは、オーバーレイネットワークからチャンクを確実に取得することができる。
次に、パリティデータの復元時の動作概要について説明する。図3(A)は、本実施形態の配信システムSにおけるパリティデータの復元時の動作概要を示す図である。図3(A)に示すように、ノードN8は、チャンクAの保持ノードである。
パリティノードは、パブリッシュメッセージを受信して、パリティデータのインデックス情報を記憶する。このとき、パリティノードは、所在を管理するパリティデータとして、オーバーレイネットワークONに初めて保存されたパリティデータのパリティIDを含むインデックス情報を記憶したとする。この場合、パリティノードは、この新しいパリティデータのパリティIDを含むグループ定義情報を、センターサーバSSから取得する。そして、パリティノードは、取得したチャンクグループ定義情報と、新しいパリティのパリティIDと、を対応付けて記憶する。これにより、パリティノードは、所在を管理するパリティデータのうち、生成済みのパリティデータを特定することができる。生成済みのパリティデータとは、これまでに少なくとも1回以上生成されて、オーバーレイネットワークONに保存されたことがあるパリティデータである。パリティノードは、生成済みのパリティデータの監視を行う。また、パリティノードは、パリティノードを保存する保持ノードがオーバーレイネットワークONから離脱すること等により、生成済みのパリティデータがオーバーレイネットワークONから削除された場合も、そのパリティデータを監視する。
ノードN1は、パリティデータPの保持ノード数がパリティ復元閾値以下であるか否かを、定期的に判定する。パリティ復元閾値は、パリティデータを復元するための条件を示す保持ノード数である。また、パリティ復元閾値は、パリティ復元閾値<パリティ生成閾値を満たす。パリティ復元閾値は、例えば、システムの管理者により予め設定されている。パリティ復元閾値は、例えば、0であっても良い。なお、パリティ復元閾値は、本発明における第3の数の一例である。
例えば、パリティデータPの保持ノードであるノードN5が、オーバーレイネットワークONから離脱する。これにより、ノードN1は、パリティデータPの保持ノード数がパリティ復元閾値以下となったと判定する(図3(A)(1))。すると、ノードN1は、パリティデータPの復元に必要なチャンクA、B及びCを取得する(図3(A)(2))。ここで、ノードN1は、ノードN8からチャンクAを取得する。また、ノードN1は、ノードN6から、チャンクBを取得する。また、ノードN1は、ノードN7から、チャンクCを取得する。そして、ノードN1は、パリティデータPを復元する(図3(A)(3))。つまり、ノードN1は、P=A+B+Cを計算する。次いで、ノードN1は、復元したパリティデータPを公開する。
なお、パリティノードは、パリティデータの生成時と同様に、他のノードにパリティデータを復元させても良い。また、パリティデータの復元に必要な処理を、複数のノードが分担して行っても良い。また、パリティ復元閾値が1以上である場合、パリティデータの復元時において、1台以上のノードが復元対象のパリティデータを保存している場合がある。この場合、パリティノードは、何れかのノードに、復元対象となるパリティデータを保持ノードから取得させて、公開させても良い。このように、パリティデータの保持ノード数がパリティ復元閾値以下にならないように制御される。従って、各ノードは、オーバーレイネットワークからパリティデータを確実に取得することができる。よって、パリティデータを用いて確実にチャンクを復元することができる。
次に、パリティデータの削除時の動作概要について説明する。図3(B)は、本実施形態の配信システムSにおけるパリティデータの削除時の動作概要を示す図である。チャンクAのルートノードであるノードN2は、チャンクAの監視の際、チャンクAの保持ノード数がパリティ破棄閾値以上であるか否かを判定する。パリティ破棄閾値は、パリティデータをオーバーレイネットワークONから削除するための条件を示す保持ノード数である。パリティ破棄閾値は、パリティ破棄閾値>パリティ生成閾値を満たす。チャンク復元閾値は、例えば、システムの管理者により予め設定されている。なお、パリティ破棄閾値は、本発明における第4の数の一例である。
チャンクAの保持ノードが増加することにより、ノードN2は、チャンクAの保持ノード数がパリティ破棄閾値以上であると判定する(図3(B)(1))。すると、ノードN2は、チャンクAの復元に用いられるパリティデータPのパリティノードであるノードN1へ、パリティ不要通知メッセージを送信する(図3(B)(2))。パリティ不要通知メッセージは、パリティデータが不要である旨の通知するためのメッセージである。チャンクの保持ノード数が多いほど、チャンクがオーバーレイネットワークONから消失する可能性は低い。そこで、ルートノードは、保持ノード数がパリティ破棄閾値以上になると、パリティノードに、パリティデータが不要である旨を通知する。チャンクBのルートノードであるノードN3及びチャンクCのルートノードであるノードN4も、同様の判定を行った結果、ノードN1へ、パリティ不要通知メッセージを送信する(図3(B)(3)、図3(B)(4))。
ノードN1は、パリティデータPを用いて復元可能なチャンクグループXに属する全てのチャンクについて、パリティ不要通知メッセージを受信する。これにより、ノードN1は、チャンクグループXに属する全てのチャンクの保持ノード数が、パリティ破棄閾値以上であると判定する(図3(B)(5))。この場合、パリティデータPは不要である。そこで、ノードN1は、パリティデータPの保持ノードへ、パリティ削除要求メッセージを送信する。例えば、ノードN1は、ノードN5及びN8へパリティ削除要求メッセージを送信する(図3(B)(6))。パリティ削除要求メッセージは、パリティデータの削除の指令を示すメッセージである。パリティ削除要求メッセージには、削除対象となるパリティデータのパリティIDが設定される。なお、パリティ削除要求メッセージは、本発明における第1指令情報の一例である。ノードN5及びN8は、受信したパリティ削除要求メッセージに基づいて、記憶しているパリティデータPを削除する(図3(B)(7))。
なお、この後、チャンクA〜Cのうち何れかのチャンクの保持ノード数がパリティ生成閾値以下となった場合には、パリティデータPが再生成される。これにより、チャンクグループを構成する各チャンクをオーバーレイネットワークONから取得することができるように担保しつつ、各ノードの記憶容量の空きを増やすことができる。
[2.ノードの構成]
次に、図4を参照して、ノードの構成及び機能について説明する。図4は、ノードの概要構成例を示すブロック図である。ノードは、図4に示すように、制御部11、記憶部12、通信部13a、通信部13b、及びバッファメモリ14等を備えて構成される。制御部11、記憶部12、通信部13a、通信部13b、及びバッファメモリ14はバス15を介して相互に接続されている。
本実施形態において、ノードは、ネットワークNWと拠点ネットワークNLnとの間でIP(Internet Protocol)パケットを中継する中継機器である。この中継機器は、例えばルータまたはL3スイッチングハブ等である。なお、ノードは、ユーザが利用する端末装置であっても良い。また、ノードは、基本的にネットワークNWに定常的に接続されているゲートウェイ等の機器であっても良い。
記憶部12は、例えばハードディスクドライブ等から構成される。記憶部12には、オペレーティングシステム、P2Pプログラム等が記憶されている。P2Pプログラムは、ルーティングテーブルを用いて他のノードと通信を行うためのプログラムである。また、P2Pプログラムは、パリティデータの監視及び生成、チャンクの監視及び復元等の処理を行うためのプログラムである。なお、P2Pプログラム等は、例えば、ネットワークNWに接続された所定のサーバからダウンロードされるようにしても良い。或いは、P2Pプログラム等は、例えば、DVD等の記録媒体に記録されて記録媒体のドライブを介して読み込まれるようにしても良い。
また、記憶部12には、オーバーレイネットワークONで使用されるDHTを用いたルーティングテーブル等が記憶されている。また、記憶部12には、センターサーバSSから配信されたコンテンツカタログ情報が記憶されている。また、記憶部12には、オーバーレイネットワークONから取得されたチャンクが、チャンクIDに対応付けて記憶されている。また、記憶部12には、センターサーバSSからから送信されたチャンクグループ定義情報が記憶されている。また、記憶部12には、センターサーバSSのIPアドレス及びポート番号が記憶されている。また、記憶部12には、パリティ生成閾値、チャンク復元閾値、パリティ復元閾値、チャンク破棄閾値等の設定値が記憶されている。
通信部13aは、ネットワークNWを通じて、他のノードやセンターサーバSS等との間の通信制御を行う。通信部13bは、拠点ネットワークNLnを通じて拠点端末Tn−lとの間の通信制御を行う。また、バッファメモリ14は、通信部13aを介して受信されたチャンクを一時的に蓄積する。
制御部11は、演算機能を有するCPU,作業用RAM,及びROM等から構成される。また、制御部11は、時計機能及びタイマ機能を備える。そして、制御部11は、CPUが記憶部12等に記憶されたプログラムを読み出して実行することにより、第1判定手段、生成手段、公開手段、復元手段、第2判定手段、第3判定手段、第4判定手段、送信手段、受信手段、削除手段、第5判定手段及び処理手段として機能する。
[3.配信システムの動作]
次に、図5及び図6を参照して、本実施形態における配信システムSの動作について説明する。図5は、本実施形態におけるルートノードの制御部11のチャンク監視処理における処理例を示すフローチャートである。なお、以下においては、ルートノードが、パリティデータの生成及びチャンクの復元を行う場合を例として説明する。
チャンク監視処理は、例えば、定期的に実行される。図5に示すように、制御部11は、所在の管理対象であるチャンクのうち1つのチャンクのチャンクIDを選択する(ステップS1)。
次いで、制御部11は、選択したチャンクIDに対応するチャンクが、定常配信コンテンツを構成するチャンクであるか否かを判定する(ステップS2)。具体的に、制御部11は、選択したチャンクIDに対応するグループ定義情報が記憶部12に記憶されているか否かを判定する。
このとき、制御部11は、選択したチャンクIDに対応するグループ定義情報が記憶されていないと判定した場合には、チャンクが定常配信コンテンツを構成するチャンクであると判定する(ステップS2:YES)。この場合、制御部11は、ステップS15に移行する。つまり、制御部11は、パリティデータの生成やチャンクの復元を行わない。
一方、制御部11は、選択したチャンクIDに対応するグループ定義情報が記憶されていると判定した場合には、チャンクが定常配信コンテンツを構成するチャンクではないと判定する(ステップS2:NO)。この場合、制御部11は、選択したチャンクIDに対応するチャンクの保持ノード数がパリティ破棄閾値以上であるか否かを判定する(ステップS3)。このとき、制御部11は、保持ノード数がパリティ破棄閾値以上であると判定した場合には(ステップS3:YES)、パリティ不要通知メッセージをパリティノードへ送信する(ステップS4)。このとき、制御部11は、選択したチャンクIDに対応するグループ定義情報から、パリティIDを取得する。そして、制御部11は、選択したチャンクIDと、取得したパリティIDとを、パリティ不要通知メッセージに設定する。制御部11は、ステップS4の処理を終えると、ステップS15に移行する。
一方、制御部11は、保持ノード数がパリティ破棄閾値以上ではないと判定した場合には(ステップS3:NO)、選択したチャンクIDに対応するチャンクの保持ノード数がパリティ生成閾値以下であるか否かを判定する(ステップS5)。このとき、制御部11は、保持ノード数がパリティ生成閾値以下ではないと判定した場合には(ステップS5:NO)、ステップS11に移行する。つまり、制御部11は、パリティデータを生成しない。
一方、制御部11は、保持ノード数がパリティ生成閾値以下であると判定した場合には(ステップS5:YES)、パリティデータの生成の要否を確認する(ステップS6)。具体的に、制御部11は、選択したチャンクIDに対応するグループ定義情報から、パリティIDを取得する。次いで、制御部11は、取得したパリティIDを含む生成要否確認メッセージを、パリティノードへ送信する。パリティノードは、受信した生成要否確認メッセージに含まれるパリティIDに対応するパリティデータの保持ノード数を計算する。次いで、パリティノードは、保持ノード数がパリティ復元閾値以下であるか否かを判定する。このとき、パリティノードは、保持ノード数がパリティ復元閾値以下であると判定した場合には、パリティデータの生成が必要である旨を示す応答メッセージを送信する。一方、パリティノードは、保持ノード数がパリティ復元閾値以下ではないと判定した場合には、パリティデータの生成が不要である旨を示す応答メッセージを送信する。
制御部11は、応答メッセージを受信すると、応答メッセージに基づいて、パリティデータの生成が必要であるか否かを判定する(ステップS7)。このとき、制御部11は、パリティデータの生成が必要ではないと判定した場合には(ステップS7:NO)、ステップS11に移行する。つまり、制御部11は、パリティデータを生成しない。パリティデータの保持ノード数がパリティ復元閾値よりも多い場合には、チャンクを復元するためのパリティデータが十分保存されていると考えられる。従って、この場合は、保持ノード数がパリティ生成閾値以下であっても、パリティデータを生成しなくても良い。
一方、制御部11は、パリティデータの生成が必要であると判定した場合には(ステップS7:YES)、パリティデータの生成に必要なチャンクを取得する(ステップS8)。具体的に、制御部11は、選択したチャンクIDを含むグループ定義情報から、各チャンクIDを取得する。次いで、制御部11は、取得したチャンクIDに基づいて、チャンクIDに対応するチャンクの保持ノードを検索する。そして、制御部11は、検索された保持ノードからチャンクを取得する。
次いで、制御部11は、パリティデータを生成する(ステップS9)。具体的に、制御部11は、保持ノードから取得した各チャンクの排他的論理和を計算する。そして、制御部11は、計算結果をパリティデータとする。
次いで、制御部11は、生成したパリティデータを公開する(ステップS10)。具体的に、制御部11は、計算結果をパリティデータとして記憶部12に記憶させる。そして、制御部11は、記憶したパリティのパリティIDを含むパブリッシュメッセージを、パリティノードに送信する。
次いで、制御部11は、選択したチャンクIDに対応するチャンクの保持ノード数がチャンク復元閾値以下であるか否かを判定する(ステップS11)。このとき、制御部11は、保持ノード数がチャンク復元閾値以下ではないと判定した場合には(ステップS11:NO)、ステップS15に移行する。つまり、制御部11は、チャンクを復元しない。
一方、制御部11は、保持ノード数がチャンク復元閾値以下であると判定した場合には(ステップS11:YES)、チャンクの復元に必要なパリティデータ及びチャンクを取得する(ステップS12)。次いで、制御部11は、選択したチャンクIDに対応するチャンクを復元する(ステップS13)。次いで、制御部11は、復元したチャンクを公開する(ステップS14)。なお、ステップS12〜S14の処理は、ステップS8〜S10と基本的に同様である。
次いで、制御部11は、所在の管理対象であるチャンクのチャンクIDの中にまだ選択していないチャンクIDがあるか否かを判定する(ステップS15)。このとき、制御部11は、まだ選択していないチャンクIDがあると判定した場合には(ステップS15:YES)、まだ選択していないチャンクIDのうち1つを選択する(ステップS16)。次いで、制御部11は、ステップS2に移行する。一方、制御部11は、まだ選択していないチャンクIDがないと判定した場合には(ステップS15:NO)、チャンク監視処理を終了させる。
図6(A)は、本実施形態におけるパリティノードの制御部11のパリティ監視処理における処理例を示すフローチャートである。なお、以下においては、パリティノードが、パリティデータの復元を行う場合を例として説明する。
パリティ監視処理は、例えば、定期的に実行される。図6(A)に示すように、制御部11は、所在の管理対象として生成済みのパリティデータのうち1つのパリティデータのパリティIDを選択する(ステップS21)。具体的には、記憶部12に、生成済みのパリティデータのパリティIDが、グループ定義情報と対応付けて記憶されている。そこで、制御部11は、記憶部12に記憶されているグループ定義情報のうちの1つに対応付けられているパリティIDを取得する。
次いで、制御部11は、選択したパリティIDに対応するパリティデータの保持ノード数がパリティ復元閾値以下であるか否かを判定する(ステップS22)。このとき、制御部11は、保持ノード数がパリティ復元閾値以下ではないと判定した場合には(ステップS22:NO)、ステップS26に移行する。つまり、制御部11は、パリティデータを復元しない。
一方、制御部11は、保持ノード数がパリティ復元閾値以下であると判定した場合には(ステップS22:YES)、ステップS23〜S25の処理を、図5に示すステップS12〜S14と同様に行う。
次いで、制御部11は、生成済みのパリティデータのパリティIDの中にまだ選択していないパリティIDがあるか否かを判定する(ステップS26)。このとき、制御部11は、まだ選択していないパリティIDがあると判定した場合には(ステップS26:YES)、まだ選択していないパリティIDのうち1つを選択する(ステップS27)。次いで、制御部11は、ステップS22に移行する。一方、制御部11は、まだ選択していないパリティIDがないと判定した場合には(ステップS26:NO)、パリティ監視処理を終了させる。
図6(B)は、本実施形態におけるパリティノードの制御部11のパリティ不要通知メッセージ受信処理における処理例を示すフローチャートである。
パリティ不要通知メッセージ受信処理は、パリティノードがパリティ不要通知メッセージを受信したときに開始される。先ず、制御部11は、受信したパリティ不要通知メッセージに含まれるパリティIDとチャンクIDとを対応付けて、不要通知リストに追加する(ステップS31)。不要通知リストは、パリティ不要通知メッセージが送信されたチャンクのリストを、パリティデータごとに示す情報である。不要通知リストは、記憶部12に記憶される。なお、パリティ不要通知メッセージに含まれているパリティIDを、以下、「不要パリティID」という。
次いで、制御部11は、チャンクグループを構成する全てのチャンクについて、パリティ不要通知メッセージが受信されたか否かを判定する(ステップS32)。つまり、制御部11は、チャンクグループを構成する全てのチャンクの保持ノード数が、パリティ破棄閾値以上であるか否かを判定する。具体的には、不要パリティIDに対応するチャンクグループ定義情に含まれるチャンクIDと、不要パリティIDに対応する不要通知リストと、に基づいて、判定が行われる。
このとき、制御部11は、チャンクグループを構成する少なくとも1つのチャンクについて、パリティ不要通知メッセージが受信されていないと判定した場合には(ステップS32:NO)、パリティ不要通知メッセージ受信処理を終了させる。
一方、制御部11は、チャンクグループを構成する全てのチャンクについて、パリティ不要通知メッセージが受信されたと判定した場合には(ステップS32:YES)、パリティ削除要求メッセージを送信する(ステップS33)。具体的に、制御部11は、不要パリティIDに対応する全てのインデックス情報を、インデックス情報キャッシュから取得する。次いで、制御部11は、取得した各インデックス情報から、パリティデータの保持ノードのIPアドレス及びポート番号を取得する。そして、制御部11は、取得したIPアドレス及びポート番号に基づいて、削除対象のパリティデータの全ての保持ノードに、パリティ削除要求メッセージを送信する。このとき、制御部11は、パリティ削除要求メッセージに、不要パリティIDを設定する。また、制御部11は、不要パリティIDに対応する不要通知リストを記憶部12から削除する。制御部11は、ステップS33の処理を終えると、パリティ不要通知メッセージ受信処理を終了させる。パリティ削除要求メッセージを受信した保持ノードは、パリティ削除要求メッセージに含まれるパリティIDに対応するパリティデータを、記憶部12から削除する。
なお、上記実施形態においては、オーバーレイネットワークに、DHTを利用したピアツーピアネットワークが適用されていたが、これに限られるものではない。例えば、他のピアツーピアシステム、または、オーバーレイネットワークを用いたシステムが適用されても良い。DHTを利用しないオーバーレイネットワークとしては、例えば、ハイブリッド型のピアツーピアネットワーシステムがある。
また、上記実施形態においては、本発明における第1ノード装置が、ルートノードとパリティノードとに適用されていた。しかしながら、本発明における第1ノード装置が、例えば、予め定められたノードに適用されても良い。例えば、ネットワークNWに定常的に接続されているノードに適用されても良い。また、上記実施形態においては、本発明における誤り検出符号が、パリティデータに適用されていた。つまり、チャンクグループを構成する各チャンクの排他的論理和を計算することにより、誤り検出符号が生成されていた。しかしながら、本発明を、パリティデータ以外の誤り検出符号に適用されても良い。また、上記実施形態においては、コンテンツを構成するチャンクを復元するために、誤り検出符号が生成されていた。しかしながら、例えば、ある規則によりグループ化された複数のコンテンツを復元するために、誤り検出符号が生成されても良い。