[P2P]分散ハッシュによるP2P-CDNの考察
先日Blogで書いたように今日はP2P-CDNについて説明したいと思います。
さて、Winny,Gnutellaを代表するような「数珠つなぎ」ネットワークでは、コンテンツのダウンロード元の分散はしにくいことがわかります。分散の概念があるとすれば、各ダウンロード元の回線の帯域などのデータ手がかりにユーザがダウンロード元を決定し、これが結果的に負荷の分散という事になります。
では分散ハッシュを使えばではどのようなことが期待できるでしょうか?
まず、分散ハッシュを使えばP2Pネットワーク全体を「検索」できます。これはすなわち、だれかがダウンロードしたコンテンツがあれば、それをダウンロードしたユーザを基本的には検索できることになります。もちろん、Winnyでもそのような効果があるが、それはブロードキャストした範囲にダウンロードをしたユーザがいる場合です。そのような意味で分散ハッシュはネットワーク等の負荷分散に優れたシステムと言えます。
さて、これからが問題です。どのようにネットワークに対して負荷分散を図るのかということです。
まず、興味深いBlogを紹介しよう。以前P2P Todayにも紹介された無印吉澤@はてなダイアリーさんの記事である。
ファイル交換ソフトに起こるトラフィック問題は技術では解決できない?(2004年2月26日)
(無印吉澤さん、この記事でのリンクありがとうございます!)
概要は、P2Pでは「特定のユーザ」をターゲットにしているため、負荷分散が図れないと言う事です。
また、今年行われたJanog13でも同じような議論がありました。
「広がるP2Pサービスとインターネットインフラへの影響」NEC 中原一彦 氏
ではこの問題を分散ハッシュを使って一部解決する事を検討しましょう。(あくまでも一部です。。。)
先ほど書いたように、例えばコンテンツを所有している人(ダウンロードした人も含む)はネットワークに繋がっていればそれを全て検索可能です。コンテンツの名前をnameとすれば、Node_ID=hash(name)というノードはnameというコンテンツを持っている人全てのIPアドレスがわかるのです!ということは分散ハッシュは特定のコンテンツに対する情報は集中管理的であると言えます。ここがポイントです。
つまり、ノードPがnameというコンテンツが欲しければ、最終的にはNode_ID=hash(name)というノード(これをノードQとしましょう。)に尋ねる必要があるのです。そこで、ノードPがnameを効率的(具体的にはネットワークに負荷をかけずに)にダウンロードする仕組みを考えましょう。
まず、ノードPがノードQに対してコンテンツnameのダウンロード要求をします。ノードQはコンテンツnameを保持しているノード(X1,X2.....X100)を知っています。方法として以下のことが考えられます。
方法1)ノードQはノードPに(X1,X2.....X100)の部分集合のIPアドレスを教える。ノードQは(X1.X2.....X100)の部分集合にpingを打ち、その応答速度から最小なものからダウンロード。あまりスマートではないが、最も効果的。ただし匿名性は弱い。
方法2)ノードQはノードPにIPアドレスを教える。ノードPはDNSを使って逆引きを行いドメイン名を判断。ノードQは(X1.X2....X100)のIPアドレスを知っているから、それらは既に逆引きでドメイン名を知っている。そこでドメイン名から最適だと思われるノードをノードPに教える。少なくとも、同じISPや組織間でのコンテンツ配信にはうまくいく。
方法1,2ともにノードのリソースを無視しています。きちんとしたシステムを作るには、ノードのCPU使用率やダウンロード数を考慮する必要があります。
両者の方法ともP2Pを行う両者のネットワーク情報がないと負荷分散ができないので、あまり匿名性を高める事ができません。しかし、P2P-CDNを使うのはそもそも違法性がないコンテンツを大量に流通させる時に最も有効な手段だと考えています。
例えば、オンラインゲームソフトあるいはパッチの配布。オンラインゲームのファイルサイズは数100MBにも及び、そのため配信サーバに対する負荷が高く、回線帯域も大きく確保する必要があります。しかしこのような分散ハッシュのP2P-CDNを使えばその配布システムは最小限にする事ができます。また、パッチの配布では、特定の狭い日時にダウンロードが集中する事が考えられます。特にマイクロソフトでは相当大きなサーバ群や回線を確保しているでしょう。
しかし、P2P-CDNを使えば、ダウンロード数が多ければ負荷分散の効果は上がると言う魔法のシステムとなるのです。例えばオンラインゲームであれば、ノードがネットワークに繋いでいる時間が多いので、ソフトに分散ハッシュのシステムを入れれば、パッチ配布をバックグラウンドで行うにはもってこいでしょう。ソフトやパッチに対してはノードによる改ざん防止のため、電子署名することも必要でしょう。
いつの日か、コンテンツの著作権問題が解決すれば、P2Pコンテンツ流通はごく当たり前の事となるでしょう。そのような時代になれば帯域を効果的に消費するP2Pシステムには今回書いた負荷分散の話はますます重要になるでしょうし、分散ハッシュは有効なシステムとして議論されることになるでしょう。Netleaderのような著作権問題が解決しているソリューションでは是非分散ハッシュによるコンテンツ流通を実現して欲しい、と私は思っています。
P2Pストリームに対するCDNも今少しずつ検討していますが、面白い結果があればBlogに書きます。
次回は「分散ハッシュによる匿名性の強化」について説明したいと思います。
| 固定リンク
「P2P」カテゴリの記事
- WebRTCを実現するためにSTUNだけでなくTURNも必要な理由(2015.01.08)
- [P2P]P2Pストリーミングのサーベイ文書について(2014.11.09)
- Winnyの開発者、金子 勇氏の急逝を悼んで(2013.07.07)
- 「分散ハッシュシステムでのNAT超えの考察」に対する質問について(2012.12.16)
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(その2)(2011.11.20)
この記事へのコメントは終了しました。
コメント