次に本発明の実施例について図面を参照して詳細に説明する。
本実施例は、NW上に存在する情報の分散的キャッシュ配置問題について、情報への需要、すなわちアクセス数に応じて、配置の量および場所を自律分散的に決定する、需要依存で繁栄と衰退とを繰り返す分散情報配置システム(以下、単位分散情報配置システムと記す)に関する。
例えば、粘菌は餌の多寡によって、餌の多い場所では、単細胞生物として生活し、一方で餌の少ない場所では、集合して多細胞生物となり、餌の多い場所を求めて移動する。また、卵生メダカのノソブランキウスおよびシノレビアスは、一年の間に雨季と乾季が交代するサバンナ(草原)に住み、雨が降って水溜りが出来ると、土の中にあった卵が孵り、瞬く間に成長し、土の中に卵を生み、やがて乾季が来て池が干上がると親は死に、土の中に産みつけられた卵は次の雨季が来るのを、わずかな湿り気を残すのみの乾いた池の底の土の中で、辛抱強く待つ。このように生物の中には自身の形態を変えて環境に適応する種類がいる。また、生物は密度依存で個体の量を制御することによって、種の繁栄を維持することが知られており、このダイナミクスは一般にロジスティック方程式で記述される。さらに、生物にはヘルパー遺伝子が存在し、種全体から見れば利己的であるが個体レベルでは利他的な社会的行動を取ることによって、種の繁栄を維持することも知られている。
以上に述べたような特性を持つことによって生物は、環境変動に対して堅牢な生態系を作り出している。本実施例は、以上の説明における「生物種」をNWにおける「情報」と読み替えることで実現されるものであり、それら生物種の適応機能を通信NW上で実現するものである。そのため、従来の分散キャッシュ配置に関する技術とは、その目的を異にする。すなわち、本実施例の目的は、通信NW上の情報へのアクセス数に適応して、情報のキャッシュ配置の量と質を利他的かつ協調的な仕組みによって自律分散的に決定することで、効率的な情報の分散キャッシュ配置を実現するとともに、一度廃れてアクセスの無くなった情報の効率的な再生を実現することにある。
[本実施例の概要]
基本的な仕組みとして、「情報の必要度」を数値で定義し、これを情報のプロパティとして情報に付与する。情報のキャッシュ元にアクセスがあった場合、1アクセス毎に「情報の必要度」は増加し、また一定時間毎に減少する。この「情報の必要度」の一定時間毎の減少により、情報へのアクセス頻度、換言すれば「情報の鮮度」が決定される。以下では、情報へのアクセス数が増加する場合と、減少する場合について手段と作用を説明する。なお、以下では情報のソース元のサーバおよび情報をキャッシュするサーバを「キャッシュノード」と表記する。
(1)情報へのアクセス数が増加する場合
ステップ1:
情報とある値の「情報の必要度」を最初の情報元のキャッシュノードに配置する。以下ではこのキャッシュノードを「オリジナルキャッシュノード」と呼ぶ。同時に自分を代表キャッシュノードとする下位クラスタを生成し、当該キャッシュノードのIPアドレスと「『情報の必要度』の数値」とを下位クラスタ内用の下位クラスタマップに登録する。下位クラスタ内用の下位クラスタマップは各下位クラスタ内のキャッシュノードが分散的に所有し、キャッシュノードは下位クラスタ内用の下位クラスタマップに登録された複数のキャッシュノードとオーバーレイで下位クラスタNW内通信を行う。
さらにオリジナルノードは、自身の所属するNWのDNSサーバに自身のグローバルIPアドレスと、NW内の他のノードがアクセスする場合に用いるキャッシュ情報の場所を指し示す記述方式であるURLを登録しておく。
ここで、Internet上の一般的なキャッシュ情報へのアクセス手段について説明する。Internetの通常の通信では、情報へアクセスしたい一般的なノードBは、次の(a)または(b)のいずれかの方法により情報をキャッシュしているサーバにアクセスを行う。
(a)ノードBがキャッシュノードのURLは知っているが、IPアドレスは知らない場合、URLを指定して、そのIPアドレスをDNSサーバに問い合わせる。DNSサーバは、自身がそのURLとIPアドレスの対応を知っていれば、そのIPアドレスをInternet上の通常の通信を用いて、ノードBに伝える。もし、DNSサーバがそのURLとIPアドレスの対応を知らなければ、DNSサーバは他のDNSサーバに問い合わせる、ということを繰り返し、最終的にそのURLとIPアドレスの対応を知っているDNSサーバがノードBにIPアドレスを伝える。
(b)ノードBがIPアドレスを知っている場合は、直接キャッシュノードにアクセスできる。
以下では(a)の場合を前提に説明を続ける。
ステップ2:
情報へのアクセスがあるたびにキャッシュノードの「『情報の必要度』の数値」が増加する。
ステップ3:
アクセスが増えて「『情報の必要度』の数値」がある閾値1を超えると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する。一定時間の「『情報の必要度』の数値」の平均値がある閾値1を超えると代表キャッシュノードはある物理的あるいは論理的NW距離にある、次数の大きなキャッシュノードに情報をキャッシュしてもらえないかランダムに通常のInternetにおける通信手法によって打診し、承諾をもらったキャッシュノードにキャッシュさせてもらう。ここで、複数の承諾をもらった場合には、それらの全て、あるいはそれらのうち次数の大きなキャッシュノードに対して、キャッシュさせてもらう。この新規追加されたキャッシュノードは下位クラスタ内の代表キャッシュノード宛に、新規追加されたキャッシュノードが下位クラスタに属することを認識してもらうための「entryメッセージ」を通常のInternetにおける通信手法によって送る。
新規追加キャッシュノードへの依頼を行った代表キャッシュノードは、新規追加されたキャッシュノード宛に、「entryメッセージ」を受信したことを示すメッセージを下位クラスタ内通信によって送り、同時に下位クラスタマップに必要な情報を要求する。要求を受けた新規追加キャッシュノードは、自身のキャッシュノードに関する要求情報を下位クラスタ内通信によってキャッシュノードへの依頼を行った代表キャッシュノードへ送る。
追加キャッシュノード依頼を行った代表キャッシュノードは、新規追加キャッシュノードから受け取った要求情報をもとに下位クラスタマップを更新し、更新された下位クラスタマップを、下位クラスタ内通信によって代表キャッシュノードの所属する下位クラスタ内の他のキャッシュノードに送る。各キャッシュノードは各自の持つ下位クラスタ用の下位クラスタマップを更新して、登録完了のメッセージを、キャッシュノード依頼を行ったキャッシュノードに、下位クラスタ内通信によって送る。なお、新規キャッシュノードの下位クラスタへの追加は、アクセス数の変動を考慮して、一定時間待ってから行う。この時点でのユーザからのアクセス先は、代表キャッシュノードとする。
ステップ4:
下位クラスタ内に存在する、代表キャッシュノードを含む複数のキャッシュノードらは、下位クラスタ内通信を一定時間間隔毎または不定時間間隔で行うことによって、互いの「生存」と「『情報の必要度』の数値」などの情報を交換し合う。これによって下位クラスタ内のキャッシュノードの下位クラスタ内用の下位クラスタマップの更新と同期とを行う。ここで、下位クラスタ内通信は、新規にキャッシュノードが追加されたり、キャッシュノードやキャッシュノード間のリンクの障害などのイベントが発生した場合には、そのイベントをトリガーとして行われる。
ステップ5:
下位クラスタ内に、代表キャッシュノードを除く少なくとも1つの他のキャッシュノードが追加されると、それらは自律的に負荷分散を行う。すなわち、下位クラスタ内通信によって同一下位クラスタ内の「『情報の必要度』の数値」やそれを用いた計算結果によって値の少ないキャッシュノードから順にアクセスを転送する。
ステップ6:
各クラスタには、その代表キャッシュノードまたはクラスタの中心から一定の物理距離または論理的距離を半径とする円で特定されるクラスタ領域と、このクラスタ領域に設置することのできるキャッシュノードの最大数とが予め定められる。クラスタ領域に設置可能なキャッシュノードの最大数は、換言すれば、当該クラスタのキャッシュノード密度である。キャッシュノード密度は、「キャッシュノード数/NW半径」で表現しても良いし、「キャッシュノード数/NW半径内に存在するノード数」で表現しても良い。
ステップ7:
下位クラスタの代表キャッシュノードが「NW半径を超える遠くからのアクセスが多くなる」あるいは「上記ステップ6で計算した自下位クラスタに置くことの出来るキャッシュノードの最大数に近づく」ことを検知すると、そのNW半径を超える場所に存在する、次数の大きなキャッシュノードに該情報をキャッシュしてもらえないかランダムに通常のInternetにおける通信手法によって打診し、通常のInternetにおける通信手法によって承諾をもらったキャッシュノードにキャッシュさせてもらう。ここで、複数の承諾をもらった場合には、それらの全て、あるいはそれらのうち次数の大きなキャッシュノードに対して、キャッシュさせてもらう。また、NW半径を超える場所は、自クラスタの周囲360度方向に存在するが、NW半径を超える場所があるNWドメインに偏っている場合には、このNWドメイン近傍の次数の大きなキャッシュノードを優先的に候補として選択する。なお、この新規キャッシュノードの追加は、アクセス数の変動を考慮して、一定時間待ってから行う。
キャッシュノードの依頼を行った代表キャッシュノードは、自キャッシュノードを含む代表キャッシュノードのみで構成される上位クラスタを作成し、上位クラスタ用の上位クラスタマップを作成する。
新規追加されたキャッシュノードは自分を代表キャッシュノードとする下位クラスタを新たに形成し、下位クラスタ内用下位クラスタマップを作成する。ここで、この代表キャッシュノード同士による上位クラスタ内オーバーレイNWは、下位クラスタ内NWの上にオーバーレイNWの形態で構築される。
また、新規追加されたキャッシュノードはキャッシュノード依頼を受けた代表キャッシュノードに対して、代表キャッシュノードのみで構成される上位クラスタへ新規追加されたキャッシュノードが上位クラスタに属することを認識してもらうための「entryメッセージ」を通常のInternetにおける通信手法によって送る。
キャッシュノードへの依頼を行った代表キャッシュノードは、新規追加された代表キャッシュノード宛に、「entryメッセージ」を受信したことを示すメッセージを上位クラスタ内通信によって送り、同時に上位クラスタマップに必要な情報を要求する。要求を受けた新規追加キャッシュノードは、自身のキャッシュノードに関する要求情報を上位クラスタ内通信によってキャッシュノードへの依頼を行った代表キャッシュノードへ送る。
キャッシュノード依頼を行った代表キャッシュノードは、新規代表キャッシュノードから受け取った要求情報をもとに上位クラスタマップを更新し、代表キャッシュノードのみで構成される上位クラスタ内の他の代表キャッシュノードに、上位クラスタ内通信によって送る。各キャッシュノードは各自の持つ上位クラスタ用の上位クラスタマップを更新して、登録完了のメッセージを、キャッシュノード依頼を行った代表キャッシュノードに、上位クラスタ内通信によって送る。
下位クラスタ同士は原則的に代表キャッシュノードであるキャッシュノード同士が、各下位クラスタ内のキャッシュノード数などのマクロな情報を、一定時間間隔毎または不定時間間隔でオーバーレイ通信を行うことによって、互いの生存と状況を確認し合う。
(2)情報へのアクセス数が減少する場合
ステップ1:
あるキャッシュノードへのアクセスが減って、「『情報の必要度』の数値」がある閾値を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する。一定時間の「『情報の必要度』の数値」の平均値がある閾値を下回ると、自キャッシュノードの所属する下位クラスタ内に他のキャッシュノードがいる限り、それら下位クラスタ内の他のキャッシュノード全てに、下位クラスタ内通信によって脱退メッセージを送る。脱退メッセージを受け取った下位クラスタ内の他のキャッシュノードは自キャッシュノードの下位クラスタ内用下位クラスタマップから、脱退キャッシュノードのIPアドレス以外の情報を消去し、「脱退メッセージが到着した」という確認メッセージを脱退キャッシュノードに対して、下位クラスタ内通信によって送信する。脱退キャッシュノードは、下位クラスタ内の全ての他のキャッシュノードから、下位クラスタ内通信によって確認メッセージを受け取った後で、自キャッシュノードの保持しているキャッシュデータを削除し、情報のURLと自身のIPアドレスとを登録したDNSサーバに削除要求を出して下位クラスタから抜ける。
ここで、仮に代表キャッシュノードが抜ける場合には、以下のようになる。代表キャッシュノードへのアクセスが減って、「『情報の必要度』の数値」がある閾値を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する。一定時間の「『情報の必要度』の数値」の平均値がある閾値を下回ると、自キャッシュノードの所属する下位クラスタ内の他のキャッシュノードのうち、最も「『情報の必要度』の数値」の小さいキャッシュノードに他の下位クラスタとの通信を行う代表キャッシュノードを譲り、自キャッシュノードの所属する下位クラスタ内の他のキャッシュノード全てに対しては下位クラスタ内通信によって、また他の下位クラスタの代表キャッシュノードへは上位クラスタ内通信によって、「別のキャッシュノードが代表キャッシュノードを引き継ぎ、自分が抜けること」を知らせる。このメッセージを受け取った下位クラスタ内の他の全てのキャッシュノードは各々の持つ下位クラスタ内用下位クラスタマップから代表キャッシュノードの情報を削除し、「代表キャッシュノードを受け継いだキャッシュノード」を代表キャッシュノードとして下位クラスタ内用下位クラスタマップに設定する。さらに、「元の代表キャッシュノード」と「代表キャッシュノードを受け継いだキャッシュノード」に対して、「新しい代表キャッシュノードを下位クラスタ内用下位クラスタマップに登録したこと」を下位クラスタ内通信によって確認メッセージとして伝える。
同様に他の下位クラスタの代表キャッシュノードは、上位クラスタNW用の上位クラスタマップから代表キャッシュノードの情報を削除し、新しい代表キャッシュノードを下位クラスタの代表キャッシュノードとして上位クラスタNW用の上位クラスタマップに設定する。さらに他の下位クラスタの代表キャッシュノードは、確認メッセージを「代表キャッシュノードを受け継いだキャッシュノード」と「元の代表キャッシュノード」宛に上位クラスタ内通信によって送信する。
自キャッシュノードの所属する下位クラスタ内の全てのキャッシュノード、および他の下位クラスタの全ての代表キャッシュノードからの確認メッセージを下位クラスタ内通信、上位クラスタ内通信によってそれぞれ受け取った後で、「元の代表キャッシュノード」は、自キャッシュノードの保持するキャッシュデータを削除し、情報のURLと自身のIPアドレスとを登録したDNSサーバに削除要求を出して下位クラスタから抜ける。
ステップ2:
ある下位クラスタに最終的に残ったキャッシュノードは必然的に下位クラスタの代表キャッシュノードであるが、代表キャッシュノードでも「『情報の必要度』の数値」がある閾値を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する。一定時間の「『情報の必要度』の数値」の平均値がある閾値を下回ると、代表キャッシュノードは他の下位クラスタの全ての代表キャッシュノードに対して、脱退メッセージを上位クラスタ内通信によって送る。同時に、脱退代表キャッシュノードは自キャッシュノードの上位クラスタNW用上位クラスタマップを見て、他の下位クラスタの全ての代表キャッシュノードのうち、キャッシュノード当たりの「『情報の必要度』の数値」が最も少なく、かつキャッシュノード密度の最大値の大きい代表キャッシュノードに、自キャッシュノードの所属する下位クラスタ内用の下位クラスタマップを上位クラスタ内通信によって送信する。
他の下位クラスタの全ての代表キャッシュノードは、脱退メッセージを送信した代表キャッシュノードに対して「代表キャッシュノードが抜けること」を確認するメッセージを「代表キャッシュノード」宛に上位クラスタ内通信によって送信した後で、定期メッセージの宛先から代表キャッシュノードに関するIPアドレス以外の情報を上位クラスタNW用上位クラスタマップから削除する。ここで脱退代表キャッシュノードから下位クラスタ内用の下位クラスタマップを受け取った代表キャッシュノードは、「下位クラスタマップを受け取ったこと」を確認メッセージとして、脱退代表キャッシュノードに上位クラスタ内通信によって送信する。
脱退代表キャッシュノードは、他の下位クラスタの全ての代表キャッシュノードから「代表キャッシュノードが抜けること」を確認するメッセージを上位クラスタ内通信によって受け取り、かつ脱退代表キャッシュノードから下位クラスタ内用の下位クラスタマップを受け取った代表キャッシュノードから「下位クラスタマップを受け取ったこと」を確認するメッセージを上位クラスタ内通信によって受け取った後で、自キャッシュノードの保持するキャッシュデータを削除し、情報のURLと自身のIPアドレスとを登録したDNSサーバに削除要求を出して上位クラスタNWから抜ける。
ステップ3:
オリジナルキャッシュノードを含む下位クラスタ以外で最終的に残った下位クラスタにおいて、最終的に残ったキャッシュノード(以下、終末キャッシュノードと呼ぶ)でも「『情報の必要度』の数値」がある閾値を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する。一定時間の「『情報の必要度』の数値」の平均値がある閾値を下回ると、オリジナルキャッシュノードに対して「自分が最終データのキャッシュノードであること」、終末キャッシュノードが保持している「キャッシュデータ」および「過去に脱退した他の下位クラスタの下位クラスタ内用の下位クラスタマップ」を、1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良い、あるいは、3)削除して欲しい、という「希望情報」と共に、上位クラスタ内通信によって伝える。
ステップ4:
オリジナルキャッシュノードは、終末キャッシュノードからの「希望情報」を元に、情報を、1)そのまま置いてもらうか、2)何か他の形態(例えばリンク先としてなど)で置かせてもらうか、あるいは、3)削除してもらうかを検討し、その結果を週末キャッシュノードに対して上位クラスタ内通信によって伝える。ここで、終末キャッシュノードに情報をキャッシュし続けてもらう理由は、そのデータが再度必要になる場合、最後までアクセスがあったキャッシュノードの周辺からの場合が多いと推定されるためである。
ステップ5:
情報を削除してもらう場合には、最後に残った下位クラスタにいた他のキャッシュノードに対して、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しい、ことを通常のInternetの通信手段によって伝える。
ステップ6:
終末キャッシュノードは、オリジナルキャッシュノードからの回答に従って、情報の管理形態を決定する。すなわち、情報を、1)そのまま置くか、2)何か他の形態(例えばリンク先としてなど)で置くか、あるいは、3)削除するか、のいずれかを行う。
ステップ7:
オリジナルキャッシュノードから、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しいというメッセージを通常のInternetの通信手段によって受け取った、最後に残った下位クラスタにいた他のキャッシュノードは、それぞれオリジナルキャッシュノードに対して、情報を、1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良い、あるいは、3)置きたくない、という「希望情報」を通常のInternetの通信手段によって伝える。
ステップ8:
「希望情報」を通常のInternetの通信手段によって受け取ったオリジナルキャッシュノードは、その中に、情報を、1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良いという回答があれば、1)、2)の優先順位で、そのキャッシュノードと上位クラスタを構成し、キャッシュする情報を上位クラスタ内通信によって送信する。
ステップ9:
「希望情報」を受け取ったオリジナルキャッシュノードは、その中に3)置きたくないという回答しか無ければ、最後から2番目に削除された下位クラスタにいた他のキャッシュノードに対して、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しい、ことを通常のInternetの通信手段によって伝える。
ステップ10:
以下、ステップ7から9を繰り返す。
ステップ11:
最終的にオリジナルキャッシュノード以外にキャッシュしてくれるキャッシュノードが無ければ、オリジナルキャッシュノードは、情報を自キャッシュノードに保存したままにする。
(3)アクセスが再度増加した場合に関する動作の説明
上記「情報へのアクセス数が減少する場合」のステップ7〜11において、最終的にキャッシュされるべき情報をどのキャッシュノードが保持しているかによって、最初のステップのみが異なる。
(3−1)最終的にオリジナルキャッシュノードのみがキャッシュされるべき情報を保持している場合
この場合は、「(1)情報へのアクセス数が増加する場合」のステップ3が最初のステップとなる。
(3−2)最終的にオリジナルキャッシュノードと終末キャッシュノードがキャッシュされるべき情報を保持している場合
この場合、オリジナルキャッシュノードと終末キャッシュノードのうち、アクセスを受けたキャッシュノードにおいて、「(1)情報へのアクセス数が増加する場合」のステップ3が最初のステップとなる。終末キャッシュノードにおいてアクセスが増加し、「(1)情報へのアクセス数が増加する場合」で示した、閾値1を超えてキャッシュノードの追加が必要になった場合、「(1)情報へのアクセス数が増加する場合」のステップ3で示した手順に従って、一定時間待ってから、終末キャッシュノードは自分の保持している下位クラスタ内の下位クラスタマップの中に残っている、下位クラスタ内で過去にキャッシュノードであったキャッシュノードに情報をキャッシュしてもらえないかを通常のInternetの通信手段によって打診する。もし、いずれからも承諾を得られなかった場合には、ある一定のホップ数にあるキャッシュノードのうち、次数の大きなキャッシュノードにランダムに情報をキャッシュしてもらえないかを通常のInternetの通信手段によって打診する。一定のホップ数内のキャッシュノードから承諾が得られなければ、終末キャッシュノードは探索ホップ数を+1して、承諾を得られるキャッシュノードを探索する。
下位クラスタ内の過去のキャッシュノード、あるいはホップ数による探索によって、いずれかのキャッシュノードから承諾を受けると、後は「(1)情報へのアクセス数が増加する場合」のステップ3以降において説明した手順に従って、キャッシュノードを増加させていく。
以上のようにして、通信NW上の情報へのアクセス数に適応して、情報のキャッシュ配置の量と質を利他的かつ協調的な仕組みによって自律分散的に決定することで、効率的な情報の分散キャッシュ配置を実現するとともに、一度廃れてアクセスの無くなった情報の効率的な再生を実現する。
[構成の説明]
次に、本実施例の構成を詳細に説明する。
図1を参照すると、本実施例の分散情報配置システムにおける「『情報の必要度』の数値」の変化の様子の1例が示されている。アクセスがあるたびに、「『情報の必要度』の数値」は一定量だけ増加する。「『情報の必要度』の数値」は一定時間が経過する毎に一定量だけ減少する。
図2を参照すると、本実施例の分散情報配置システムにおける新規キャッシュノード追加の様子の1例が示されている。図3を参照すると、本実施例の分散情報配置システムにおける新規キャッシュノード追加のフローチャートの1例が示されている。図4を参照すると、本実施例の分散情報配置システムにおける、各キャッシュノードが保持する下位クラスタ内用の下位クラスタマップの1例が示されている。
下位クラスタ内用の下位クラスタマップの内容は、図4に示したように、キャッシュノードの、DNS登録名、グローバルIPアドレス、『情報の必要度』の数値、『情報の必要度』の数値の1次微分値、および『情報の必要度』の数値の2次微分値である。『情報の必要度』の数値の1次微分値は、直近の単位時間当たりの『情報の必要度』の数値の増減量である。『情報の必要度』の数値の2次微分値は、直近の単位時間当たりの『情報の必要度』の数値の増減割合である。
ここで、下位クラスタNW2内のオーバーレイ通信のために、下位クラスタNW2内のキャッシュノードに、下位クラスタNW2内部でのみ通用するローカルなIPアドレスを各々割り当て、このローカルなIPアドレスを用いた下位クラスタNW2内のオーバーレイ通信を行っても良い。その場合、下位クラスタ内用の下位クラスタマップの内容は、図4に示した以外に、下位クラスタ2内でローカルに付加したローカルなIPアドレスを含んでいても良い。
なお、下位クラスタ内用の下位クラスタマップの内容は、図4の内容から『情報の必要度』の数値の2次微分値を削除したものでも良い。また、下位クラスタ内用の下位クラスタマップの内容は、図4に示した以外に何らかの『情報の必要度』の数値の経時変化の様子を表す変数を含んでいても良い。
オリジナルノードは、自身の所属するNWのDNSサーバに自身をNW上で一意に識別可能な識別子であるグローバルIPアドレスと、NW内の他のノードがアクセスする場合に用いるキャッシュ情報の場所を指し示す記述方式であるURLを登録しておく(図2aまたは図2bのオリジナルノード1から出ている1点鎖線)。
情報とある値(初期値)の「情報の必要度」をオリジナルキャッシュノード1に配置する。同時に自分を代表キャッシュノードとする下位クラスタ2を生成し、オリジナルキャッシュノード1のIPアドレスと「『情報の必要度』の数値」とを下位クラスタ内用の下位クラスタマップ4−2に登録する。下位クラスタ内用の下位クラスタマップ4−2は各下位クラスタ内のキャッシュノードが分散的に所有し、キャッシュノードは下位クラスタ内用の下位クラスタマップに登録された複数のキャッシュノードとオーバーレイで下位クラスタ内通信を行う。図1に示したように情報へのアクセスがあるたびに「『情報の必要度』の数値」が増加する。
図2では、理解のし易さを目的に、アクセスをアリ3で表し、またアクセスによる「『情報の必要度』の数値」の増加分をアリ3が運んでいる荷物Aで表している。アクセスが増えて「『情報の必要度』の数値」がある閾値Θ1を超えると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する。一定時間の「『情報の必要度』の数値」の平均値がある閾値Θ1を超えると代表キャッシュノードはある物理的あるいは論理的NW距離にある、次数の大きなキャッシュノードに情報をキャッシュしてもらえないかランダムに打診し、承諾をもらったキャッシュノード6にキャッシュさせてもらう。ここで、複数の承諾をもらった場合には、それらの全て、あるいはそれらのうち次数の大きなキャッシュノードに、キャッシュさせてもらう。「ある物理的あるいは論理的NW距離」としては、ホップ数を用いる。ここで、「ある物理的あるいは論理的NW距離」は、ある一定のRTT値を用いても良い。
新規追加されたキャッシュノード6は、情報のURLと自身のIPアドレスを自身の属するNWドメインのDNSサーバに登録しておく。これにより、(a)自身の属するNWドメインがオリジナルキャッシュノード(または代表キャッシュノード)と異なっていれば、オリジナルキャッシュノード(または代表キャッシュノード)と異なるDNSサーバに情報のURLと自身のIPアドレスが登録される(図2aのキャッシュサーバ6から出ている1点鎖線)。他方、(b)自身の属するNWドメインがオリジナルキャッシュノード(または代表キャッシュノード)と同じであれば、同じDNSサーバに情報のURLと自身のIPアドレスが登録される(図2bのキャッシュサーバ6から出ている1点鎖線)。
新規追加されたキャッシュノード6は、下位クラスタ2内の代表キャッシュノード1に、キャッシュノード6が下位クラスタ2に属することを認識してもらうための「entryメッセージ」を通常のInternet上の通信手段によって送る。キャッシュノード6への依頼を行った代表キャッシュノード1は、新規追加されたキャッシュノード6宛に、「entryメッセージ」を受信したことを示すメッセージを下位クラスタ2内通信によって送り、同時に下位クラスタマップ4−2に必要な情報を要求する。要求を受けた新規追加キャッシュノード6は、自身のキャッシュノード6に関する要求情報を下位クラスタ2内通信によって、キャッシュノード6への依頼を行った代表キャッシュノード1へ送る。
キャッシュノード依頼を行った代表キャッシュノード1は、新規代表キャッシュノード6から受け取った要求情報をもとに下位クラスタマップ4−2を更新し、更新された下位クラスタマップ4−2を、下位クラスタ2内通信によって、代表キャッシュノード1の所属する下位クラスタ内の他のキャッシュノード宛に送る。各キャッシュノードは各自の持つ下位クラスタ用の下位クラスタマップを更新して、登録完了のメッセージを、キャッシュノード依頼を行った代表キャッシュノードに、下位クラスタ内通信によって送る。
図5を参照すると、本実施例の分散情報配置システムにおける同一下位クラスタ内のキャッシュノード間の通信の様子の1例が示されている。下位クラスタ2内に存在する、代表キャッシュノード1を含む複数のキャッシュノード6、8らは、下位クラスタ内通信を一定時間間隔毎または不定時間間隔で行うことによって、互いの「生存」と「『情報の必要度』の数値」などの情報を交換し合う。これによって下位クラスタ2内の全てのキャッシュノードの下位クラスタ2内用の下位クラスタマップの更新と同期とを行う。ここで、下位クラスタ内通信は、新規にキャッシュノードが追加されたり、キャッシュノードやキャッシュノード間のリンクの障害などのイベントが発生した場合には、そのイベントをトリガーとして行われる。
図6(a)および図6(b)を参照すると、本実施例の分散情報配置システムにおける同一下位クラスタ内でのアクセスの負荷分散の様子の1例が、それぞれ示されている。図7(a)および図7(b)を参照すると、本実施例の分散情報配置システムにおけるアクセスの負荷分散のフローチャートの1例が、それぞれ示されている。
下位クラスタ内に、代表キャッシュノードを除く少なくとも1つの他のキャッシュノードが追加されると、それらは自律的に負荷分散を行う。すなわち、下位クラスタ内通信によって下位クラスタ2内の「『情報の必要度』の数値」は各キャッシュノード1、6、8が、同一内容の下位クラスタ2内用下位クラスタマップを保持しているため、「『情報の必要度』の数値」の最も少ないキャッシュノードから順番にアクセスを転送する。
図8を参照すると、本実施例の分散情報配置システムにおける、あるNW距離以上のキャッシュノードからのアクセスが増加することによって、NW距離以上の次数の高いキャッシュノードのキャッシュノード化とそこでの新規下位クラスタ生成が行われる様子の1例が示されている。図9を参照すると、本実施例の分散情報配置システムにおける、あるNW距離以上のキャッシュノードからのアクセスが増加することによって、NW距離以上の次数の高いキャッシュノードのキャッシュノード化とそこでの新規下位クラスタ生成が行われる際のフローチャートの1例が示されている。図10を参照すると、本実施例の分散情報配置システムにおける、代表キャッシュノードのみで構成される上位クラスタNWの上位クラスタマップ18の1例が示されている。
新規追加されたキャッシュノード11は自分を代表キャッシュノードとする下位クラスタ15を新たに形成し、下位クラスタ15内用下位クラスタマップ4−15を作成する。また、新規追加されたキャッシュノード11は情報のURLと自身のIPアドレスを自身の所属するNWドメイン内のDNSサーバ34に登録しておく。ここで、キャッシュノード11の登録するDNSサーバは、オリジナルキャッシュノードの所属するクラスタ2内のキャッシュノードが、それぞれ情報のURLと自身のIPアドレスを登録しているDNSサーバ31,32,33の全てと異なっている。以降、追加される下位クラスタの代表ノードとその下位クラスタ内に追加されるキャッシュノードでの負荷分散の動作は、図2(a)および図2(b)と図3(a)および図3(b)で示したように行われる。これらの方法により、自律分散的な負荷分散が実現される。ここで、この代表キャッシュノード同士による上位クラスタ間オーバーレイNW17は、下位クラスタ2および下位クラスタ15の上位クラスタ間オーバーレイNWの上に構築される。
ここで、上位クラスタNW17内の上位クラスタ内通信のために、上位クラスタNW17内の代表キャッシュノードに、上位クラスタNW17内部でのみ通用するローカルなIPアドレスを各々割り当て、このローカルなIPアドレスを用いた上位クラスタNW17内の上位クラスタ内通信を行っても良い。
またここで、上位クラスタ内用の上位クラスタマップの内容は、図10に示したように、代表キャッシュノードのDNS登録名、グローバルIPアドレス、各クラスタ内のキャッシュノード数、『情報の必要度』の数値の合計値、および『情報の必要度』の数値の合計値の1次微分値である。ここで、上位クラスタ17内用の上位クラスタマップの内容は、図10に示した以外に、上位クラスタ17内でローカルに付加したローカルなIPアドレスを含んでいても良い。また、上位クラスタ17内用の上位クラスタマップの内容は、図10に示した以外に何らかの『情報の必要度』の数値の経時変化の様子を表す変数を含んでいても良い。
各下位クラスタには、その代表キャッシュノードまたはクラスタの中心から一定の物理距離または論理的距離をNW半径10とする円で特定されるクラスタ領域と、このクラスタ領域に設置することのできるキャッシュノードの最大数とが予め定められる。
下位クラスタ2の代表キャッシュノード1が「NW半径10を超える遠くからのアクセスが多くなる」あるいは「計算した自下位クラスタ2に置くことの出来るキャッシュノードの最大数に近づく」ことを検知すると、NW半径10を超える場所に存在する、次数の大きなキャッシュノードに情報をキャッシュしてもらえないかランダムに、通常のInternet上の通信手段によって打診し、通常のInternet上の通信手段によって承諾をもらったキャッシュノード11にキャッシュさせてもらう。ここで、複数の承諾をもらった場合には、それらの全て、あるいはそれらのうち次数の大きなキャッシュノードに対して、キャッシュさせてもらう。なお、この新規キャッシュノード11の追加は、アクセス数の変動を考慮して、一定時間待ってから行う。
キャッシュノードの依頼を行った代表キャッシュノード1は、自キャッシュノード1を含む代表キャッシュノード1のみで構成される上位クラスタNW17を作成し、上位クラスタNW17用の上位クラスタマップ18−2を作成する。
新規追加されたキャッシュノード11は自分を代表キャッシュノードとする下位クラスタ15を新たに形成し、下位クラスタ15内用下位クラスタマップ4−15を作成する。ここで、この代表キャッシュノード同士による上位クラスタ内オーバーレイNW17は、下位クラスタ2および下位クラスタ15のオーバーレイNWの上に構築される。また、新規追加されたキャッシュノード11はキャッシュノード依頼を受けた代表キャッシュノード1に対して、代表キャッシュノードのみで構成される上位クラスタNW17に対して、キャッシュノード11が上位クラスタ17に属することを認識してもらうための「entryメッセージ」を通常のInternet上の通信手段によって送る。キャッシュノード11への依頼を行った代表キャッシュノード1は、新規追加されたキャッシュノード11宛に、「entryメッセージ」を受信したことを示すメッセージを上位クラスタ17内通信によって送り、同時に上位クラスタマップ18に必要な情報を要求する。要求を受けた新規追加キャッシュノード11は、自身のキャッシュノード11に関する要求情報を上位クラスタ17内通信によって、キャッシュノード11への依頼を行った代表キャッシュノード1へ送る。
キャッシュノード依頼を行った代表キャッシュノード1は、新規代表キャッシュノード11から受け取った要求情報をもとに上位クラスタマップ18−11を更新し、更新された上位クラスタマップ18−11を、上位クラスタ17内通信によって、代表キャッシュノードが所属する下位クラスタ内の他の代表キャッシュノード宛に送る。各代表キャッシュノードは各自の持つ上位クラスタ用の上位クラスタマップを更新して、登録完了のメッセージを、キャッシュノード依頼を行った代表キャッシュノード1に、上位クラスタ内通信によって送る。
図11を参照すると、本実施例の分散情報配置システムにおける、代表キャッシュノードのみで構成される上位クラスタレベルのNW17(上位層)、下位クラスタレベルのNW2、15、16(中間層)、およびノードレベルのNW(最下層)の関係の1例が示されている。
下位クラスタ同士は原則的に代表キャッシュノードであるキャッシュノード1、11、14同士が、各下位クラスタ2、15、16内のキャッシュノード数などのマクロな情報を、一定時間間隔毎または不定時間間隔で上位クラスタNW17上でオーバーレイ通信を行うことによって交換し、互いの生存と状況を確認し合うと共に、各々の代表キャッシュノード1,11,14が保持している各下位クラスタ2,15,16のマクロ情報を更新する。
図12を参照すると、本実施例の分散情報配置システムにおけるキャッシュノードの脱退の様子の1例が示されている。図13を参照すると、本実施例の分散情報配置システムにおけるキャッシュノードの脱退のフローチャートの1例が示されている。図14を参照すると、本実施例の分散情報配置システムにおける代表キャッシュノードの脱退のフローチャートの1例が示されている。
図12の下位クラスタ15を例に取る。キャッシュノード19へのアクセスが減って、「『情報の必要度』の数値」がある閾値2を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する。一定時間経過後の「『情報の必要度』の数値」の平均値がある閾値2を下回ると、自キャッシュノード19の所属する下位クラスタ15内に他のキャッシュノードがいる限り、下位クラスタ15内の他のキャッシュノード全てに「脱退メッセージ」を下位クラスタ内通信によって送る。脱退メッセージを受け取った下位クラスタ15内の他のキャッシュノードは、自キャッシュノードの保持している下位クラスタ15内用下位クラスタマップから、脱退キャッシュノード19のIPアドレス以外の情報を消去し、「脱退メッセージが到着した」という確認メッセージを脱退キャッシュノード19に対して、下位クラスタ内通信によって送信する。脱退キャッシュノード19は、下位クラスタ15内の全ての他のキャッシュノードから、確認メッセージを受け取った後で、自キャッシュノード19の保持しているキャッシュデータを削除し、情報のURLと自身のIPアドレスとを登録したDNSサーバに削除要求を出して下位クラスタ15から抜ける。
ここで、仮に代表キャッシュノード11が抜ける場合には、以下のようになる。代表キャッシュノード11へのアクセスが減って、「『情報の必要度』の数値」がある閾値2を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する。一定時間の「『情報の必要度』の数値」の平均値がある閾値2を下回ると、自キャッシュノード11の所属する下位クラスタ15内の他のキャッシュノードのうち、最も「『情報の必要度』の数値」の小さいキャッシュノード13に他下位クラスタ2、16との通信を行う代表キャッシュノードを譲り、自キャッシュノード11の所属する下位クラスタ15内の他のキャッシュノード全てと、他の下位クラスタ2、16の各々全ての代表キャッシュノード1、14へ、「別のキャッシュノード13が代表キャッシュノードを引き継ぎ、自分11が抜けること」を、下位クラスタ内通信、上位クラスタ内通信によってそれぞれ知らせる。代表キャッシュノード11からの脱退メッセージを受け取った下位クラスタ15内の他の全てのキャッシュノードは各々の持つ下位クラスタ内15用下位クラスタマップから代表キャッシュノード11の情報をIPアドレスを除いて削除し、「代表キャッシュノードを受け継いだキャッシュノード13」を代表キャッシュノードとして下位クラスタ15内用下位クラスタマップに設定する。さらに、「元の代表キャッシュノード11」と「代表キャッシュノードを受け継いだキャッシュノード13」に対して、「新しい代表キャッシュノード13を下位クラスタ15内用下位クラスタマップ4に登録したこと」を確認メッセージとして、下位クラスタ内通信によって伝える。
同様に他の下位クラスタ2、16の各々の代表キャッシュノード1、14は、各々の保持している上位クラスタNW17用の上位クラスタマップ18−2、18−16から代表キャッシュノード11の情報を削除し、新しい代表キャッシュノード13を下位クラスタ15の代表キャッシュノードとして上位クラスタNW17用の上位クラスタマップ18−2、18−16に設定する。さらに他の下位クラスタ2、16の各々の代表キャッシュノード1、14は、確認メッセージを「代表キャッシュノードを受け継いだキャッシュノード13」と「元の代表キャッシュノード11」宛に、上位クラスタ内通信によって送信する。
自キャッシュノード11の所属する下位クラスタ15内の全てのキャッシュノード、および他の下位クラスタ2、16の各々全ての代表キャッシュノード1、14から、下位クラスタ内通信、上位クラスタ内通信によってそれぞれ確認メッセージを受け取った後で、「元の代表キャッシュノード11」は、自キャッシュノード11の保持するキャッシュデータを削除し、情報のURLと自身のIPアドレスとを登録したDNSサーバに削除要求を出して下位クラスタ15から抜ける。
図15を参照すると、本実施例の分散情報配置システムにおける下位クラスタの脱退の様子の1例が示されている。図16を参照すると、本実施例の分散情報配置システムにおける下位クラスタの脱退のフローチャートの1例が示されている。
下位クラスタ16を例にとって説明する。下位クラスタ16に最終的に残ったキャッシュノード14は必然的に下位クラスタの代表キャッシュノードであるが、代表キャッシュノード14でも「『情報の必要度』の数値」がある閾値を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する。一定時間の「『情報の必要度』の数値」の平均値がある閾値を下回ると、代表キャッシュノード14は他の全ての下位クラスタ2、15の代表キャッシュノード1、11に対して、脱退メッセージを上位クラスタ内通信によって送る。同時に、脱退代表キャッシュノード14は自キャッシュノード14の保持している上位クラスタNW17用下位クラスタマップ18−16を見て、他の全ての下位クラスタ2、15の代表キャッシュノード1,11のうち、キャッシュノード当たりの「『情報の必要度』の数値」が最も少なく、かつ下位クラスタ内のキャッシュノード密度の最大値の大きい代表キャッシュノード11に、自キャッシュノード14の所属する下位クラスタ16内用の下位クラスタマップ4−16を上位クラスタ内通信によって送信する。
他の全ての下位クラスタ2、15の代表キャッシュノード1、11は、脱退メッセージを送信した代表キャッシュノード14に対して「代表キャッシュノード14が抜けること」を確認するメッセージを「代表キャッシュノード14」宛に上位クラスタ内通信によって送信した後で、代表キャッシュノード14に関するIPアドレス以外の情報を上位クラスタNW17用下位クラスタマップ18−2、18−15の各々から削除する。ここで脱退代表キャッシュノード14から下位クラスタ16内用の下位クラスタマップ4−16を受け取った代表キャッシュノード11は、「下位クラスタマップ4−16を受け取ったこと」を確認メッセージとして、脱退代表キャッシュノード14に上位クラスタ内通信によって送信する。
脱退代表キャッシュノード14は、他の全ての下位クラスタ2、15の代表キャッシュノード1、11から「代表キャッシュノード14が抜けること」を確認するメッセージを受け取り、かつ脱退代表キャッシュノード14から下位クラスタ16内用の下位クラスタマップ4−16を受け取った代表キャッシュノード11から「下位クラスタマップ4−16を受け取ったこと」を確認するメッセージを受け取った後で、自キャッシュノード14の保持するキャッシュデータを削除し、情報のURLと自身のIPアドレスとを登録したDNSサーバに削除要求を出して上位クラスタNW17から抜ける。
図17を参照すると、本実施例の分散情報配置システムにおける最後に残ったキャッシュノードの脱退の様子の1例が示されている。図18を参照すると、本実施例の分散情報配置システムにおける最後に残ったキャッシュノードの脱退のフローチャートの1例が示されている。
オリジナルキャッシュノードを含む下位クラスタ以外で最終的に残った下位クラスタ15において、最終的に残ったキャッシュノード11(終末キャッシュノード)でも「『情報の必要度』の数値」がある閾値を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する。一定時間の「『情報の必要度』の数値」の平均値がある閾値を下回ると、オリジナルキャッシュノード1に対して、「自分11が最終データのキャッシュノードであること」、終末キャッシュノードが保持している「キャッシュデータ」および「過去に脱退した他の下位クラスタの下位クラスタ内用の下位クラスタマップ」を、1)自キャッシュノード11にそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良い、あるいは、3)削除して欲しい、という「希望情報」と共に、上位クラスタ内通信によって伝える。
オリジナルキャッシュノード1は、終末キャッシュノード11からの「希望情報」を元に、情報を、1)そのまま置いてもらうか、2)何か他の形態(例えばリンク先としてなど)で置かせてもらうか、あるいは、3)削除してもらうかを検討し、その結果を終末キャッシュノード11に対して上位クラスタ内通信によって伝える。ここで、終末キャッシュノード11に情報をキャッシュし続けてもらう理由は、そのデータが再度必要になる場合、最後までアクセスがあったキャッシュノードの周辺からの場合が多いと推定されるためである。
終末キャッシュノード11に終末キャッシュノード11がキャッシュしている情報を削除してもらう場合、オリジナルキャッシュノード1は、最後に残った下位クラスタ15にいた他のキャッシュノード13、19に対して、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しい、ことを通常のInternetの通信手段によって伝える。
終末キャッシュノード11は、オリジナルキャッシュノード1からの回答に従って、情報の管理形態を決定する。すなわち、情報を、1)そのまま置くか、2)何か他の形態(例えばリンク先としてなど)で置くか、あるいは、3)削除するか、のいずれかを行う。
オリジナルキャッシュノード1から、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しいというメッセージを通常のInternetの通信手段によって受け取った、最後に残った下位クラスタ15にいた他のキャッシュノード13、19は、それぞれオリジナルキャッシュノード1に対して、情報を、1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良い、あるいは、3)置きたくない、という「希望情報」を通常のInternetの通信手段によって伝える。
「希望情報」を受け取ったオリジナルキャッシュノード1は、その中に、情報を、1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良いという回答があれば、1)、2)の優先順位で、そのキャッシュノードと上位クラスタを形成し、情報を1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良いという回答を行ったキャッシュノードへ、キャッシュする情報を上位クラスタ内通信によって送信する。
「希望情報」を受け取ったオリジナルキャッシュノード1は、その中に、3)置きたくないという回答しか無ければ、最後から2番目に削除された下位クラスタ16にいた全てのキャッシュノードに対して、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しい、ことを通常のInternet上の通信手法によって伝える。
オリジナルキャッシュノード1から、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しいというメッセージを受け取った、最後から2番目に残った下位クラスタ16にいた全てのキャッシュノード14、20、21は、それぞれオリジナルキャッシュノード1に対して、情報を、1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良い、あるいは、3)置きたくない、という「希望情報」をそれぞれ通常のInternet上の通信手法によって伝える。
以下、上記の段落0125から段落0128までの手順を繰り返す。
最終的にオリジナルキャッシュノード1以外にキャッシュしてくれるキャッシュノードが無ければ、オリジナルキャッシュノード1は、情報を自キャッシュノード1に保存したままにする。
以上のようにして、通信NW上の情報へのアクセス数に適応して、情報のキャッシュ配置の量と質を利他的かつ協調的な仕組みによって自律分散的に決定することで、効率的な情報の分散キャッシュ配置を実現するとともに、一度廃れてアクセスの無くなった情報の効率的な再生を実現する。
[動作の説明]
次に本実施例の分散情報配置システムの動作について説明する。
図1を参照すると、本実施例の分散情報配置システムにおける「『情報の必要度』の数値」の変化の様子の1例が示されている。アクセスがあるたびに、「『情報の必要度』の数値」は一定量だけ増加する。「『情報の必要度』の数値」は一定時間が経過する毎に一定量だけ減少する。なお、時間経過に伴い減少する「『情報の必要度』の数値」は、非線形に減少しても良い。また、アクセスがあるたびに増加する「『情報の必要度』の数値」は、キャッシュノードのアクセスを受信可能なインターフェースの数や、インターフェースの入力バッファサイズなどに応じて、キャッシュノード毎に異なっていても良い。また、アクセスがあるたびに増加する「『情報の必要度』の数値」は、自下位クラスタ内に置くことの出来るキャッシュノードの最大数に応じて、下位クラスタ毎で異なっていても良い。また、時間経過に伴い減少する「『情報の必要度』の数値」は、キャッシュノードのアクセスを受信可能なインターフェースの数や、インターフェースの入力バッファサイズなどに応じて、キャッシュノード毎に異なっていても良い。また、時間経過に伴い減少する「『情報の必要度』の数値」は、自下位クラスタ内に置くことの出来るキャッシュノードの最大数に応じて、下位クラスタ毎で異なっていても良い。
(1)キャッシュノードの増加に関する動作の説明
図2(a)および(b)、図3(a)および(b)、図4を参照して、本実施例の分散情報配置システムにおけるキャッシュノードの増加に関する動作を説明する。
情報とある値(初期値)の「情報の必要度」をオリジナルキャッシュノード1に配置する(図3aのS301、図3bのS321)。またオリジナルキャッシュノードは、自身の所属するNWのDNSサーバに自身をNW上で一意に識別可能な識別子であるグローバルIPアドレスと、NW内の他のノードがアクセスする場合に用いる該キャッシュ情報の場所を指し示す記述方式であるURLを登録しておく(図2aまたは図2bのオリジナルキャッシュノード1から出ている1点鎖線)。同時に自分を代表キャッシュノードとする下位クラスタ2を生成し、当該オリジナルキャッシュノード1のIPアドレスと「『情報の必要度』の数値」とを下位クラスタ内用の下位クラスタマップ4−2に登録する。下位クラスタ内用の下位クラスタマップ4−2は各下位クラスタ内のキャッシュノードが分散的に所有し、キャッシュノードは下位クラスタ内用の下位クラスタマップに登録された複数のキャッシュノードと下位クラスタ内のオーバーレイ通信で下位クラスタNW2内通信を行う。
図1に示したように情報へのアクセスがあるたびに「『情報の必要度』の数値」が増加する。
図2(a)および(b)では、理解のし易さを目的に、アクセスをアリ3で表し、またアクセスによる「『情報の必要度』の数値」の増加分をアリ3が運んでいる荷物Aで表している。アクセスが増えて「『情報の必要度』の数値」がある閾値Θ1を超えると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する(図3aのS302、S303、図3bのS322、S323)。一定時間の「『情報の必要度』の数値」の平均値がある閾値Θ1を超えると、代表キャッシュノードはあるホップ数内にある、次数の大きなキャッシュノードに情報をキャッシュしてもらえないかランダムに打診し、承諾をもらったキャッシュノード6にキャッシュさせてもらう(図3aのS304〜S307、図3bのS324〜S327)。
ここで閾値Θ1は、キャッシュノードのアクセスを受信可能なインターフェースの入力バッファサイズの最大値の1から100%の割合の範囲内で、かつ後述のキャッシュノードが下位クラスタから脱退する場合の閾値Θ2より大きい割合に設定する。また、閾値Θ1は、キャッシュノードのアクセスを受信可能なインターフェースの数や、該インターフェースの入力バッファサイズなどに応じて、キャッシュノード毎に異なっていても良い。また、閾値Θ1は、自下位クラスタ内に置くことの出来るキャッシュノードの最大数に応じて、下位クラスタ毎で異なっていても良い。
複数のキャッシュノードから通常のInternetにおける通信手法により承諾をもらった場合には、それらの全て、あるいはそれらのうち次数の大きなキャッシュノードに対して、キャッシュさせてもらう(図3aのS308、図3bのS328)。もし、一定のホップ数内のキャッシュノードから承諾が得られなければ、オリジナルキャッシュノードは探索ホップ数を+1して、承諾を得られるキャッシュノードを探索する(図3aのS306でNo、図3bのS326でNo)。
新規追加されたキャッシュノード6は、自情報のURLと自身のIPアドレスを自ノードの属するNWドメインのDNSサーバに登録しておく(図3aのS309、図3bのS329、図2aのキャッシュサーバ6から出ている1点鎖線、図2bのキャッシュサーバ6から出ている1点鎖線)。
新規追加されたキャッシュノード6は、下位クラスタ2内の代表キャッシュノード1に、キャッシュノード6が下位クラスタ2に属することを認識してもらうための「entryメッセージ」を通常のInternet上の通信手段によって送る。キャッシュノード6への依頼を行った代表キャッシュノード1は、新規追加されたキャッシュノード6宛に、「entryメッセージ」を受信したことを示すメッセージを下位クラスタ2内通信によって送り、同時に下位クラスタマップ4−2に必要な情報を要求する(図3aのS310、図3bのS330)。要求を受けた新規追加キャッシュノード6は、自身のキャッシュノード6に関する要求情報を下位クラスタ2内通信によって、キャッシュノード6への依頼を行った代表キャッシュノード1へ送る(図3aのS311、図3bのS331)。
キャッシュノード依頼を行った代表キャッシュノード1は、新規代表キャッシュノード6から受け取った要求情報をもとに下位クラスタマップ4−2を更新し、更新された下位クラスタマップ4−2を、下位クラスタ2内通信によって、代表キャッシュノードの所属する下位クラスタ内の他のキャッシュノード宛に送る(図3aのS312、図3bのS332)。各キャッシュノードは各自の持つ下位クラスタ用の下位クラスタマップを更新して、登録完了のメッセージを、キャッシュノード依頼を行った代表キャッシュノードに、下位クラスタ内通信によって送る(図3aのS313、図3bのS333)。
図5を参照すると、本実施例の分散情報配置システムにおける同一下位クラスタ内のキャッシュノード間の通信の様子の1例が示されている。下位クラスタ2内に存在する、代表キャッシュノード1を含む複数のキャッシュノード6、8らは、下位クラスタ内通信によって一定時間間隔毎または不定時間間隔で行うことによって、互いの「生存」と「『情報の必要度』の数値」などの情報を交換し合う。これによって下位クラスタ2内の全てのキャッシュノードの下位クラスタ2内用の下位クラスタマップの更新と同期とを行う。ここで、下位クラスタ内通信は、新規にキャッシュノードが追加されたり、キャッシュノードやキャッシュノード間のリンクの障害などのイベントが発生した場合には、そのイベントをトリガーとして行われる。
ここで、同一情報のループを防ぐために、下位クラスタNW内でのオーバーレイ通信は、代表キャッシュノード1をIETF(The Internet Engineering Task Forceの略)のRFC2796に規定されたルートリフレクタに設定した上での通信であっても良い。
また、ここで同一情報のループを防ぐために、下位クラスタ内通信は、IETFのRFC2328に規定されたOSPF(Open Shortest Path Algorithm)をプロトコルとして用いても良い。
また、ここで同一情報のループを防ぐために、下位クラスタNW内の何らかのオーバーレイ通信は、IETFのRFC1142またはRFC1195に規定されたIS−IS(Intermediate System−Intermediate System)をプロトコルとして用いても良い。
さらに、全てのキャッシュノードの下位クラスタ2内用の下位クラスタマップの同期を取るために、下位クラスタ2内において下位クラスタ内通信によって交換される情報には、何らかのフォーマットによるバージョン情報を含んでいても良い。
(2)下位クラスタ内でのアクセス負荷分散に関する動作の説明
図6(a)および図6(b)、図7(a)および図7(b)を参照して、本実施例の分散情報配置システムにおける下位クラスタ内でのアクセスの負荷分散に関する動作を説明する。
下位クラスタ内に、代表キャッシュノードを除く少なくとも1つの他のキャッシュノードが追加されると、それらは自律的に負荷分散を行う。すなわち、下位クラスタ内のオーバーレイ通信によって下位クラスタ2内の「『情報の必要度』の数値」は各キャッシュノード1、6、8が、同一内用の下位クラスタ2内用下位クラスタマップ4−2を保持しているため、「『情報の必要度』の数値」の最も少ないキャッシュノードから順番にアクセスを転送する。
図6(a)は、下位クラスタ2内の複数のキャッシュノードがそれぞれ個別のDNSに登録している場合である。この場合、アクセス元のノード3a、3b、3cはそれぞれ自身の所属するNWドメインのDNSサーバ31、32、33に、キャッシュされている情報のキャッシュノードのIPアドレスを知るためにアクセスする(図7aのS701)。ここでは、簡単のためDNSサーバ31、32、33はキャッシュノードのIPアドレスを知っていることとする。
DNSサーバ31、32、33はアクセス元のノード3a、3b、3cに対してそれぞれキャッシュノードである1、6、8のIPアドレスを教える(図7aのS702)。これによって、アクセス元のノード3a、3b、3cはキャッシュノード1、6、8にそれぞれアクセスする(図7aのS703)。
アクセスをそれぞれ受けたキャッシュノード1、6、8は、それぞれが保有する下位クラスタ2のクラスタマップ4−2を見て、「『情報の必要度』の数値」の最も少ないキャッシュノードから順番にアクセスを転送する(図7aのS704)。
これらの方法により、自律分散的な負荷分散が実現される。
図6(b)は、下位クラスタ2内の複数のキャッシュノードが同じDNSに登録している場合である。この場合、アクセス元のノード3a、3b、3cはそれぞれDNSサーバ31に、キャッシュされている情報のキャッシュノードのIPアドレスを知るためにアクセスする(図7bのS711)。ここでは、簡単のためDNSサーバ31はキャッシュノードのIPアドレスを知っていることとする。
DNSサーバ31は、自身に実装されている手法によってアクセス元のノード3a、3b、3cに対してそれぞれキャッシュノードである1、6、8の中からいずれかを選んで、そのキャッシュノードのIPアドレスを教える(図7bのS712)。これによって、アクセス元のノード3a、3b、3cは、DNSサーバによって選択されたキャッシュノードにそれぞれアクセスする(図7bのS713)。
アクセスをそれぞれ受けたキャッシュノードは、それぞれが保有する下位クラスタ2のクラスタマップ4−2を見て、「『情報の必要度』の数値」の最も少ないキャッシュノードから順番にアクセスを転送する(図7bのS714)。
これらの方法により、自律分散的な負荷分散が実現される。
ここで、アクセスを転送する順番は、クラスタマップ4内にある全てのキャッシュノードの「現在の『情報の必要度』の数値」に「アクセス時間間隔の平均値」と「『情報の必要度』の数値の1次微分値」との積を加えた値を計算することで、それぞれのキャッシュノードの今後の「『情報の必要度』の数値」の予測値を計算し、予測値の最も小さいキャッシュノードから順でも良い。
また、アクセスを転送する順番は、クラスタマップ4内にある全てのキャッシュノードの「現在の『情報の必要度』の数値」に「アクセス時間間隔の平均値」と「『情報の必要度』の数値の1次微分値」との積と、「アクセス時間間隔の平均値」の2乗と「『情報の必要度』の数値の2次微分値」との積を加えた値を計算することで、それぞれのキャッシュノードの今後の「『情報の必要度』の数値」の予測値を計算し、予測値の最も小さいキャッシュノードから順でも良い。
また、アクセスを転送する順番は、「『情報の必要度』の数値」の最も少ないキャッシュノードに対して、閾値Θ1まで増加させ、その後その時点で「『情報の必要度』の数値」の最も少ないキャッシュノードに対して、閾値Θ1まで増加させることを繰り返しても良い。
また、アクセスを転送する順番は、「『情報の必要度』の数値」の最も少ないキャッシュノードから「『情報の必要度』の数値」の少ない順番にアクセスを転送することを繰り返すものであっても良い。
また、アクセスを転送する順番は、下位クラスタ2内のキャッシュノードのアクセスを受信可能なインターフェースの数が少ない順でも良い。
また、アクセスを転送する順番は、下位クラスタ2内のキャッシュノードのアクセスを受信可能なインターフェースの入力バッファサイズが少ない順でも良い。
また、アクセスを転送する順番は、下位クラスタ毎で異なっていても良い。
(3)クラスタの増加に関する動作の説明
図8、図9および図10を参照して、本実施例の分散情報配置システムにおけるクラスタの増加に関する動作を説明する。
各下位クラスタ2には、その代表キャッシュノード1またはクラスタ2の中心から一定の物理距離または論理的距離をNW半径10とする円で特定されるクラスタ領域と、このクラスタ領域に設置することのできるキャッシュノードの最大数とが予め定められる。
ここで、自キャッシュノード1または下位クラスタ2を中心としたアクセス元のNW半径10は、下位クラスタ2内の全てまたは1部のキャッシュノードの、アクセスを受信可能なインターフェースの数に基づいて設定しても良い。
また、自キャッシュノード1または下位クラスタ2を中心としたアクセス元のNW半径10は、下位クラスタ2内の全てまたは1部のキャッシュノードの、アクセスを受信可能なインターフェースの入力バッファサイズに基づいて設定しても良い。
また、自キャッシュノード1または下位クラスタ2を中心としたアクセス元のNW半径10は、下位クラスタ2内の全てまたは1部のキャッシュノードの、アクセスを受信可能なインターフェースの数と、アクセスを受信可能なインターフェースの入力バッファサイズの両方に基づいて設定しても良い。
このようにして、下位クラスタ2の代表キャッシュノード1が「NW半径10を超える遠くからのアクセスが多くなる」あるいは「計算した自下位クラスタ2に置くことの出来るキャッシュノードの最大数に近づく」ことを知ると、NW半径10を超える場所に存在する、次数の大きなキャッシュノードに情報をキャッシュしてもらえないかランダムに通常のInternetにおける通信手法により打診し、承諾をもらったキャッシュノード11にキャッシュさせてもらう(図9のS901〜S904)。ここで、複数の承諾をもらった場合には、それらの全て、あるいはそれらのうち次数の大きなキャッシュノードに対して、キャッシュさせてもらう(図9のS905)。
キャッシュノードの依頼を行った代表キャッシュノード1は、自キャッシュノード1を含む代表キャッシュノード1のみで構成される上位クラスタNW17を作成し、上位クラスタNW17用の上位クラスタマップ18−2を作成する(図9のS906)。
新規追加されたキャッシュノード11は自分を代表キャッシュノードとする下位クラスタ15を新たに形成し、下位クラスタ15内用下位クラスタマップ4−15を作成する(図9のS907)。
また、新規追加されたキャッシュノード11は情報のURLと自身のIPアドレスを自身の所属するNWドメイン内のDNSサーバ34に登録しておく(図9のS907)。ここで、キャッシュノード11の登録するDNSサーバは、オリジナルキャッシュノードの所属するクラスタ2内のキャッシュノードが、それぞれ情報のURLと自身のIPアドレスを登録しているDNSサーバ31,32,33の全てと異なっている。以降、追加される下位クラスタの代表ノードとその下位クラスタ内に追加されるキャッシュノードでの負荷分散の動作は、図2(a)および図2(b)と図3(a)および図3(b)で示したように行われる。これらの方法により、自律分散的な負荷分散が実現される(図9のS907)。
ここで、この代表キャッシュノード同士による上位クラスタ間オーバーレイNW17は、下位クラスタ2および下位クラスタ15のクラスタ内オーバーレイNWの上に構築される(図9のS907)。
また、新規追加されたキャッシュノード11はキャッシュノード依頼を受けた代表キャッシュノード1に対して、代表キャッシュノードのみで構成される上位クラスタNW17に対して、キャッシュノード11が上位クラスタ17に属することを認識してもらうための「entryメッセージ」を通常のInternet上の通信手段によって送る(図9のS907)。
キャッシュノード11への依頼を行った代表キャッシュノード1は、新規追加されたキャッシュノード11宛に、「entryメッセージ」を受信したことを示すメッセージを上位クラスタ17内通信によって送り、同時に上位クラスタマップ18に必要な情報を要求する(図9のS908)。要求を受けた新規追加キャッシュノード11は、自身のキャッシュノード11に関する要求情報を上位クラスタ17内通信によって、キャッシュノード11への依頼を行った代表キャッシュノード1へ送る。
キャッシュノード依頼を行った代表キャッシュノード1は、新規代表キャッシュノード11から受け取った要求情報をもとに上位クラスタマップ18−11を更新し、更新された上位クラスタマップ18−11を、上位クラスタ17内通信によって、代表キャッシュノードが所属する下位クラスタ内の他の代表キャッシュノード宛に送る。各代表キャッシュノードは各自の持つ上位クラスタ用の上位クラスタマップを更新して、登録完了のメッセージを、キャッシュノード依頼を行った代表キャッシュノード1に、上位クラスタ内通信によって送る(図9のS908)。
図11を参照すると、本実施例の分散情報配置システムにおける、代表キャッシュノードのみで構成される上位クラスタレベルのNW17(上位層)、下位クラスタレベルのNW2、15、16(中間層)、およびノードレベルのNW(最下層)の関係の1例が示されている。
下位クラスタ同士は原則的に代表キャッシュノードであるキャッシュノード1、11、14同士が、各下位クラスタ2、15、16内のキャッシュノード数などのマクロな情報を、一定時間間隔毎または不定時間間隔で上位クラスタNW17上でオーバーレイ通信を行うことによって交換し、互いの生存と状況を確認し合うと共に、各々の代表キャッシュノード1,11,14が保持している各下位クラスタ2,15,16のマクロ情報を更新する(図9のS909)。
ここで、同一情報のループを防ぐために、何らかのオーバーレイ通信は、代表キャッシュノード1、11、14のいずれかをIETFのRFC2796に規定されたルートリフレクタに設定した上での通信であっても良い。また、ここで同一情報のループを防ぐために、下位クラスタNW内の何らかのオーバーレイ通信は、IETFのRFC2328に規定されたOSPFをプロトコルとして用いても良い。また、ここで同一情報のループを防ぐために、下位クラスタNW内の何らかのオーバーレイ通信は、IETFのRFC1142またはRFC1195に規定されたIS−ISをプロトコルとして用いても良い。
さらに、全ての代表キャッシュノードの上位クラスタ17内用の下位クラスタマップの同期を取るために、上位クラスタ17内において何らかのオーバーレイ通信によって交換される情報には、何らかのフォーマットによるバージョン情報を含んでいても良い。
(4)キャッシュノードの減少に関する動作の説明
図12、図13および図14を参照して、本実施例の分散情報配置システムにおけるキャッシュノードの減少に関する動作を説明する。
図12の下位クラスタ15を例に取る。キャッシュノード19へのアクセスが減って、「『情報の必要度』の数値」がある閾値Θ2を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する(図13のS1301、S1302)。一定時間経過後の「『情報の必要度』の数値」の平均値がある閾値Θ2を下回ると、自キャッシュノード19の所属する下位クラスタ15内に他のキャッシュノードがいる限り、下位クラスタ15内の他のキャッシュノード全てに「脱退メッセージ」を下位クラスタ15内用通信によって送る(図13のS1303、S1304)。
ここで閾値Θ2は、キャッシュノードのアクセスを受信可能なインターフェースの入力バッファサイズの最大値の0から99%の割合の範囲内で、かつ後述のキャッシュノードが下位クラスタに追加される場合の閾値Θ1より小さい割合に設定する。また、閾値Θ2は、キャッシュノードのアクセスを受信可能なインターフェースの数や、インターフェースの入力バッファサイズなどに応じて、キャッシュノード毎に異なっていても良い。また、閾値Θ2は、自下位クラスタ内に置くことの出来るキャッシュノードの最大数に応じて、下位クラスタ毎で異なっていても良い。
脱退メッセージを受け取った下位クラスタ15内の他のキャッシュノードは自キャッシュノードの保持している下位クラスタ15内用下位クラスタマップから、脱退キャッシュノード19のIPアドレス以外の情報を消去し、「脱退メッセージが到着した」という確認メッセージを脱退キャッシュノード19に対して下位クラスタ内通信によって送信する(図13のS1305、S1306)。脱退キャッシュノード19は、下位クラスタ15内の全ての他のキャッシュノードから、確認メッセージを受け取った後で、自キャッシュノード19の保持しているキャッシュデータを削除し、情報のURLと自身のIPアドレスとを登録したDNSサーバに削除要求を出して下位クラスタ15から抜ける(図13のS1307)。
ここで、仮に代表キャッシュノード11が抜ける場合には、以下のようになる。代表キャッシュノード11へのアクセスが減って、「『情報の必要度』の数値」がある閾値Θ2を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する(図14のS1401、S1402)。一定時間の「『情報の必要度』の数値」の平均値がある閾値Θ2を下回ると、自キャッシュノード11の所属する下位クラスタ15内の他のキャッシュノードのうち、最も「『情報の必要度』の数値」の小さいキャッシュノード13に他の下位クラスタ2、16との通信を行う代表キャッシュノードを譲り、自キャッシュノード11の所属する下位クラスタ15内の他のキャッシュノード全てと、他の下位クラスタ2、16の各々全ての代表キャッシュノード1、14へ、「別のキャッシュノード13が代表キャッシュノードを引き継ぎ、自分11が抜けること」を、下位クラスタ内通信、上位クラスタ内通信によってそれぞれ知らせる(図14のS1403、S1404)。
代表キャッシュノード11からの脱退メッセージを受け取った下位クラスタ15内の他の全てのキャッシュノードは各々の持つ下位クラスタ15内用下位クラスタマップから代表キャッシュノード11の情報をIPアドレスを除いて削除し、「代表キャッシュノードを受け継いだキャッシュノード13」を代表キャッシュノードとして下位クラスタ15内用下位クラスタマップに設定する。さらに、「元の代表キャッシュノード11」と「代表キャッシュノードを受け継いだキャッシュノード13」に対して、下位クラスタ内通信によって「新しい代表キャッシュノード13を下位クラスタ15内用下位クラスタマップ4−15に登録したこと」を確認メッセージとして伝える(図14のS1405)。
同様に他の下位クラスタ2、16の各々の代表キャッシュノード1、14は、各々の保持している上位クラスタNW17用の上位クラスタマップ18−2、18−16から代表キャッシュノード11の情報を削除し、新しい代表キャッシュノード13を下位クラスタ15の代表キャッシュノードとして上位クラスタNW17用の上位クラスタマップ18−2、18−16に設定する。さらに他の下位クラスタ2、16の各々の代表キャッシュノード1、14は、確認メッセージを「代表キャッシュノードを受け継いだキャッシュノード13」と「元の代表キャッシュノード11」宛に上位クラスタ内通信によって送信する(図14のS1406)。
自キャッシュノード11の所属する下位クラスタ15内の全てのキャッシュノード、および他の下位クラスタ2、16の各々全ての代表キャッシュノード1、14からの確認メッセージを下位クラスタ内通信、上位クラスタ内通信によってそれぞれ受け取った後で、「元の代表キャッシュノード11」は、自キャッシュノード11の保持するキャッシュデータを削除し、情報のURLと自身のIPアドレスとを登録したDNSサーバに削除要求を出して下位クラスタ15から抜ける(図14のS1407)。
(5)クラスタの減少に関する動作の説明
図15および図16を参照して、本実施例の分散情報配置システムにおけるクラスタの減少に関する動作を説明する。
下位クラスタ16を例にとって説明する。下位クラスタ16に最終的に残ったキャッシュノード14は必然的に下位クラスタの代表キャッシュノードであるが、代表キャッシュノード14でも「『情報の必要度』の数値」がある閾値を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する(図16のS1601、S1602)。一定時間の「『情報の必要度』の数値」の平均値がある閾値を下回ると、代表キャッシュノード14は他の全ての下位クラスタ2、15の代表キャッシュノード1、11に対して、脱退メッセージを送る(図16のS1603、S1604)。同時に、脱退代表キャッシュノード14は自キャッシュノード14の保持している上位クラスタNW17用上位クラスタマップ18−16を見て、他の全ての下位クラスタ2、15の代表キャッシュノード1,11のうち、キャッシュノード当たりの「『情報の必要度』の数値」が最も少なく、かつ下位クラスタ内のキャッシュノード密度の最大値の大きい代表キャッシュノード11に、自キャッシュノード14の所属する下位クラスタ16内用の下位クラスタマップ4−16を上位クラスタ内通信によって送信する(図16のS1606)。
他の全ての下位クラスタ2、15の代表キャッシュノード1、11は、脱退メッセージを送信した代表キャッシュノード14に対して「代表キャッシュノード14が抜けること」を確認するメッセージを「代表キャッシュノード14」宛に上位クラスタ内通信によって送信した後で、代表キャッシュノード14に関するIPアドレス以外の情報を上位クラスタNW17用上位クラスタマップ18−2、18−15の各々から削除する(図16のS1605)。ここで脱退代表キャッシュノード14から下位クラスタ16内用の下位クラスタマップ4−16を受け取った代表キャッシュノード11は、「下位クラスタマップ4−16を受け取ったこと」を確認メッセージとして、脱退代表キャッシュノード14に上位クラスタ内通信によって送信する(図16のS1607)。
脱退代表キャッシュノード14は、他の全ての下位クラスタ2、15の代表キャッシュノード1、11から「代表キャッシュノード14が抜けること」を確認するメッセージを受け取り、かつ脱退代表キャッシュノード14から下位クラスタ16内用の下位クラスタマップ4−16を受け取った代表キャッシュノード11から「下位クラスタマップ4−16を受け取ったこと」を確認するメッセージを上位クラスタ内通信によって受け取った後で、自キャッシュノード14の保持するキャッシュデータを削除し、情報のURLと自身のIPアドレスとを登録したDNSサーバに削除要求を出して上位クラスタNW17から抜ける(図16のS1608)。
(6)終末キャッシュノードの脱退に関する動作の説明
図17および図18を参照して、終末キャッシュノードの脱退に関する動作を説明する。
最終的に残った下位クラスタ15において、最終的に残ったキャッシュノード11(終末キャッシュノード)でも「『情報の必要度』の数値」がある閾値を下回ると、数値の変動を考慮して、その時点から一定時間の「『情報の必要度』の数値」の平均値を取得する(図18のS1801)。一定時間の「『情報の必要度』の数値」の平均値がある閾値を下回ると、オリジナルキャッシュノード1に対して、「自分11が最終データのキャッシュノードであること」、終末キャッシュノードが保持している「キャッシュデータ」および「過去に脱退した他の下位クラスタの下位クラスタ内用の下位クラスタマップ」を、1)自キャッシュノード11にそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良い、あるいは、3)削除して欲しい、という「希望情報」と共に、上位クラスタ内通信によって伝える(図18のS1802)。
オリジナルキャッシュノード1は、終末キャッシュノード11からの「希望情報」を元に、情報を、1)そのまま置いてもらうか、2)何か他の形態(例えばリンク先としてなど)で置かせてもらうか、あるいは、3)削除してもらうかを検討し、その結果を終末キャッシュノード11に対して上位クラスタ内通信によって伝える(図18のS1803)。ここで、終末キャッシュノード11に情報をキャッシュし続けてもらう理由は、そのデータが再度必要になる場合、最後までアクセスがあったキャッシュノードの周辺からの場合が多いと推定されるためである。
終末キャッシュノード11に終末キャッシュノード11がキャッシュしている情報を削除してもらう場合、オリジナルキャッシュノード1は、最後に残った下位クラスタ15にいた他のキャッシュノード13、19に対して、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しい、ことを通常のInternet上の通信手段によって伝える(図18のS1805)。
終末キャッシュノード11は、オリジナルキャッシュノード1からの回答に従って、情報の管理形態を決定する。すなわち、情報を、1)そのまま置くか、2)何か他の形態(例えばリンク先としてなど)で置くか、あるいは、3)削除するか、のいずれかを行う(図18のS1804)。
オリジナルキャッシュノード1から、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しいというメッセージを受け取った、最後に残った下位クラスタ15にいた他のキャッシュノード13、19は、それぞれオリジナルキャッシュノード1に対して、情報を、1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良い、あるいは、3)置きたくない、という「希望情報」をそれぞれ通常のInternet上の通信手法によって伝える(図18のS1806)。
「希望情報」を受け取ったオリジナルキャッシュノード1は、その中に、情報を、1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良いという回答があれば、1)、2)の優先順位で、そのキャッシュノードと上位クラスタを形成し、情報を、1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良いという回答を行ったキャッシュノードへ、キャッシュする情報を上位クラスタ内通信によって送信する(図18のS1807)。
「希望情報」を受け取ったオリジナルキャッシュノード1は、その中に3)置きたくないという回答しか無ければ、最後から2番目に削除された下位クラスタ16にいた全てのキャッシュノードに対して、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しい、ことを通常のInternet上の通信手法によって伝える。
オリジナルキャッシュノード1から、情報を、1)そのまま置いて欲しい、2)何か他の形態(例えばリンク先としてなど)で置かせて欲しいというメッセージを受け取った、最後から2番目に残った下位クラスタ16にいた全てのキャッシュノード14、20、21は、それぞれオリジナルキャッシュノード1に対して、情報を、1)自キャッシュノードにそのまま置いても良い、2)何か他の形態(例えばリンク先としてなど)で置いても良い、あるいは、3)置きたくない、という「希望情報」をそれぞれ通常のInternet上の通信手法によって伝える(図18のS1808)。
以下、段落番号0199から段落番号0202までの手順を繰り返す。
最終的にオリジナルキャッシュノード1以外にキャッシュしてくれるキャッシュノードが無ければ、オリジナルキャッシュノード1は、情報を自キャッシュノード1に保存したままにする(図18のS1809)。
ここで、オリジナルキャッシュノード1が保存する情報は、キャッシュ情報および上位クラスタの過去に登録された1部または全ての代表ノードのDNSサーバ上の登録名およびIPアドレスであっても良い。また、オリジナルキャッシュノード1が保存する情報は、キャッシュ情報および複数の下位クラスタ過去に登録された1部または全てのキャッシュノードのDNSサーバ上の登録名およびIPアドレスを含んでいても良い。また、オリジナルキャッシュノード1が保存する情報は、キャッシュ情報および上位クラスタの過去に登録された1部または全ての代表ノードと、複数の下位クラスタの過去に登録された1部または全てのキャッシュノードのDNSサーバ上の登録名およびIPアドレスを含んでいても良い。
(7)アクセスが再度増加した場合に関する動作の説明
上記「(6)終末キャッシュノードの脱退に関する動作の説明」において、最終的にキャッシュされるべき情報をどのキャッシュノードが保持しているかによって、最初のステップのみが異なる。
(7−1)最終的にオリジナルキャッシュノードのみがキャッシュされるべき情報を保持している場合
この場合は、「(1)キャッシュノードの増加に関する動作の説明」が最初のステップとなる。
(7−2)最終的にオリジナルキャッシュノードと終末キャッシュノードがキャッシュされるべき情報を保持している場合
図17を用いて説明する。この場合、オリジナルキャッシュノード1と終末キャッシュノード11のうち、アクセスを受けたキャッシュノードにおいて、「(1)キャッシュノードの増加に関する動作の説明」が最初のステップとなる。終末キャッシュノード11においてアクセスが増加し、「(1)キャッシュノードの増加に関する動作の説明」で示した、閾値Θ1を超えてキャッシュノードの追加が必要になった場合、「(1)キャッシュノードの増加に関する動作の説明」で示した手順に従って、一定時間待ってから、終末キャッシュノード11は自分の保持している下位クラスタ15内の下位クラスタマップ4−15の中に残っている、下位クラスタ15内で過去にキャッシュノードであったキャッシュノード13、19に情報をキャッシュしてもらえないかを通常のInternet上の通信手法によって打診する。もし、いずれからも承諾を得られなかった場合には、ある一定のホップ数にあるキャッシュノードのうち、次数の大きなキャッシュノードにランダムに情報をキャッシュしてもらえないかを通常のInternet上の通信手法によって打診する。一定のホップ数内のキャッシュノードから承諾が得られなければ、該終末キャッシュノードは探索ホップ数を+1して、承諾を得られるキャッシュノードを探索する。
下位クラスタ15内の過去のキャッシュノード13、19あるいはホップ数による探索によって、いずれかのキャッシュノードから承諾を通常のInternet上の通信手法によって受けると、後は「(1)キャッシュノードの増加に関する動作の説明」において説明した手順に従って、キャッシュノードを増加させていく。
本実施例によれば、以下のような効果が得られる。
第1の効果は、分散キャッシュ配置が効率的に行えることである。その理由は、代表キャッシュノードを用いたキャッシュノードの下位クラスタ化、代表キャッシュノードあるいは下位クラスタを中心としたNW距離の導入、NW距離より遠い先からのアクセスが一定量以上増加した場合にはNW距離より遠い位置にいるキャッシュノードを中心とした別下位クラスタを形成する、という仕組みを用いたためである。
第2の効果は、キャッシュノード間のアクセスの負荷分散が自律分散的かつ効率的に行えることである。その理由は、代表キャッシュノードを含む下位クラスタ内で独自のオーバーレイNWを形成し、その中で各キャッシュノードの負荷状況を、下位クラスタに属する全てのキャッシュノードが把握可能となる仕組みを用いたためである。
第3の効果は、ある期間に渡ってアクセスが減少し、殆どまたは全くアクセスされなくなった情報を、再びアクセスが増えてくると効率的に増加させることができることである。その理由は、アクセス量の減少に伴うキャッシュノードおよび下位クラスタの縮小の仕組み、最終的な情報の効率的な保管の仕組みを設けたためである。
第4の効果は、各々の下位クラスタは自律分散的に負荷分散を行うこと、各々の下位クラスタはネットワーク上の距離的に異なる場所に配置されることによって、キャッシュする情報に対する破壊行為から情報を守ることが可能になる、すなわち情報の攻撃行為に対する頑健性が向上することである。
次に、本発明の分散情報配置システムの構成要素となるノード装置の実施例について説明する。
図20を参照すると、本実施例のノード装置は、処理装置1100と、記憶装置1200と、通信装置1300とから構成される。
記憶装置1200は、コンピュータの主記憶や補助記憶で構成され、ユーザ端末へ提供する情報であるキャッシュ情報1210、図4に示した下位クラスタマップ1220および図10に示した上位クラスタマップ1230を記憶するために用いられる。
通信装置1300は、ネットワークインタフェースカード等で構成され、インターネット通信手段1310およびオーバーレイ通信手段1320として用いられる。
処理装置1100は、コンピュータの中央処理装置で構成され、負荷分散手段1110、サービス提供手段1120、負荷情報更新手段1130、キャッシュノード増加手段1140、キャッシュノード減少手段1150、クラスタ増加手段1160、クラスタ減少手段1170、終末手段1180およびクラスタマップ同期手段1190を備えている。これらの各手段は、処理装置1100上で実行されるプログラムによって実現することができる。プログラムは、磁気ディスク等のコンピュータ可読記録媒体に記録され、コンピュータに読み取られることによって、コンピュータ上に上記の各手段1110〜1190を実現する。
負荷分散手段1110は、ユーザ端末からキャッシュ情報1210に対するアクセス要求を受信した場合に、このアクセス要求を自ノードの属するクラスタの何れのノードで受け付けるかを、下位クラスタマップ1220に記載された各ノードの負荷情報(本実施例の場合は、『情報の必要度』の数値)に基づいて判断する機能を有する。負荷分散手段1110は、自ノードで受け付けると判断した場合にはアクセス要求を自ノードのサービス提供手段1120へ転送し、他ノードで受け付けると判断した場合には、オーバーレイ通信手段1320を通じて該当する他のノードへアクセス要求を転送する。また負荷分散手段1110は、自ノードのグローバルIPアドレスとキャッシュ情報1210のURLの対応関係を、自ノードが属するNWドメインのDNSサーバに登録する機能を有する。
サービス提供手段1120は、負荷分散手段1110から通知されたアクセス要求に従って、キャッシュ情報1210を要求元のユーザ端末へ送信する機能を有する。
負荷情報更新手段1130は、サービス提供手段1120がキャッシュ情報1210をアクセスする毎に、図1で説明したように、下位クラスタマップ1220中の自ノードの『情報の必要度』の数値を増加させ、それに応じて、その1次および2次微分値を更新する機能を有する。また負荷情報更新手段1130は、一定時間経過毎に、下位クラスタマップ1220中の自ノードの『情報の必要度』の数値を減少させ、それに応じて、その1次および2次微分値を更新する機能を有する。
キャッシュノード増加手段1140は、図2および図3で説明したように、自ノードの属するクラスタに新たなキャッシュノードを追加する機能を有する。このキャッシュノード増加手段1140は、図3で説明した処理のうち、クラスタの代表ノードによって実行される処理部であるマスタ部1141と、代表ノード以外のノードによって実行される処理部であるスレーブ部1142とで構成される。
キャッシュノード減少手段1150は、図12、図13および図14で説明したように、クラスタからキャッシュノードを削減する機能を有する。このキャッシュノード減少手段1150は、図13および図14で説明した処理のうち、削減対象となるノードによって実行される処理部であるマスタ部1151と、削減対象となるノード以外のノードによって実行される処理部であるスレーブ1152とで構成される。
クラスタ増加手段1160は、図8および図9で説明したように、新たなクラスタを追加する機能を有する。このクラスタ増加手段1160は、図9で説明した処理のうち、新たなクラスタを生成しようとする代表ノードによって実行される処理部であるマスタ部1161と、新たなクラスタを生成しようとする代表ノード以外のノードによって実行される処理部であるスレーブ部1162とで構成される。
クラスタ減少手段1170は、図15および図16で説明したように、クラスタを削減する機能を有する。このクラスタ減少手段1170は、図16で説明した処理のうち、削減対象となるクラスタの代表ノードによって実行される処理部であるマスタ部1171と、削減対象となるクラスタの代表ノード以外のノードによって実行される処理部であるスレーブ部1172とで構成される。
終末手段1180は、図17および図18で説明したような終末キャッシュノードに関する処理を司る機能を有する。この終末手段1180は、図18で説明した処理のうち、、オリジナルキャッシュノードによって実行される処理部であるマスタ部1181と、それ以外のノードによって実行される処理部であるスレーブ部1182とで構成される。クラスタマップ同期手段1190は、キャッシュノード間でクラスタマップの内容を一致させる処理を司る機能を有する。このクラスタマップ同期手段1190は、図10に示した上位クラスタマップの同期処理を実行する処理部である上位クラスタ部1191と、図4に示した下位クラスタマップの同期処理を実行する処理部である下位クラスタ部1192とで構成される。
以上、本発明の実施の形態および実施例を説明したが、本発明は以上の例に限定されずその他各種の付加変更が可能である。例えば、上記の例では、幾つかのキャッシュノードを一つのクラスタとしてまとめたが、クラスタ化は本発明の必須の要件ではない。