以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
<第1実施形態>
図1は、データ配信システムの構成例を示す図である。データ配信システムは、例えば、クライアント端末に映画やテレビ番組等の動画コンテンツや、楽曲などの音声コンテンツを配信するサービスを提供するシステムである。なお、コンテンツは、PAAS(Plat
form As A Service)やSAAS(Software as a service)を含むデータ配信システムで配信されるデータの固まりであってもよい。データ配信システムには、複数のサーバ,ストレージ,ルータ等と、複数のクライアント群とが含まれる。以降、ストレージを管理するコンピュータやコンテンツを配信するサーバなど、ネットワーク上でコンテンツのミラーデータ(コピー)を格納し、クライアント端末に配信する能力を有する装置を「ノード」と称する。なお、図1では、ノードは、長方形で表わされている。
図1に示される例では、各クライアント群A−Cは、配信コンテンツの実データを有するノードからは地理的に離れた位置にあり、さらに互いも地理的に充分離れた位置に存在する。例えば、実データを有するノードは東京、クライアント群Aはニューヨーク、クライアントB群はロンドン、クライアントC群はシドニーに位置する。
第1実施形態では、データ配信システムは、コンテンツごと、及び/又は、クライアント群ごとにコンテンツを配信するための配信経路を形成する。図1に示される例では、ノード1−6がクライアント群Aにコンテンツを配信するための配信経路を形成している。このように、或るクライアント群にコンテンツを配信するための配信経路を形成するノード群を、以降、配信ノード群と称する。配信ノード群は、クライアント群からネットワーク上の距離が離れるほど上位ノードであり、クライアント群からネットワーク上の距離が近いほど下位ノードである。また、下位ノードになるにつれて割り当てられるノード番号が大きくなる。
ネットワーク上の距離とは、例えば、ネットワーク上の2点間の中継ホップ数,応答時間,TCP(Transmission Control Protocol)関連情報(RTT(Round Trip Time),
RWIN(Receive Window)),最大MTU(Maximum Transmission Unit)長,データ
損失率,使用可能な回線帯域,スループット,地理的な距離,ノードのCPU(Central Processing Unit)使用率,ノードのメモリ使用率,ノードのスループット性能,ノード
の記憶媒体の読み書き速度のうち1つ以上の値を重みとして換算して表すものとする。ネットワーク上の距離は、2点間のコストとも称することができる。
また、第1実施形態において、配信ノード群では、コンテンツは各ノードに分散配置されている。
図2は、配信ノード群におけるコンテンツの分散配置の例を示す図である。図2に示される例では、各ノード番号は図1に示されるデータ配信システムの各ノード番号と対応する。1のコンテンツを複数に分割したブロックをセグメントと称する。各セグメントには、コンテンツが実行、すなわち動画や音声が再生された場合の時系列に従って、識別番号が先頭から順に付されている。第1実施形態では、各ノードが、コンテンツ(配信データ)が分割されて生成されるセグメント群(分割ブロック群)のうち、クライアント群からのコストに応じた所定の条件を満たすセグメントを記憶部に記憶することによって、コンテンツの分散配置が行われる。
図2に示される例では、先頭セグメント1はクライアント群Aにネットワーク上の距離が最も近いノード6に配置される。セグメント2以降のセグメント2−6は、それぞれ、クライアント群Aからネットワーク上の距離が近い順番で、ノード5,4,3,2,1に配置される。
次に、セグメント7−12は、それぞれ、セグメント1−6とは反対に、クライアント群Aからネットワーク上の距離が遠い順番で、ノード1−6に配置される。これ以降、最終セグメントまでの各セグメントは、配信ノード群の総ノード数の2倍の12セグメント毎に、クライアント群Aに近いノードの順番で配置された後クライアント群Aから遠い順
番のノードに配置されることを繰り返して配置される。すなわち、コンテンツ番号が横軸、ノード番号が縦軸としてコンテンツのセグメントの配置図が作成された場合に、配置図上において、各ノードに配置されるセグメントは、図2に示されるような波形を形成する。図2に示されるような配信ノード群の各ノードに配置されるセグメントは、該コンテンツを配信する該配信ノード群に該ノードが参加している間、該ノードに保持され続ける。このような配信ノード群にノードが参加している間該ノードに保持され続けるセグメントを、以降、固定セグメントと称する。
各ノードは、クライアント端末(クライアント群)から配信要求を受信すると、まず、自ノードが保持する固定セグメント群のうち最も小さい番号のセグメントを下位の隣接ノードに送信する。次に、各ノードは、上位の隣接ノードから受信したセグメントと未送信の固定セグメントとを含む保持するセグメントのうち、最も小さい番号のセグメントを下位の隣接ノードに送信する。各ノードは、この処理を繰り返してクライアント群へのコンテンツ配信を実行する。すなわち、各ノードは、互いに協働し、番号の小さいセグメントから順にバケツリレーのようにして、コンテンツをクライアント群に配信する。コンテンツ配信開始後、バケツリレーで他のノード(上位のノード)から受信して次のノード(下位のノード)へ送信完了するまでの間、ノードに一時的に保持されるセグメントは、以降、一時セグメントと称される。また、固定セグメント及び一時セグメントを区別せずに各ノードが保持するセグメントを指す場合には、以降、保持セグメントと称する。
図2に示されるように波形に固定セグメントを配置することによって、配信ノード群の各ノードが同期送信した場合に、クライアントA群へのコンテンツ到着までの遅延時間を短くすることができる。詳細は後述する。
図3は、配信ノード群に含まれる各ノードのハードウェア構成の例を示す図である。配信ノード群に含まれるノードは、例えば、サーバマシン等の専用のコンピュータである。ノード1は、プロセッサ101,主記憶装置102,入力装置103,出力装置104,補助記憶装置105,媒体駆動装置106,ネットワークインタフェース107,及び外部記憶装置111を備え、これらがバス109により互いに接続されている情報処理装置である。
入力装置103は、例えば、キーボード,マウス等のポインティングデバイス,スキャナ等である。入力装置103から入力されたデータは、プロセッサ101に出力される。なお、ノード1に入力装置103は備えられていなくてもよく、この場合には、入力装置103は、ネットワーク管理者等によって外付けされる。
ネットワークインタフェース107は、ネットワークとの情報の入出力を行うインタフェースである。ネットワークインタフェース107は、有線のネットワーク、および、無線のネットワークと接続する。ネットワークインタフェース107は、例えば、光ファイバーインターフェースモジュール,NIC(Network Interface Card),無線LAN(Local Area Network)カード等である。ネットワークインタフェース107で受信されたデータ等は、プロセッサ101に出力される。
主記憶装置102は、プロセッサ101に、補助記憶装置105又は外部記憶装置111に格納されているプログラムをロードする記憶領域および作業領域を提供したり、バッファとして用いられたりする。主記憶装置102は、例えば、RAM(Random Access Memory)のような半導体メモリである。
補助記憶装置105は、様々なプログラムや、各プログラムの実行に際してプロセッサ101が使用するデータを格納する。補助記憶装置105は、ノード1に内蔵されており
、例えば、EPROM(Erasable Programmable ROM)、又はハードディスクドライブ(Hard Disc Drive)である。補助記憶装置105は、例えば、オペレーティングシステム(OS),コンテンツを配信するためのデータ配信プログラム,その他様々なアプリケーションプログラムを保持する。
媒体駆動装置106は、可搬記録媒体110を駆動し、可搬記録媒体110に記録される様々なプログラムやデータを読み出し、プロセッサ101に出力する。媒体駆動装置106に駆動される可搬記録媒体110は、例えば、USB(Universal Serial Bus)フラッシュメモリ,CD(Compact Disc),又はDVDのような記録媒体である。なお、媒体駆動装置106は、ノード1に備えられていなくともよい。
外部記憶装置111は、ノード1に外付けされており、データ配信システムで配信されるコンテンツまたはコンテンツのセグメントを保持する。外部記憶装置111は、例えば、HDDであり、補助記憶装置105よりも容量が大きい。なお、ノード1に内蔵される補助記憶装置105の容量が十分に大きい場合には、外部記憶装置111は用いらないこともある。
プロセッサ101は、例えば、CPU(Central Processing Unit)や、DSP(Digital Signal Processor)である。プロセッサ101は、補助記憶装置105や外部記憶装
置111に保持されたOSや様々なアプリケーションプログラムを主記憶装置102にロードして実行することによって、様々な処理を実行する。また、プロセッサ101は、媒体駆動装置106によって読み出された可搬記録媒体110に記録されたアプリケーションプログラムを主記憶装置102にロードして実行したり、データを処理したりする。
出力装置104は、プロセッサ101の処理の結果を出力する。出力装置104は、ディスプレイ等を含む。出力装置104は、ノード1に備えられてなくてもよく、必要な時に外付けされてもよい。
例えば、ノード1は、プロセッサ101が補助記憶装置105に保持されるデータ配信プログラムを主記憶装置102にロードして実行する。ノード1は、データ配信プログラムの実行を通じて、ネットワークインタフェース107を介して配信ノード群に参加する。また、ノード1は、データ配信プログラムの実行を通じて、該配信ノード群においてクライアント端末に配信されるコンテンツのセグメントの一部を補助記憶装置105又は外部記録装置111に保持する。さらに、ノード1は、データ配信プログラムの実行を通じて、クライアント端末からの配信要求に応じて、補助記憶装置105又は外部記憶装置111に保持されるコンテンツのセグメントを配信する。
なお、ノード1として機能する情報処理装置は、サーバマシンのような専用のコンピュータに限定されず、十分なメモリ資源を有するルータやレイヤ3スイッチのような中継装置であってもよい。
図4は、配信ノード群に含まれる各ノードの機能構成例を示す図である。配信ノード群に含まれる各ノードの機能構成は共通する。ノード1は、プロセッサ101が補助記憶装置105又は外部記録装置111に保持されるデータ配信プログラムの実行を通じて、クエリ処理部11,隣接ノード情報取得部12,配信ノード群情報管理部13,固定セグメント取得部14,一時セグメント管理部15,ルーティング部16,テーブル管理部17,及びセグメント送信部19として動作する。ただし、第1実施形態では、各機能ブロックが全てソフトウェア処理により実現されていると仮定しているが、機能ブロックそれぞれに対応するプロセッサや信号処理回路等を用いて、ハードウェアで図4に示される構成を実現してもよい。
クエリ処理部11は、他のノードから受信したクエリ,クエリ応答,通知等の種別を判別し、種別に応じた処理を実行する。例えば、データ配信システムにおいて用いられるクエリには、配信ノード群への参加を要求する参加クエリ,配信コンテンツの配置を要求するコンテンツ配置クエリ,コンテンツの配信開始を要求するコンテンツン配信開始クエリ等がある。クエリ処理部11の処理の詳細については、後述のフローチャート等で説明される。クエリ処理部11は、例えば、クエリ処理部に相当する。
隣接ノード情報取得部12は、配信ノード群の上位隣接ノード及び下位隣接ノードの内能及び外能の情報を取得する。内能とは、ノードの内部処理の能力である。隣接ノードの内能の情報には、例えば、CPU使用率,メモリ使用率,スループット性能,及び記憶媒体の読み書き速度等が含まれる。これらの隣接ノードの内能の情報は、隣接ノード情報取得部12が隣接ノードに問い合わせることによって取得される。また、外能とは、ノードの外部のノードとの処理の能力である。隣接ノードの外能の情報は、例えば、ホップ数,応答時間,TCP関連情報(RTT、RWIN),最大MTU長,データ損失率,使用可能な回線帯域,スループット等である。隣接ノード情報取得部12は、例えば、pingやtraceroute等のソフトウェアを用いて隣接ノードの外能の情報を取得する。取得された隣接ノードの内能及び外能の情報は、隣接ノードとのネットワーク上の距離(コスト)を決定するために用いられる情報であって、後述の配信ノード群情報に格納される。
配信ノード群情報管理部13は、ノード1が所属する配信ノード群に関する情報である、後述の配信ノード群情報を管理(生成、更新、削除等)する。固定セグメント取得部14は、コンテンツ配置クエリを受信した場合に、自ノードが固定で保持すべきセグメントを判定し、該セグメントを補助記憶装置105又は外部記憶装置110に格納する。固定セグメント取得部14の処理の詳細については、後述のフローチャート等で説明される。固定セグメント取得部14は、例えば、固定セグメント取得部に相当する。
一時セグメント管理部15は、隣接ノードから受信した一時セグメントを管理する。例えば、一時セグメント管理部15は、下位の隣接ノードへの送信が完了した一時セグメントの削除を行う。一時セグメント管理部15は、例えば、一時セグメント管理部に相当する。
ルーティング部16は、各種クエリやクエリ応答、セグメント等、ノード1から送信されるデータのルーティングを行う。テーブル管理部17は、ノード1が所属する配信ノード群のコンテンツ配信状況を管理する、後述のストリーム管理テーブル183を管理(生成、更新、削除等)する。セグメント送信部19は、コンテンツのセグメントを下位隣接ノード又はクライアント群に送信する。
記憶部18は、データ配信プログラムの実行を通じて、又は、静的に補助記憶装置105又は/及び外部記憶装置111の記憶領域に生成される。記憶部18には、一時セグメントバッファ181,配信ノード群情報182,ストリーム管理テーブル183,及び固定セグメント群184が含まれる。一時セグメントバッファ181は、例えば、第2の記憶部に相当する。
一時セグメントバッファ181は、他のノードから受信した一時セグメントを格納するバッファである。固定セグメント群184は、ノード1が担当する固定セグメントである。
図5A及び図5Bは、配信ノード群情報の例を示す図である。配信ノード群情報は、ノ
ード1が参加している配信ノード群ごとに生成される。
配信ノード群情報には、配信ノード群番号,該配信ノード群内の総ノード数,該配信ノード群における自ノードの位置(ノード番号),上位隣接ノード情報,下位隣接ノード情報,配信クライアント群の番号,配信コンテンツ情報が含まれる。
配信ノード群番号は、配信ノード群を識別するための番号である。配信ノード群における自ノードの位置は、配信ノード群においてクライアント群からネットワーク上の距離が離れている順番を示す番号である。この配信ノード群における自ノードの位置を示す番号は、ノード番号とも称される。第1実施形態においては、配信クライアント群にネットワーク上の距離が最も離れたノードを「1」とし、配信クライアント群にネットワーク上の距離が近いノードになるにつれて大きい番号が順に付される。自ノードのノード番号は、配信ノード群生成処理を通じて決定される(後述)。
データ配信システム内の各クライアント群には、識別するための番号が予め割り当てられている。配信クライアント群の番号は、該配信ノード群からのコンテンツ配信を受信するクライアント群に割り当てられている番号である。配信ノード群番号,配信ノード群内の総ノード数,自ノードのノード番号,配信クライアント群の番号は、それぞれ配信ノード群生成処理を通じて取得される情報である。
配信コンテンツ情報は、該配信ノード群によって配信クライアント群に配信されるコンテンツに関する情報である。配信コンテンツ情報には、コンテンツ番号,コンテンツビットレート,総セグメント数,固定セグメント番号,一時セグメント番号,空セグメント番号,総コンテンツ容量,総固定セグメント容量,総一時セグメント容量,及び総保持セグメント容量が含まれる。コンテンツ番号は、配信ノード群によって配信されるコンテンツの識別番号である。以降、配信ノード群によって配信されるコンテンツは、配信コンテンツとも称される。コンテンツビットレートは、配信コンテンツの配信に要求されるビットレートである。
配信コンテンツは、所定のサイズの複数のセグメントに分割され、図2で示されるように、各セグメントは配信ノード群の各ノードによって分散して保持される。各セグメントには、配信コンテンツの先頭から順番に識別番号が付されている。
総セグメント数は、配信コンテンツに含まれるセグメントの総数である。固定セグメント番号は、自ノードが保持する固定セグメントの番号のリストである。一時セグメント番号は、自ノードが保持する一時セグメントの番号のリストである。空セグメント番号は、配信コンテンツのセグメントのうち、自ノードが保持していないセグメントの番号リストである。総固定セグメント容量は、自ノードが保持する固定セグメント群の総容量である。総一時セグメント容量は、自ノードが保持する一時セグメント群の総容量である。総保持セグメント容量は、自ノードが保持する固定セグメント群と一時セグメント群との総容量である。一時セグメントは送信完了に伴う削除や追加等によって変更があるため、一時セグメントとなるセグメントに変更がある度に、一時セグメント番号,総一時セグメント容量,及び総保持セグメント容量は更新される。
図5Bは、上位隣接ノード情報及び下位隣接ノード情報の例を示す図である。配信ノード群において、自ノードのノード番号の前後の番号を有する配信ノードを、自ノードの配信ノード群における隣接ノードと、定義する。最上位のノードと最下位のノードとを除いて、配信ノード群における各配信ノードには、上位隣接ノードと下位隣接ノードとが存在する。最上位のノードには、下位隣接ノードのみが存在する。最下位のノードには、上位隣接ノードのみが存在する。
各ノードは、上位隣接ノードと下位隣接ノードと、それぞれについて、隣接ノード情報を有する。隣接ノード情報には、隣接ノードとのネットワーク上の距離を求めるために必要な情報が含まれる。例えば、上位隣接ノード情報には、ノード間のホップ数,ノード間の応答時間,ノード間のTCP関連情報(RTT,RWIN),ノード間の最大MTU長,ノード間のデータ損失率,ノード間で使用可能な回線帯域,ノード間のスループット,
ノード間の地理的距離,上位隣接ノードのCPU使用率,上位隣接ノードのメモリ使用率,上位隣接ノードのスループット性能,上位隣接ノードの記憶媒体の読み書き速度,及び上位隣接ノードのIPアドレスが含まれる。
(配信ノード群生成処理)
図6は、配信ノード群生成処理の例を説明するための図である。図6では、便宜上、ノードは円で示されている。図6では、5台のノードが配信ノード群を生成する例が示される。配信ノード群の生成に係る処理は、配信ノード群生成処理と称される。
まず、配信ノード群が生成される際には、データ配信システムの管理者等によって、入力装置から、又は、ネットワークを介して、データ配信システムに属するノードに、配信ノード群生成指示が入力される。配信ノード群生成指示が入力されたノードは、その配信ノード群においてノード番号が1の配信ノードとなる。なお、配信ノード群生成指示が入力されるノードは、データ配信システムの管理者によって選択され、例えば、オリジナルのコンテンツが格納されるノードの近傍のノードであってもよいし、オリジナルのコンテンツが格納されるノード自体であってもよい。
ノード番号「1」の配信ノードは(以降、単に「配信ノード1」)、配信ノード群への参加を要求する参加クエリを送信する。参加クエリの流れは、図6中で実線の矢印で示される。参加クエリには、例えば、配信ノード群に参加するための参加条件、配信ノード群生成処理の終了条件等が含まれる。参加クエリは、例えば、データ配信システムに割り当てられるマルチキャストアドレスを用いて送信され、配信ノード1の近傍に位置するノードに受信される。
配信ノード1の近傍のノードは、参加クエリを受信すると、配信ノード群への参加条件を満たしているか否かを判定し、満たしている場合には、配信ノード1に参加クエリ応答を送信する。参加クエリ応答は、例えば、参加クエリの送信元IPアドレスを宛先とするユニキャストパケットとして送信される。図6中では、参加クエリ応答の流れは、破線の矢印で示される。
配信ノード1は、最初に受信した参加クエリ応答の送信元のノードをノード番号「2」の配信ノードに決定する。配信ノード1が最初に受信した参加クエリ応答の送信元のノードが、配信ノード1とのネットワーク上の距離が一番近いノードであることが暗示されるからである。配信ノード1は、最初に受信した参加クエリ応答の送信元のノードにノード番号「2」で配信ノード群に参加することが決定された旨を通知する参加確定通知を送信する。参加確定通知は、例えば、最初に受信された参加クエリ応答の送信元IPアドレス宛てにマルチキャストパケットとして送信される。図6中では、便宜上、参加確定通知の流れの表示は省略されている。配信ノード1は、それ以降に受信する参加クエリ応答は廃棄する。該参加確定通知を受信したノードは、以降、該配信ノード群のノード番号「2」の配信ノード(以降、単に「配信ノード2」)として処理を行う。なお、配信ノード1は、所定時間経過しても何れのノードからも参加クエリ応答を受信しない場合には、再度参加クエリを送信する。所定回数参加クエリを送信しても、配信ノード1が所定時間中に何れのノードからも参加クエリ応答を受信できない場合には、配信ノード1は、配信ノード群生成処理を終了する。
配信ノード2は、配信ノード1から参加確定通知を受信すると、参加クエリを送信する。参加クエリは、配信ノード2の近傍に位置するノードによって受信され、配信ノード2は、参加条件を満たすノードから参加クエリ応答を受信する。なお、このとき、既に該配信ノード群に参加しているノード(この場合には、配信ノード1)は、配信ノード2から参加クエリを受信しても、参加クエリ応答を配信ノードに送信せずに、受信した参加クエリを廃棄する。配信ノード2は、最初に受信した参加クエリ応答の送信元のノードに、ノード番号「3」の配信ノードとして配信ノード群に参加が決定した旨の参加確定通知を送信する。以降、配信ノード2は、参加クエリ応答を受信しても廃棄する。
該参加確定通知を受信したノードは、以降、該配信ノード群のノード番号「3」の配信ノード(以降、単に「配信ノード3」)として処理を行う。以降、配信ノード3は、配信ノード1及び配信ノード2と同様にして、参加クエリを送信し、最初に受信した参加クエリ要求の送信元のノードをノード番号「4」の配信ノード(以降、単に「配信ノード4」)として決定し、該ノードに参加確定通知を送信する処理を実行する。配信ノード4も同様の処理を行い、ノード番号「5」の配信ノード(以降、単に「配信ノード5」)が決定される。
参加クエリによって各配信ノードに通知される配信ノード群生成処理の終了条件が、例えば、配信ノード数が5台である場合には、配信ノード5は、終了条件が満たされたことを検知する。終了条件が満たされた場合には、配信ノード5は、配信ノード群生成処理の完了を通知する生成完了通知を送信する。生成完了通知には、例えば、該配信ノード群に含まれる配信ノードの総数が含まれる。生成完了通知は、例えば、参加クエリと同じマルチキャストアドレスを用いて、各配信ノードに転送される。なお、生成完了通知は、例えば、配信ノード5から配信ノード4、配信ノード4から配信ノード3、配信ノード3から配信ノード2、配信ノード2から配信ノード1、というように、上位の隣接ノードに次々と転送されていってもよい。生成完了通知を全配信ノードが受信すると、配信ノード群生成処理が終了する。生成完了通知によって、配信ノード群の各配信ノードは、配信ノード群に含まれるノードの総数を取得する。
図7は、参加クエリ,参加クエリ応答,参加確定通知,及び生成完了通知に含まれる情報の例を示す図である。参加クエリには、例えば、配信ノード群番号,配信クライアント群番号,参加条件,配信ノード群生成処理の終了条件,クエリ送信時点での参加ノード数,及び最小配信能力が含まれる。
配信ノード群番号は、該参加クエリを用いる配信ノード群生成処理によって生成される配信ノード群を識別するための番号である。配信クライアント群番号は、参加クエリを用いる配信ノード群生成処理によって生成される配信ノード群がコンテンツを配信するクライアント群を識別するための番号である。
参加条件は、該参加クエリを用いる配信ノード群生成処理によって生成される配信ノード群に参加するための条件である。参加条件は、例えば、ノードの外能及び内能の基準値、配信品質等で定義されている。配信品質は、動画や音声コンテンツ再生が途切れないために必要とされるノード間の配信能力であり、例えば、データ伝送速度(bps等)である。
配信ノード群生成処理の終了条件は、例えば、配信ノード群の上限ノード数,ノードが位置する地域等で定義されている。配信ノード群番号,配信クライアント群番号,参加条件,及び配信ノード群生成処理の終了条件は、データ配信システムの管理者によって指定され、配信ノード群生成指示とともに配信ノード1に入力される。この他に、配信ノード
群生成指示とともに、配信コンテンツのコンテンツ番号,オリジナルの配信コンテンツを有するノードのIPアドレス等も入力される。また、配信ノード群番号,配信クライアント群番号,参加条件,及び配信ノード群生成処理の終了条件は、参加クエリを送信する各配信ノードによって書き換えられることなく、全配信ノードに通知される。
クエリ送信時点での参加ノード数は、すなわち、参加クエリを送信する配信ノードの配信ノード番号である。これによって、参加クエリを受信するノードに、現在配信ノード群に参加しているノード数を通知する。また、参加クエリを受信したノードは、自ノードに割り当てられる予定のノード番号が通知された参加ノード数に1を加算した番号であることを取得する。
最小配信能力は、配信ノード1から該参加クエリの送信元ノードまでの各配信ノード間の配信能力(bps)の最小値である。配信能力は、例えば、各配信ノード間で使用可能な回線帯域である。最小配信能力は、新たな配信ノードが参加クエリを送信する際に、受信した参加クエリに含まれる最小配信能力と上位隣接ノードとの間の配信能力とを比較して、上位隣接ノードとの間の配信能力の方が小さい場合に、上位隣接ノードとの間の配信能力で更新する。
クエリ送信時点での参加ノード数及びクエリ送信ノードのIPアドレスは、各配信ノードにおいて参加クエリが送信される度に書き換えられる。最小配信能力は、新たに参加クエリを送信する配信ノードと上位隣接ノードとの間の配信能力が、該配信ノードが受信した参加クエリに含まれる最新配信能力の値を下回った場合に、書き換えられる。
参加クエリに対する応答である参加クエリ応答には、例えば、配信ノード群番号,配信クライアント群番号,該参加クエリ応答の送信元ノードのノード番号,及び該参加応答クエリの送信元ノードのIPアドレスが含まれる。配信ノード群番号及び配信クライアント群番号は、それぞれ参加クエリに含まれるものと同じ番号であり、参加クエリと参加クエリ応答とで整合性を保つためのものである。参加クエリ応答の送信元ノードのノード番号は、参加クエリ応答の送信元ノードが配信ノード群に参加する場合に割り当てられる予定のノード番号である。
参加クエリ応答の送信元ノードのIPアドレスによって、該参加クエリ応答に対応する参加クエリの送信元ノードに、参加クエリ応答の送信元ノードのIPアドレスを通知することができる。このとき、参加クエリ応答が最初に対応する参加クエリの送信元ノードに受信された場合には、該参加クエリの送信元ノードは下位隣接ノードのIPアドレスを取得することになる。すなわち、参加クエリ応答の送信元ノードのIPアドレスは、該参加クエリ応答が参加クエリの送信元ノードに最初に到着した場合に、参加クエリの送信元ノードの配信ノード群情報(下位隣接ノード情報)に格納される。
参加確定通知は、配信ノード群に参加が決定したノードに送信されるメッセージであり、参加クエリを送信した配信ノードから、該参加クエリ対して参加クエリ応答を最初に受信されたノードに対して送信される。参加確定通知には、例えば、配信ノード群番号,配信クライアント群番号,決定された配信ノード番号,及び参加確定通知の送信元ノードのIPアドレスが含まれる。
配信ノード群番号及び配信クライアント群番号は、参加クエリ及び参加クエリ応答に含まれるものと同じ番号であり、参加クエリ,参加クエリ応答,及び参加確定通知とで整合性を保つためのものである。
決定されたノード番号は、参加確定通知を受信したノードに割り当てられるノード番号
である。参加確定通知に含められる決定されたノード番号には、参加確定通知を送信する配信ノードのノード番号に1を加算した番号が格納される。参加確定通知の送信元ノードのIPアドレスは、参加確定通知を受信したノードにとって、上位隣接ノードのIPアドレスであって、配信ノード群情報(上位隣接ノード情報)に格納される。
生成完了通知は、配信ノード群生成処理の終了条件を満たしたことを検知した配信ノード、すなわち、配信ノード群において最下位の配信ノードが配信ノード群生成処理の終了を他の配信ノードに通知するために送信するメッセージである。生成完了通知には、例えば、配信ノード群番号,配信クライアント群番号,総ノード数,及び配信ノード群内最小配信能力が含まれる。
配信ノード群番号及び配信クライアント群番号は、参加クエリ,参加クエリ応答,及び参加確定通知に含まれるものと同じ番号であり、参加クエリ,参加クエリ応答,参加確定通知,及び生成完了通知とで整合性を保つためのものである。
総ノード数は、配信ノード群に参加する配信ノードの総数である。生成完了通知に含められる総ノード数には、生成完了通知を送信するノード、すなわち、配信ノード群の最下位の配信ノードに割り当てられたノード番号が格納される。
配信ノード群内最小配信能力は、各配信ノード間の配信能力のうち最小の配信能力である。配信ノード群最小能力として格納される情報は、生成完了通知を送信する配信ノード群の最下位の配信ノードによる、参加クエリで通知された最小配信能力と、自ノードと自ノードの上位隣接ノードとの間の配信能力との比較によって決定される。比較の結果、最下位の配信ノードと上位隣接ノードとの間の配信能力の方が小さい場合には、生成完了通知の配信ノード群内最小配信能力には、最下位の配信ノードと上位隣接ノードとの間の配信能力が格納される。比較の結果、参加クエリで通知された最小配信能力の方が小さい場合には、生成完了通知の配信ノード群内最小配信能力には、参加クエリで通知された最小配信能力が格納される。
生成完了通知によって、総ノード数及び配信ノード群内最小配信能力が配信ノード群内の全配信ノードに通知される。総ノード数及び配信ノード群内最小配信能力は、後述の配信コンテンツの配置処理に用いられる情報である。
参加クエリは、マルチキャストアドレスを用いて送信される。参加クエリ応答は、参加クエリの送信元に宛ててユニキャストを用いて送信される。参加決定通知は、参加クエリ応答の送信元に宛ててユニキャストアドレスを用いて送信される。生成完了通知は、マルチキャストアドレス、ユニキャストアドレスの何れを用いて送信されてもよく、データ配信システムの管理者によって何れを用いるか選択されてもよい。また、参加クエリ,参加クエリ応答,参加確定通知,及び生成完了通知を区別するために、例えば、それぞれには識別番号が割り当てられている。図7において示された参加クエリ,参加クエリ応答,参加確定通知,及び生成完了通知に含められる情報は、一例であり、図7に示される例に限定されない。データ配信システムの管理者は、これらに含められる情報を編集(追加,削除)することができる。
図8A,図8B,及び図8Cは、配信ノード群生成処理においてデータ配信システム内の各ノードにおいて実行される処理のフローチャートの例である。図8A、図8B,及び図8Cに示されるフローは、パケットを受信すると開始される。
OP1では、クエリ処理部11は、受信したパケットが配信ノード群生成指示であるか否かを判定する。配信ノード群生成指示は、例えば、データ配信システムの管理者からネ
ットワークを介するネットワークインタフェース107を通じて入力される。なお、配信ノード群生成指示は、データ配信システムの管理者から入力装置103を通じて入力されてもよい。配信ノード群生成指示とともに、例えば、配信ノード群番号,配信クライアント群番号,配信コンテンツのコンテンツ番号,参加条件,配信ノード群生成処理の終了条件,オリジナルの配信コンテンツを保持するノードのIPアドレスがノードに入力される。受信パケットが配信ノード群生成指示である場合には(OP1:Yes)、処理がOP2に進む。受信パケットが配信ノード群生成指示でない場合には(OP1:No)、処理が図8BのOP11に進む。
OP2では、クエリ処理部11は、図7において示された情報を含めて、参加クエリを送信する。参加クエリは、ルーティング部16においてルーティングされてからネットワークインタフェース107を通じて送信される。以降、送信処理の際のルーティング部16によるルーティングについては説明が省略されるが、何れのパケットの送信の際でも、ルーティング部16によるルーティングは実行される。参加クエリを送信すると、クエリ処理部11は、タイマーを開始させる。なお、OP2の処理がOP1の処理に続けて実行される場合には、OP2において、クエリ処理部11は、OP1において配信ノード群生成指示を受信したので、自ノードのノード番号を1に決定し、参加クエリを送信する。OP3では、クエリ処理部11は、OP2において送信した参加クエリに対応する参加クエリ応答の受信の有無を判定する。参加クエリ応答の受信がある場合には(OP3:Yes)、処理がOP5に進む。参加クエリ応答の受信が無い場合には(OP3:No)、処理がOP4に進む。
OP4では、クエリ処理部11は、タイムアウトか否かを判定する。クエリ処理部11は、予め設定される所定時間が経過しても参加クエリ応答の受信が無い場合、すなわち、タイムアウトした場合には(OP4:Yes)、図8Aに示される処理のフローを終了する。予め設定される所定時間が経過していない場合には、すなわち、タイムアウトしていない場合には(OP4:No)、処理がOP3に戻り、参加クエリ応答を受信するまで、又は、タイムアウトするまでOP3及びOP4の処理が繰り返される。
OP5では、クエリ処理部11は、受信した参加クエリ応答で特定される配信ノード群の下位隣接ノードが既に登録されているか否かを判定する。すなわち、OP5では、クエリ処理部11は、受信した参加クエリ応答は、自ノードが最初に受信した参加クエリ応答であるか否かを判定する。受信した参加クエリ応答で特定される配信ノード群の下位隣接ノードが既に登録されているか否かは、配信ノード群情報管理部13が記憶部18に格納される配信ノード群情報を確認することによって判定される。
受信した参加クエリ応答で特定される配信ノード群の下位隣接ノードが既に登録されている場合には(OP5:Yes)、クエリ処理部11は、該参加クエリ応答を廃棄し、図8Aに示される処理のフローを終了する。受信した参加クエリ応答で特定される配信ノード群の下位隣接ノードが登録されていない場合には(OP5:No)、受信した参加クエリ応答が、最初に受信した参加クエリ応答であることを検知し、処理がOP6に進む。
OP6では、クエリ処理部11は、受信した参加クエリ応答が最初に受信した参加クエリ応答であるので、該参加クエリ応答の送信元ノードを自ノードの下位隣接ノードに決定し、該参加クエリ応答の送信元ノードに参加確定通知を送信する。自ノードのノード番号をn(n:0を含まない自然数)であるとすると、参加確定通知によって参加クエリ応答の送信元ノードに通知されるノード番号はn+1となる。
OP7では、配信ノード群情報管理部13は、配信ノード群情報を生成又は更新する。自ノードがノード番号「1」の配信ノードである場合には、配信ノード群情報管理部13
は、配信ノード群生成指示によって指示された配信ノード群の配信ノード情報を生成する。自ノードがノード番号「1」以外の配信ノードである場合には、配信ノード群情報管理部13は、参加クエリ応答によって特定される配信ノード群の配信ノード群情報を更新する。具体的には、配信ノード群情報管理部13は、参加確定通知を送信したノードを、参加確定通知によって特定される配信ノード群の配信ノード群情報に、自ノードの下位隣接ノードとして登録する。すなわち、参加確定通知を送信したノードから受信した参加クエリ応答に含まれる送信元ノードのIPアドレスを参加クエリ応答によって特定される配信ノードの下位隣接ノードのIPアドレスとして配信ノード群情報に格納する。その後、隣接ノード情報取得部12が、下位隣接ノードのIPアドレスを用いて、下位隣接ノードの情報(図5B参照)を取得する。下位隣接ノードの配信ノード群情報への登録が完了すると、図8Aに示される処理のフローが終了する。
図8BのOP11では、クエリ処理部11は、受信パケットが参加クエリであるか否かを判定する。受信パケットが参加クエリである場合には(OP11:Yes)、処理がOP12に進む。受信パケットが参加クエリでない場合には(OP11:No)、処理が図8CのOP31に進む。
OP12では、クエリ処理部11は、受信した参加クエリによって特定される配信ノード群の配信ノード群情報が記憶部18に保持されているか否かを判定する。この判定は、記憶部18に受信した参加クエリによって特定される配信ノード群の配信ノード群情報が有るか否かを、配信ノード群情報管理部13が確認することによって行われる。受信した参加クエリによって特定される配信ノード群の配信ノード群情報が記憶部18に保持されている場合には(OP12:Yes)、既に自ノードが該配信ノード群に参加しているので、図8Bに示される処理のフローが終了する。受信した参加クエリによって特定される配信ノード群の配信ノード群情報が記憶部18に保持されていない場合には(OP12:No)、処理がOP13に進む。
OP13では、クエリ処理部11は、自ノードが参加クエリに含まれる参加条件を満たすか否かを判定する。自ノードが参加クエリに含まれる参加条件を満たす場合には(OP13:Yes)、処理がOP14に進む。自ノードが参加クエリに含まれる参加条件を満たさない場合には(OP13:No)、クエリ処理部11は参加クエリを廃棄し、図8Bに示されるフローが終了する。
OP14では、クエリ処理部11は、例えば、図7に示される情報を含めて参加クエリ
応答を、参加クエリの送信元の配信ノードに送信する。参加クエリ応答を送信すると、クエリ処理部11は、タイマーを開始させる。
OP15では、クエリ処理部11は、OP14において送信した参加クエリ応答に対応する参加確定通知を受信したか否かを判定する。参加確定通知を受信した場合には(OP15:Yes)、処理がOP17に進む。参加確定通知を受信していない場合には(OP15:No)、処理がOP16に進む。
OP16では、クエリ処理部11は、タイムアウトか否かを判定する。クエリ処理部11は、予め設定される所定時間が経過しても参加確定通知の受信が無い場合、すなわち、タイムアウトした場合には(OP16:Yes)、ノード1は参加クエリによって特定される配信ノード群に参加できず、図8Bに示される処理のフローを終了する。予め設定される所定時間が経過していない場合には、すなわち、タイムアウトしていない場合には(OP16:No)、処理がOP15に戻り、参加確定通知を受信するまで、又は、タイムアウトするまでOP15及びOP16の処理が繰り返される。
OP17では、配信ノード群情報管理部13は、参加確定通知によって特定される配信ノード群の配信ノード群情報を生成する。このとき、配信ノード群情報管理部13は、参加確定通知に含まれるノード番号を自ノードのノード番号として配信ノード群情報に登録する。さらに、配信ノード群情報管理部13は、参加確定通知の送信元の配信ノードのIPアドレスを参加確定通知によって特定される配信ノード群の上位隣接ノードのIPアドレスとして配信ノード群情報に登録する。その後、隣接ノード情報取得部12が、上位隣接ノードのIPアドレスを用いて、上位隣接ノードの情報(図5B参照)を取得する。
OP18では、クエリ処理部11は、参加クエリに含まれる終了条件が満たされているか否かを判定する。終了条件が満たされている場合には(OP18:Yes)、自ノードが最下位の配信ノードとなり配信ノード群生成処理を終了させるため、処理がOP19に進む。終了条件が満たされていない場合には(OP18:No)、配信ノード群生成処理は継続するので、処理が図8AのOP2に進み、クエリ処理部11は参加クエリを送信して、OP3からOP7の処理を行い、下位隣接ノードを決定する。
OP19では、クエリ処理部11は、終了条件が満たされているので、配信ノード群生成処理を終了させ、例えば、図7で示される情報を含めて、参加確定通知によって特定される配信ノード群の自ノードの上位隣接ノードに生成完了通知を送信する(ユニキャスト)。その後、図8Bに示される処理のフローが終了する。
図8CのOP31では、クエリ処理部11は、受信パケットが生成完了通知か否かを判定する。受信パケットが生成完了通知である場合には(OP31:Yes)、処理がOP33に進む。受信パケットが生成完了通知でない場合には(OP31:No)、処理がOP32に進む。
OP32では、クエリ処理部11は、受信パケットが参加クエリ応答か否かを判定する。受信パケットが参加クエリ応答である場合には(OP32:Yes)、処理が図8AのOP5に進み、受信した参加クエリ応答によって特定される配信ノード群において自ノードの下位隣接ノードが登録されているか否かが判定される(OP5)。なお、OP32において受信される参加クエリ応答は、最初に受信された参加クエリ応答でない可能性が高い。なぜなら、最初に受信される参加クエリ応答は図8AのOP3において処理されるはずだからである。したがって、OP32において受信される参加クエリ応答は図8AのOP5の処理で廃棄される可能性が高い。
受信パケットが参加クエリ応答ではない場合には(OP32:No)、受信パケットは配信ノード群生成処理に係るパケットではないので、図8Cに示される処理のフローが終了する。
OP33では、クエリ処理部11は、生成完了通知によって特定される配信ノード群の配信ノード群情報が記憶部18に保持されているか否かを判定する。この判定は、配信ノード群情報管理部13による記憶部18内に保持される配信ノード群情報の確認結果に基づいて行われる。生成完了通知によって特定される配信ノード群の配信ノード群情報が記憶部18に保持されている場合には(OP33:Yes)、自ノードが該配信ノード群に参加しており、処理がOP35に進む。生成完了通知によって特定される配信ノード群の配信ノード群情報が記憶部18に保持されていない場合には(OP33:No)、自ノードが該配信ノード群に参加しておらず、処理がOP34に進む。
OP34では、クエリ処理部11は、自ノードは生成完了通知によって特定される配信ノード群に参加しておらず、該生成完了通知は不要なので、該生成完了通知を廃棄する。その後、図8Cに示される処理のフローが終了する。
OP35では、受信した生成完了通知が自ノードの参加する配信ノード群の生成完了通知であるので、配信ノード群情報管理部13は、生成完了通知に含まれる総ノード数と最小配信能力とを該当する配信ノード群情報に格納する。
OP36では、クエリ処理部11は、受信した生成完了通知によって特定される配信ノード群において自ノードの上位隣接ノードが存在するか否かを判定する。すなわち、クエリ処理部11は、自ノードが受信した生成完了通知によって特定される配信ノード群において最上位の配信ノード(ノード番号「1」)か否かを判定する。この判定は、配信ノード群情報管理部13による該当配信ノード群情報に上位隣接ノード情報が含まれるか否か、又は、該当配信ノード情報内のノード番号が「1」であるか否かの判定結果に基づいて行われる。該当配信ノード群情報に上位隣接ノード情報が含まれる場合、及び、該当配信ノード群情報のノード番号が「1」ではない場合には、該当配信ノード群に自ノードの上位隣接ノードが存在することが示される。一方、該当配信ノード群情報に上位隣接ノード情報が含まれない場合、及び、該当配信ノード群情報のノード番号が「1」である場合には、該当配信ノード群に自ノードの上位隣接ノードが存在しないことが示される。
受信した生成完了通知によって特定される配信ノード群において自ノードの上位隣接ノードが存在する場合には(OP36:Yes)、該上位隣接ノードに生成完了通知を転送する必要があるため、処理がOP37に進む。受信した生成完了通知によって特定される配信ノード群において自ノードの上位隣接ノードが存在しない場合には(OP36:No)、クエリ処理部11は、受信した完成完了通知を転送せず、図8Cに示される処理が終了する。
OP37では、クエリ処理部11は、受信した生成完了通知によって特定される配信ノード群の配信ノード群情報に含まれる上位隣接ノードに生成完了通知を転送する(ユニキャスト)。その後、図8Cに示される処理が終了する。
図8Cに示される処理のフローでは、上位隣接ノードが存在する場合には、生成完了通知は上位隣接ノードに転送される、というように生成完了通知はユニキャストアドレスで送受信されている。これに変えて、生成完了通知は、マルチキャストアドレスを用いて送信されてもよい。生成完了通知にマルチキャストアドレスが用いられる場合には、自ノードが最下位の配信ノードのクエリ処理部11は、図8BのOP19の処理において、マルチキャストアドレスを用いて生成完了通知を送信する。また、マルチキャストアドレスを用いた生成完了通知を受信した場合には、図8CのOP36及びOP37の処理が省略される。
図6,図7,図8A−図8Cにおいて説明されたように、第1実施形態では、データ配信システムの管理者から配信ノード群生成指示が入力されることによって、各ノードが自律的に動作して配信ノード群を生成する。
(配信コンテンツ分散配置処理)
配置ノード生成処理によって配信ノード群が生成されると、次に、配信ノード群が配信する配信コンテンツを各配信ノードに分散配置するための配信コンテンツ分散配置処理が実行される。
図9は、配信コンテンツ分散配置処理の例を示す図である。配信コンテンツ分散配置処理では、ノード番号「1」の配信ノードから順に各配信ノードに配信コンテンツが転送される。各配信ノードは、配信コンテンツが転送されてくると、自ノードに担当が割り当てられた配信コンテンツのセグメントを取得し、記憶部18の固定セグメント群184に格
納する。各配信ノードは、取得したセグメントを配信コンテンツから削除し、下位隣接ノードに転送する。
第1実施形態では、図2で説明されたように、配信コンテンツのセグメント配置マップが波形になるように、配信コンテンツが分散配置される。配信コンテンツのセグメント配置マップが図2の波形になるように配信コンテンツが配置される場合、ノード番号「n」の配信ノードに割り当てられるセグメントは、以下の式1を満たす番号Sのセグメントと式2を満たす番号Sのセグメントとである。なお、以下の式1及び式2において、Nは、或る配信ノード群に含まれる配信ノードの総数(N:0を含まない自然数)である。nは、該配信ノードに含まれる或る配信ノードのノード番号(0<n≦N)である。変数iは、i=0,1,2,...である。
図9に示される例では、配信ノード群には5台の配信ノードが含まれている。以下、図9に示される配信ノード群に、セグメント配置マップが図2に示されるような波形になるようにセグメントが配置される場合の配信コンテンツの分散配置処理について説明する。なお、図9では、ノード番号「n」の配信ノードを、単に、配信ノードnと称する。
まず、配信ノード1は、オリジナルの配信コンテンツを保持するノードに対して、配信コンテンツ要求を送信し、配信コンテンツを取得する。配信コンテンツ要求には、例えば、要求する配信コンテンツのコンテンツ番号が含まれる。なお、配信ノード1がオリジナルの配信コンテンツを保持するノードである場合には、この処理は実行されない。
配信ノード1は、配信コンテンツを取得すると、配信コンテンツをセグメントに分割する。配信コンテンツの分割方法については、図10にて詳細に説明される。図9に示される例では、配信コンテンツが14個のセグメントに分割されたものとする。各セグメントには、先頭のセグメントのセグメント番号を「1」として、先頭セグメントから順にセグメント番号が付される。
配信ノード1は、配信コンテンツの自ノードの担当するセグメントを記憶部18に格納する。図9に示される例の場合、配信ノード1は、式1を満たすセグメント5と式2を満たすセグメント6とを記憶部18に保持し、配信コンテンツからセグメント5とセグメント6とを削除する。
配信ノード1は、下位隣接ノードである配信ノード2に、配置クエリと、セグメント5とセグメント6とが削除された配信コンテンツとを送信する。配置クエリは、下位隣接ノードにセグメントの配置(取得)を要請するクエリである。配置クエリには、例えば、配信ノード群番号,配信クライアント群番号,配信コンテンツのコンテンツ番号,配信コンテンツのビットレート,総セグメント数,総コンテンツ容量等の、配信コンテンツに係る情報が含まれている。配置クエリ及び配信コンテンツは、それぞれユニキャストアドレスで送信される。
配信ノード1から配置クエリと配信コンテンツとを受信すると、配信ノード2は、配信コンテンツから配信コンテンツの自ノードの担当するセグメントを記憶部18に格納する。図9に示される例の場合、配信ノード2は、式1を満たすセグメント4と、式2を満たすセグメント7とを記憶部18に保持し、受信した配信コンテンツからセグメント4とセ
グメント7とを削除する。自ノードの担当するセグメントを記憶部18に格納すると、配信ノード2は、上位隣接セグメントである配信ノード1に配置クエリ応答を送信するとともに、下位隣接セグメントである配信ノード3に配置クエリと配信コンテンツ(セグメント4−7は削除)とを転送する。
以下、配信ノード3,配信ノード4,配信ノード5も、配信ノード2と同様にして、それぞれ、自ノードが担当するセグメントを記憶部18に格納する。ただし、配信ノード5では、最下位の配信ノードであるため、配置クエリ及び配信コンテンツの転送は行われない。ちなみに、配信ノード3が担当するセグメントは、式1を満たすセグメント3,13と、式2を満たすセグメント8とである。配信ノード4が担当するセグメントは、式1を満たすセグメント2,12と、式2を満たすセグメント9とである。配信ノード5が担当するセグメントは、式1を満たすセグメント1,11と、式2を満たすセグメント10とである。
図10は、配信コンテンツの分割について説明するための図である。配信コンテンツが要求するコンテンツビットレートをα(bps)、配信ノード群生成処理を通じて決定される配信ノード群内の最小配信能力をβ(bps)とする。α<βである。配信コンテンツを配信する際に、最小配信能力である配信ノード間がボトルネックとなり、遅延が発生することを防ぐために、配信コンテンツは、コンテンツビットレートα以上であり最小配信能力β以下となる分割単位X(bit)で分割される。ただし、最後尾のセグメントは、分割単位X以下のサイズとする。
配信コンテンツが分割されて生成されたセグメントの数をm、セグメント番号iのセグメントのサイズをX(i)(i=0,1,...,m)とすると、α≦X≦β,X(1)=X(2)=...=X(M−1)=X,及びX(m)≦Xを満たすように、配信コンテンツは分割される。
図11A及び図11Bは、配信コンテンツの分散配置処理において各配信ノードで実行される処理のフローチャートの例を示す図である。図11Aに示されるフローは、配信ノードがパケットを受信すると開始される。
OP41では、クエリ処理部11は、受信パケットが生成完了通知であるか否かを判定する。受信パケットが生成完了通知である場合には(OP41:Yes)、処理がOP42に進む。受信パケットが生成完了通知出ない場合には(OP41:No)、処理がOP47に進む。
OP42では、クエリ処理部11は、自ノードのノード番号が「1」であるか否かを判定する。この判定は、配信ノード群情報管理部13によって、受信した生成完了通知によって特定される配信ノード群の配信ノード情報内の自ノードのノード番号の確認結果に基づいて判定される。自ノードのノード番号が「1」である場合には(OP42:Yes)、処理がOP43に進む。自ノードのノード番号が「1」でない場合には(OP42:No)、図11Aに示される処理が終了する。
OP43では、クエリ処理部11は、ノード番号「1」であるので、オリジナルの配信コンテンツを保持するノードに配信コンテンツ要求を送信する(ユニキャスト)。配信コンテンツ要求を送信するとともに、クエリ処理部11は、タイマーを開始する。
OP44では、クエリ処理部11は、配信コンテンツの受信処理が実行されているか否かを判定する。配信コンテンツの受信処理が実行されている場合には(OP44:Yes)、処理がOP46に進む。配信コンテンツの受信処理が実行されていない場合には(O
P44:No)、処理がOP45に進む。
OP45では、クエリ処理部11は、タイムアウトか否かを判定する。クエリ処理部11は、予め設定される所定時間が経過しても配信コンテンツの受信処理が開始されない場合、すなわち、タイムアウトした場合には(OP45:Yes)、図11Aに示される処理のフローを終了する。予め設定される所定時間が経過していない場合には、すなわち、タイムアウトしていない場合には(OP45:No)、処理がOP44に戻り、配信コンテンツの受信処理が開始されるまで、又は、タイムアウトするまでOP44及びOP45の処理が繰り返される。なお、自ノード(ノード番号「1」の配信ノード)がオリジナルの配信コンテンツを保持するノードである場合には、OP43−OP45の処理は省略される。
OP46では、クエリ処理部11は、受信した配信コンテンツを、図10において説明されたように、複数のセグメントに分割する。その後、処理が図11BのOP52に進む。
OP47では、クエリ処理部11は、受信パケットが配置クエリであるか否かを判定する。受信パケットが配置クエリである場合には(OP47:Yes)、処理が図11BのOP52に進む。なお、配置クエリが受信された場合には、配置クエリの後、配信コンテンツのセグメント群も受信する。受信パケットが配置クエリでない場合には(OP47:No)、受信パケットは配信コンテンツの分散配置処理に係るパケットではないので、図11Aに示される処理のフローが終了する。
図11BのOP52では、固定セグメント取得部14は、受信された配信コンテンツのセグメント群から、自ノードが担当するセグメントを記憶部18に格納する。例えば、図2で示されるような分散配置の場合には、固定セグメント取得部14は、式1を満たすセグメント番号のセグメント、式2を満たすセグメント番号のセグメントを自ノードが担当するセグメント(固定セグメント)として記憶部18に格納する。さらに、固定セグメント取得部14は、受信された配信コンテンツのセグメント群から自ノードが担当するセグメントを削除する。
OP53では、クエリ処理部11は、受信した配信コンテンツのセグメントが残っているか否かを判定する。例えば、自ノードが最下位の配信ノードである場合には、最下位の配信ノードが担当する分のセグメント群だけを含む配信コンテンツが受信され、OP52において、該セグメントの削除されてしまうため、受信した配信コンテンツのセグメントは残らない。受信した配信コンテンツのセグメントが残っている場合には(OP53:Yes)、下位の配信ノードが存在し、処理がOP54に進む。受信した配信コンテンツのセグメントが残っていない場合には(OP53:No)、下位の配信ノードは存在しておらず、配置クエリと配信コンテンツとを送信する必要がないため、処理がOP58に進む。
OP54では、クエリ処理部11は、配置クエリと残りの配信コンテンツのセグメント群とを下位隣接ノードに送信する(ユニキャスト)。クエリ処理部11は、配置クエリに例えば、配信ノード群番号,配信クライアント群番号,配信コンテンツのコンテンツ番号,配信コンテンツのビットレート,総コンテンツ容量等の、配信コンテンツに係る情報を含める。配置クエリの送信とともに、クエリ処理部11は、タイマーを開始する。
OP55では、クエリ処理部11は、配置クエリに対する応答である配置クエリ応答を下位隣接ノードから受信したか否かを判定する。配置クエリ応答を受信した場合には(OP55:Yes)、処理がOP58に進む。配置クエリ応答を受信していない場合には(
OP55:No)、処理がOP56に進む。
OP56では、クエリ処理部11は、タイムアウトか否かを判定する。クエリ処理部11は、予め設定される所定時間が経過しても配置クエリ応答が受信されない場合、すなわち、タイムアウトした場合には(OP56:Yes)、処理がOP57に進む。予め設定される所定時間が経過していない場合には、すなわち、タイムアウトしていない場合には(OP56:No)、処理がOP55に戻り、配置クエリ応答が受信されるまで、又は、タイムアウトするまでOP55及びOP56の処理が繰り返される。
OP57では、クエリ処理部11は、配置クエリの再送回数が予め設定される上限回数を超えているか否かを判定する。配置クエリの再送の上限回数は、例えば、3回に設定される。配置クエリの再送回数が上限回数を超えている場合には(OP57:Yes)、図11Bに示される処理のフローが終了する。配置クエリの再送回数が上限回数を超えていない場合には(OP57:No)、処理がOP54に戻り、クエリ処理部11は、配置クエリと配信コンテンツのセグメント群とを再送する。
OP58では、配信ノード群情報管理部13は、配置クエリまたは配置クエリ応答によって特定される配信ノード群の配信ノード情報を更新する。具体的には、配信ノード群情報に含まれる配信コンテンツ情報(図5A)に、配置クエリに含まれる、コンテンツ番号,コンテンツビットレート,総セグメント数,総コンテンツ容量を格納する。但し、自ノードがノード番号「1」の配信ノードである場合には、自ノードにおける処理の結果として、これらの情報が得られる。さらに、配信ノード群情報管理部13は、OP52において記憶部18に格納された固定セグメントの番号に基づいて、配信コンテンツ情報の固定セグメント番号,空セグメント番号,総固定セグメント容量,総保持セグメント容量を格納する。その後、図11Bに示される処理のフローが終了する。
図11A及び図11Bの処理が、各配信ノードによって実行されることによって、自律的に、配信コンテンツが配信ノード群内に分散配置される。なお、図9,図10,図11A,及び図11Bでは、ノード番号1の配信ノードが配信コンテンツを分割してセグメントを生成し、各配信ノードは自ノードが担当するセグメントを配信コンテンツから取り出し取り出したセグメントを削除して次の配信ノードに転送するようにして、セグメントが配置されることを説明した。これに代えて、各配信ノードにおいて配信コンテンツを取得し、セグメントに分割し、自ノードが担当するセグメントだけ保持するようにしてセグメントが配置されてもよい。
(クライアント群へのコンテンツの配信処理)
配信コンテンツ分散配置処理が終了し、クライアント群からコンテンツ配信の要求が受信されると、クライアント群へのコンテンツ配信処理が実行される。
図12は、クライアント群へのコンテンツ配信処理の例を示す図である。データ配信システムでは、配信クライアント群からコンテンツ配信要求が受信されると、配信ノード群に含まれる配信ノードが同期してコンテンツの配信を開始する。各配信ノードは、固定セグメントのうち番号の小さい固定セグメントから送信を開始する。また、各配信ノードは固定セグメントを下位隣接ノードに送信することに加え、上位隣接ノードから送信されるセグメントを下位隣接ノードに転送することも実行する。各セグメントは、送信元の配信ノードから最下位の配信ノードまでの各配信ノードによって、バケツリレー形式でクライアント群まで送信される。
図12に示される配信ノード群は、図6及び図9に示される例でも説明された配信ノード群と同じである5台の配信ノードを含む配信ノード群である。さらに、図12に示され
る配信ノード群は、図9と同様に、14個に分割された配信コンテンツのセグメントが波形に分散配置されている。以下、図12に示される配信ノード群において、クライアント群へのコンテンツ配信処理が実行される例について説明する。なお、図12では、ノード番号「n」の配信ノードを、単に、配信ノードnと称する。
コンテンツ配信要求は、コンテンツの配信を要求するためにクライアント端末(またはクライアント群)によって送信される。コンテンツ配信要求には、例えば、配信を要求するコンテンンツのコンテンツ番号(配信要求コンテンツ番号)が含まれる。例えば、データ配信システムが定められた時刻に動画データを配信するようなサービスを提供する場合には、コンテンツ配信要求には、配信要求コンテンツ番号に加えて、配信開始時刻も含まれる。コンテンツ配信要求は、例えば、クライアント端末上で、データ配信システムが提供するサービスのウェブページ上で動画の視聴を指示するボタンがクリックされると、クライアント端末から配信される。
配信クライアント端末(配信クライアント群)からのコンテンツ配信要求は、配信ノード群において配信クライアント群に最もネットワーク上の距離が近い配信ノード、すなわち、最下位の配信ノードである配信ノード5によって受信される。最下位の配信ノード5は、上位隣接ノードである配信ノード4にコンテンツ配信開始クエリを送信する。コンテンツ配信開始クエリは、コンテンツの配信開始を要求するクエリである。コンテンツ配信開始クエリには、例えば、配信ノード群番号,配信クライアント群番号,配信クライアント群によって配信要求されたコンテンツのコンテンツ番号(配信要求コンテンツ番号),配信開始時刻,及び,要求セグメント番号が含まれる。
配信開始時刻は、クライアント群によってコンテンツ配信要求内で指定されている場合には、コンテンツ配信要求内の配信開始時刻となる。一方、クライアント群によって配信開始時刻が指定されていない場合には、すなわち、コンテンツ配信要求に配信開始時刻が含まれていない場合には、例えば、配信開始時刻は、現在時刻から所定時間後の時刻に設定される。この所定時間は、例えば、配信ノード群内の全配信ノードにコンテンツ配信開始クエリが行き渡り、セグメントの同期送信が可能となるまでに要すると予想される時間である。
要求セグメント番号は、コンテンツ配信開始クエリの送信元の配信ノードが上位隣接ノードに配信を要求するセグメントの番号である。各配信ノードに対して下位隣接ノード又はクライアント群への配信が要求されるセグメントを要求セグメントと称する。コンテンツ配信開始クエリの要求セグメント番号には、自ノードに対する要求セグメントのうち、コンテンツ配信開始クエリの送信時に自ノードが保持していないセグメントの番号が格納される。なお、保持セグメントには、固定セグメントと一時セグメントとが含まれる。
例えば、配信ノード5の場合には、クライアント群にネットワーク上の距離が最も近いので、全セグメント(セグメント1−14)をクライアント群に配信しなければならないため、要求セグメントはセグメント1−14となる。一方、配信ノード5は、固定セグメントとして、セグメント1,10,11を保持しているので、残りのセグメント2−9,12−14が上位隣接ノードに配信を要求するセグメントとなる。したがって、配信ノード5が送信するコンテンツ配信開始クエリに含まれる要求セグメント番号は、2−9,12−14となる。図12では、各配信ノードから送信されるコンテンツ配信開始クエリに含まれる要求セグメント番号が示されている。なお、各配信ノードにおいて、要求セグメントは例えば記憶部18に格納される。
配信ノード5からコンテンツ配信開始クエリを受信する配信ノード4は、コンテンツ配信開始クエリに含まれる要求セグメント番号を書き換えて、上位隣接ノードである配信ノ
ード3に送信する。配信ノード4の要求セグメントは、配信ノード5から受信したコンテンツ配信開始クエリに含まれる要求セグメント番号のセグメント2−9,12−14となる。配信ノード4は、固定セグメントとしてセグメント2,9,12を保持しているので、要求セグメント(セグメント2−9,12−14)のうち、セグメント3−8,13,14が上位隣接ノードに配信を要求するセグメントとなる。したがって、配信ノード4が上位隣接ノードである配信ノード3に送信するコンテンツ配信開始クエリの要求セグメント番号は、3−8,13,14となる。
以降、配信ノード1から配信ノード3も配信ノード4と同様の処理を行う。配信ノード3では、セグメント3−8,13,14が要求セグメントであり、固定セグメントがセグメント3,8,13であるので、配信ノード3が送信するコンテンツ配信開始クエリに含まれる要求セグメント番号は、4−7,14となる。配信ノード2では、セグメント4−7,14が要求セグメントであり、固定セグメントがセグメント4,7,14であるので、配信ノード2が送信するコンテンツ配信開始クエリに含まれる要求セグメント番号は、5,6となる。
配信ノード1では、セグメント5,6が要求セグメントであり、固定セグメントがセグメント5,6であるので、上位隣接ノードに配信を要求するセグメントはない。また、配信ノード1には、上位のノードもないので、コンテンツ配信開始クエリは送信されない。
配信ノード群内の全配信ノードにコンテンツ配信開始クエリが到着し、各配信ノードに対する要求セグメントが取得され、コンテンツの配信開始時刻になると、各ノードは、保持するセグメントのうち最も番号の小さいセグメントから順に配信を開始する。コンテンツ配信処理を通じて、各配信ノードは、要求セグメントとなるセグメントを下位隣接ノード又はクライアント群に配信することになる。
図13A,図13B,図13C,図13D,図13E,図13F,図13G,図13H,図13I,図13J,図13K,図13L,図13M,図13N,及び図13Oは、図12に示される配信ノード群において配信コンテンツがクライアント群に配信される様子を示す図である。
図13A−図13Oでは、縦方向がノード番号,横方向がセグメント番号を示す、配信コンテンツの分散配置図が示されている。各配信ノードの固定セグメントを示すフィールドは、斜線のテクスチャで塗りつぶされており、一時セグメントを示すフィールドは黒で塗りつぶされる。また、分散配置図の下方には、クライアント群に到着したセグメントが表示されている。図12及び図13A−図13Oで示される配信ノード群の各配信ノード間の配信能力は同じであるとする。
図13Aは、コンテンツ配信開始前の配信コンテンツの分散配置図を示す。図13A−図13Oでは、図12(図9)に示される配信ノード群の配信コンテンツの分散配置図が示されるので、分散配置図は、固定セグメントによって波形を示す。コンテンツ配信要求がクライアント群から受信されるとコンテンツ配信が開始される。
図13Bは、コンテンツ配信開始時の配信コンテンツの分散配置図を示す。各配信ノードは、固定セグメントのうち番号の小さいものから下位隣接ノード又はクライアント群への送信を開始する。図13Bでは、配信ノード5はクライアント群にセグメント1(固定セグメント)を送信している。配信ノード4は、下位隣接ノードの配信ノード5にセグメント2(固定セグメント)を送信している。配信ノード3は、下位隣接ノードの配信ノード4にセグメント3(固定セグメント)を送信している。配信ノード2は、下位隣接ノードの配信ノード3にセグメント4(固定セグメント)を送信している。配信ノード1は、
下位隣接ノードの配信ノード2にセグメント5(固定セグメント)を送信している。図13Bに示される各配信ノードの配信コンテンツのセグメントの送信処理によって、クライアント群にセグメント1が到着する。
図13Cは、図13Bにおいて示される各配信ノードの保持セグメントの送信が完了し、各配信ノードが次の保持セグメントを送信する際の配信コンテンツンの分散配置図を示す。図13Cでは、配信ノード5は、配信ノード4から受信したセグメント2を一時セグメントとして保持しており、未送信の要求セグメント(2−20)のうちセグメント番号が最も小さいセグメント2をクライアント群に送信する。配信ノード4は、配信ノード3から受信したセグメント3を一時セグメントとして保持しており、未送信の要求セグメント(3−9,12−14)のうちセグメント番号が最も小さいセグメント3を下位隣接ノードである配信ノード5に送信する。配信ノード3は、配信ノード2から受信したセグメント4を一時セグメントとして保持しており、未送信の要求セグメント(4−8,13,14)のうちセグメント番号が最も小さいセグメント4を下位隣接ノードである配信ノード4に送信する。配信ノード2は、配信ノード1から受信したセグメント5を一時セグメントとして保持しており、未送信の要求セグメント(5−7,14)のうちセグメント番号が最も小さいセグメント5を下位隣接ノードである配信ノード3に送信する。配信ノード1は、前回の送信で固定セグメントであるセグメント5を下位隣接ノードである配信ノード2に送信したので、次に番号の大きい固定セグメントであるセグメント6を配信ノード2に送信する。配信ノード1の保持セグメント及び要求セグメント(5,6)で未送信のセグメントはなくなったので、配信ノード1はこれ以上セグメントを送信しない。
図13Cに示される各配信ノードの配信コンテンツのセグメントの送信処理によって、クライアント群にセグメント2が到着する。図13Cにおいて説明された、配信ノード2〜5の一時セグメントを下位隣接ノードに送信する処理が終了すると、各一時セグメントは、所定時間経過後、各配信ノード2〜5から削除される。ただし、該所定時間内に新たにクライアント端末からコンテンツ配信要求又は配信開始クエリが受信された場合には、該所定時間を計測するタイマーがリセットされる。この場合には、一時コンテンツは、該コンテンツ配信要求又は配信開始クエリに対する一時セグメントの送信が終了し、新たにコンテンツ配信要求又は配信開始クエリを受信せずに該所定時間経過するまで、各配信ノードに保持される。
以降、図13D〜図13Oでは、図13Cにおいて説明されたようにして、各配信ノードによるバケツリレーで配信コンテンツのセグメントがクライアント群に送信されていく。図13D〜図13Oに示されるように、クライアント群には、セグメント1からセグメント14まで途切れなく、且つ順番に、セグメントが到着する。
図13A〜図13Oにおいて示されるように、波形で配信コンテンツが分散配置されることによって、クライアント群(クライアント端末)により遅延を抑えてコンテンツを配信することができる。例えば、セグメント1は、クライアント群に最もネットワーク上の距離が近い配信ノード1が固定保持しており、該配信ノード1から送信されるので、クライアント群がコンテンツ配信要求を送信してからセグメント1の到着までの遅延を小さく抑えることができる。すなわち、クライアントへのコンテンツ到達までの遅延時間の長期化を防止することができる。さらに、セグメントが波形で配置されていることによって、例えば、配信コンテンツが動画データである場合には、クライアント端末上でセグメント1が再生されている間に次に再生されるセグメント2以降のセグメントがセグメント順にクライアント端末に到着する。したがって、クライアント端末は配信コンテンツの再生開始から途切れなくコンテンツを再生することができる。すなわち、コンテンツ配信の為に要求された配信品質を確保することができる。
図14は、ストリーム管理テーブルの例を示す図である。図14では、例えば、図12において示される配信ノード群のノード番号3の配信ノード(配信ノード3)が保持するストリーム管理テーブル183が示される。
例えば、データ配信システムが、ユーザの好きな時間に動画データを視聴可能なサービスを提供しているような場合には、配信ノードは、或る時刻において複数のストリームを扱うことになる。ストリーム管理テーブル183は、自ノードが扱うストリームにおいて配信しているセグメントを管理するためのテーブルである。ストリームは、一般に、ストリーミング再生されるデータ(動画データ、音声データ等)の列を指すが、第1実施形態では、このストリーミングされるデータ(コンテンツ)を送信するフローをストリームと呼ぶこととする。同時刻に同セグメントの送信が開始されるストリームは同ストリームとみなされる。
ストリーム管理テーブル183は、行がストリーム番号,列がセグメント番号を示す表であり、コンテンツ毎に保持される。ストリーム番号は、ストリームを識別するための番号である。ストリーム番号は、例えば、クライアント端末からコンテンツ配信要求に含まれて指定されてもよいし、各配信ノードにおいて新たにストリームが追加された際に付与されてもよい。ストリーム管理テーブル183では、ストリーム毎の要求セグメントを示すフィールドに、要求セグメントを示す印(例えば、フラグ等)が付けられる。図14では、要求セグメントとなるセグメントは米印で示される。配信ノードは、ストリーム管理テーブル183において、要求セグメントを示す印が付されているセグメントを下位隣接ノード又はクライアント群に送信する。また、ストリーム管理テーブル183では、自ノードが現時点における下位隣接ノード又はクライアント群に送信中のセグメントを示すポインタを有しており、図14ではポインタはそれぞれのストリーム番号で示される。
ストリーム管理テーブル183には、ストリームを使用するユーザ番号が保持されてもよい。図14に示される例では、各ストリームに使用ユーザ番号が保持される。ユーザ番号は、例えば、コンテンツ配信要求に含まれてもよい。
図14では、ストリーム管理テーブルの下方に、配信ノード3が保持するセグメントが示される。セグメントは図13A〜図13Oと同様に、固定セグメントは斜線のテクスチャで、一時セグメントは黒で示されている。配信ノード3は、図14に示されるストリーム管理テーブルの時点で、セグメント3,8,13を固定セグメントとして有しており、セグメント5〜7,14を一時セグメントとして保持している。
一時セグメントは、送信終了後、自ノードがコンテンツ配信要求又は配信開始クエリを受信せずに、所定時間経過した場合には、配信ノードから削除される。一方、一時セグメントは、送信終了後、該所定時間内に、自ノードが新たにコンテンツ配信要求又は配信開始クエリを受信すると、該コンテンツ配信要求又は配信開始クエリに対して送信されるまで保持される。新たにコンテンツ配信要求又は配信開始クエリを受信することは、新たにストリームが発生することと等しい。そのため、新たにストリームが発生し、再度保持する一時セグメントを送信する必要がある場合には、該一時セグメントを保持する時間を延長する。これによって、上位のノードからの該一時セグメントの送信処理が省かれ、且つ、該一時セグメントのデータ量の分だけ上位のノードから自ノードまでの間のネットワークを流れるデータ量を低減することができる。
図14に示される配信ノード3のストリーム管理テーブル183では、現時点でストリーム番号1〜3の3つのストリーム(ストリーム1−3)が存在することが示される。なお、図14に示される配信ノード3のストリーム管理テーブル183では、ストリーム番号は配信ノード3における発生順を示すこととする。
ストリーム1では、要求セグメントはセグメント3−8,13,14であり、配信ノード3はセグメント8を下位隣接ノードである配信ノード4に送信中である。ストリーム2は、ストリーム1においてセグメント番号3が送信された後に発生したストリームであり、セグメント3は下位の配信ノードによって一時セグメントとして保持されているため、要求セグメントはセグメント4−8,13,14となっている。ストリーム2では、配信ノード3は、セグメント7を配信ノード4に送信中である。ストリーム3は、ストリーム2においてセグメント5の送信完了の後に発生したストリームであり、セグメント3−5は、下位の配信ノードによって一時セグメントとして保持されているため、要求セグメントはセグメント6−8,13,14となっている。
ストリーム1の送信において、要求セグメントであるセグメント3−8,13,14のうち、固定セグメントであるセグメント3,8,13を除くセグメント4−7,13が上位隣接ノードから送られてきて、一時セグメントとして保持される。ストリーム1において、図14に示される時点では、一時セグメント4−7は、送信が完了している。ストリーム1以外のストリームが発生していない場合には、図14に示される時点では、一時セグメント4−7は、削除される。しかしながら、図14では、ストリーム1の後にストリーム2,3が発生しており、ストリーム2では要求セグメント4−8,13,14のうちセグメント4−6の送信が完了しており、ストリーム3では何れの要求セグメントも送信完了していない。そのため、ストリーム1,2において送信済みの要求セグメントであり、ストリーム3においては要求セグメントではない一時セグメント4,5は削除されている。ストリーム1,2では送信済の要求セグメントであるが、ストリーム3では、送信中の要求セグメントである一時セグメント6は、保持されている。ストリーム1では送信済みの要求セグメントであるが、ストリーム2,3では送信中又は未送信の要求セグメントである一時セグメント7は、保持されている。ストリーム1〜3において、送信中又は未送信の要求セグメントである一時セグメント14は保持されている。すなわち、いずれかのストリームにおいて送信中又は未送信の要求セグメントに該当する一時セグメントは、少なくとも何れのストリームにおいても送信完了するまでは、配信ノードに保持される。
ストリーム管理テーブル183は、テーブル管理部17によって管理される。テーブル管理部17は、新たなコンテンツに対するコンテンツ配信要求又は配信開始クエリを受信すると、配信ノード群情報に含まれる配信コンテンツ情報の総セグメント数から、ストリーム管理テーブル183を生成する。また、テーブル管理部17は、受信した配信開始クエリに含まれる要求セグメント番号から、新たなストリームの要求セグメントをストリーム管理テーブル183に記録する。さらに、テーブル管理部17は、セグメントの送信処理と一時セグメント管理部による一時セグメントの削除処理とを監視しており、これらの処理に応じて、ストリーム管理テーブル183を更新する。
図15,図16,図17,及び図18は、データ配信システムのコンテンツ配信処理における各配信ノードによって実行される処理のフローチャートの例である。図15に示されるフローチャートは、コンテンツの配信に先駆けて行われる配信準備の処理のフローチャートである。
図15に示されるフローチャートは、配信ノードがクライアント群からコンテンツ配信要求を受信した場合、又は、下位隣接ノードから配信開始クエリを受信した場合に開始される。
OP61では、テーブル管理部17は、受信したコンテンツ配信要求又は配信開始クエリに発生が示される新たなストリームの番号を取得する。なお、ストリーム番号は、受信したコンテンツ配信要求又は配信開始クエリに含まれていてもよいし、各配信ノードのテ
ーブル管理部17が独自に付与してもよい。ストリーム番号がコンテンツ配信要求又は配信開始クエリに含まれる場合には、クエリ処理部11がストリーム番号を読み出すことによって、テーブル管理部17がストリーム番号を取得する。
OP62では、テーブル管理部17は、ストリーム管理テーブル183に取得したストリーム番号で新たにストリームを追加する。OP63では、テーブル管理部17は、新たに追加されたストリームにおける要求セグメントの番号を保持する。コンテンツ配信要求を受信した場合には、テーブル管理部17は、配信コンテンツの全セグメントを要求セグメントとしてストリーム管理テーブル183に記録する。配信開始クエリを受信した場合には、クエリ処理部11は、配信開始クエリに含まれる要求セグメント番号を読み出し、テーブル管理部17は、読み出された要求セグメント番号のセグメントを要求セグメントとしてストリーム管理テーブル183に記録する。
OP64では、クエリ処理部11は、上位隣接ノードに送信予定の配信開始クエリに含められる要求セグメント番号を取得する。クエリ処理部11は、OP63においてストリーム管理テーブル183に記録された要求セグメントのうち、自ノードが保持する固定セグメント及び一時セグメントを除いたセグメントの番号を要求セグメント番号として取得する。
OP65では、クエリ処理部11は、上位隣接ノードに送信予定の配信開始クエリに含められる要求セグメント番号は取得されたか否かを判定する。すなわち、クエリ処理部11は、上位隣接ノードに送信を要求するセグメントがあるか否かを判定する。上位隣接ノードに送信予定の配信開始クエリに含められる要求セグメント番号が取得された場合には(OP65:Yes)、処理がOP66に進む。上位隣接ノードに送信予定の配信開始クエリに含められる要求セグメント番号が取得されなかった場合には(OP65:No)、上位隣接ノードに送信を要求するセグメントが無く、クエリ処理部11は、配信開始クエリを送信しない。その後、図15に示される処理のフローが終了する。
OP66では、クエリ処理部11は、上位隣接ノードが存在するか否かを判定する。上位隣接ノードが存在する場合には(OP66:Yes)、処理がOP67に進む。上位隣接ノードが存在しない場合には(OP66:No)、クエリ処理部11は、配信開始クエリを送信する相手が存在しないので、配信開始クエリを送信しない。その後、図15に示される処理が終了する。
OP67では、クエリ処理部11は、OP64において取得した要求セグメント番号を含めて上位隣接ノードに配信開始クエリを送信する。その後、図15に示される処理が終了する。
図15に示される処理が、各配信ノードで実行されると、配信ノード群におけるコンテンツ配信処理の準備が完了する。その後、配信開始時刻になると、コンテンツ配信処理が開始される。
図16は、配信ノード群におけるコンテンツ配信の処理のフローチャートの例である。図16に示されるフローチャートは、コンテンツの配信開始時刻になると各配信ノードで開始される。図16に示されるフローチャートは、配信ノードに存在するストリームごとに実行される。
OP71では、セグメント送信部19は、要求セグメントのうちで最もセグメント番号の小さいセグメントから下位隣接ノード又はクライアント群への送信を決定する。すなわち、セグメント送信部19は、最初に送信される、送信対象のセグメントを決定する。
OP72では、セグメント送信部19は、送信対象セグメントが自ノードに保持されているか否かを判定する。送信対象セグメントが自ノードに保持されている場合には(OP72:Yes)、処理がOP74に進む。送信対象セグメントが自ノードに保持されていない場合には(OP72:No)、処理がOP73に進む。
OP73では、セグメント送信部19は、送信対象セグメントの受信を待機する。送信対象セグメントが受信されるまで、OP72及びOP73の処理が繰り返される。なお、OP73の処理が配信ノード群のいずれかの配信ノードにおいて実行された場合には、遅延が発生するおそれがある。特に、クライアント群にネットワーク上の距離が最も近い配信ノードにおいてOP73の処理が実行された場合には、遅延が発生する。ただし、配信コンテンツの分割時に、遅延を低減するために、セグメントのサイズは配信ノード群における最小配信能力とコンテンツビットレートとが考慮された値に設定されているため、OP73の処理が実行される可能性は低い。
OP74では、セグメント送信部19は、送信対象セグメントの下位隣接ノード又はクライアント群への送信を開始する。OP75では、セグメント送信部19は、送信対象セグメントの送信が完了したか否かを判定する。送信対象セグメントの送信が完了した場合には(OP75:Yes)、処理がOP76に進む。送信対象セグメントの送信が完了していない場合には(OP75:No)、処理がOP77に進む。
OP76では、セグメント送信部19は、図16に示されるフローチャートを実行中のストリームにおける全ての要求セグメントを送信完了したか否かを判定する。この判定は、テーブル管理部17によるストリーム管理テーブルにおける、図16に示されるフローチャートを実行中のストリームにおける配信中のセグメントのポインタの位置からの確認結果に基づいて実行される。全ての要求セグメントの送信が完了した場合には(OP76:Yes)、図16に示されるコンテンツ配信処理が終了する。未送信の要求セグメントが存在する場合には(OP76:No)、処理がOP77に進む。
OP77では、テーブル管理部17は、ストリーム管理テーブル中の図16に示されるフローチャートを実行中のストリームにおける配信中のセグメントのポインタの位置を次の要求セグメントの位置に移動させる。セグメント送信部19は、ストリーム管理テーブルの該ストリームにおけるポインタの位置が示すセグメントを送信対象に設定する。その後処理がOP72に戻り、全要求セグメントの送信が完了するまでOP72−OP77の処理が繰り返される。
図17は、コンテンツ配信処理の間、各配信ノードにおいて実行されるセグメントの受信処理のフローチャートの例である。図17に示されるフローチャートは、図16のコンテンツ配信処理が実行されている間、セグメントを受信が検出されると開始される。また、図17に示されるフローチャートは、セグメントが受信されるたびに実行される。
OP81では、一時セグメント管理部15は、受信検知されたセグメントの受信が完了したか否かを判定する。該セグメントの受信が完了した場合には(OP81:Yes)、処理がOP82に進む。該セグメントの受信が完了していない場合には(OP81:No)、該セグメントの受信が完了するまで、OP81の処理が繰り返される。
OP82では、配信ノード群情報管理部13は、配信ノード群情報182に格納される受信したセグメントに対応する配信コンテンツ情報の一時セグメント番号に受信したセグメントのセグメント番号を追加記録する。また、配信ノード群情報管理部13は、配信コンテンツ情報の空セグメント番号,総一時セグメント容量,及び総保持セグメント容量を
更新する。その後、図17に示される処理が終了する。
図18は、一時セグメントの削除処理のフローチャートの例である。図18に示されるフローチャートは、記憶部18の一時セグメントバッファ181に一時セグメントが保持されている間繰り返し実行される。また、図18に示されるフローチャートは、一時セグメントバッファ181に保持される各一時セグメントに対して実行される。
OP91では、一時セグメント管理部15は、処理対象の一時セグメントは、自ノードのストリームのいずれかの未送信セグメントに含まれているか否かを判定する。この判定は、テーブル管理部17によるストリーム管理テーブル183の参照結果に基づいて行われる。処理対象の一時セグメントがいずれかの未送信セグメントに含まれている場合には(OP91:Yes)、処理がOP91に戻り、処理対象の一時セグメントがいずれかのストリームの未送信要求セグメントに含まれる間はOP91の処理が繰り返される。処理対象の一時セグメントがいずれの未送信セグメントにも含まれていない場合には(OP91:No)、処理がOP92に進む。
OP92では、一時セグメント管理部15はタイマーを開始する。このタイマーは、所定時間を計測する。所定時間は、例えば、数秒でも、1時間でも、0秒でもよく、データ配信システムの管理者がネットワークの状況に応じて設定可能である。又は、例えば、セグメント及びコンテンツ配信がTCPを用いて行われる場合には、一時セグメントの送信先からACKを受信した時点からタイマーを開始してもよい。
OP93では、一時セグメント管理部15は、タイムアウトか否かを判定する。タイムアウトである場合には(OP93:Yes)、処理がOP96に進む。タイムアウト出ない場合には(OP93:No)、処理がOP94に進む。
OP94では、一時セグメント管理部15は、処理対象の一時セグメントが新たに発生したストリームの未送信要求セグメントに含まれているか否かを判定する。処理対象の一時セグメントが新たに発生したストリームの未送信要求セグメントに含まれている場合には(OP94:Yes)処理がOP95に進む。処理対象の一時セグメントが新たに発生したストリームの未送信要求セグメントに含まれていない場合(OP94:No)、または、新たにストリームが発生していない場合には、処理がOP93に戻る。
OP95では、一時セグメント管理部15は、タイマーをリセットする。これによって、処理対象の一時セグメントの保持期間が延長される。その後処理がOP93に戻る。
OP96では、一時セグメント管理部15は、処理対象の一時セグメントを削除する。その後、処理対象の一時セグメントに対する図18に示される処理のフローが終了する。
図19は、コンテンツの開始位置の要求と一時セグメントの削除処理との関係を説明するための図である。クライアント端末のユーザが常にコンテンツの先頭からの再生を指示するとは限らず、コンテンツの途中の所定の時点からの再生を指示することもある。コンテンツの再生開始位置は、クライアント群から送信されるコンテンツ配信要求に含まれる。また、ネットワークに最も近い配信ノード以外のノードのセグメント送信開始位置は、配信コンテンツの先頭ではない(図13A−図13O参照)。すなわち、配信開始クエリの要求セグメント番号によって指定される送信開始位置となるセグメントは、先頭のセグメントではない。
図19では、配信コンテンツのセグメントが示されており、配信ノードに保持されている一時セグメントは黒で表わされる。図19では、配信ノードが保持する一時セグメント
は、セグメント5−11である。なお、図19では、説明の簡略化のため、固定セグメントは保持されていないものとする。
(A)送信開始位置が保持される一時セグメントよりもよりも前にある場合
この場合には、一時セグメント5−11はコンテンツ配信に必要なセグメントであるので、保持期間が延長される。
(B)送信開始位置が保持される一時セグメントである場合
この場合には、送信開始位置の一時セグメント6以降の一時セグメント6−11が、コンテンツ配信に必要なセグメントであるので、保持期間が延長される。送信開始位置より前の一時セグメント5は、コンテンツ配信に必要ないため、所定時間経過後、削除される。ただし、一時セグメント5がコンテンツ配信に必要なセグメントとなる送信開始位置を指定するコンテンツ配信要求又は配信開始クエリが到着した場合には、一時セグメント5の保持期間が延長される。
(C)送信開始位置が保持される一時セグメントよりも後ろの場合
この場合には、一時セグメント5−11はコンテンツ配信に必要なセグメントではないので、何れの一時セグメントも保持期間が延長されず、所定時間経過後に削除される。ただし、一時セグメント5−11がコンテンツ配信に必要なセグメントとなる送信開始位置を指定するコンテンツ配信要求又は配信開始クエリが到着した場合には、一時セグメント5−11の保持期間は延長される。
図20は、配信コンテンツへのコンテンツ配信要求が集中した場合の例を説明するための図である。クライアント群からのコンテンツ配信要求を受信すると、図18に示される一時セグメントの削除処理の実行によって、ネットワーク上の距離がクライアント群に最も近い配信ノード(以下、単に「クライアント群に最も近い配信ノード」)に保持される一時セグメントの保持期間が延長される(図19参照)。また、クライアント群に最も近い配信ノードは、配信コンテンツの全セグメントをクライアント群に送信する。そのため、クライアント群からのコンテンツ配信要求が集中すると、クライアント群に最も近い配信ノードに一時セグメントが蓄積されていき、最終的に、クライアント群に最も近い配信ノードは配信コンテンツの全セグメントを保持することになる。すなわち、一時的に、クライアント群に最も近い配信ノードが配信コンテンツのミラーサーバとなる。
配信コンテンツの全セグメントがクライアント群に最も近い配信ノードに保持される状態になると、該配信ノードのみでクライアント群からのコンテンツ配信要求に対応することができる。そのため、他の上位の配信ノードからのセグメントの送信の必要がなくなるので、ネットワーク上に無駄な配信開始クエリが流れることを防ぐことができ、さらに、ネットワークを流れるデータ量を抑えることができる。
また、クライアント群からのコンテンツ配信要求が途絶えると、所定時間経過後、クライアント群に最も近い配信ノードは保持している一時セグメントを削除する。そのため、ネットワーク上に保持される配信コンテンツのデータ量が増えるのはコンテンツ配信要求の集中時だけに抑えられる。
(スケールアウト発生時の処理)
図21は、スケールアウトを説明するための図である。図21に示されるデータ配信システムは、図1で示されるデータ配信システムと同じである。
図21に示される配信ノード群は、クライアント群Aに対してコンテンツを配信するための配信ノード群である。この配信ノード群に対して、コンテンツを配信するクライアン
ト群を追加することをスケールアウトと称する。図21に示される例では、クライアント群Bが配信ノード群に追加される。
図22は、スケールアウトが発生した場合のデータ配信システムのコンテンツ配信処理を説明するための図である。図22では、図12において示される配信ノード1−5によって形成される配信ノード群にクライアント群Bが追加される例が示される。図22において、クライアント群Bにネットワーク上の距離が最も近い配信ノードは、配信ノード1である。
図22に示される配信ノード群によって、クライアント群Bにコンテンツが配信される場合には、まず、クライアント群Bには、配信ノード1の固定セグメントであるセグメント5が配信ノード1によって送信されて到着する。なお、クライアント群Bからのコンテンツ配信要求では、送信開始位置はコンテンツの先頭が指定されているものとする。したがって、この時点では、クライアント群Bでは、配信ノード1からセグメント5が到着しても、コンテンツ再生は開始されない。
次に、クライアント群Bには、配信ノード2の固定セグメントであり配信ノード2によって送信されたセグメント4が、配信ノード1を経由して、到着する。その次に、クライアント群Bには、配信ノード3の固定セグメントであり配信ノード3によって送信されたセグメント3が、配信ノード2及び配信ノード1を経由して、到着する。さらに、その次に、クライアント群Bには、配信ノード4の固定セグメントであり配信ノード4によって送信されたセグメント2が、配信ノード3,配信ノード2,及び配信ノード1を経由して、到着する。さらに、その次に、クライアント群Bには、配信ノード5の固定セグメントであり配信ノード5によって送信されたセグメント1が、配信ノード4,配信ノード3,配信ノード2,及び配信ノード1を経由して、到着する。
クライアントB群では、セグメント1が到着してから初めてコンテンツの再生が開始される。そのため、上述のように、クライアントB群では、コンテンツの再生が、セグメント5−2を受信する時間だけ遅延してしまう。そこで、第1実施形態では、スケールアウトが発生した場合に、追加されたクライアント群のネットワーク上に最も近い距離に位置する配信ノードにセグメント1,その次に近い配信ノードにセグメント2、というように、配信コンテンツのセグメントの複製を配置する。
図23は、スケールアウト発生時のセグメント配置の例を示す図である。図23に示される配信ノード群は、図22に示される配信ノード群と同じである。第1実施形態では、クライアント群Bが配信ノード群の配信クライアント群に追加された場合には、クライアント群Bにネットワーク上の距離が最も近い配信ノード1にも固定セグメントとしてセグメント1(コピー)が配置される。さらに、配信ノード1の隣接セグメントであり、クライアント群Bに配信ノード1の次に近い配信ノード2に固定セグメントとしてセグメント2(のコピー)が配置される。図23では、新たに固定セグメントとして保持されるセグメントは黒色で示されている。
このようにセグメントを配置することによって、クライアント群Bには、コンテンツ配信要求後、最初にセグメント1が到着し、続けてセグメント2,3と順番にセグメントが到着することになり、コンテンツ再生開始までの遅延を解消することができる。
図24は、スケールアウト発生によるセグメント配置処理の例を説明するための図である。図24に示される配信ノード群は、図22及び図23で示される配信ノード群と同様である。図24には、配信ノード群に新たにクライアント群Bが追加された際のスケールアウト発生によるセグメント配置処理が示される。
まず、新たに追加されるクライアント群Bにネットワーク上の距離が最も近い配信ノード1にスケールアウト配置要求が入力される。スケールアウト配置要求は、データ配信システムの管理者によって、配信ノード1に直接入力されてもよいし、ネットワークを開始入力されてもよい。又は、クライアント群Bからネットワークを介して入力されてもよい。スケールアウト配信要求には、配信ノード群番号,新たに追加されるクライアント群のクライアント群番号,配信コンテンツ番号等が含まれる。
スケールアウト配信要求が入力された配信ノード1には、固定セグメントとしてセグメント5,6が保持されているが、セグメント1は保持されていない。配信ノード1は、少なくとも固定セグメントとしてセグメント1を保持する必要がある。そこで、配信ノード1は、スケールアウト配信要求によって特定される配信ノード群に、スケールアウト配信要求によって特定される配信コンテンツのセグメント1のコピーを要求する複製依頼クエリを送信する。複製依頼クエリには、例えば、配信ノード群番号,配信クライアント群番号,配信コンテンツ番号,複製依頼するセグメント番号,複製依頼クエリを生成したノードのIPアドレス等が含まれる。また、複製依頼クエリは、マルチキャストで送信されてもよいし、上位又は下位の隣接ノードに宛ててユニキャストで送信されてもよい。なお、第1実施形態では、自ノードが保持する最小番号の固定セグメントよりも小さい番号のセグメントは、自ノードよりも下位のノードが保持しているはずである(図2参照)。したがって、ユニキャストで複製依頼クエリを送信する場合には、第1実施形態では、下位隣接ノードに宛てて複製依頼クエリを送信する。
複製依頼クエリによってコピーを要求されたセグメント1を保持する配信ノード5が、配信ノード1から送信された複製依頼クエリを受信すると、複製依頼クエリ応答とともにセグメント1のコピーを配信ノード1にユニキャストで送信する。なお、複製依頼クエリがユニキャストで送信される場合には、複製依頼クエリを受信した配信ノードは、複製依頼のセグメントを保持していない場合には、自ノードの上位又は下位の隣接ノードに複製依頼クエリを転送する。これによって、配信ノード1から送信される複製依頼クエリが配信ノード5に到着する。複製依頼クエリ応答とともにセグメント1の複製を受信した配信ノード1は、セグメント1を固定セグメント群に追加する。
配信ノード1は、複製依頼クエリとともに、ユニキャストで下位隣接ノードである配信ノード2に保持要求クエリも送信する。保持要求クエリは、自ノードが保持する最小番号の固定セグメント5のうち、自身が担当するセグメント1を除いた、セグメント2−4の保持を依頼するクエリである。保持要求クエリには、例えば、配信ノード群番号,配信クライアント群番号,配信コンテンツ番号,及び、必須保持セグメント番号,保持可能セグメント番号等が含まれる。
必須保持セグメント番号は、保持要求クエリを受信した配信ノードが必ず固定セグメントとして保持しなければならないセグメントの番号である。例えば、図24の配信ノード群の場合、セグメント1の次にセグメント2がクライアント群に到着するためには、配信ノード2がセグメント2を固定セグメントとして保持する必要がある。そのため、配信ノード1から配信ノード2に送信される保持要求クエリには、必須保持セグメント番号として「2」が格納される。保持可能セグメント番号は、保持要求クエリを受信した配信ノードによって保持されていてもよいし、さらに下位のノードによって保持されてもよいセグメントの番号である。例えば、図24の配信ノードでは、セグメント3及び4は、配信ノード2が保持していてもよい。そのため、配信ノード1から配信ノード2に送信される保持要求クエリには、保持可能セグメント番号として、「3」及び「4」が格納される。
配信ノード2は、保持要求クエリを受信すると、必須保持セグメント番号で指定される
セグメント2を固定セグメントとして保持していないので、セグメント2の複製を要求する複製依頼クエリを送信する。セグメント2を固定セグメントとして保持する配信ノード4が、配信ノード2によって送信された複製依頼クエリを受信すると、セグメント2の複製を複製依頼クエリ応答とともに配信ノード2に送信する。配信ノード2は、受信したセグメント2を固定セグメント群に追加する。
配信ノード2は、複製依頼クエリを送信するとともに、下位隣接ノードである配信ノード3に保持要求クエリを送信する。配信ノード2が配信ノード1から受信した保持要求クエリの保持可能セグメント(セグメント3,4)のうち、配信ノード2は、セグメント3は保持していないが、セグメント4を既に固定セグメントとして保持している。セグメント3は、自身が複製依頼したセグメント2の次のセグメントであるので、下位隣接ノードである配信ノード3が固定セグメントとして保持する必要がある。そのため、配信ノード2は、必須保持セグメント番号に1を加算して更新する、すなわち、必須保持セグメント番号を「3」に更新する。また、配信ノード2は、保持可能セグメント(セグメント3,4)から、必須保持セグメント番号に設定されたセグメント4と、既に固定セグメントとして保持しているセグメント4とを削除する。したがって、配信ノード2から配信ノード3に送信される保持要求クエリには、必須保持セグメント番号として「1」が格納され、保持可能セグメント番号には何れの番号も格納されない。
配信ノード3は、配信ノード2から保持要求クエリを受信する。配信ノード3は、配信ノード2から受信した保持要求クエリに含まれる必須保持セグメント番号で指定されるセグメント3を固定セグメントとして保持している。また、配信ノード2から受信した保持要求クエリには保持可能セグメント番号は含まれていない。したがって、配信ノード3は、複製依頼クエリも保持要求クエリも送信せず、この時点で、スケールアウト発生によるセグメント配置処理が終了する。
図25A,図25B,図25C,及び図25Dは、スケールアウト発生時のセグメント配置処理において各配信ノードで実行される処理のフローチャートの例である。図25Aに示される処理のフローは、配信ノード群生成処理の実行によって配信ノード群が生成された後に、配信ノードに指示が入力された場合、及びパケットを受信した場合に実行される。
OP111では、クエリ処理部11は、スケールアウト配置要求の入力であるか否かを判定する。スケールアウト配置要求である場合には(OP111:Yes)、処理がOP112に進む。スケールアウトの配置要求はない場には(OP111:No)、処理が図25BのOP121に進む。
OP112では、クエリ処理部11は、自ノードが固定セグメントとして、スケールアウト配置要求によって特定されるコンテンツのセグメント1を保持しているか否かを判定する。自ノードがセグメント1を固定セグメントとして保持している場合には(OP112:Yes)、既に遅延することなく追加されたクライアント分にコンテンツが配信されるように各配信ノードに配置されているため、複製依頼クエリも保持要求クエリも送信する必要が無い。この場合には、図25Aに示される処理が終了する。自ノードがセグメント1を固定セグメントとして保持していない場合には(OP112:No)、処理がOP113に進む。
OP113では、クエリ処理部11は、自ノードがスケールアウト配置要求によって特定されるコンテンツのセグメント2を固定セグメントとして保持しているか否かを判定する。自ノードがセグメント2を固定セグメントとして保持している場合には(OP113:Yes)、セグメント2以降のセグメントは遅延することなく追加されたクライアント
群にコンテンツが配信されるように各配信ノードに配置されているため、保持要求クエリの送信の必要が無い。この場合には、処理がOP115に進む。自ノードがセグメント2を固定セグメントとして保持していない場合には(OP113:No)、処理がOP114に進む。
OP114では、セグメント2から最小番号の固定セグメントの一つ前のセグメントまでのセグメント番号を含む保持要求クエリを下位隣接ノードに送信する。このとき、保持要求クエリには、必須保持セグメント番号として「2」が保持される。また、保持可能セグメント番号には、「3」から最小番号の固定セグメントの一つ前のセグメントのセグメント番号までの番号が含まれる。以降、最小番号の固定セグメントの番号は、Fminと示される。また、最小番号の固定セグメントの一つ前のセグメントの番号は、Fmin−1ト示される。
OP115では、クエリ処理部11は、セグメント1の複製を要求する複製依頼クエリを送信する。複製依頼クエリの送信とともに、クエリ処理部11は、タイマーを開始する。
OP116では、クエリ処理部11は、複製依頼クエリ応答及びセグメント1を受信したか否かを判定する。複製依頼クエリ応答及びセグメント1を受信した場合には(OP116:Yes)、固定セグメント取得部14は、セグメント1を記憶部18に格納し、その後、自ノードにおいて図25Aに示される処理が終了する。複製依頼クエリ応答及びセグメント1を受信していない場合には(OP116:No)、処理がOP117に進む。
OP117では、クエリ処理部11は、タイムアウトか否かを判定する。クエリ処理部11は、予め設定される所定時間が経過しても複製依頼クエリ応答及びセグメント1が受信されない場合、すなわち、タイムアウトした場合には(OP117:Yes)、処理がOP118に進む。予め設定される所定時間が経過していない場合には、すなわち、タイムアウトしていない場合には(OP117:No)、処理がOP116に戻り、複製依頼クエリ応答及びセグメント1が受信されるまで、又は、タイムアウトするまでOP116及びOP117の処理が繰り返される。
OP118では、クエリ処理部11は、複製依頼クエリの再送回数が予め設定される上限回数を超えているか否かを判定する。複製依頼クエリの再送の上限回数は、例えば、3回に設定される。複製依頼クエリの再送回数が上限回数を超えている場合には(OP118:Yes)、図25Aに示される処理のフローが終了する。複製依頼クエリの再送回数が上限回数を超えていない場合には(OP118:No)、処理がOP115に戻り、クエリ処理部11は、複製依頼クエリを再送する。
図25BのOP121では、クエリ処理部11は、複製依頼クエリを受信したか否を判定する。複製依頼クエリを受信した場合には(OP121:Yes)、処理がOP122に進む。複製依頼クエリを受信していない場合には(OP121:」No)、処理が図25CのOP131に進む。
OP122では、クエリ処理部11は、受信した複製依頼セグメントによって複製が要求されるセグメントを固定セグメントとして保持しているか否かを判定する。受信した複製依頼セグメントによって複製が要求されるセグメントを固定セグメントとして保持している場合には(OP122:Yes)、処理がOP123に進む。受信した複製依頼セグメントによって複製が要求されるセグメントを固定セグメントとして保持していない場合には(OP122:No)、処理がOP124に進む。
OP123では、クエリ処理部11は、複製依頼クエリによって複製が要求されたセグメントの複製を複製依頼クエリの生成ノードに送信する。その後、図25Bに示される処理のフローが終了する。
OP124では、クエリ処理部11は、下位隣接ノードが存在するか否かを判定する。下位隣接ノードが存在する場合には(OP124:Yes)、処理がOP125に進む。下位隣接ノードが存在しない場合には(OP124:No)、図25Bに示される処理のフローが終了する。
OP125では、クエリ処理部11は、受信した複製依頼クエリを下位隣接ノードに送信する。その後、自ノードにおいて、図25Bに示される処理のフローが終了する。
図25CのOP131では、クエリ処理部11は、保持要求クエリを受信したか否かを判定する。保持要求クエリを受信した場合には(OP131:Yes)、処理がOP132に進む。保持要求クエリを受信していない場合には(OP131:No)、図25Cに示される処理のフローが終了する。
OP132では、クエリ処理部11は、下位隣接ノードが存在するか否かを判定する。下位隣接ノードが存在する場合には(OP132:Yes)、処理がOP133に進む。下位隣接ノードが存在しない場合には(OP132:No)、図25Cに示される処理が
終了する。
OP133では、クエリ処理部11は、受信した保持要求クエリに含まれる保持可能セグメント番号うち最小の番号のセグメントを、自ノードが固定セグメントとして保持しているか否かを判定する。受信した保持要求クエリに含まれる保持可能セグメント番号うち最小の番号のセグメントを、自ノードが固定セグメントとして保持している場合には(OP133:Yes)、処理がOP134に進む。受信した保持要求クエリに含まれる保持可能セグメント番号うち最小の番号のセグメントを、自ノードが固定セグメントとして保持していない場合には(OP133:No)、処理がOP136に進む。
OP134では、クエリ処理部11は、保持可能セグメント番号を更新する。クエリ処理部11は、受信した保持要求クエリに含まれる保持可能セグメント番号うち最小の番号のセグメントを保持しているので、保持可能セグメント番号から最小の番号を削除する。さらに、受信した保持要求クエリに含まれる保持可能セグメント番号に、自ノードの固定セグメントの番号が含まれている場合には、固定セグメントの番号も保持可能セグメント番号から削除する。
OP135では、クエリ処理部11は、更新された保持可能セグメント番号に格納される番号があるか否かを判定する。更新された保持可能セグメント番号に格納される番号がある場合には(OP135:Yes)、保持要求クエリを送信する必要があり、処理がOP137に進む。更新された保持可能セグメント番号に格納される番号がない場合には(OP135:No)、必須保持セグメント番号のセグメントは自ノードが保持しているので保持要求クエリを送信する必要が無いので、図25Cに示される処理が終了する。
OP136では、クエリ処理部11は、必須保持セグメント番号及び保持可能セグメント番号を更新する。クエリ処理部11は、受信した保持要求クエリに含まれる保持可能セグメント番号うち最小の番号で必須保持セグメントを書き換える。クエリ処理部11は、受信した保持要求クエリに含まれる保持可能セグメント番号うち最小の番号は必須保持セグメント番号となったので、保持可能セグメント番号から最小の番号を削除する。さらに、受信した保持要求クエリに含まれる保持可能セグメント番号に、自ノードの固定セグメ
ントの番号が含まれている場合には、固定セグメントの番号も保持可能セグメント番号から削除する。その後、処理がOP137に進む。
OP137では、クエリ処理部11は、OP134において更新された保持可能セグメント番号を含む、又は、OP136において更新された必須保持セグメント番号と保持可能セグメント番号とを含む、保持要求クエリを下位隣接ノードに送信する。その後、処理が図25DのOP141に進む。
OP141では、クエリ処理部11は、受信した保持要求クエリに含まれる必須保持セグメント番号のセグメントを固定セグメントとして保持しているか否かを判定する。受信した保持要求クエリに含まれる必須保持セグメント番号のセグメントを固定セグメントとして保持している場合には(OP141:Yes)、複製依頼クエリを送信する必要が無く、図25Dに示される処理が終了する。受信した保持要求クエリに含まれる必須保持セグメント番号のセグメントを固定セグメントとして保持していない場合には(OP141:No)、処理がOP142に進む。
OP142では、クエリ処理部11は、必須保持セグメント番号のセグメントの複製依頼クエリを送信する。複製依頼クエリを送信するとともに、クエリ処理部11は、タイマーを開始する。
OP143では、クエリ処理部11は、複製依頼クエリ応答及び複製依頼したセグメントを受信したか否かを判定する。複製依頼クエリ応答及び複製依頼したセグメントを受信した場合には(OP143:Yes)、固定セグメント取得部14は、受信した複製依頼のセグメントを記憶部18に格納し、その後、自ノードにおいて図25Dに示される処理が終了する。複製依頼クエリ応答及び複製依頼したセグメントを受信していない場合には(OP143:No)、処理がOP144に進む。
OP144では、クエリ処理部11は、タイムアウトか否かを判定する。クエリ処理部11は、予め設定される所定時間が経過しても複製依頼クエリ応答及び複製依頼したセグメントが受信されない場合、すなわち、タイムアウトした場合には(OP144:Yes)、処理がOP145に進む。予め設定される所定時間が経過していない場合には、すなわち、タイムアウトしていない場合には(OP144:No)、処理がOP143に戻り、複製依頼クエリ応答及び複製依頼したセグメントが受信されるまで、又は、タイムアウトするまでOP143及びOP144の処理が繰り返される。
OP145では、クエリ処理部11は、複製依頼クエリの再送回数が予め設定される上限回数を超えているか否かを判定する。複製依頼クエリの再送の上限回数は、例えば、3回に設定される。複製依頼クエリの再送回数が上限回数を超えている場合には(OP145:Yes)、図25Dに示される処理のフローが終了する。複製依頼クエリの再送回数が上限回数を超えていない場合には(OP145:No)、処理がOP142に戻り、クエリ処理部11は、複製依頼クエリを再送する。
図25A〜図25Dに示される処理が各配信ノードによって実行されることによって、例えば、図24に示されるスケールアウト発生時のセグメント配置処理が実行され、図23のようなセグメントの配置となる。
<第1実施形態の作用効果>
配信コンテンツ分散配置処理において、各セグメントが、クライアント群にネットワーク上の距離が近い配信ノードから順番に、先頭のセグメントから配置されていき、クライアント群からネットワーク上の距離が最も遠い配信ノードまで配置されると、次に、該最
も遠いクライアントから順番に配置されていく。これによって、クライアント群にコンテンツを配信する際には、コンテンツ配信要求からコンテンツ再生までの時間を最も短くする、すなわち、遅延を小さく抑えることができる。また、各セグメントは、セグメント番号の順番に配信ノードに配置されていくので、コンテンツ配信の際にもセグメント番号の順番にクライアント端末に到着し、クライアント端末上で途切れることなくコンテンツが再生される。また、ネットワーク全体が保持する配信コンテンツのデータ量を小さく抑えることができる。
クライアント群へのコンテンツの配信処理では、各配信ノードは、コンテンツ配信要求ク又は配信開始クエリを受信すると、配信に必要な一時セグメントの保持期間を延長する。これによって、アクセス集中時には、クライアント群にネットワーク上の距離が最も近い配信ノードに全セグメントが保持されることになり、ミラーサーバが一時的に形成される。これによって、アクセス集中時には、コンテンツ配信要求をクライアント群にネットワーク上の距離が最も近い配信ノードのみで処理することができ、配信開始クエリ送信の無駄を省くことができる。また、各配信ノード間の一時セグメントの送信がされなくなるので、ネットワーク上のデータの流量を抑えることができる。
また、一時セグメントを必要とするコンテンツ配信要求又は配信開始クエリが、所定時間受信されない場合に、一時セグメントは配信ノードから削除される。これによって、ネットワーク全体で保持されるデータ量が増えることを防ぐことができる。
スケールアウトが発生した場合には、スケールアウト発生時のコンテンツ配置処理が実行され、新たに追加されたクライアント群に最もネットワーク上の距離が近い配信ノードに先頭セグメントが配置される。これによって、クライアント群が新たに追加された場合でも、新たなクライアント群においてコンテンツ配信要求からコンテンツ再生までの時間、すなわち、遅延を小さく抑えることができる。
配信ノード群生成処理,配信コンテンツ分散配置処理,クライアント群へのコンテンツの配信処理,及びスケールアウト時のコンテンツ配置処理の何れにおいても、各配信ノードは自律的に動作するので、データ配信システムの管理者は指示を入力するだけで済み、手間がかからない。
<その他>
第1実施形態では、図2に示されるような波形のセグメント分散配置について説明したが、セグメントの配置は、図2のような波形に限定されるものではない。クライアント群にネットワーク上の距離が最も近い配信ノードに先頭セグメントが配置され、セグメント番号の順番で、次の隣接ノード、その次の隣接ノードへと次々と配置されていく方法であればよい。
第1実施形態では、各クエリは、マルチキャスト又はユニキャストで送信される。ただし、第1実施形態に説明されたものに限られない。各クエリは、マルチキャスト又はユニキャストの何れで送信されてもよく、データ配信システムの管理者が自由に選択可能である。