分散ハッシュテーブルのP2Pアプリへの応用〜その2


前章 に引き続き、分散ハッシュテーブルのP2Pアプリへの応用について説明します。また、記号等の凡例については前章をご覧になって下さい。
P2Pマルチキャスト
ここでは、分散ハッシュテーブルを使って簡単にマルチキャストを実現する「i3」という技術の一部を紹介します。

あるマルチキャストを示すIDをmulticast_IDとしましょう。Node_ID=multicast_IDとなるノードをノードYとします。ノードYには

{multicast_ID1,[IP_P,IP_Q,IP_R...]}

を格納しています。ただし、IP_Xはマルチキャストの送信先のIPアドレスとします。ノードZがmulticast_IDでマルチキャストしたい場合、ノードYに通信を行います。ノードYはノードZに応じてIP_P,IP_Q,IP_RにP2Pマルチキャストを行うわけです。この方法は、階層化させることでより複雑化することができます。例えば、先ほどのmulticast_ID1の通信先であるノードPに{multicast_ID2,[IP_A,IP_B,IP_C]}とすることができます。


P2PによるCDN
今回は分散ハッシュテーブルで同じコンテンツ名のコンテンツ情報は同じノードで管理することを利用します。今、各ノードにはコンテンツ名nameとそれを所有しているIPアドレスIP_XがNode_ID=hash(name)であるノードYに次のように格納されています。

{{name,IP_P},{name,IP_Q},{name,IP_R}....}

コンテンツ名nameを取得したいノードXはノードYにコンテンツ送信要求をするはずです。ではノードYはどのようにしてダウンロード先の最適化を行うのでしょうか?それにはいくつか方法が考えられます。

1)ラウンドロビン

同じコンテンツを保持するノードに対して、順番にダウンロード元になってもらう方法です。実装は簡単ですが必ずしもダウンロード元の負荷が平等に分散されるとは限りません。また遅延や帯域等の影響を考慮していません。

2)最小セッション数

ダウンロード元になりうるノードP、ノードQ、ノードR...は自分が現在ダウンロードをしているセッション数を定期的にノードYに教えます。ノードYはセッション数が一番少ないノードに優先的にダウンロード元になるようにします。この方法ではCPUの負荷についてはラウンドロビンよりも考慮していますが、遅延や帯域の影響を考慮していません。

3)遅延測定方法

ノードYはノードP,Q,R...に対してpingを打ち、遅延時間を測定します。遅延時間が遅いほどネットワーク的には近いと予測できるので、そのノードを優先的にダウンロード元にします。ただし、ダウンロード先とダウンロード元両間の近さは必ずしも保障していません。ストリーム用CDNには有効でしょう。

4)ドメイン調査方法

ノードYはダウンロード元となるノードXについてDNSの逆引きからドメインを知ります。また、ノードYはノードP,Q,R...のドメインについても予め知っているとします。両者のドメインからネットワークの近さについてある程度予測できます。このことよりダウンロード先とダウンロード元両間の遅延時間を最適化することが部分的にできます。このドメインを使った方法は独自のドメインを利用している人などは必ずしも適用できません。

実際には上記の方法を複合的に使い、それらを重み付けするのが一般的だと思われます。本トピックに関心がある方はCDNや負荷分散に関する文献を読まれると良いでしょう。


WEB匿名分散プロキシ
WEB用の匿名プロキシについては多くの人が既に利用していますが、プロキシを探す手間がかかったり、プロキシが消えてしまうということがしばしばあります。

さて、匿名通信路においてCrowdsという技術があります。これはユーザがプロキシとなり、ユーザ間でランダムにトラフィックを転送して最終的にはWEBにアクセスするということです。このようにすれば、WEBサーバからは誰からWEBにアクセスしたか分かりません。このアイデアを分散ハッシュテーブルで実現させましょう。

ノードXがアクセスしたいURLをurl_1としましょう。Node_ID=hash(url_1)となるノードをノードYとします。ノードXはノードYに対して分散ハッシュテーブルで要求を掛ける時に複数のノードを介するはずです。これらのノードが全てプロキシとなるのです。ですから、ノードYはだれからurl_1にアクセスするように要求されているかわかりません。また異なるURLであるurl_2においてhash(url_1)≠hash(url_2)ですから、URLが違う場合にはWEBにアクセスするノードも、また中間でプロキシとなるノードも異なり、経路も変わるはずです。

もちろん、ノード群が乱数を使ってさらに経路をランダムにさせることも可能です。


分散ハッシュテーブルを使って様々なアプリケーションへの適用例を考えてみました。分散ハッシュテーブルを使うと簡単にP2Pアプリケーションができることに驚くかもしれません。今後は分散ハッシュテーブルを使ったアプリケーションが一般的になることでしょう。
次にP2Pと認証について説明します。

NEXT

TOPページに戻る