(57)【特許請求の範囲】
【請求項１】
各ノードが索引アドレス空間及び別のネットワークアドレス空間にアドレスを有する分散型索引付けネットワークにおけるノードであって、
前記ノードには、
プログラム命令及びデータ構造を記憶するための機械読取可能なメモリと、
前記メモリに記憶されたプログラム命令を実行するための１つ又は複数のプロセッサと
が含まれ、
前記メモリに記憶されたプログラム命令には、
索引アドレス空間の一部をノードと関連付ける段階と、
複数の各交信相手用の索引空間及びネットワークアドレスを記憶する交信相手リストを維持する段階であって、各交信相手は、前記索引付けネットワークの他のノードである前記段階と、
少数の前記交信相手リストを直接交信相手として処理し、また、前記交信相手の残りを間接交信相手として処理する段階と、
その直接交信相手が依然としてネットワークのメンバかどうか判断するために、最小頻度で各直接交信相手との通信を試みる段階と、
与えられた直接交信相手が、もはやネットワークのメンバとして機能していないという判断に応答する段階であって、その与えられた直接交信相手を置き換える新しい直接交信相手を見つけて、置換交信相手の索引及びネットワークアドレスのノードの交信相手リストにおける置換された直接交信相手を置き換えることによって前記応答する段階と、
ノードに関連付けられた索引アドレス空間の一部に対応する索引を有する１つ又は複数のファイル毎のファイル登録項目を前記ノード上に記憶する段階であって、このようなファイル登録項目の各々は、その関連付けられたファイルに関する情報と、登録項目関連ファイルの全て又は部分の一組の１つ又は複数のコピーの各々に関する情報とを記憶し、コピーは、前記ネットワークの１つ又は複数の異なるノード上に記憶されることができ、ファイル登録項目は、このようなコピーの各々が記憶されるノードのネットワークアドレスと、ノードがファイヤウォールの背後にあるかどうかの指標とを含み、その場合、その中継交信相手情報を含む、前記段階と
が含まれ、
ノードは、検索要求を送りつける次のノードとして、与えられたアドレスに最も近いその交信相手リスト上のアドレスを用いることによって、そのアドレスが直接又は間接アドレスかどうかに拘らず、ノードに関連する索引アドレス空間の一部に入らない与えられた索引アドレスに対する検索要求に応答し、
前記ノードは、ノードの直接交信相手の内関連する１つからノードの各間接交信相手の索引アドレス及びネットワークアドレスを学習し、
前記ノードは、間接交信相手の索引及びネットワークアドレスをそれが学習した直接交信相手と同じ直接交信相手から、与えられた間接交信相手の状態の変化について学習するノード。
【請求項２】
請求項１に記載のノードであって、
前記プログラム命令には、ノードの交信相手の一部を要求元ノードに送り、ノードが前記一部の交信相手を他の要求元ノードに送ったという記録を記憶することによって、一組の交信相手用の他のノードからの要求に応答するための命令が含まれ、
要求に応答する前記ノードは、与えられた直接交信相手がネットワークのメンバとしてもはや機能していないと判断し、また、与えられた直接交信相手を交信相手要求に応答してノードが以前送った任意の他のノードに、与えられた交信相手は置き換えられたというメッセージを、置換交信相手の索引アドレス及びネットワークアドレスを含み、送る段階が含まれるノード。
【請求項３】
請求項２に記載のノードであって、
前記プログラム命令には、他のノードからのメッセージに応答するための命令が含まれ、前記他のノードによってノードに供給された与えられた間接交信相手が、与えられた索引及びネットワークアドレスを有する新しい間接交信相手によって置き換えられたことを、ノードの交信相手リストの与えられた間接交信相手を置換ノードの索引及びネットワークアドレスで置き換える段階と、
置換された間接交信相手を交信相手要求に応答してノードが以前送った任意の他のノードに、以前通信された交信相手が置き換えられたことを示すメッセージを、置換交信相手の索引アドレス及びネットワークアドレスを含み、送る段階と、によって示すノード。
【請求項４】
請求項３に記載のノードであって、
前記ノードは、その間接交信相手が依然としてネットワークのメンバであるかどうか判断するために、それが直接交信相手と通信を行う最小頻度の１０分の１より大きい頻度で間接交信相手と直接通信せず、また、直接交信相手との通信を介して、このような間接交信相手の状態の変化について学習するノード。
【請求項５】
各ノードが索引アドレス空間及び独立のネットワークアドレス空間にアドレスを有する分散型索引付けネットワークであって、前記ネットワークは、複数のノードを含み、各ノードには、
プログラム命令及びデータ構造を記憶するための機械読取可能なメモリと、
前記メモリに記憶されたプログラム命令を実行するための１つ又は複数のプロセッサと、が含まれ、前記メモリに記憶されたプログラム命令には、
索引アドレス空間の一部をノードと関連付ける段階と、
ノードの関連する一部の索引アドレス空間内で関連する索引アドレス値を有する索引付けされた情報を前記ノード上に記憶する段階と、
もしあれば、その索引アドレス値と共にノード上に記憶された情報にアクセスすることによって、与えられた索引アドレス値に関連する情報に対する要求に応答する段階と、が含まれ、
複数の各ノードに関連する索引アドレス空間の一部の全て又は部分がオーバーラップし、こうして、前記複数のノードの各ノードは、同様な組の索引アドレス値に対して、索引付けされた情報を記憶し、
前記索引付けされた情報は、ノードに関連付けられた索引アドレス空間の一部に対応する索引を有する１つ又は複数のファイル毎のファイル登録項目を含み、このようなファイル登録項目の各々は、その関連付けられたファイルに関する情報と、登録項目関連ファイルの全て又は部分の一組の１つ又は複数のコピーの各々に関する情報とを記憶し、コピーは、前記ネットワークの１つ又は複数の異なるノード上に記憶されることができ、ファイル登録項目は、このようなコピーの各々が記憶されるノードのネットワークアドレスと、ノードがファイヤウォールの背後にあるかどうかの指標とを含み、その場合、その中継交信相手情報を含む、ネットワーク。
【請求項６】
請求項５に記載のネットワークであって、前記ノードは、プログラム命令を含み、前記プログラム命令は、
与えられた索引値で索引付けされる新しい情報の登録に応答する段階であって、検索を実行して、前記与えられた索引付けされた値を含む索引空間の一部に関連するノードを見つけることによって前記応答する段階と、
与えられた索引値と共に、検索によって見つけられたノード上に新しい情報を記憶する段階と、
索引空間の与えられた部分に関連するノード間において、１つのこのようなノード上の前記与えられた索引空間部分内に入る索引値の下で索引付けされた情報を通信する段階と、
前記索引値と共にこのような情報のコピーを記憶することによって、与えられたノード上で、このような通信に応答する段階と、が含まれるノード。
【請求項７】
請求項５に記載のネットワークであって、前記ノードは、プログラム命令を含み、前記プログラム命令は、
索引アドレス空間の与えられた部分を索引付けするノードの数をノードが決定できるようにする段階と、
索引アドレス空間の前記与えられた部分を索引付けするノードの数が、与えられた下限値より小さいという判断に応答する段階であって、索引空間の前記与えられた部分を現在索引付けしていない１つ又は複数の他のノードにメッセージを送り、前記他のノードが前記与えられた索引空間部分の索引付けを開始するように要求することによって前記応答する段階と、
索引アドレス空間の前記要求された部分を含むように索引アドレス空間の部分を与えられたノードに変えることによって、このような要求に応答する段階と、が含まれるノード。
【請求項８】
各ノードが索引アドレス空間及び別のネットワークアドレス空間にアドレスを有する分散型索引付けネットワークにおけるノードであって、
前記ノードには、
プログラム命令及びデータ構造を記憶するための機械読取可能なメモリと、
前記メモリに記憶されたプログラム命令を実行するための１つ又は複数のプロセッサと
が含まれ、
前記メモリに記憶されたプログラム命令には、
索引アドレス空間の一部をノードと関連付ける段階と、
ノードの関連する一部の索引アドレス空間内で関連する索引アドレス値を有する索引付けされた情報を前記ノード上に記憶する段階と、
もしあれば、与えられた索引アドレス値と共にノード上に記憶された情報にアクセスすることによって、与えられた索引アドレス値に関連する情報に対する要求に応答する段階と、
そのノードを含み、論理ノードを形成し、同じ一部の索引アドレス空間に全て関連付けられ実質的に同じ索引付けされた情報を記憶するノードから構成される一組のネットワークのノードを定義する段階と、
何らかの新しい情報を取得するために前記論理ノードの他のノードと通信する段階であって、前記情報は、ノード上にはまだ記憶されていないがこのような他のノードが記憶したものであり、また、論理ノードの関連する一部の索引アドレス空間内に関連する索引アドレス値を有する前記段階と、
前記新しい情報のコピーをノード上に記憶する段階であって、ノードが、ネットワークに充分長く留まる場合、与えられた期間の時間に渡り、論理ノードの他のノードによって記憶された実質的に全てのこのような情報のコピーを得るように前記記憶する段階と
が含まれ、
前記新しい情報は、ノードに関連付けられた索引アドレス空間の一部に対応する索引を有する１つ又は複数のファイル毎のファイル登録項目を含み、このようなファイル登録項目の各々は、その関連付けられたファイルに関する情報と、登録項目関連ファイルの全て又は部分の一組の１つ又は複数のコピーの各々に関する情報とを記憶し、コピーは、前記ネットワークの１つ又は複数の異なるノード上に記憶されることができ、ファイル登録項目は、このようなコピーの各々が記憶されるノードのネットワークアドレスと、ノードがファイヤウォールの背後にあるかどうかの指標とを含み、その場合、その中継交信相手情報を含む、ノード。
【請求項９】
請求項８に記載のノードであって、
前記メモリは、ノードの論理ノードにおけるノード数の推定値を形成するための命令を記憶し、
前記メモリは、
このような推定値に応答する段階であって、１つ又は複数の機能を実行して、論理ノードを、論理ノードに関連する索引アドレス空間の一部の別の部分に各々関連する複数の新しい別の論理ノードに分割することによって、論理ノードにおけるノード数が或るサイズを超えていることを示す前記応答する段階と、
このような推定値に応答する段階であって、１つ又は複数の機能を実行して、ノードの現論理ノードを第２の異なる現論理ノードと併合し、ノードの現論理ノード及び第２の現論理ノードの双方に関連する索引アドレス空間の一部を含む索引アドレス空間の関連する一部を有する１つの新しい論理ノードを形成することによって、論理ノードにおけるノード数が或るサイズ未満であることを示す前記応答する段階と、の内少なくとも１つのための命令を記憶するノード。
【請求項１０】
請求項９に記載のノードであって、ノードのメモリは、分割及び併合する前記両機能を実行するための命令を記憶するノード。
【請求項１１】
請求項１０に記載のノードであって、
前記プログラム命令は、一組のアドレスビットによって表現し得る一組の可能な値によって、索引アドレス空間を表し、
与えられた論理ノードを形成するノードは、前記一組のアドレスビットの与えられた一連の最上位ビットに対して、全て共通の組のビット値を共有し、
論理ノードの前記分割及び／／又は併合は、ノードの論理ノードのノードによって共有される索引アドレス空間の一連の最上位ビットの長さを変更する段階を伴うノード。
【請求項１２】
請求項８に記載のノードであって、前記メモリは、命令を記憶し、前記命令には、
ノードの論理ノードにおけるノード数の推定値を形成する段階と、
このような推定値に応答する段階であって、ノードの論理ノードに関連する一部の索引アドレス空間内に入る値にそれらの索引アドレス値を変えることによりノードの論理ノードに参加するようにネットワークの他のノードに要求することによって、論理ノードのノード数が或るサイズ未満であることを示す前記応答する段階と、が含まれるノード。
【請求項１３】
請求項８に記載のノードであって、前記論理ノードの他のノードと前記通信する段階は、その論理ノードの異なるノードと或る最小頻度で通信する段階を含み、ここで、このような各通信において、少なくとも１つの与えられたノードは、通信において他のノードによって記憶された情報更新のリストを受信し、このような各更新は、それが発生したノードを示し、また、更新発生の相対的な時間の指標を受信し、与えられたノードがまだそのコピーを有さない何らかの更新を他のノードから取得し、また、それら更新のコピーを記憶するノード。
【請求項１４】
請求項８に記載のノードであって、前記命令は、命令を含み、前記命令には、
ノードが、分散型索引付けネットワークに参入しようとしている時、ノードに対する潜在的な索引アドレス値として用いるための少なくとも２つの索引アドレス値を取得する段階であって、前記潜在的な各索引アドレス値について、
その潜在的なアドレス値を含む索引アドレス空間の一部に関連する論理ノードに属する他のノードに対する検索をネットワーク上で実行する段階と、
その関連する論理ノードの密度に関して、このような他の各ノードに問い合わせる段階と、が含まれる前記取得する段階と、
最も小さい密度の関連する論理ノードを有するその１つの潜在的な索引アドレス値をノードの新しい索引アドレス値として選択する段階と、
次に、ノードの新しい索引アドレス値に関連する論理ノードの他のノードとの前記通信を開始する段階と、が含まれるノード。
【請求項１５】
請求項８に記載のノードであって、
前記プログラム命令は、一組の索引アドレスビットによって表現し得る一組の可能な値によって、索引アドレス空間を表し、
与えられた論理ノードを形成するノードは、全て、共通の一部の前記索引アドレスビットに対する共通の組のビット値を共有するノード。
【請求項１６】
請求項１５に記載のノードであって、前記共有ビットは、前記索引アドレスビットにおける一連の最上位ビットであるノード。
【請求項１７】
各ノードが索引アドレス空間及び別のネットワークアドレス空間にアドレスを有する分散型索引付けネットワークにおけるノードであって、
前記ノードには、
プログラム命令及びデータ構造を記憶するための機械読取可能なメモリと、
前記メモリに記憶されたプログラム命令を実行するための１つ又は複数のプロセッサと
が含まれ、
前記メモリに記憶されたプログラム命令には、
索引アドレス空間の一部をノードと関連付ける段階と、
ノードの関連する一部の索引アドレス空間に対応するキーワード索引値を有する１つ又は複数の各キーワードに対するキーワード登録項目を前記ノード上に記憶する段階であって、与えられたキーワードに関連するこのような各キーワード登録項目は、与えられたキーワードに関連する１つ又は複数のオブジェクトに関する情報を記憶する前記段階と、
対応するキーワード登録項目をノードが記憶するキーワード索引値に関連する情報に対する要求に、そのキーワード登録項目のノード上に記憶された情報にアクセスすることによって、応答する段階と
が含まれ、
与えられたキーワードに関連付けられたキーワード登録項目は、与えられたキーワードに関連付けられた１つ又は複数のファイルのリストを含み、
キーワード登録項目は、１つ又は複数のファイルの前記リストに、各ファイルに関連付けられた索引値を含み、
前記メモリはまた、ノードに関連付けられた索引アドレス空間の一部の中にある索引値を有する１つ又は複数のファイル毎のファイル登録項目を前記ノード上に記憶するためのプログラム命令を記憶し、
前記ファイル登録項目の各々は、前記ネットワークの１つ又は複数の異なるノード上に記憶された登録項目関連ファイルの全て又は部分の一組の１つ又は複数のコピーの各々に関する情報を含み、ファイル登録項目は、このようなコピーの各々が記憶されるノードのネットワークアドレスと、ノードがファイヤウォールの背後にあるかどうかの指標とを含み、その場合、その中継交信相手情報を含む、ノード。
【請求項１８】
請求項１７に記載のノードであって、前記キーワード索引値は、キーワードのハッシュであるノード。
【請求項１９】
各ノードが索引アドレス空間及び別のネットワークアドレス空間にアドレスを有する分散型索引付けネットワークにおけるノードであって、
前記ノードには、
プログラム命令及びデータ構造を記憶するための機械読取可能なメモリと、
前記メモリに記憶されたプログラム命令を実行するための１つ又は複数のプロセッサであって、前記メモリに記憶されたプログラム命令には、
索引アドレス空間の一部をノードと関連付ける段階と、
ノードの関連する一部の索引アドレス空間に対応する索引を有する１つ又は複数の各ファイルに対するファイル登録項目を前記ノード上に記憶する段階であって、このような各ファイル登録項目は、その関連するファイルに関する情報と、前記ネットワークの１つ又は複数の異なるノード上にコピーを記憶し得る登録項目の関連するファイルの全て又は一部の一組の１つ又は複数の各コピーに関する情報と、このような各コピーが記憶されるノードのネットワークアドレスと、ノードがファイヤウォールの背後にあるかどうかの指標とを含み、その場合、その中継交信相手情報を含む、記憶する前記段階と、
与えられた索引値を有するファイルに関連する情報に対する要求を受信する段階であって、これには、このような要求を生成したノードのネットワーク位置の指標を含む前記段階と、が含まれる前記１つ又は複数のプロセッサと、
要求されたファイルの索引値が、ノードに関連する一部の索引アドレス空間内に入る場合、要求されたファイルの登録項目にリスト化された全て又は一部のファイルの一組の１つ又は複数のコピーに関する情報を、それらコピーを記憶しているノードのネットワークアドレスを含み、要求を送ったノードに送ることによって、このような索引によるファイル要求に応答する段階と、が含まれ、
前記情報は、要求元ノードのネットワーク位置が与えられると、与えられたファイルコピーが記憶されるネットワーク位置の見かけの適切さを判断することによって選択される、ノード。
【請求項２０】
直接交信相手に関して、交信相手リストは、その交信相手状態履歴に関する情報を記憶し、交信相手状態履歴は、与えられた直接交信相手に対して過去に交信した試みの回数に関する情報を提供することにより、与えられた直接交信相手に対する交信の試みが或る回数を超えて失敗する場合、現ノードは、与えられた直接交信相手を新しい直接交信相手に置き換える必要があると判断することを特徴とする請求項１〜５の何れか１項に記載のノード。
【請求項２１】
ファイル登録項目は、共有区域データの一部であり、区域のノードから生じる全ての最新の未確認情報からなるリストである未確認情報リストをさらに含み、未確認情報は、区域のノードによって共通に索引付けされるべき情報を伝達し、未確認情報リストは、未確認情報ごとに、その発生時間を示すタイムスタンプを含むことを特徴とする請求項１〜２０の何れか１項に記載のノードまたはネットワーク。
【請求項２２】
ファイル登録項目は、ファイルのコピーを記憶するノードごとに、登録項目有効期日を含み、有効期日は、コピーがその位置で依然として利用可能であることを示すそのノードから更新メッセージが受信されるまで、ファイルの与えられたコピーの登録項目がファイルを格納するノードのリストから除去されることを特徴とする請求項１〜２１の何れか１項に記載のノード。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全地球的にアドレス可能なオブジェクト及び関連するビジネスモデルの経路設定及び索引付けのためのシステム、方法及びプログラミングに関する。
【背景技術】
【０００２】
コンピュータ処理用ハードウェア能力の継続的な増大と相俟って、インターネットアクセスの急速な採用により、ネットワークサービスにおいて新しい膨大な機会が創造されてきている。しかしながら、ネットワークの状態は、クライアントーサーバモデルに大きく依存しており、ウェブが導入された８年前のインターネットのそれに今でも極めて似通っている。
【０００３】
過去８年間、ＰＣの接続性及び能力の傾向によれば、驚異的な数のＰＣがインターネットに接続され、膨大な量のＣＰＵ、ディスク、及び帯域幅資源が生成されてきた。しかしながら、これらＰＣのほとんどが、決してそれらの全能力を用いていない。極めて多くのマシンが今でも、そうする能力が新たに見出されたにも拘らず、決してサーバとして機能せず、クライアントとしてのみ機能している。
【０００４】
クライアントーサーバモデルは、数多くの問題を抱えている。サーバは、維持に経費がかかり、ハードウェア、帯域幅、及び運用コストに経費が必要である。インターネット上のトラフィックは、予測不能である。即ち、いわゆる“スラッシュドット（Ｓｌａｓｈｄｏｔ）効果”において、サイト上のコンテンツは、急激に人気を博すことがあり、クライアント要求にそれ以上応じられない程、サイトのサーバが氾濫することがある。同様に、集中型サイトでは、そのサイトのネットワークへの接続が氾濫することによってサイトをダウンさせ得る悪質なトラフィックというサービス拒否（ＤｏＳ）攻勢を被ることがある。更に、幾つかのネットワークサービス、特に、大きな規模で映像又は音声を提供するなどの帯域幅集中サービスは、要求帯域幅が任意の単一のサイトの容量を超過するため、集中型モデルでは全く不可能である。
【０００５】
最近、幾つかの分散型のピアツーピア技術、特に、フリーネット（フリーネット）及びグヌーテラ（Ｇｎｕｔｅｌｌａ）が、ユーザのＰＣの総能力を利用して、ネットワークサービスを運用し、また、コンテンツのサービス提供コストを低減するために生み出されている。しかしながら、フリーネットは、比較的遅く、また、グヌーテラから任意のコンテンツを実際にダウンロードすることは、かなり困難である。このことは、プロトコルが数千ホストを超えてスケール変更せず、従って、ネットワーク上のアクセス可能なコンテンツの量が制限されるためである。
【０００６】
オブジェクト照合のＯ（ｌｏｇｎ）時間（ここで、ｎは、ネットワークに参加しているノードの数であり、各時間ステップは、ピアマシンが他のピアマシンと交信相手することから成る）を提案する幾つかの研究プロジェクトは、様々な開発段階にあり、バークレイでのオーシャンストア（ＯｃｅａｎＳｔｏｒｅ）及びＭＩＴでのコード（Ｃｈｏｒｄ）が含まれる。しかしながら、１０００ホスト程度と小さいネットワークの場合でさえ、ｌｏｇｎは、１０ホップであり、このことは、０．５分を上回る照合時間を提案する。更に、これらのシステムは、明らかに信頼性のためではなく、スケール変更可能性のために設計され、また、それらの信頼性は、信頼性の低いマシン上で動作するという現実世界の条件下では、テストされていない。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本特許出願の該当譲受人であるスカイリス（Ｓｋｙｒｉｓ）ネットワーク社は、スケール変更可能で耐故障性であることによって、分散型ネットワークサービスのニーズを満足する分散型索引付けのための新しくもっと効率的なアルゴリズムを開発した。この明細書において、我々は、いわゆる“トランスペアレントな索引付け”と我々が呼ぶ新しい経路設定及び検索方式を提案する。この方式では、検索索引は、大きくスケール変更可能であり耐故障性でランダム化された分散型経路設定層に組み込まれる。この経路設定及び索引付け層は、分散型ディレクトリサービスとして、即ち、これらの特性を共有し、信頼性が高く効率的で負荷のバランスが取れたネットワークサービスを構築するプラットフォームとして機能する。
【０００８】
我々の待ち行列時間ベースのシミュレーションにより、スカイリス（ＳＫＹＲＩＳ）は、何十億台のサーバのネットワーク上で効率的に動作し得ることが分かる。更に、スカイリスネットワークは、わずかな待ち時間を許容することで、任意の分布のホットスポット（人気コンテンツの小規模部分）、即ち、突然人気が出たコンテンツを扱うことができ、また、トランスペアレントに扱うことが可能である。
【課題を解決するための手段】
【０００９】
以下の設計目標は、スカイリスにとって主要なものであり、また、我々の研究の方向を決定したものである。
【００１０】
スケール変更可能な記憶及び検索：スケール変更可能性は、スカイリスの最も重要な特徴の１つである。当初から、スカイリスプロジェクトは、潜在的に何十億台ものピアマシンの地球規模のシステムに合わせてスケール変更するように設計されている。
【００１１】
効率的な取得：我々の目標は、スカイリスをウェブより高速でないにしろ、ウェブと同じように高速にすることである。新しいドメインのウェブ上で照合を行う場合、ＩＰアドレスをユーザに提供する前に、幾つかの階層的交信相手を行い得るＤＮＳシステムを最初にチェックする。目的は、幾つかのホップ内においてスカイリスシステムを同様に維持することであり、この場合、ホップは、１つのピアマシンから次のピアマシンに渡されるメッセージから成る。規模がより大きいファイルの場合、多数のソースから同時に取得するなどの他の方法があり、これによって、システムスループットが増大する。
【００１２】
信頼性及び耐故障性：マシンが警告無しでクラッシュした場合、スカイリス上のクライアントは、依然として、ミラー化されたドキュメントを迅速に取得できる。マシンは、回復した場合、問題を生じることなく、シームレスにネットワークに復帰できる。耐故障性は、分散型ピアツーピアネットワークの場合、主要な問題であることに留意されたい。このようなネットワークは、サーバより極めて信頼性の低いユーザのＰＣ上で動作し、また、更に、ユーザは、バックグラウンドにプログラムを置き去りにするよりもむしろそれをもっと頻繁に開いたり閉じたりしたいと願うことがある。
【００１３】
負荷均衡化：ネットワーク全体は、驚異的な容量を有するが、個々のマシンは、能力が不足している。スカイリスは、マシンの過負荷を回避するために、システム全体に渡って均等に負荷（基本的には帯域幅）を分散しなければならない。スカイリスは、スケール変更が可能であり、また、耐故障性の双方である最初のシステムを実現し得たという点で独特であり、更に、たまたまプラットフォームが効率的であり、また、負荷が幾つかの追加的な努力で均衡な状態にし得るという点において、独特である。
【図面の簡単な説明】
【００１４】
【図１】本発明の種々の側面の１つを示す概略図。
【図２】本発明の種々の側面の１つを示す概略図。
【図３】本発明の種々の側面の１つを示す概略図。
【図４】本発明の種々の側面の１つを示す概略図。
【図５】本発明の種々の側面の１つを示す概略図。
【図６】本発明の種々の側面の１つを示す概略図。
【図７】本発明の種々の側面の１つを示す概略図。
【図８】本発明の種々の側面の１つを擬似コード形式で示す図。
【図９】本発明の種々の側面の１つを擬似コード形式で示す図。
【図１０】本発明の種々の側面の１つを擬似コード形式で示す図。
【図１１】本発明の種々の側面の１つを擬似コード形式で示す図。
【図１２】本発明の種々の側面の１つを擬似コード形式で示す図。
【図１３】本発明の種々の側面の１つを擬似コード形式で示す図。
【図１４】本発明の種々の側面の１つを擬似コード形式で示す図。
【図１５】本発明の種々の側面の１つを擬似コード形式で示す図。
【図１６】本発明の種々の側面の１つを擬似コード形式で示す図。
【図１７】本発明の種々の側面の１つを擬似コード形式で示す図。
【図１８】本発明の種々の側面の１つを擬似コード形式で示す図。
【図１９】本発明の種々の側面の１つを擬似コード形式で示す図。
【図２０】本発明の種々の側面の１つを擬似コード形式で示す図。
【図２１】本発明の種々の側面の１つを擬似コード形式で示す図。
【図２２】本発明の種々の側面の１つを擬似コード形式で示す図。
【図２３】本発明の種々の側面の１つを擬似コード形式で示す図。
【図２４】本発明の種々の側面の１つを擬似コード形式で示す図。
【図２５】本発明の種々の側面の１つを擬似コード形式で示す図。
【図２６】本発明の種々の側面の１つを擬似コード形式で示す図。
【図２７】本発明の種々の側面の１つを擬似コード形式で示す図。
【図２８】本発明の種々の側面の１つを擬似コード形式で示す図。
【図２９】本発明の種々の側面の１つを擬似コード形式で示す図。
【図３０】本発明の種々の側面の１つを擬似コード形式で示す図。
【図３１】本発明の種々の側面の１つを擬似コード形式で示す図。
【図３２】本発明の種々の側面の１つを擬似コード形式で示す図。
【発明を実施するための形態】
【００１５】
これら及び本発明の他の側面は、添付の図面と共に好適な実施形態の以下の説明を読むと、更に明らかになるであろう。
【００１６】
我々は、新しい経路設定及び索引付けフレームワークと、局所的な情報のみを用いて何十億台ものＰＣに対して耐故障性でスケール変更可能な具体的な方式と、を提示する。他のシステムも当社のものと同様にスケール変更しない。オーシャンストアは、プラクストン（Ｐｌａｘｔｏｎ）のアルゴリズムに基づくが、スケール変更可能性を試みたものとして有名である。また、ＭＩＴのコードプロジェクトが有名であり、これは、ｎをそのシステムにおけるノードとすると、Ｏ（ｌｏｇｎ）照合時間でスケール変更するが、これは、大規模なネットワークに対してスケール変更するのに充分な程耐故障性であるように、また、そう見えるように特に設計されてはいない。
【００１７】
本経路設定及び索引付け方式は、スカイリスプロジェクトの中核の権能付与部である。ホットスポット管理の新しい関連した方法と共に、我々の経路設定及び索引付け方式によって、スカイリスネットワークの特性を用いて、キーワード検索並びに分散型情報取得及び配信を含み、数多くの有用で効率的でスケール変更可能な、また耐故障性のサービスの構築が可能である。
【００１８】
システムの中核は、幾つかの別個の層から成る：
・経路設定（テーブル及びプロトコル）
・索引付け（テーブル及びプロトコル）
・ホットスポット管理
【００１９】
プラットフォームへのインターフェイスは、単純であり、従って、コンテンツの検索及び記憶等の追加の層は、この中央フレームワーク上に簡単に構築し得る。
【００２０】
経路設定
図１は、スカイリスネットワーク１００の極めて概略的な図を提供する。
このネットワークでは、複数のノード１０２が、図１に示すインターネット１０４等のネットワークを介して接続される。幾つかの実施形態において、スカイリスネットワークは、中央サーバノート１０６を有し得る。他の実施形態では、各々、このような中央サーバ無しで動作し得る。
【００２１】
図１に示すように、スカイリスネットワークは、数多くの異なるタイプのコンピュータ処理装置で用い得る。現時点では、スカイリスネットワークにおいてノードとして機能する能力を有し得る最も普通のタイプのコンピュータ処理装置は、傾向的に、図１に示すコンピュータ１等のデスクトップコンピュータ、ラップトップコンピュータ、及び他のより大型のコンピュータである。しかしながら、より小型の電子装置の能力が大きくなるにつれて、将来、スカイリスネットワークは、携帯タブレットコンピュータ１０２Ｃ、携帯情報端末コンピュータ１０２Ｄ、携帯電話１０２Ｅに搭載されたコンピュータ、及び、図１に示す腕時計コンピュータ１０２Ｆのような着用可能なコンピュータ等の更により小さい装置のコンピュータ等、より小型のコンピュータで使用可能になるであろう。
【００２２】
スカイリスネットワークのノードは、ケーブルモデム又は現在普通の形態のセル方式通信等、比較的遅い接続でネットワークに接続し得る。しかしながら、ネットワークが、ケーブルモデム、ＤＳＬ、無線ＬＡＮ、又は高速無線接続等のより高速の接続を有する場合、ノードは、ネットワークからより良いサービスを受信し、また、ネットワークに対して価値が高まるであろう。
【００２３】
図１において、ノード１０２Ａは、概略ブロック図に表される。この図は、ノートが、中央プロセッサ１１０；ランダムアクセスメモリ１１２；ＣＰＵとメモリを接続するバス１１４、及び表示装置１１８を駆動するための映像インターフェイス１１６を有することを示す。このコンピュータは、キーボード１２２やマウス１２４等、ユーザ入力装置とインターフェイスを取るためのＩ／Ｏインターフェイス１２０も含む。また、ノード１０２Ａが、スカイリスネットワークの他のノード１０２と通信を行えるようにするためのネットワークインターフェイス１２６も含まれる。
【００２４】
また、ノード１０２Ａは、ハードディスク、フロッピー（登録商標）ディスク、ＣＤＲＯＭ、又は大型固体メモリ等の大容量記憶装置も含む。この大容量記憶装置は、オペレーティングシステム１３０のプログラミング命令、ブラウザプログラム１３２、及びプラグイン１３４の形態でスカイリスプログラミングを記憶する。
【００２５】
幾つかの実施形態では、スカイリスプログラムは、独立のアプリケーションとして動作するであろうが、多くの実施形態では、プラグとして動作し、また、これによって、ユーザは、ブラウザプログラム１３２によって生成されたブラウザインターフェイス内から、スカイリスネットワークを用いて、コンテンツにアクセスし得るであろう。
【００２６】
スカイリスネットワークは、何百万台、恐らく、何十億台のＰＣ及び他のタイプのコンピュータに対してスケール変更するように設計される。
【００２７】
しかし、各ホストは、固定された記憶容量、はるかにより小さいメモリ能力、及び様々なネットワーク帯域幅を有し、モデムと同じように遅い可能性がある。我々は、任意のサーバが、任意の他のサーバを見つけて、それと通信を行い得ることを望む。従って、ネットワークの土台の１つは、小さい規模と可変ネットワークオーバーヘッドを有する経路設定アルゴリズムでなければならない。
【００２８】
更に、我々は、（クラッシュ、リブート、ネットワークからの切断、スカイリスプログラムのシャットダウン、故障するネットワークへの接続など）、これらのマシンが頻繁に故障すると予想するため、我々は、情報を複製しなければならない。我々の手法は、管理可能なサイズの局所的な“区域”、即ち、ノードグループを作成して、各区域が、一斉送信を介して（通常、マルチキャストにより）、その区域のマシン用の局所的な索引及び交信相手情報を事前に複製するようにすることである。従って、ノードは、頻繁に消えるが、ネットワークが反応する機会を与えられる前に区域の全ノードが消え失せることは決してあり得ない程、区域は充分大きい。（本明細書の他の部分及び後続の請求項では、我々は、このような区域を“論理ノード”とも呼ぶ）。
【００２９】
更に、我々は、新しいサーバが我々のネットワークに加わることを予想する。従って、我々の経路設定システムは、耐故障性（ノード削除可能）であるだけでなく、その場で、新しいマシンをネットワークに負荷し得ることも必要である。
【００３０】
我々は、個々のマシン上で動作しないが、我々の“区域”で動作する既存の離散的な経路設定ネットワークに基づき、この問題を解決する新しい経路設定アルゴリズムを開発する。区域サイズが大きくなり過ぎる場合、我々は、区域を２つに分割する。区域サイズが小さくなり過ぎる場合、我々は、２つの区域を１つに併合する。
【００３１】
我々は、スカイリスフレームワークに合わせて、２つの古典的なネットワークモデルを一般化した。それらは、ハイパーキューブモデル、及びサイズ２ｋのデ・ブルジン（ｄｅＢｒｕｉｊｎ）ネットワークである。ハイパーキューブの利点は、多数のリンクを犠牲にしたスループット効率及びより単純な区域管理である。デ・ブルジンの利点は、極めて少数のリンクであるが、スループット効率は減少し、また、耐故障性は小さくなる。
【００３２】
留意されたいことは、区域概念の場合、これは動的な分割を含むが、他のネットワークモデルを用いることも同様に可能であること、また、ネットワークモデルのための２つの主な要件は、充分な局所性があること（隣接区域は、互いに近接すること）、及び、ネットワークを記述するパラメータの系統の柔軟性が充分なことである。第２の条件では、経路設定モデルは、サイズｎのネットワークが与えられると、ｋが小さい場合（上例ではｋ＝２）、サイズｎｋの同様な経路設定モデルに拡張し得ることが必要である。ハイパーキューブは、局所性及び分割の容易さの双方に対して最良のネットワークモデルであるが、デ・ブルジンモデルは、適合し得る他の古典的なネットワークモデルの一例である。この場合、困難さの度合いはより大きく、区域分割には、例えば、マシンの交信相手の半分を再割当てする必要があるが、交信相手の数は、より小さい。
【００３３】
また留意に値することは、希望があれば、区域の概念は、例えば確率的に、隣接区域がある程度オーバーラップするように、あるいは、例えばマシンの帯域幅等に基づき、各マシンが複数の区域に割り当てられるように変更し得るということであり、この概念には、様々な簡単な変形例が存在する。これらを共に結ぶ糸は、それらは、例えば、距離関数を通して、幾つかの近隣ホストの集まりにおいて情報を複製するマシンの局所性の何らかの概念を保持していることである。情報を受信するホストの組は、接続速度又はマシンの有用性により変わりことがあり、また、情報により変わり得る。実際、人気コンテンツの‘ホットスポット’を扱うために、我々は、コンテンツの人気の度合いに基づき、その情報をより大きな区域に複製する。
【００３４】
我々は、交信相手をキャッシュ処理するための専用の方式と共に、一般化したハイパーキューブアルゴリズムを用いるつもりであるが、この方式は、ハイパーキューブ（耐故障性）、デ・ブルジン（リンク数少）、及びランダム化されたモデル（ネットワークのスケール変更可能）の最良の側面を組み合わせる。次に、我々は、一般化したハイパーキューブ経路設定アルゴリズムについて説明する。
【００３５】
ランダム化されたハイパーキューブモデル
我々のランダム化されたハイパーキューブモデルでは、各ｎサーバは、区間［０、１）において、ＳＨＡ１ハッシュ関数を用いて、固有の１６０ビットのハッシュキーを取得する。（ＳＨＡ１は、その衝突抵抗の暗号特性のために選択された。希望があれば、代わりに、ビット数が少ないものであっても、異なるハッシュ関数を用いることは簡単である。システムは、衝突耐性である必要があり、従って、これが発生する確率が小さいように、ビットの数は、システムのオブジェクト数のｌｏｇの少なくとも２倍であるべきである。また、既存のファイルに整合するファイルを作成できないように、即ち、与えられたｙに対して、ｈ（ｘ）＝ｈ（ｙ）となるようなｘを生成することが簡単でないように、暗号化耐性であるべきである。十億のオブジェクトの場合、これは、約少なくとも６０ビットである。１兆の場合、８０ビットである。従って、１６０は、必要以上である。このハッシュキー（ノードＩＤ）は、区間中のサーバ“位置”を記述する。各サーバには、交信相手のリストが割り当てられ（交信相手は、そのサーバが存在を認識するサーバである）、これによって、サーバは直接通信を行う。
【００３６】
図２は、ハイパーキューブ２００の９つの次元を示す。コンピュータネットワークトポロジの当業者は認識されるように、ハイパーキューブは、各ノード２０１が、ハイパーキューブの多数の各次元に沿って、他のノードに接続されたネットワーク化トポロジである。
【００３７】
９つの次元を示す図２において、各ノード２０１は、９つの他のノードに接続され、それら９つの各ノードへの接続は、異なる次元に沿う。
【００３８】
図２において、この図に示す９つの各次元を２０２に示す。３つを超える次元を２次元の紙面上に表現するのは困難であることから、次元０、１、及び２に関連する接続を、次元３４及び５の接続より大きいノード間の間隔を有するように示し、また、これらの次元は、次元６、７、及び８に存在する交信相手間の間隔より大きい間隔を有するものとして示す。
【００３９】
図２において、次元の分離がより簡単にできるようにするために、我々は、３つの最も小さい次元６、７、及び８によって定義されるキューブを比較的小さいものとして描き、中間次元３、４、及び５によって形成されたその図に示すキューブのキューブは、より大きく、また、最も大きい３つの次元０、１、及び２が、それより大きいキューブのキューブを定義する。
【００４０】
図３は、図２のハイパーキューブの入り乱れていない図を提供する。図において、ハイパーキューブの各ノード２０１をその各次元に沿って接続するほとんどのラインを除去してあるため、個々のノード２０１は、見易くなり、また、より小さいキューブ３０４から成る中間サイズのキューブ３０４で構成されるキューブ３０６としてのハイパーキューブの表現を見ることができる。
【００４１】
図４は、図３に示すハイパーキューブを表す同じ方法を用いるが、異なる点は、それが、このハイパーキューブの３つの異なる図を提供し、その次元の異なる部分集合を表すことである。点線４００内に囲まれた図４の部分は、ハイパーキューブの最初の９つの次元を示す図３に示す部分に対応する。点線４０２内に示す図４の部分は、点線円４００内の個々のノード２０１に見えるものの破断図である。この破断図は、ハイパーキューブのための次の９つの次元９乃至１７を示す。図３及び図４に示す各小さい矩形３０２の各個々の角部は、実際には、ハイパーキューブ表現のより小さい次元によって定義されるキューブの階層に対応することを認識されたい。このより高次元のハイパーキューブにおける各実際のノードは、ハイパーキューブの全ての次元によって、他の任意のノード（このノードは、その与えられた次元によって表現されるビットの値だけそれから変わる）に接続されることを認識されたい。
【００４２】
スカイリスネットワークの本実施形態において用いられる１６０ビットハッシュ値は、一兆掛ける一兆掛ける一兆を超える可能な値を表すのに充分な程大きい２進数を表す。従って、与えられたスカイリスネットワークが、多数のノードを有する場合でさえ、このような大きい２進数値によって定義し得る極めて小さい割合の可能な値だけが、実際に、それらに関連付けられたノードを有する。このため、１６０ビットハッシュ値が、ハイパーキューブとして表される場合、そのハイパーキューブは、ほとんど空である。このことは、図４によって示されるが、図４では、十億のノード等、大きい組のノードによって形成されるハイパーキューブは、ハッシュアドレス空間の９つの最上位ビットのみを見た場合、満杯に見える。これは、その図に示す階層型の立体表現において、点線４００によって囲まれた図の部分に示す最も小さいキューブ３０２の１つの各角部は、このような各角部が全アドレス空間の１／５１２を表すことから、それらに関連する何らかの値を有する傾向があるためである。また、各角部では、幾つかのノードが総アドレス空間のその部分に入ることがほぼ確かなためである。
【００４３】
最も小さい各矩形４０８の各角部が、ハッシュアドレス空間の１／２６２１４４を表す点線４０２によって囲まれた図４の部分に示すアドレス空間をもっと綿密に調べると、また、従って、約百万ノードのネットワークにおいてさえ、このような角部によって表現されたアドレス空間の部分は、図示するように点線４０４によって囲まれたハイパーキューブ空間の部分は、完全に満たされていないという事実によって示されるように、常に１つ又は複数の関連するノードを有するとは限らない。
【００４４】
点線４０４によって囲まれた図４の部分は、図示するように、点線４０２によって囲まれたハイパーキューブ空間の図内において、円４０６によって囲まれたハイパーキューブ空間のその部分の破断図を示す。図示するように、点線４０４によって囲まれたハイパーキューブ空間の部分は、全ての可能なハッシュ値によって表現された１６０次元の空間の内、１８番目乃至２６番目の次元を表す。図４に示す例では、ハイパーキューブ空間のこの部分は、密度が低く、極めて希薄にまた不規則に見える。
【００４５】
ｘ及びｙを２つのノードＩＤとし、また、ＳＨＡ１を用いると仮定する。ｘ＝ｘ０ｘ１・・・ｘ１５９とし、この式で、ｘｉは、ｘのｉ番目のビットを表す。同様に、ｙ＝ｙｏｙｌ・・・Ｙ１５９とする。距離関数ｄ（ｘ，ｙ）＝２−ｆ（ｘ，ｙ）について考えるが、この式で、
【００４６】
【数１】
0005538258.tif 000002
とすると、ｆ（ｘ，ｙ）は、ｆ（ｘ，ｘ）＝０及びｆ（ｘ，ｙ）＝ｋ＋１であるように定義する。直感的に、ｆ（ｘ，ｙ）は、ｘ及びｙが異なる場合、第１上位ビットの位置である。
【００４７】
基本的なハイパーキューブモデルでは、０＜＝ｉ＜ｌｏｇｎの各ｉに対して、ノードＩＤがｘであるサーバＸを仮定すると、Ｘには、ｄ（ｘ，ｙ）＝２−ｉのノードＩＤがｙである１つのランダムな交信相手Ｙが与えられる。
【００４８】
従って、Ｘが、ノードＩｄが、次式のように制約されるｌｏｇｎの交信相手を有する（“−”は、制約がないことを示す）。
【００４９】
【数２】
0005538258.tif 000003
上式において、ｋ＝ｌｏｇｎ、
【００５０】
【数３】
0005538258.tif 000004
は、ｂの補数を示す。
【００５１】
言い換えると、ランダム化されたハイパーキューブモデルでは、各ノードは、検索空間の他の半分、その半分の他の半分、その４分の一の他の半分等々において交信相手を有する。このことについて、図５に示すが、図５は、図３に示すハイパーキューブ表現と同じである。与えるノードＸが、図５に示す位置５００を有する場合、交信相手
【００５２】
【数４】
0005538258.tif 000005
は、点線５０２によって囲まれた図５の部分の或るランダムな位置にあり、交信相手
【００５３】
【数５】
0005538258.tif 000006
は、点線５０４によって囲まれた或るランダムな位置にあり、交信相手
【００５４】
【数６】
0005538258.tif 000007
は、点線５０６によって囲まれた或るランダムな位置にあり、この順序での次の交信相手は、点線５０８によって囲まれた或るランダムな位置にあり、その後の交信相手は、点線５１０内に位置し、更に、その後の交信相手は、点線５１２内に位置する。
【００５５】
図６は、スカイリスネットワークのほとんどの実施形態でのハッシュアドレス空間の用途を表現し得る他の方法を示す。この表現では、２進数小数点は、１６０ビットハッシュ値の前に置かれ、そのビットは、０と、数１から一兆分の一の一兆分の一の一兆分の一未満だけ変化する数の範囲にある値を表す。
【００５６】
図６において、この範囲の部分６０２は、拡張された形態で示す。アドレス空間の範囲のこの部分は、アドレス空間の約１／３２７６８に対応する。それは、０．１０００００００００００００１０と０．１０００００００００００００００との間のアドレス範囲の部分に対応する。そこでは、個々のノードは、小さい円６０４によって表される。この一部の範囲全体におけるノード分布は、かなりの量の統計的なばらつきを含むことが分かる。
【００５７】
図６において、区域に対応するアドレス範囲の部分は、点線６０６によって示される。更に詳細に後述するように、与えられた区域に対応するハッシュアドレス空間の部分は、変化して、各区域は、ハッシュ値アドレス空間の異なる一部の部分におけるノード密度の統計的なばらつきにも拘らず、相対的に一定な密度を維持し得る。このことは、２つの区域６０６Ａが、その図に示す他の区域におけるよりも更に小さいアドレス空間の部分を網羅するという事実によって図６に示す。図示するように、これは、アドレスの空間それらの部分が、より高い密度のノードを有するためである。
【００５８】
従って、ノードは、指数関数的に増加する密度で一組の直接交信相手を、それに近づくにつれて、有する。従って、拡張されるであろう基本的なハイパーキューブモデルは、極めて、コードプロジェクトの経路設定モデルに匹敵し、「ノード当たり交信相手がｌｏｇｎで照合時間Ｏ（ｌｏｇｎ）」という同じ結果を実現する。しかしながら、この点で、我々は、区域を用いているため、既に耐故障性であり、コード及び他のスケール変更可能なシステムは、そうではない。
【００５９】
更に、各局所的な区域（或る小さいｍに対して、同じ最初のｍビットを共有する約ｎ／２ｍノードの組）は、それ内の全ノードを追跡する。従って、一旦、検索者が局所的な区域のノードと交信すると、そのノードは、最終的な送信先を知り、それを直接転送し得る。もちろん、区域の各ノードは、同じ索引情報のコピーを維持するため、ほとんどの検索は、所望のノードアドレス又はハッシュ値と同じ区域内の任意のノードに到達するより更に検索を進める必要はない。
【００６０】
このモデルは、サーバが、任意の与えられたハッシュ値に最も近いノードを、そのノードに対してその最も近い交信相手へそのメッセージを受け渡すことによって見つけ得るという特性を有する。ｘが、ｙ及びｄ（ｘ，ｙ）＝２−ｉを見つけようと試みる場合、ｘは、ｄ（ｚ，ｙ）≦２−（ｉ＋１）である交信相手ｚを有する。確率２−ｊでｆ（ｚ，ｙ）＝ｉ＋ｊ、従って、Ｅ［ｆ（ｚ，ｙ）］＝ｉ＋１．５を得る。従って、シーク時間は、せいぜいｌｏｇ（ｎ−ｍ＋１）であり、平均シーク時間は、［ｌｏｇ（ｎ−ｍ＋１）］／２である。
【００６１】
ハイパーキューブネットワークの様々な他の経路設定プロトコルが存在し、また、我々のランダム化された区域ネットワークにそのまま適合し得ることにも留意されたい。これらのプロトコルによって、より良い負荷均衡化が高コストで可能である。
【００６２】
しかしながら、この基本モデルは、幾つかの問題を有する。検索所要時間Ｏ（ｌｏｇｎ）は、ユーザが待つのをいとわない時間をすぐに超過する。更に、経路設定テーブルは、依然として、やや脆弱であり、従って、我々は、ノード又はリンクが消滅した時、ネットワークが分断することを防止しなければならない。区域経路設定は、極めて堅固であるが、この段階のハイパーキューブは、信頼性が低い。
【００６３】
従って、我々は、次の解法を提案する。この解法は、平均（ｌｏｇｎ）／（ｄ＋１）の検索時間、及び最大（ｌｏｇｎ）／ｄを実現するが、これらの式において、ｄは、約７の定数であり、経路設定テーブルは、２ｄ−１ｌｏｇｎの交信相手を含むように拡張されている。各クライアントは、ｄレベルの交信相手の索引を構築するが、ここで、ｄ番目のレベルの交信相手は、（直接交信による接続系統によって定義される）そのノードへの長さｄの経路を有する交信相手である。しかしながら、このことを全接続で行うことは、極端に無駄が多い。従って、我々は、或る交信相手のみを交換する。即ち、ｄ（ｘ，ｙ）＝２−ｉであれば、ｙは、ｘにその最も近いレベルの交信相手を与え、この場合、ｄ（ｘ，ｚ）＝２−ｉ、２−ｉ−ｄ≦ｄ（ｙ，ｚ）≦２−ｉ−１、ｄ（ｚ１，ｚ２）≧２−ｉ−ｄである。
【００６４】
言い換えると、ｙは、それが正当な権限を持ったその交信相手ｚの間隔で見え、それを長さ２−ｉ−ｄ＋１の間隔に分割し、また、１つの交信相手を各間隔からｘに受け渡すが、ｘは、２レベル離れた交信相手である。これを継続的に繰り返し、次のようになる。即ち、ｘ＝ｘ０ｘ１・・・ｘ１５９は、ｂ０ｂ１・・・ｂｄ−２の全２ｄ−１の値に対して、次の交信相手を有し、
【００６５】
【数７】
0005538258.tif 000008
合計約２ｄ−１ｌｏｇｎの交信相手となる。
【００６６】
図７は、図６で用いたのと同じように直線的にハッシュアドレス空間を表す。それは、ノード７００を示し、また、直接交信相手７０２Ａ乃至７０２Ｄを有する。実際、それは、それに更に近い他の直接交信相手を含むが、図７にそれらを描くのは、それらがノード７００に近いため困難である。図７に示す直接交信相手７０２ａ乃至７０２Ｄ等の各直接交信相手は、対応するリストの間接交信相手７０４をノード７００に供給する。各直接交信相手によって返された間接交信相手は、直接交信相手がランダムに選択されたハッシュアドレス空間の一部内にある。また、間接交信相手が、最上位ビット直後にあるＤ−１ビットの組用の全ての値を有し、これによって、直接交信相手は、交信相手が供給されつつあるノード７００と最初に異なることから、与えられた直接交信相手によって供給される間接交信相手は、それらの対応する直接交信相手に関連するアドレス空間の一部範囲において、実質的に均一に分散される。
【００６７】
この図では、数字８００によって示されるビット行は、ノードｙによって一組の交信相手が供給されるノードｘのビットパターンとして定義される。行８０２は、ノードｙのアドレス値のビットを示す。図から分かるように、ｙのアドレスの最初の２ビットは、ｘのアドレスと同じであるが、ｙの３番目のビット、ｘ２バーは、ｘの内、ｘ２である反転した他の３番目のビットである。図８に示すように、ノードｘは、ｙがｘと異なる分の第１ビットまでｙ自体が有するのと同じビットをそれらのハッシュアドレスに有する一組の間接交信相手をノードｙから望む。本例では、それは、ｙから一組の６４のこのような交信相手を望み、これらは、ビットｄ１乃至ｄ６に対する全ての可能な値を有する。
【００６８】
図８は、与えられた直接交信相手によって返されるその組の間接交信相手の性質を更に詳細に示す。
【００６９】
図８において、テーブル８０４は、一部のｙの交信相手リストを示すが、これは、その直接及び間接交信相手双方のリストである。このテーブルでは、値ｂ０乃至ｂ６は、それらが占有するハッシュアドレス空間の上位ビットに対する一組の全ての可能な値を表す。図８において行Ｒ３乃至Ｒ８を調べることによって分かるように、ｙが完全に編成された交信相手リストを有する場合、それは、それがｘの要求を満たす必要がある全ての交信相手を含むべきである。行Ｒ４は、バーｘ３‘よりむしろｘ３’を有するものを除いて、ｘによってシークされる全ての交信相手を有する。Ｒ５は、バーｘ４‘よりむしろｘ４’を有するものを除いて、Ｒ−４に含まれない要求された交信相手の全てを有する。Ｒ−６は、バーｘ５‘よりもむしろｘ５’を有するものを除いて、Ｒ４及びＲ５に含まれない要求された交信相手全てを有する。Ｒ７は、バーｘ６‘よりもむしろｘ６’を有するものを除いて、Ｒ４乃至Ｒ−６に含まれない要求された交信相手全てを有する。Ｒ８は、バーｘ７‘よりもむしろｘ７’を有するものを除いて、Ｒ４乃至Ｒ７に含まれない要求された交信相手全てを有する。ほとんどの場合、直接交信相手は、それが、ノード要求側交信相手にそれが必要とする全ての交信相手を供給し得る行Ｒ４乃至Ｒ８等の充分な行を有する。
【００７０】
このグラフでは、ノードＸは、レベルｉにおいて、
【００７１】
【数８】
0005538258.tif 000009
の交信相手を有することが分かる。いずれのノードも故障しない場合、経路長は、（ｌｏｇｎ）／ｄによって束縛され、平均経路は、長さ（ｌｏｇｎ）／（ｄ＋ｌ）を有し、また、交信相手を維持するために送られたホスト当たりのネットワークトラフィック量は、Ｏ（ｌｏｇｎ）である。
【００７２】
従って、我々が交信相手をキャッシュ処理する方法は、それを以前の経路設定メカニズムと区別する数多くのすばらしい特性を有する。特に、それは、局所性を保持し、また強化する。それは、最新の経路設定テーブルを維持する（ノードは、そのｄ番目のレベルの交信相手が、少し前生きていたことを知るが、これは、不活性化後、交信相手が連続的な層で置換されるためである）。また、その性能の恩恵は、高く、一定割合の更なる動作を要求する。更に、（送られたビット数として計数される）帯域幅が大きくなるが、ノードは依然としてそれらの直接送信相手と、様々な時間間隔で交信して更なる情報を交換するだけであるため、メッセージの数は、同じである。このことによって、単純なｐｉｎｇ／ａｃｋ方式は、この方式がより良い情報を送るだけでなく、それを同じ数のメッセージで、恐らく同じ数のパケットで、また、従って、同じ量のネットワークトラフィックでさえ送ることから、無駄が多いことが分かる。
【００７３】
一旦このネットワークが構築されると、維持するのは比較的簡単である。ノードが故障した場合、それを直接又は間接交信相手として用いるノードは、ネットワークの残りの部分に達するのに充分な他の交信相手を有する。ノードが付加された場合、それは、その交信相手のリストを構築するための適切に配置されたノードを見つけ得る。実際、我々の待ち行列時間ベースのシミュレーションによって、このことが確証されている。
【００７４】
では、ノードが一度に１つずつ到着する一方で、オンラインアルゴリズムを用いて、このネットワークを如何にして構築し始めるかという疑問が残る。
【００７５】
まず、我々のハードウェア上で動作する可能性のあるオラクル（ｏｒａｃｌｅ）又はホストキャッシュとして単一ノードを指定する（しかしながら、更に詳細に後述するように、これは任意の既知のノードであってよい）。オラクルは、ネットワーク上に登録された現サーバ全ての基数検索木又は他の最適化されたデータ構造を維持し、最も近いノード問い合わせに応える。新しいノードがネットワークに付加される度に、ノードは、オラクルにそのノードＩＤ及び所望される交信相手の位置のリストを送る。次に、オラクルは、ノードを検索木に挿入し、最整合のノードＩＤを送り返す。
【００７６】
しかしながら、これらの交信相手が所定の位置に残された場合、構築されるネットワークは、上述したランダム化されたネットワークと同じではない。従って、我々は、ノードに新しい交信相手を頻繁に付加するように要求する。このことを行う１つの方法は、ホストキャッシュに依拠する。即ち、ｊ番目のノードが挿入されると、オラクルも更新された交信相手のリストをノード
【００７７】
【数９】
0005538258.tif 000010
に送る。このように、各ノードは、更新された交信相手のリストを、ほぼネットワークのサイズが２倍になる度に得る。オラクルは、このプロセスを、そのノード記憶装置が交信相手で満杯になるまで、繰り返す。この段階で、オラクルは、ランダムにノード交信相手情報の削減を開始し、それを到着する最新のノードのそれで置き換え始め、また、ネットワークの検索を実行して、連続的にどのノードが依然生きているかを見つける。この時点で、ネットワークは、そのサイズがそれほど急激に２倍にならないため、もっと安定する。こうして、我々は、交信相手を更新するという重荷をノード自体に置くことができる。各ノードは、時々検索して、それらの交信相手を更新することができる。このようにして、我々は、ほとんどノードが存在しない初めの状態でも、理想的なグラフに近い接続されたネットワークを維持する。
【００７８】
索引付け
索引を維持したり、それにアクセスしたりすることは、現分散型ネットワークの困難な側面である。索引は、利用可能性を高くし、待ち時間を短くし得る形態のものでなければならない。更に、索引は、利用可能性を高くでき、負荷均衡化されなければならない。
【００７９】
索引が全ノードに氾濫することは、単純な可能性である。ＵＳＥＮＥＴは、その最も純粋な形態でこのことを行い、他方、サマリキャッシュ（Ｓｕｍｍａｒｙ＿Ｃａｃｈｅ）及びオーシャンストアは、ブルーム（Ｂｌｏｏｍ）フィルタを用いる。ブルームフィルタは、索引を構築するための記憶要件を削減するが、一定の割合分だけである。即ち、それらは、依然としてＯ（ｎ）空間を要求するが、ここで、ｎは、索引中の項目数である。
【００８０】
氾濫の他の形態は、マルチキャストであり、これは、各サーバが、何らかの少ない一定回数だけ、たとえ一回でも完璧な信頼性で、各情報を受信するように最適化し得る。
【００８１】
また、他の氾濫による解決法も存在する。グヌーテラは、恐らく、索引を構築しないが、代わりに全てのノードへの検索を氾濫させる最良の既知のネットワークである。ある意味では、グヌーテラは、索引を氾濫させ、また、検索を局所的に維持するＵＳＥＮＥＴの双対である。
【００８２】
スカイリスモデルは、非常に単純である。即ち、我々は、索引を既存の経路設定インフラ内に組み込む。我々は、局所的な情報のみを用いて、高い利用可能性、短い待ち時間、及び負荷均衡化を可能にする経路設定インフラを既に有しており、従って、同じシステムを用いて索引付けを行うのは自然なことである。従って、我々は、全地球的に知られたドキュメントから区域への１対１のマップを作成する。我々は、ドキュメントの１６０−ビットＳＨＡ１固有ＩＤ（ＵＩＤ）の最初のｌｏｇｎビットによって与えられる区域を取り上げることによって、このことをなし得る。
【００８３】
経路設定に関するアクセス問題を解くと、我々には、維持の問題が残される。今となっては、我々は、経路設定プロトコルを用いて、どの区域がファイルを索引付けするか決定し得るので、我々は、区域に索引を構築させる。区域は、小さいため、索引のこの部分は、小さく、我々には、より単純で既知の問題が残る。
【００８４】
ノード挿入
新しいノードは、到着すると、ネットワーク中の与えられた区域に挿入されねばならない。１つの可能な戦略は、全ての可能な区域を調べ、どれが最も空いているかを決定し、そして、ノードをその区域に挿入することである。しかしながら、この戦略は、明らかに経費がかかり過ぎる。区域は、厳密に均衡化される必要がなく、充分近ければ充分良い可能性があることに留意されたい。天秤の他端は、ランダムハッシングであり、これは、情報を必要としないが、負荷の局所的な偏差をもたらす。
【００８５】
我々の方法は、大抵ｄは２に等しいが、最良のｄの照合を用いることである。我々は、そのノード用に生成された公開キーのＳＨＡ１ハッシュと、ノードのＩＰアドレスとに基づき、新しいノード用の２つのハッシュ値を生成する。次に、我々は、ハッシュ値によって参照される両区域のポーリングを行い、どちらが最も容量が低いかを決定し、そして、その区域に参加する。それらが双方共等しい場合、我々は、２つのいずれかをランダムに選択し得る。
【００８６】
（区域が単純なランダムハッシングにおいてより更に良く均衡化されている）この構成の良い特性を保持するために、我々は、区域Ｎ１においてノードが消滅する度に、選択して、ランダムに他の区域Ｎ２を選択し、また、Ｎ２がＮ１より大きな能力を有する場合、Ｎ２のノードをＮ１に再度割り当て得る。
【００８７】
接続性マネージャ
我々のシステムは、グヌーテラ及びフリーネットが行うのと同じ方法で接続性の原理にアプローチする。各サーバは、経路設定構成によって定義される可変数の交信相手を有し得る。時々（例えば、ｃｔ＝１０秒等、固定された時間区間で）、一方のホストが他方のホストにピン（ｐｉｎｇ）を発し、他方のホストが応答する。接続は、単方向又は双方向のいずれでもよい。従って、我々は、グラフを考慮し得るが、この場合、各サーバは、ノードであり、端部は、接続部を表す。
【００８８】
各サーバは、少なくともｄレベルのキャッシュ処理を行うため、各サーバは、グラフ距離ｄ内における全てのサーバを知り、また、それは、距離ｉ＜ｄにある全てのサーバが、ｉｃｔ秒内では、生きていたことを知る。
【００８９】
サーバの第１レベル交信相手が故障した場合、サーバは、新しい第１レベル交信相手に切り替わらなければならず、また、その木の交信相手の中で、この交信相手を超えた全ての２ｄ−１交信相手を切り替えなければならない。ｄが大き過ぎる場合、このことは、時間の浪費である。従って、我々は、ｄが約７であると推定する。
【００９０】
更に、大幅に異なる帯域幅（例えば、モデム速度及び広帯域）が存在する場合、広帯域ユーザのｄが大きく、モデムのｄが小さいことは有用である。このことによって、広帯域ユーザが有する交信相手の数を増やす必要があり、例えば、ｄ＝ｎの広帯域ユーザは、通常、ｄ＝ｎ−１のモデムユーザを処理し得るが、交信相手がｄ＝ｎ−２のモデムユーザである場合、広帯域ユーザは、要求された情報の半分しか得ることができず、従って、他のモデムユーザを必要とする。広帯域ユーザのトラフィックは、交信相手のレベルのその後の各減少に対して２倍に増える。このことは、更に、広帯域ユーザがそれらの交信相手として他の広帯域ユーザを選択するように距離関数を偏らせることによって、矯正し得る。このモデルが与えられると、モデム（又は無線）ユーザは、それらのｄを大幅に低減し、それら自身をネットワーク端に限定し得る。
【００９１】
更に、ノードは、僅かにｄレベルを越えて、冗長バックアップ第１レベル交信相手を保持する。更に、ノードの交信相手が故障した場合、ノードの第２又は第３レベル交信相手は、（我々がネットワーク分断又は何らかの同様な互いに関係するイベントを有さない場合）必ずしも同様に故障しているとは限らない。従って、ノードは、その古い交信相手を徐々に段階的に撤廃し、新しい交信相手を段階的に導入することによって、大きいｄをトレードオフし得る。
【００９２】
我々は、ノードが、その古い交信相手を全て一掃することを意図するものではなく、むしろ、それらをディスクに保存することを意図する。このことの主な理由は、ネットワーク分断を回避することである。即ち、スカイリスネットワーク経路設定及び索引付けは、耐故障性であり、大部分のノードが突然消失した場合でさえ生き残り、従って、ネットワーク分断が生じた場合、スカイリスシステムもまた分断されるであろう。このことから、敵対するネットワークリンクが再度活性化された場合、それら２つの分離したネットワークは、再結合しなければならない。区域は、小さい管理可能なネットワークであるため、このことは、ベクトル時間（標準の分散型システム方法）を用いて達成でき、また、ブルームフィルタを用いて索引を併合することによって加速し得る。
【００９３】
ホットスポット管理
スカイリスシステムが人気のあるコンテンツの問題に対応しない場合、小数のホストが全てのトラフィックにサービスを提供するという窮地に立たされる。
【００９４】
ホットスポット問題に対する我々の最大の攻勢は、索引付けをダウンロードから分離することである。従って、１つの区域は、ファイルの索引付けを担当し、また、そのファイルをダウンロードする区域は、そのファイルを他の区域と共有することを担当する。従って、区域が２進数ファイルを記憶する代わりに、我々は、それらのファイルを有するホストのリストをそれらに記憶させる。このことによって、提供されるバイトよりもむしろ、要求の量に比例する数に重荷が低減される。
【００９５】
しかしながら、チェックされない状態で残された場合、或るコンテンツは、人気があるため、依然としてその索引は過負荷を受ける。スラッシュドット効果は、人気のあるニュースサイトスラッシュドットが、より下位のウェブサーバ上の記事へリンクする時生じるが、このような振舞いの最初の良く知られたドキュメント化インスタンスの１つであった。
【００９６】
従って、我々は、数多くの氾濫式ネットワークからアイデアを拝借し、要求元ノードにより近く情報を運ぶ方法を設計する。全てのノードは、全てのノードに近いため、一般的に、このことは問題ではない。しかしながら、この場合、情報を“より近くに”運ぶということには、区域のサイズが大きくなるという副作用がある。従って、我々は、グラフの交信相手を逆にして、幾つかの近隣の区域も含むように情報を索引付けするノードの組を大きくできる。即ち、我々は、我々の利点として、経路設定方式における仲介ノードを用いる。メンバがｃ個の区域からそれらのｍ２ｄ内部リンクに短いリストを事前に一斉送信でき、その結果、区域は拡張してそのニーズにサービスを提供する。
【００９７】
多キーワード検索層
我々は、単一キーワード検索を有するため、２キーワード検索の明らかな方法は、双方の区域と交信し、双方のリストを要求し、それらを併合することである。我々がリストを（ＵＩＤ又は人気のいずれかによって）ソートし得る場合、併合には、リストのサイズにおいて、Ｏ（ｎ）時間がかかる。他の素朴な方法は、ワード対を含むリストを記憶することである。しかしながら、これには、Ｏ（ｎ２）の記憶空間が必要であるが、我々には、この空間がない。従って、我々は、共通のワード対に対する結果をキャッシュ処理すべきであるが、ほとんどの多キーワード検索は、新しいことが分かる場合がある。
【００９８】
しかしながら、我々の帯域幅不足環境では、我々は、より良い解決法を有さなければならない。例えば、キーワード“旅行”及び“ナップスタ”が各々百万ヒットを有し、また、それらの共通部分がとても小さい場合、各ＵＩＤが２０バイト長であると、トップ１０００のヒットに対する単一の検索は、未ソートリストの場合、２０メガバイトのネットワークトラフィックを要するか、あるいは、ソートされたリストの場合、恐らく約１メガバイトを要する。これは、単一の検索のために転送するには、途方もなく大きな量である。
【００９９】
これを解決するために、我々は、幾つかの最も効率的な氾濫式ネットワークから１つの方法を拝借し、また、ブルームフィルタを用いる。各ホストは、その索引のための可変サイズのブルームフィルタを保持し（これは、ディスクから再計算するのは経費がかかるためである）、併合するために、そのリストの代わりに、そのブルームフィルタのみを送る。第２のホストは、ブルームフィルタ上で論理ＡＮＤを用い、そして、そのリスト全体を見て、ブルームフィルタにあるトップの合致結果を見つける。最後に、ブルームフィルタは、まことしやかで見せかけのヒットを生じるため、第２サーバは、トップ１０００（１＋ε）の合致結果を第１ホストに送り返し、そして、第１ホストは、そのリストと付き合わせて、それらをダブルチェックする。これには、トップ１０００のヒットに対して２０キロバイトのデータが必要である。我々が、許された検索結果の数を減らすと、その数が減少する。我々は、ブルームフィルタサイズが、約ｎ乃至２ｎバイトのオーダであり、リスト送信時、約９０パーセントが節約されると予想する。従って、２キーワード検索のために用いる総ネットワーク帯域幅は、恐らく２００キロバイトに低減される。これは、依然として、我々が望むより大きいが、数メガバイトよりもずっと良い。
【０１００】
シミュレーション
我々は、耐故障性を測定するための更にもっと複雑なシミュレータと同様、スケール変更可能性のための単純なシミュレータを構築した。耐故障性シミュレータは、実際に、局所的な索引付けを除く、全経路設定プロトコルを実現する。それは、ネットワーク又は一連のイベントをシミュレートする標準の方法である待ち行列時間に基づくが、このシミュレータは、時間毎に記憶される地球規模のイベント優先順位行列を含む。新しいイベントは、近い将来の或る時点で発生するようにこの行列に置かれ、そして、各イベントが処理された後、早送りのタイミングを次のイベント時間に瞬時に合わせる。
【０１０１】
２区域でｄレベルのキャッシュ処理を有するネットワークの場合、検索を行うためのホップ（１つのマシンから次のマシンへのメッセージ）の最大数は、
【０１０２】
【数１０】
0005538258.tif 000011
であり、平均は、約（ｌｏｇｎ）／（ｄ＋１）であることが理論的に分かることを思い起こされたい。コードは、ｄ＝１であるが同様な結果を実現し、また、その区域の不足によって、時間が約３つの更なるホップ分だけ増え、他方、フリーネット及びオーシャンストアは、一定の割合分悪くなることに留意されたい。従って、ｄ＝７に設定できると、我々には、約５倍の平均速度アップが与えられるが、これは、この設定値では極めて有意であり、極端な遅さと程良く速いシステム間の差である。
【０１０３】
スケール変更可能性のシミュレーションによって、理論に極めてよく一致する結果が明らかになり、また、他のＯ（ｌｏｇｎ）システムに対するスカイリスの利点が分かる。サイズ６４（６４００万のマシン）の百万区域の場合、スカイリスは、２．９ホップでその索引にメッセージを経路設定でき、他方、（ノードの信頼性が極めて高くない状態ではいずれにしてもこのような大規模なネットワーク上に存在し得ない）コードは、１３．５ホップを要し、また、他のプロジェクトは不調である。６４、０００のホストのより小さいネットワークの場合でさえ、スカイリスの経路設定は、１．９ホップを要し、他方、コードは、８．５を要し、また、オーシャンストア及びフリーネットは、１６ホップ近くを要する。
【０１０４】
耐故障性シミュレーションによって、ネットワークの耐故障性は、高いことが分かる。ネットワークの３つの特性によって、その耐故障性が高くなる。即ち、１番目に、各マシンは、その１次交信相手が故障した場合、最後の拠り所にする数多くの２次交信相手を有する。２番目に、これらの交信相手に関する情報は、可能な限り効率的な方法に近い方法で、極めて頻繁に伝えられる。最後に、全てのマシンが、経路設定構成において全てのマシンへの短い経路を有するため、ぶれの報いが小さい。
【０１０５】
アプリケーション
スカイリスの技術は、初めて、ユーザの装置上で動作する大規模な信頼性の高いネットワークサービスのためのプラットフォームの構築が可能である。このプラットフォームは、数多くのアプリケーションに用い得る信頼性の高い索引の有用な基本的運用を提供するが、これらアプリケーションの多くは、索引が分散型の性質であるため新しい。アプリケーションには、次のものが含まれる。
【０１０６】
分散型コンテンツ分布：スカイリスのプラットフォームによって、初めて、ＰＣやノート型コンピュータ等のユーザ装置、又は、ＰＤＡや携帯電話等の無線装置の能力を用いて、大規模に信頼性の高いコンテンツ配信が可能である。スカイリスの歳入モデルは、帯域幅当たり又は単位モデル当たりでのコンテンツプロバイダへの課金が含まれる。従量料金制のような或るダウンロードを求める消費者への課金も可能である。
【０１０７】
ファイル共有：ファイル共有は、小グループの人々又は世界による映像、音声、及び他のドキュメントの共有を含む。それは、単純な形態のコンテンツ配信であり、この場合、コンテンツは、静的である。スカイリスは、キーワード検索でファイル共有をサポートする。
【０１０８】
分散型コンピュータ処理：スカイリスの分散型索引は、信頼性の高いハッシュテーブルとして機能し得るが、これは、分散型コンピュータ処理環境においてタスクをスケジュール化するのに有用な場合がある。
【０１０９】
分散型情報管理：分散型情報管理には、共同作業者間での対話及びドキュメントの共有のためのアプリケーションが含まれる。既存の解決法では、索引が、制限されたスケール変更可能性を有することから、スケール変更可能性が制限されてきた。しかしながら、スカイリスの分散型索引は、情報管理のためのスケール変更可能な分散型プラットフォームを提供し得る。
【０１１０】
分散型データベース：スカイリスの信頼性の高い区域によって、大規模な分散型データベースを構築し得る。データベースの主要な機能は、トランザクションにある。しかしながら、スカイリスのアーキテクチャは、２段階処理を用いたデータベースによる使用に適合でき、区域は、ハッシュ関数によるオブジェクトを担当する。
【０１１１】
コンテンツの階層構造：インターネット上のほとんどのコンテンツは、単一のドキュメントでなく、むしろ階層構造であり、これらは、通常、ファイルシステムのフォルダによってモデル化される。スカイリスシステムは、分散して階層構造に対応するように構成し得る。稚拙な方法は、単一の場所からのコンテンツに対応するために、階層における全てのコンテンツにルートのハッシュで印を付けることである。もっとスケール変更可能な方法は、オブジェクトの親のハッシュ値をオブジェクトに含むことである。
【０１１２】
セキュリティ：我々は、セキュアなハッシュを用いていることから、ユーザがダウンロードするコンテンツが索引のハッシュと合致することを確信するために、このハッシュに依拠することは簡単である。我々は、更に、例えば、６４キロバイトの小さいサイズのブロックを分割し、そして、それらのハッシュを分割して、異なるホストから異なるブロックが送信された際、エラーに対して柔軟性のあるセキュアなハッシュを実現し得る。従って、問題は、索引付けされたデータを信頼し得るかどうかということになる。この問題を解決するために、我々は、公開キーインフラを用いることができ、そして、信頼できる第３者としてスカイリスを用い得る。システムは、公開キーでコンテンツの署名を行い、そして、暗号化されたコンテンツのハッシュで挿入し得る。
【０１１３】
ハイブリッドネットワーク：この分散型のインフラを構築した状態で、単一の集中型エンティティとして機能するもしくは何らかの単純なフェイルオーバ（ｆａｉｌｏｖｅｒ）メカニズムで機能する又はそれら自体のスカイリス分散型のネットワークの動作さえ行うネットワークに幾つかの数のサーバを挿入するのは、簡単である。これらのサーバは、追加の能力を提供するために、地理的な位置特定サービスを提供するために、又は、コンテンツの索引等の他のサービスを動作させるために用い得る。任意のネットワーク化された資源は、ある程度信頼性が欠如しているが、それらは、通常のクライアントマシンより信頼性が高いと仮定し得る。
【０１１４】
コンピュータ処理資源：スカイリスのネットワークは、ユーザのＰＣ上で走るプログラムから成ることから、たんぱく質フォールディング、又は従来スーパーコンピュータ上で走らせていた他の大きい並列コンピュータ処理等、コンピュータ処理的に集中するプロジェクトをネットワークに統合することが可能である。スカイリスの索引によって、コンピュータ処理的に集中するプログラムに利用可能な信頼性の高い分散型ハッシュテーブルプリミティブが可能になる。このようなプリミティブによって、コンピュータ処理ジョブのために、より良いジョブスケジューリング又は負荷均衡化が可能になる。
【０１１５】
トラフィック管理：分散型の地理的な又はネットワーク位置特定サービスは、ネットワーク上で構築したり、又は、様々な中央サーバからアクセスしたりできる。このサービスは、帯域幅を節約するために、どのクライアントからダウンロードするか選択する際、用い得る。
【０１１６】
ユーザの動機付け：もっと価値が付加されたタスクの場合、このような方式は、例えば、高価な品物の買い物の際のキャッシュバックのために実現し得るが、アプリケーションを動作中のユーザからスカイリスによって受信される価値は、現時点では、ユーザに対する直接支払いを検討するには小さ過ぎる。分散型システムに参加することに対してユーザに酬いる他のもっと効率的な方法には、ユーザによってリストから選択される宝くじやチャリティへの寄付が含まれる。チャリティへ寄付したり、あるいは、宝くじをひく団体もまた用い得る。
【０１１７】
結論
新しいアルゴリズムに基づくスカイリスの核心レベルのインフラは、全地球的にスケール変更可能であり、また、耐故障性が高いという両方である。これらの２つの特性は、他の分散型ネットワークには存在しない。これらのネットワークでは、ドメイン内経路設定プロトコルＢＧＰ等、スケール変更可能であるが耐故障性でない特性、又は、小規模でＢＧＰより良好な経路設定を実現し得るＭＩＴでのＲＯＮプロジェクト等、耐故障性であるがスケール変更可能でない特性のいずれかを選択しなければならない。
【０１１８】
スカイリスのスケール変更可能性及び耐故障性によって、インフラは、従来不可能であった新しいアプリケーション、即ち、柔軟性のあるプリミティブに基づき、信頼性の低いデスクトップマシン上で動作する信頼性の高いネットワークサービス、分散型ディレクトリサービスを生成し得る。
【０１１９】
擬似コード実施形態
図９は、図１に示すスカイリスソフトウェア１３４と共に記憶されたデータ構造９００を示す。
【０１２０】
このデータには、直接交信相手９０４のリスト、間接交信相手９１２のリスト、及び共有交信相手リスト９１８を含む交信相手リスト９０２が含まれる。直接交信相手リストは、ＵＩＤ、即ち、現ノードの各直接交信相手用のハッシュアドレス値、並びにそのネットワーク、即ち、ＩＰアドレス９０８、及びその交信相手状態履歴９１０に関する情報を記憶する。交信相手状態履歴９１０は、最新の過去においてノードと交信するために何回試行がなされたかに関する情報を提供し、与えられた直接交信相手と交信しようとする試行が或る回数を超えて失敗した場合、現ノードは、その与えられた直接交信相手を新しい直接交信相手で置き換える必要があることを知る。
【０１２１】
間接交信相手リストは、各間接交信相手に対して、そのＵＩＤ９１４及びそのネットワークアドレス９１６を含む。
【０１２２】
共有交信相手リストは、現ノードが直接交信相手である他のノードのリストであり、また、それには、このような他の各ノードに対して、他のノードが、図８に関して述べたようなプロセスで現ノードによって与えられた全ての現ノードの交信相手のリストが含まれる。後述するように、共有交信相手リストを用いると、ノードは、他のノードに対して、それが該他のノードに提供した任意の交信相手に関する更新情報を提供し得る。
【０１２３】
図９に示す共有区域データ９２２は、共通の区域に属する全てのノードによって共有されるデータを示す。このデータが複数のノードによって共有されるという事実によって、このような情報は、ノードが比較的高いレートで区域から出たり入ったりしても、欠落しないことを保証する傾向がある冗長性が提供される。
【０１２４】
共有区域データは、区域アドレスマスク９２４を含み、これには、現ノードの区域の全メンバによって共有される最上位ビットの組が含まれる。現ノードが、与えられたハッシュアドレスに関する要求を受信すると、また、そのハッシュアドレスの最上位ビットが、現ノードのアドレスマスクと合致すると、現ノードは、通常、要求に直接応答する。このことは、それが、その区域の全ての他のノードと同様、そのハッシュアドレスに関する全情報のコピーを有すべきためである。
【０１２５】
共有区域データは、未確認情報リスト９２６も含む。９２８に示すように、これは、現ノードを含む、区域の全ノードのＵＩＤすなわちハッシュアドレスのリストであり、また、それは、このような各ハッシュアドレスと共に、そのノードから生じた最新の全未確認情報のリストを含む。９３３−９３４に示すように、それは、このような各未確認情報に対して、その発生時間及び未確認情報のコンテンツを示すタイムスタンプを含む。このような未確認情報は、区域のノードによって共通に索引付けされる全ての情報、並びに区域の運用に関係する他の通信情報を伝達するために用いられる。
【０１２６】
共有区域データは、ファイル等のデータオブジェクトを索引付けするために用い得る複数の各キーワードのためのキーワード登録リスト９３６を含む。このような各キーワード登録項目に対して、関連するファイル９３８のリストが記憶される。このリストには、各ファイルに対して、ファイルのハッシュ値９４０、ファイルの名前９４２、ファイルのサイズ９４４、（それがテキストファイル、音声ファイル、又は映像ファイルのいずれであるか等の）ファイルのタイプ９４６、他の記述的なテキストベースのメタデータ９４８、ファイル９５０のコピーを記憶するノード数、及びファイル９５２に関連する他のキーワードのリストが含まれる。また、キーワード登録項目は、キーワードに関連するファイルの順序良く並べられたリストであって、９５４で示すように、ファイルを記憶したノードの番号毎に順序良く並べられたリストを記憶する。このことは、ネットワークにそれらが記憶される回数毎に示すように、キーワード登録項目によってどのファイルが最も人気があるか決定するのを支援するために用いられ、また、それらのファイルに索引付けするキーワードに選択の優先権を与えるために用いられる。
【０１２７】
共有区域データには、ファイル登録リスト９５６も含まれる。このリストは、１つ又は複数の各ファイル登録項目に対して、ハッシュ値９５８、ハッシュ値チャンクのリスト９６０、ファイルに関連するキーワードのリスト９６２、及びファイルを記憶しているノードのリスト９６４を含む。リスト９６４には、ファイルのコピーを記憶している各ノードに対して、ノードのＩＰアドレス９６６、そのノードのポート番号９６８、そのノード用のインターネット接続速度９７０、そのノードのネットワーク位置９７２が記憶される。ネットワーク位置９７２は、与えられた要求側ノードへのダウンロードに対して、どのコピーが最も適切であるか決定するように、ノード対の近接性を判断するために用いられる。ファイルのコピーを記憶している各ノードに対して、登録項目は、ノードがファイヤウォールの背後にあるかどうかの指標も含み、そうであれば、その中継交信相手情報９７４及び登録項目有効期日９７６も含む。登録項目有効期日９７６は、そのファイルの与えられたコピーの登録項目が、ファイルを記憶しているノードのリストから除去される時間であるが、これは、そのコピーがその位置で依然として利用可能であることを示すそのノードから更新メッセージが受信されない場合である。
【０１２８】
図９において９７８に示すように、与えられたノードが、共有ネットワークデータに関して上述したファイル９６４を記憶しているノードのリストにおいて参照されるタイプの与えられたファイルのコピーを記憶する場合、そのノードは、ファイルコピー登録項目のリスト９８０にそのコピーの登録項目を有する。このような各ファイルコピー登録項目は、ファイルのハッシュ値９８２、一組の各チャンクのハッシュ値のリスト、即ち、好適な実施形態では、各々約１２８キロバイト長であるファイルの下位部分、ファイル自体の実際のコンテンツ９８６、及び、ファイルに関連するキーワードのリスト９８８を含む。ファイルコピー登録項目は、ファイルに関連する他のテキストベースのメタデータ、及び、共有ネットワークデータのファイル登録項目における上述した登録項目有効期日９７６に対応する索引更新時間も含む。まず、与えられたノードにファイルが記憶され、ファイルがそのノード上で連続的に利用可能な時間が長くなるにつれてその更新時間が長くなる場合、この索引更新時間は、好適には、より短い時間の期間に設定される。図９に示す連続更新数９９４は、ファイルコピーが、現ノードからネットワークに連続的に利用可能な更新期間の数を示し、また、それは、索引更新時間をどれくらいの長さに設定すべきか決定する際に用いられる。上述したように、任意の関連するファイルコピーのための登録項目が、上述したそれらファイルのコピー９６４を記憶しているノードのリストから除去されるのを防止するように、各ノードは、索引更新時間毎に、その各ファイルに関連する登録項目有効期日９７６を更新すべきである。
【０１２９】
図１０は、ノードが、スカイリスネットワークに如何にして参入するかを示し、初めてそれに参入する場合、又はネットワークを去った後それに再度参入する場合を示す。
【０１３０】
最初に、機能１００２は、ネットワークにおける既知のノードとの交信を確立する。通常、既知のノードは、ネットワークに参入しようと試みているノードに与えられたノードリストに含まれる１つ又は複数のノードである。例えば、通常、ノードは、スカイリスソフトウェアをダウンロードした後、ネットワークに参入し、また通常、このようなソフトウェアには、機能１００２のために呼び出し得る複数の既知のノードのリストが含まれる。幾つかの実施形態において、既知のノードは、システムに関連する１つ又は複数の中央サーバの１つであり、また、任意の与えられた時間において、少なくとも１つ又は２つのこのような既知のサーバが利用可能なほど充分に信頼性の高い中央サーバの１つである。他の実施形態において、新しいノードには、動的にＵＲＬをＩＰアドレスにマッピングするために提供されるサービスである動的名前分析を用いることによって、実際の現ノードにマッピングされるネットワーク名が与えられる。このサービスは、様々なサービスプロバイダから有料でインターネット上で利用可能である。
【０１３１】
一旦、現ノードが、スカイリスネットワークにおける既知のノードとの交信を確立すると、機能１００４は、複数の新しいネットワークハッシュアドレスを生成する。そして、機能１００６は、このような新しい各ハッシュアドレスに対応するハッシュアドレス空間の部分を処理する区域のノードに対して、図１１に関して後述するタイプのハッシュアドレス検索を機能１０００８に実行させる。
【０１３２】
機能１００８によって実行されるハッシュアドレス検索は、各ノードに問い合わせるが、このノードは、そのノードの区域に関連する区域マスクのための潜在的な新しいハッシュアドレスの１つの区域に存在するものである。一旦このようなマスクが各潜在的なハッシュアドレスと共に返されると、機能１０１０は、その区域マスクにおいて最少の上位ビットを有する検索によって返された区域を選択する。通常、このことは、最小分布密度を有するアドレス空間の領域の区域に対応する。一旦この選択が行われると、機能１０１２は、選択された区域に対応するハッシュアドレスに現ノードを割り当てる。次に、機能１０１４は、機能１００８の検索により選択された区域において交信されたノードから、図９に関して上述した共有区域データ９２２の完全なコピーをダウンロードする。これが一旦行われると、機能１０１６は、図１２及び１３に関して後述するように、ノードの新しいハッシュアドレス用の交信相手リストを作成する。
【０１３３】
図１１は、ノードが、機能１００８に関して上述したタイプのハッシュアドレス検索を如何にして実行するかについて述べる。
【０１３４】
図１１に示すハッシュアドレス検索１１００は、検索を実行するノードに関連する区域アドレスマスクが、検索されるハッシュアドレスの上位ビットと合致するかどうか調べて確認することによって、開始する。そうであれば、機能１１０２は、機能１１０４に、現ノードのＵＩＤ及び区域マスク及びネットワークアドレスでの検索から戻らせる。このことが行われるのは、現ノードのアドレスマスクが検索されるハッシュアドレスの上位ビットと合致する場合、それは、ハッシュアドレスの検索を処理するのに必要な全ての共有区域情報のコピーを有すべきためである。
【０１３５】
１１０２の調査が満たされない場合、機能１１０６は、現ノードの交信相手リストを、機能１１０８によって実行される繰り返しのために、現交信相手リストにする。
【０１３６】
機能１１０８は、その繰り返しの１つが、検索アドレスの上位ビットに合致する区域マスク、その合致する区域マスクを有するノードのＵＩＤ、及びそのノードのＩＰアドレスを含む他のノードから応答を得るまで繰り返しループを実行する。
【０１３７】
機能１１０８のループは、機能１１１０乃至１１２０を実行させる。機能１１１０は、検索要求がループ１１０８の繰り返しによって以前送られていない一組の１つ又は複数の交信相手が現交信相手リストにあるかどうか調べて確認する。１つ又は複数のこのようなまだ試されていない交信相手がある場合、機能１１１２は、検索されるアドレスに最大数の最上位ビットが合致するＵＩＤ値を有するこのようなまだ試されていない交信相手のその１つに、ハッシュアドレスを検索するように検索要求を送る。
【０１３８】
ノードが、タイムアウト期間内に検索要求に対する応答を取得しない場合、機能１１１４及び１１１６は、繰り返しループ１１０８の最初で再び開始し、これによって、機能１１１２は、検索によって用いられている現交信相手リストの他の登録項目に検索要求を送る。
【０１３９】
機能１１１２によって送られた検索要求に応答して、返信が受信され、また、その返信が、合致する区域マスクを含まないが新しい交信相手リストを含む場合、機能１１１８及び１１２０は、新しい交信相手リストと現交信相手リストを併合する。検索要求が機能１１１２によって送られたノードが、現ノードより、検索されるハッシュアドレスに対してより近い場合、機能１１２０によって、検索の現交信相手リストに併合される交信相手リストは、検索の現交信相手リストに以前あったものより、検索されるハッシュアドレスにより近い一組の交信相手を含む可能性がある。
【０１４０】
通常、ｎがスカイリスネットワークのノード数に等しいとすると、機能１１０８の繰り返しループを通るｌｏｇ（ｎ）の繰り返しよりかなり少ない繰り返しの後、返信は、検索アドレスに合致する区域マスク並びにその合致するマスクを返すノードのＵＩＤ及びＩＰアドレスを含む機能１１１２によって送られた検索要求の１つに応答して受信される。
【０１４１】
図１２は、新しいノード用の交信相手リストを作成するために用いられる交信相手リスト作成機能１２００について述べる。
【０１４２】
この機能には、０からｋまでの範囲に渡る索引ｉの各可能な値に対して実行されるループ１２０２が含まれる。幾つかの実施形態において、ｋは、区域におけるノード数のｌｏｇである。この擬似コードに示すもの等の他の実施形態において、ｋは、交信相手リストが作成されつつあるノードの区域マスクの長さに等しい。
【０１４３】
ループ１２０２の各繰り返しに対して、機能１２０４は、機能１２０６乃至１２１０を実行することによって、新しいＵＩＤ、即ち、ハッシュアドレス値を作成する。機能１２０６は、交信相手リストが作成されつつある現ノードから最初のｉ−１上位ビットをコピーする。次に、機能１２０８は、現ノードのＵＩＤのｉ番目の最上位ビットを反転する。次に、機能１２１０は、作成される新しいハッシュ値においてｉ番目のビットより上位でない全ビットに対してランダム値を選択する。
【０１４４】
一旦この新しいＵＩＤ値が作成されると、機能１２１２は、図１３に示す新しい直接交信相手作成機能１３００を呼び出す。
【０１４５】
図１３に示すように、新しい直接交信相手作成機能は、機能１３０２乃至１３２０から構成される。１３０２における機能は、新しい直接交信相手作成機能が呼び出されたＵＩＤに対して、図１１に関して上述したタイプのハッシュアドレス検索を実行する。図１１に関して上述したように、この機能は、検索されているＵＩＤを処理する区域におけるノードを見つけるために検索を行う。一旦ハッシュアドレス検索がこのようなノードに関する情報を返すと、機能１３０４は、機能１３０２の検索によって返されたノードを、現ノード用のｉ番目の直接交信相手として作成するが、ここで、ｉは、最上位ビットの数に等しく、これによって、返された交信相手は、現ノードの新しいＵＩＤと異なる。
【０１４６】
機能１３０６乃至１３１２は、新しい直接交信相手のためのＵＩＤ、ＩＰアドレス、及び初期的には空である交信相手状態履歴登録項目を記憶する。このことは、図９において各直接交信相手に対して記憶されるものとして示した情報９０６乃至９１０に対応する。
【０１４７】
一旦ｉ番目の交信相手の登録項目が、現ノードのデータ構造において、それ用に作成されると、機能１３１４は、交信相手要求をｉ番目の交信相手に送って、ｉ番目の交信相手と同じ最上位ビットからｉ番目のビットまでを有し、また、ｉ番目のビットを含み、更に、ｄ−１最上位ビットの全ての可能な組合せを有する間接交信相手を要求する。このことは、図８に関して上述した交信相手要求のタイプに対応する。直接交信相手が、要求された間接交信相手を返す場合、機能１３１６乃至１３２０は、このような各間接交信相手のＵＩＤ及びＩＰアドレスを、現ノードデータ構造において、図９に関して上述した間接交信相手リスト９１２に記憶させる。
【０１４８】
図１４は、図１３に関して上述した機能１３１４を実行する際、ノードによって送られたタイプの交信相手要求を受信する時ノードが実行する交信相手要求応答機能１４００である。
【０１４９】
交信相手要求応答機能が実行される時、機能１４０２は、全てのノード交信相手のリストを見つけるが、これら交信相手は、要求において識別された同じ最上位ビット乃至ｉ番目のビットを有し、また、ｄ−１の次の最上位ビットの全ての可能な組合せを有する。このことは、図８に関して上述した交信相手のリストと同様である。一旦このリストが作成されると、機能１４０４は、この交信相手のリストを要求元ノードに送る。次に、機能１４０４によって要求元ノードに送られた各交信相手ノードに対して、機能１４０６が実行される。要求元ノードに送られたこのような各交信相手ノードに対して、機能１４０６は、要求元ノードの下にあるノードの共有交信相手リストへの登録を機能１４０８に行わせて、それに送られた交信相手を記録する。図１５及び１６に関して後述するように、共有交信相手リスト登録項目は、その交信相手リストの交信相手がもはや有効でないことをそれが知った時、それが更新しなければならない他のノードがどれかについて、ノードが知ることができるように用いられる。
【０１５０】
図１５は、直接交信相手状態更新機能１５００について述べる。この機能は、機能１５０２を含むが、これは、現ノードの直接交信相手毎に、ループ１５０４をｎ秒ごとに実行する。１つの現実施形態において、ｎは、５秒に等しい。
【０１５１】
現ノードの直接交信相手毎に、機能１５０４は、機能１５０６乃至１５２６を実行させる。機能１５０６は、ループ１５０４の現繰り返しの現直接交信相手との通信を試みる。機能１５０６の試みに応答して通信が確立されない場合、機能１５０８は、機能１５１０乃至１５２６を実行させる。機能１５１０は、交信相手との通信が失敗したことを記録する。次に、機能１５１２は、これがｎ番目の連続した試みであって、その交信相手と試みた通信が失敗した試みであるかどうか調べて確認する。そうであれば、ノードは、もはや有効な直接交信相手でないと判断し、機能１５１４乃至１５２６を実行させる。本発明の他の実施形態において、直接交信相手がもはや有効でないといつ考えるべきかについて厳密に判断するために、異なる基準を用い得ることを認識されたい。
【０１５２】
機能１５１４乃至１５１８は、新しい直接交信相手によって用いられる新しいＵＩＤを作成して、機能１５１２が無効であると判断したものを置き換える。この新しいＵＩＤには、置換される直接交信相手と同じ最上位ビットから現ノードのＵＩＤと異なる最初の最上位ビットまでが、それを含んで、含まれる。新しいＵＩＤの残りのビットは、ランダムに選択される。
【０１５３】
一旦この新しいＵＩＤが、作成されると、機能１５２０は、新しいＵＩＤに対して、図１３に関して上述した新しい直接交信相手作成機能１３００を呼び出す。
【０１５４】
一旦、機能１３００が、新しいＵＩＤの最上位ビットと合致する区域マスクを有する区域の与えられたノードから新しい直接交信相手を見つけると、その与えられたノードを、失敗したことを機能１５１２が見つけた直接交信相手を置き換える新しい直接交信相手にする。また、機能１３００は、ハッシュアドレス空間の新しい直接交信相手の部分に関連した対応する組の間接交信相手を取得する。機能１３００は、この新しい直接交信相手及びその対応する間接交信相手に現ノード交信相手リストに登録させる。
【０１５５】
一旦このことが行われると、機能１５２２は、図９に関して上述した現ノードの共有交信相手リスト９１８において置換された交信相手用の登録項目を有する他の各ノードに対して、ループを実行する。置換される直接交信相手又はその関連する間接交信相手の１つを現ノードが以前送ったこのような各ノードに対して、機能１５２４は、交信相手変更メッセージを、置換される交信相手が置き換えられたことを示す他のそのノードに送り、ＵＩＤ及びＩＰアドレスによってそれを置き換えることになっている交信相手を識別する。機能１５２６は、次に、共有交信相手リストを更新して、新しい置換交信相手が、その置換に関してちょうど通知された他のそのノードに送られたことを反映する。
【０１５６】
図１６は、ノードが、図１５の機能１５２４に関して上述したタイプの交信相手変更メッセージを受信する時実行する交信相手変更メッセージ応答機能１６００を示す。
【０１５７】
ノードが、このような交信相手変更メッセージ機能１６０２を受信する場合、それは、メッセージに示された置換された交信相手を、図９に関して上述したノードの交信相手リスト９０２におけるメッセージに示された新しい置換交信相手で置き換える。
【０１５８】
次に、機能１６０４は、現ノードの共有交信相手リストにおける置換された交信相手に関連する他の各ノード用のループを実行する。このような各ノードに対して、機能１６０６は、他のそのノードに交信相手変更メッセージを送り、置換された交信相手及びそれを置き換えようとしている交信相手のＵＩＤ及びＩＰアドレスを示す。次に、機能１６０８は、現ノードの共有交信相手リストを更新して、それが、他のそのノードに新しい置き換え用の交信相手を送ったことを示す。
【０１５９】
図１２乃至１６から分かることは、スカイリスネットワークにおける動作によって、ノードが、比較的規模が大きい組の交信相手を創り出し得るということであり、ここで、これら更新相手の組は、大量のコンピュータ処理又は通信を必要とせずに、与えられたハッシュアドレス値を扱うことができるノードをもっと迅速に検索して見つけるために用い得る。これは、ノードが、通常、大多数のその交信相手を、単に他のノードからそれらをコピーすることによって取得し、また、他のノードによってそれに与えられた１つ又は複数のノードが故障していると分かった時、その交信相手リストを更新する情報を他のノードによって与えられるためである。これによって、システムは、壮大なアドレス空間を極めて迅速に検索できるようになり、しかも、そのことを可能にする多数の交信相手を維持するのに必要な通信及びコンピュータ処理のオーバーヘッドが比較的少ない。ネットワークが適切に及び効率的に交信相手の変更に関する情報を、それらに関して知る必要があるノードのみに中継するという事実によって、システムは、ほとんどのノードが比較的高い頻度で出たり入ったりするネットワークにおいてさえ、効率的に動作できる。
【０１６０】
図１７及び１８は、未確認情報通信に関するが、これは、スカイリスネットワークの、与えられた区域のノード間において情報を通信するための極めて効率的なメカニズム、即ち、論理ノードである。
【０１６１】
図１７は、未確認情報作成機能１７００を示す。与えられたノードの共有区域データに変更がある場合、機能１７０２は、機能１７０４乃至ｌ７０８を実行させる。図２５及び２６に関して後述するように、このような変更は、通常、新しい情報が、与えられたノードにおいて索引付けされる時発生する。
【０１６２】
機能１７０４は、ノードの共有区域データにおける変更を詳述する新しい未確認情報を作成する。機能１７０６は、与えられたノードのＵＩＤ、及びこの新しい未確認情報が作成された時間に対応するタイムスタンプで未確認情報にラベル付けする。次に、機能１７０８は、与えられたノード自体のＵＩＤ下にある与えられたノードの未確認情報リストにこの未確認情報を配置する。
【０１６３】
図１８は、未確認情報伝達機能１８００について述べるが、これは、与えられた区域のノード間において未確認情報を通信するために用いられる。
【０１６４】
機能１８０２は、ｎ秒毎にループを実行するが、これは、１つの実施形態では、５秒である。このループは、現ノードの未確認情報リストにおける各ノードに対して、内側ループ１８０４を形成する段階から構成される。このような各ノードに対して、機能１８０６乃至１８３０が、実行される。
【０１６５】
機能１８０６は、ループ１８０４の繰り返しにおいて、現ノードに関連する各未確認情報に対して、ループを実行するが、ループ１８０４では、その未確認情報が、与えられた時刻表より古いかどうかが調べて確認され、そうであれば、それは、機能１８０８にそれを削除させる。このことは、古い未確認情報をノードの未確認情報リストから除去して、そのリストが時間と共に無駄に大きくなるのを防止するように行われる。
【０１６６】
次に、機能１８１０は、ループ１８０４の現繰り返しの現ノードが、機能１８００を実行している現ノードであるかどうか、また、現ノードの未確認情報リストにおいてそのＵＩＤに関連する何らかの未確認情報であって、第２時刻表より新しい未確認情報があるかどうか調べて確認する。現ノードのＵＩＤリストに現ノードに関連するこのような比較的最新の未確認情報がない場合、未確認情報伝達によって、現ノードが区域の一部として今でも機能していることを他のノードが通知されるように、機能１８１２は、現タイムスタンプを有する現ノードの未確認情報リストに“まだここにある”未確認情報を付加する。
【０１６７】
次に、機能１８１４は、ループ１８０４の現ノードが他のノードであり、また、他のそのノードは、第３時刻表より新しい現ノードの未確認情報リストにそのＵＩＤに関連する未確認情報を有さないかどうか調べて確認する。これらの条件が合致した場合、これは、現ノードが、その他のノードは、現区域にもはや参加しておらず、また従って、機能１８１６が現ノードの未確認情報リストから他のそのノードを削除することを示すほど充分に長い期間の間、他のそのノードについて何も聞いていないことを意味する。
【０１６８】
一旦ループ１８０４の動作が完了すると、機能１８１８は、現ノードの未確認情報リストからランダムに抽出された他のノードとの通信を試みる。通信がランダムに抽出されたノードと実現されると、機能１８２０は、機能１８２２乃至１８２７を実行させる。
【０１６９】
機能１８２２は、通信の各側のノードＵＩＤが、他方のノードの区域マスクと合致するかどうか調べて確認する。一方側の区域マスクが他方を含む場合、即ち、より小さい数の上位ビットを有する場合、より小さい数の上位ビットのノードは、他のノードのより長い区域マスクと合致するノードＵＩＤと一致する未確認情報のみを交換する。より長い区域マスクのノードは、その未確認情報リストにあるノードＵＩＤに関する全ての未確認情報をより短い区域マスクのノードに送る。これは、全てのこのようなノードのＵＩＤは、他方のノードのより短い区域マスクに対応するハッシュアドレス空間の部分内に入るためである。通信中のノードの区域マスクにおけるいずれかのビットが、互いに競合する場合、いずれのノードも他のノードと如何なる未確認情報も通信しない。
【０１７０】
図１９は、区域分割機能１９００を示す。この機能は、現ノードの未確認情報リストにリスト化された区域数が上限区域数を超過するかどうか調べて確認する調査１９０２を含む。本発明の本実施形態において、ノードは、それらの区域を約３２と６４ノードとの間の密度範囲に保持しようと試みる。このような場合、上限区域数は、６４である。機能１９０２の調査が満たされた場合、機能１９０４乃至１９０８が、実行される。
【０１７１】
機能１９０３は、現ノードの区域マスクの長さを１ビットだけ増やす。機能１９０４は、未確認情報を現ノードのＵＩＤ下にあるノードの未確認情報リストに付加して、現ノードが、その区域マスクの長さを１ビットだけ拡張したことを示す。
【０１７２】
上述したように、未確認情報伝達によって、この未確認情報は、現ノードの区域にある他のノードに送り出される。現ノードが、その区域の密度が上限区域数を超過したことを検出するための最初のノードの１つである場合、その以前の区域におけるほとんどの他のノードは、機能１９０３の結果として、現ノードが有するものより短いアドレスマスクを有する。図１８の未確認情報伝達機能に関して上述したように、より短い区域マスクを有するこのような他のノードは、現ノードから未確認情報を受信する。これは、その新しい区域マスクに対応するアドレス空間のその部分は、それらのより短いアドレスマスクによって表現されるアドレス空間の部分内に入るためである。このことによって、このような他のノードは、現ノードは、その区域を分割すると決めたというメッセージを受信する。しかし、現ノードの新しいより長いアドレスマスクと合致しないＵＩＤを有するあらゆるこのようなノードは、もはや未確認情報を現ノードに送らない。これは、それが、それらの現区域のそれらの半分にもはや関心がないことをそれらが通知されたことによる。
【０１７３】
ノードが、機能１９０３によって示されるように、その区域の長さを増やす場合、マスク機能１９０６は、現ノードが全交信相手リストを含むかどうか調べて確認するが、この全交信相手リストには、直接交信相手と、対応する組の間接交信相手とが含まれ、後者においては、現ノードのアドレスと異なる第１最上位ビットが、現ノードのアドレスマスクにちょうど付加された新しいビットの位置に対応する。
【０１７４】
機能１９０６の調査によって、現ノードがこのような交信相手登録項目を有していないことが分かった場合、機能１９０８は、図１３に関して上述した、新しい直接交信相手作成機能１３００を呼び出し、このような直接交信相手及び対応する組の間接交信相手を作成する。
【０１７５】
図１９に示さないが、機能１９０２に関して上述したように、ノードが、その区域は上限区域数を超過することを検出するが、更に、区域を分割すると、２つの半分の内一方は、下限区域数未満のアドレスを有するようになることを見つけた場合、それは、現区域のメンバにその他の半分におけるその区域に再参入させるメッセージを生成することによって応答するが、この応答は、区域をあまりにも大きくさせる一方でその半分の一方をあまりにも小さくさせる密度不均衡を補正するように行われる。
【０１７６】
図２０は、区域分割未確認情報応答機能２０００について述べる。機能２００２によって示されるように、現ノードが、他のノードのＵＩＤに関連する未確認情報を受信し、他のそのノードは、現ノードのＵＩＤともはや合致しないようにその区域マスクを変更したことを示す場合、機能２００４乃至２００８が実行される。これらの機能は、他のノードの登録項目の指標を現ノードの未確認情報リストに配置し、他のノードは、他のノード変更を示す未確認情報に関連するタイムスタンプの時点で現ノードのネットワークを去ったことを示す。また、未確認情報通信は、新しい又は未確認情報が、他のそのノードから受信され、現ノードのＵＩＤと合致する区域マスクをそれが有すると告げるまで、現ノードから他のそのノードへ行われるべきであることを示す。
【０１７７】
図２１は、区域併合機能２１００について述べる。ノードの未確認情報リストにおける区域数が下限区域数未満である場合、機能２１０２は、ループ２１０４を実行させる。ループ２１０４は、現ノードの区域マスクにおける区域マスクの１つ下位のビットによって定義されるハッシュ空間の一部の他の半分における１つ又は複数のランダムに抽出された各ハッシュアドレスに対して実行される。
【０１７８】
機能２１０６は、このようなランダムに抽出された各ハッシュアドレスに対して、ハッシュアドレス検索を実行する。機能２１０８は、ハッシュアドレス検索によって見つけられたノードが、現ノードより長い区域マスクを有するかどうか調べて確認する。そうである場合、機能２１が実行される。
【０１７９】
機能２１１０は、検索によって返された他のノードにメッセージを送るべきかどうかを確率的に決定し、現ノードの区域マスクに対応するＵＩＤでネットワークに再度参入するようにそれに要請する。このようなメッセージは、１／ｎの確率で送られるが、ここで、ｎは、ノード区域のサイズである。このようなメッセージを送るべきか否かに関するこのような確率的な決定は、極めて短い時間の間にこのようなメッセージを受信することから、多数のノードの全てにその可能性を提示するように用いられる。これは、このことによって、区域が過小密度でこのようなメッセージを受信することがあり得るためである。
【０１８０】
機能２２０８の調査が満たされない場合、組み合わせられるべき区域は、単に、それらのそれぞれの区域マスクを１ビットだけ短くすることによって組み合わせることができ、従って、機能２２１３は、機能２２１４乃至２２２２を実行させる。
【０１８１】
機能２２１６は、未確認情報通信を介して、現ノードの区域のノードに併合要求を送る。これによって、この未確認情報を受信する全てのノードは、自ら図２２の併合要求応答機能を実行する。次に、機能２２１８は、現ノードにその区域マスクの長さを１ビットだけ短くさせる。機能２２２０は、現ノードの交信相手リストから、最初に最下位ビットだけ現ノードのハッシュアドレスと異なる直接交信相手、及びその関連する間接交信相手全てを削除する。次に、機能２２２０は、新しい区域の他の半分からのノードとのその次の未確認情報通信を現ノードに実行させ、こうして、現ノードは、併合が現ノードの半分によってではなく、新しく形成された区域の他の半分によって索引付けされるまで、全ての共有区域データを最後まで受信する。
【０１８２】
図２３は、新しいファイルネットワーク登録機能２３００を示す。この機能は、ノードによって実行されるが、これは、それが知る限り、以前ネットワークに参入したことがないファイルをスカイリスネットワークにそれが入れようとする場合に実行される。
【０１８３】
新しいファイルネットワーク登録機能は、参入されるファイルを１つ又は複数のチャンクに分割してしまう機能２３０２を含むが、各チャンクは、せいぜい与えられたサイズを有する。本発明の１つの実施形態において、ファイルチャンクは、１２８ｋＢに制限される。次に、機能２３０４は、各チャンクにハッシュを実行する。次に、機能２３０６は、与えられたファイルに関連するチャンクのハッシュにファイルハッシュ値を設定する。
【０１８４】
このことが行われた後、機能２３０８は、ファイル関連付けられる１つ又は複数のキーワードのリストを見つける。異なる機能を用いて、異なるタイプのファイル用のキーワードを取得し得る。例えば、数多くの非テキストファイルは、それらのキーワードの根拠を大部分ファイルのタイトルに置いている。メタデータを含むファイルのキーワードは、このようなメタデータによって定義されることが多い。純粋なテキストファイルは、一般的に、ファイルで発生するよりテキストファイルにおいて相対的に極めて高い頻度で発生するファイル中における文字言語に対応するキーワードによって定義し得る。
【０１８５】
機能２３０８によって見つけられたこのような各キーワードに対して、機能２３１０及び２３１２は、その対応するハッシュ値を見つける。次に、機能２３１４は、図２４に示すコピーファイルネットワーク登録機能２４００を呼び出して、ファイルのネットワークへの登録を完成する。
【０１８６】
図２４に示すように、コピーされたファイルネットワーク登録機能には、図２４の機能が実行されているファイルに関連するハッシュ値に対するハッシュアドレス検索を形成する機能２４０２が含まれる。
【０１８７】
ハッシュアドレスが、ファイルハッシュ値に対応するハッシュアドレス空間の部分を処理するノードのアドレスを返す場合、機能２４０４は、現ノードＩＰアドレス２４１２と共に、そのノードにファイルに対するファイル索引挿入要求を送る。現ノードＩＰアドレス２４１２は、ハッシュアドレス検索によって返されたノードにキーワードハッシュ値に対するキーワード索引挿入要求を送るが、この要求は、現ノードＩＰアドレスと、現ファイルのファイル登録項目に含まれる他の情報と、を含む。次に、機能２４０６は、ファイル索引挿入要求に応答して返された現ファイルを記憶しているノードの数を記憶する。
【０１８８】
次に、機能２４０８は、現ファイルの各キーワードに対してループを実行する。このループには、キーワードのハッシュ値に対してハッシュアドレス検索を実行する機能２４１０が含まれ、機能２４１２は、ハッシュアドレス検索によって返されたノードにキーワードのハッシュ値に対するキーワード索引挿入要求を送る。この要求には、現ノードのＩＰアドレスと、ファイル索引挿入要求によって返された現ファイルを記憶しているノードの数を含むループ２４０８の現キーワードに関連するキーワード登録項目に対する情報と、が含まれる。
【０１８９】
次に、機能２４１４は、コピーされたファイルネットワーク登録機能が実行されているファイルのハッシュ値と共に現ノード上に、数字２４１６乃至２４２４によって示す情報の項目を記憶させる。これには、現ファイルの関連チャンクのハッシュ値のリスト、ファイル自体のデータ、ファイル及びそれらのハッシュ値に関連するキーワードのリスト、ゼロに設定された索引更新番号、及び初期的には短い更新長で設定された索引更新時間が含まれる。この更新長は時間を示し、この時間毎に、現ノードは、現ノード上に記憶されたファイルのコピーに対してネットワークによって作成される索引付けされたファイル登録項目を更新しなければならない。
【０１９０】
図２５は、ファイル索引挿入要求応答機能２５００を示す。これは、図２４に関して上述した機能２４０４によって送られるタイプのファイル索引挿入要求を受信するノードによって実行される機能である。
【０１９１】
ノードがこのようなファイル索引挿入要求を受信すると、機能２５０２は、現ノード上に要求されたファイルに対する何らかのファイル登録項目があるかどうか調べて確認する。ない場合、機能２５０４及び２５０６が実行される。機能２５０４は、要求生成ノードに関する情報を含むファイルに対するファイル登録項目を作成する。このことは、図９に関して上述したファイル登録データ９５６に対応する。機能２５０６は、新しいファイル登録項目を含む現タイムスタンプを有するノード自体のＵＩＤ下にあるノードの未確認情報リストに未確認情報を配置する。このことは、図１７に関して上述した未確認情報作成に対応する。
【０１９２】
機能２５０２の調査が、応答される要求のファイルに対するファイル登録項目が既に存在することを見つけた場合、機能２５０８は、機能２５１０及び２５１２を実行させる。機能２５１０は、現ファイルに対するファイルコピー登録項目のリストに新しいファイルコピー登録項目を付加して、応答されている要求が送られたノードに対するネットワーク位置情報を示す。次に、機能２５１２は、現タイムスタンプが新しいファイルコピー登録項目情報を含む状態で、ノード自体のＵＩＤ下にあるリストの現ノードに未確認情報を配置する。また、このことは、図１７に関して上述したタイプの未確認情報作成に対応する。
【０１９３】
ファイル索引挿入応答要求の仕事が終わると、機能２５１４は、要求元ノードに情報を返し、要求に対応するファイルに対するファイルコピー登録項目の数を示す。
【０１９４】
図２６は、キーワード索引挿入要求応答について述べる。このことは、ある程度図２５において説明した応答機能と同様であるが、例外は、それが、ファイル索引情報よりもむしろキーワード索引情報を挿入するという要求に対するノードの応答について記述することである。
【０１９５】
ノードが、図２４に関して上述した機能２４１２によって生成されるタイプのキーワード索引挿入要求を受信すると、機能２６０２は、現ノード上の要求に関連するキーワードに対して既に何らかのキーワード登録項目があるかどうか調べて確認する。ない場合、機能２６０４は、現キーワードに対して図９に関して上述したキーワード登録リスト９３６に関して上述したタイプのキーワード登録項目を作成する。
【０１９６】
一方、現キーワードに対する登録項目が既に存在する場合、機能２６０６は、キーワード要求に伴うファイルを記憶しているノードの数が、要求された最小の数を超えるかどうか調べて確認する。本実施形態において、キーワード登録項目のみが、そのキーワードに関連する５０００の最も頻繁に記憶されるファイルに関する情報を記憶する。他の実施形態において、異なる要件を用いて、どのファイルが与えられたキーワードと共に索引付けされかを決定し得る。
【０１９７】
機能２６０６の調査が合格すると、機能２６０８乃至２６１６が実行される。機能２６０８は、そのキーワードに対する現ノード上のキーワード登録項目における現キーワードに関連するファイルに対する何らかの関連ファイル登録項目があるかどうか調べて確認する。そうであれば、機能２６１０は、関連するファイルのリストの現キーワード登録項目に現要求に関連するファイルに対する新しい関連ファイル登録項目を作成する。
【０１９８】
機能２６０８の調査が、要求されたファイルに対する関連ファイル登録項目が現キーワードのキーワード登録項目にあることを見つけた場合、機能２６１２は、機能２６１４及び２６１６を実行させる。機能２６１４は、ファイルを記憶しているノードの数を現キーワード索引挿入要求に含まれた数に置き換え、機能２６１６は、図９に示す記憶数９５４毎に順序良く並べられたファイルのリストにおけるファイルの位置を再度並べる。これは、与えられたファイルに関連するコピーの数が、現キーワードに関連する任意のファイルに対するトップ５０００の最大数のコピー内に入るかどうか決定するために調査２６０６によって用いられるリストである。
【０１９９】
キーワード索引挿入要求応答機能が完了する前に、機能２６１８は、現タイムスタンプが、キーワード索引挿入要求に対する応答に起因したキーワード登録項目へのあらゆる変更を含んだ状態で、ノード自体のＵＩＤ下にある現ノードの未確認情報リストに未確認情報を配置する。また、このことは、図１７に関して上述したタイプの未確認情報作成に対応する。
【０２００】
図２７乃至２９は、ネットワークによって用いられて、ネットワーク分散型索引によって索引付けされる情報が現在有効である機会を増やす機能を示す。
【０２０１】
図２７は、ファイル期限切れ応答機能２７００を示す。この機能には、ファイルのコピーを記憶しているノードのリストのノード記憶ファイル登録項目に対する有効期日が満了したかどうか調べて確認するための調査２７０２が含まれる。そうであれば、機能２７０４乃至２７１４が実行される。機能２７０４は、図９に示すリスト９６４と共に上述したタイプのノード記憶ファイル登録項目を削除する。次に、機能２７０６は、ファイルを記憶しているノードのリストが、削除によって空になったかどうか調べて確認する。そうであれば、機能２７０８乃至２７１４を実行する。機能２７０８は、ファイル登録項目に関連する各キーワードに対するループを形成する。このループは、キーワードのハッシュに対するハッシュアドレス検索を実行する機能２７１０と、キーワード検索によって返されたノードにメッセージを送り、そのノード上のキーワード関連登録項目の関連するファイルリストからファイルを除去するようにそれに通知する機能２７１２とから構成される。次に、機能２７０４は、関連するファイル登録項目を削除することによって機能２７０６により検出される状況に応答する。
【０２０２】
図２８は、与えられたファイルのコピーを記憶している個々のノードによって実行されるファイル索引更新機能２８００を示す。ファイルの与えられたコピーと共に記憶された図９に示す値９９２によって示されるファイル索引更新時間が、ｘ時間より前に満了した場合、機能２８０２は、ネットワーク分散型索引付け方式に最も近く再参入されるようにファイルに対して実行される図２４に関して上述したタイプのファイルネットワーク登録項目へのコピーを機能２８０４に実行させる。
【０２０３】
通常、機能２８０２の調査に用いられる時間ｘは、ファイルのコピーを記憶しているノードによって記憶される索引更新時間と、ファイルコピーの位置を索引付けするノードによって記憶される関連有効期日との間に通常存在するわずかな時間差に対応する。従って、機能２８０２の調査が満たされない場合、ファイル索引更新時間は、まだ満了していない。この場合、機能２８０６は、ファイル索引更新時間が満了しつつあるかどうか調べて確認しなければならない。そうであれば、機能２８０８及び２８１０が実行される。機能２８０８は、ノードに索引更新メッセージを送り、連続更新数でファイルコピーを索引付けして、そのノードに対して、新しく拡張された有効期日がどの程度に予め設定されるべきかを示す。機能２８１０は、図９に示すファイルの対応する連続更新数９９４をインクレメントし、こうして、ノードには、次の有効期日拡張が設定される際、現ファイルのコピーを連続して維持したことに対する評価が与えられることになる。
【０２０４】
図２９は、図２８で機能２８０８に関して上述したタイプの任意の索引更新メッセージを受信するノードによって実行されるファイル索引更新メッセージ応答機能２９００を示す。
【０２０５】
このような索引更新メッセージが、更新メッセージに関連するファイルに対するファイル登録項目のファイルコピーを記憶しているノードのリストにリスト化されたノード受信された場合、機能２９０２及び２９０４は、更新メッセージに関連する連続更新数の関数として、ファイルのノードのコピーに対する新しい有効期日を設定する。上述したように、新しい有効期日が設定された未来への時間の長さは、連続更新数の関数である。連続更新数が極めて小さい場合、新しい有効期日は、未来へ数分だけ設定される。連続更新数が大きくなるにつれて、新しい有効期日は、幾つかの実施形態では、１２又は２４時間という長い時間の期間だけ未来へ拡張される。
【０２０６】
上記説明及び図面は、説明及び例示のためだけに与えられること、また、本発明は、追加された新規事項の解釈によってそのように限定されない限り、それらに限定されるものではないことを理解されたい。本開示内容を目の当たりにする当業者は、本発明の範囲から逸脱することなく、本内容に修正及び変更を成し得る。
【０２０７】
本出願の発明は、オペレーティングシステム、コンピュータハードウェア、又はコンピュータネットワークのいずれか１つタイプでの用途に限定されるものではなく、従って、本発明の他の実施形態は、異なるソフトウェア及びハードウェアシステムを用い得る。
【０２０８】
更に、以下の新規事項に述べたプログラムの働きは、実質的に全てのプログラムの働きと同様に、実質的に異なる構成及び順序を用いて、数多くの異なるプログラミング及びデータ構造によって実行し得ることを理解されたい。これは、プログラミングは、如何に複雑な与えられたアイデアも、当業者によって理解されると、実質的に無限の方法で記述し得る極端に柔軟性のある技術であることによる。従って、新規事項は、添付図に記述した厳密な機能及び／又は機能の順序に限定することを意図しない。このことが特に真実である理由は、上記明細書に述べた擬似コードは、大幅に簡素化されており、不必要な詳細事項で当業者に重荷を負わせることなく、本発明を実現するために当業者が知る必要があることをより効率的に伝えるようにしたためである。このような簡素化の観点において、上述した擬似コードの構造は、慣れたプログラマが、本発明を実現する際用いるであろう実際のコードの構造と大幅に異なることが多い。更に、明細書のソフトウェアで実行されるように示したプログラム化した働きの多くは、他の実施形態では、ハードウェアで実行し得る。
【０２０９】
上述した本発明の多くの実施形態において、本発明の様々な側面が、共に生じるように示したが、これらは、本発明のそれらの側面の他の実施形態においては、別々に起こり得る。
【符号の説明】
【０２１０】
１００・・・スカイリスネットワーク
１０２Ａ・・・ノード
１０２Ｂ・・・デスクトップコンピュータ
１０２Ｃ・・・携帯タブレットコンピュータ
１０２Ｄ・・・携帯情報端末コンピュータ
１０２Ｅ・・・携帯電話
１０２Ｆ・・・腕時計コンピュータ
１１４・・・バス
１１８・・・表示装置
１２２・・・キーボード
１２４・・・マウス
【図１】
0005538258.tif 000012
【図２】
0005538258.tif 000013
【図３】
0005538258.tif 000014
【図４】
0005538258.tif 000015
【図５】
0005538258.tif 000016
【図６】
0005538258.tif 000017
【図７】
0005538258.tif 000018
【図８】
0005538258.tif 000019
【図９】
0005538258.tif 000020
【図１０】
0005538258.tif 000021
【図１１】
0005538258.tif 000022
【図１２】
0005538258.tif 000023
【図１３】
0005538258.tif 000024
【図１４】
0005538258.tif 000025
【図１５】
0005538258.tif 000026
【図１６】
0005538258.tif 000027
【図１７】
0005538258.tif 000028
【図１８】
0005538258.tif 000029
【図１９】
0005538258.tif 000030
【図２０】
0005538258.tif 000031
【図２１】
0005538258.tif 000032
【図２２】
0005538258.tif 000033
【図２３】
0005538258.tif 000034
【図２４】
0005538258.tif 000035
【図２５】
0005538258.tif 000036
【図２６】
0005538258.tif 000037
【図２７】
0005538258.tif 000038
【図２８】
0005538258.tif 000039
【図２９】
0005538258.tif 000040
【図３０】
0005538258.tif 000041
【図３１】
0005538258.tif 000042
【図３２】
0005538258.tif 000043