新婚旅行のウィーンから帰ってきました。久しく離れていたP2Pの話題を少しずつBlogに書こうと思う。
当分の間は
・「Winnyの技術」を読んで
・Skypeがインフラになる日
・P2P勉強会のトピック
が中心になると思う。
まずは標題通り、「Winnyの技術」を読んだ感想+意見について書いてみたいと思う。
ただ感想を書くだけでは面白くないので、周辺技術などを絡めてみればと考えている。
「Winnyの技術」はご存知の通り、Winnyの開発者の金子氏が書いた書籍である。
これまで、P2Pに関する技術的書籍は少なかったので、金子氏のこの本はP2Pの研究そして啓蒙にもとても重要な役割を果たすと思われる。P2Pの技術的側面に関心がある人は必読の本である。
この本の感想をblog1日分で書くのにはあまりにも少なすぎる。そこで少しずつだが、書籍を所々引用しながら感想、解説、意見を書いていきたい。
まずこの本ではP2Pの形態について「世代」と言う言葉を通して整理している。具体的には
・第1世代:Hybrid-P2P:Napsterなど
・第2世代:Pure-P2P:Gnutellaなど
・第3世代:Puer-P2P:Freenet,Winnyなど
ここで、第2世代と第3世代の違いが気になるところだ。32Pによれば、金子氏は第3世代をPure-P2Pの中でもキャッシュ機構が入っているシステムと定義している。
まずここでキャッシュを使って第2世代と第3世代となにが違うのか考えてみよう。
私が第2世代との違いの特徴として挙げるのは
特徴1.匿名性の強化
特徴2.システム全体における.トラフィック効率の上昇
特徴3.オリジン(元祖ノード)が非オンラインでも情報提供が可能
の3つである。
特徴1.2.については「Winnyの技術」を読んで欲しい。特徴3についてはここで少し補足しよう。
そもそも、第2世代のPure-P2Pではオンラインしているノードのファイルしか共有ができない。しかし、キャッシュ機構によって、オリジンのノードがオフラインでもファイルが共有できる。
特徴3がWinnyの人気を押し上げた事を忘れがちであるが、とても重要が概念であると個人的には思っている。(もしかすると金子氏は利点3を突き詰めてWinnyのBBS機能を具備しようとしたと考えたのかもしれない。)
では金子氏が唱えたキャッシュ機構+Pure-P2PをP2P研究者が第3世代と考えているかと言うと、実は違う。
一般的にはP2Pの第3世代とは
・第3世代:DHT(分散ハッシュテーブル)を使ったPure-P2P:Skype(恐らく)、一部のファイル共有ソフトの部分機構
と言われている。DHTについては本blogやHPを見て欲しいが、第2世代とは明らかに違う特徴がある。
それは、
・全てのオンラインノードのコンテンツを検索可能である
・検索に伴うトラフィック負荷がとても軽い、検索が高速(log[O]程度)
・多数のノードの参入、離脱に耐えられる
・数10億以上のノード参加に耐えられる
ことが挙げられる。
(参考)
分散ハッシュテーブル(DHT)入門~その1
P2Pと分散ハッシュテーブル~その1
では、Winnyは第2世代のP2Pシステムか、というと、これは色々議論があるだろう。
大枠で区切ると確かにWinnyはGnutellaの延長である。この点でWinnyを第2世代と呼ぶのは間違いないかもしれない。しかし、何点か第2世代の先を行くシステムが見受けられる。その主たるものは、
・上流、下流の組織化による、検索トラフィック負荷の軽減
・クラスタリングによる、「意味」による自己組織化
の2点だろう。
まずは上流、下流について。
そもそもGnutellaに見られる第2世代はバケツリレーによって検索情報を伝播している。その特徴としてTTLと呼ばれる数字によって、検索できるノードを制限している。もしTTLがないと、検索トラフィックが膨大になりP2Pネットワークがダウンしてしまうからである。
この点でWinnyは先端的であった。上流、下流ノードを配する事で非常に効率的にコンテンツを検索することに成功したのだ。ノードに重みをつけて、自己組織化することはとてもユニークである。(それまでのP2Pシステムは、ノードの重みが全てフラットであることが多かった。)
そして、後者は更に重要な概念だ。現在でも意味によって自己組織することは大変なことである。
実はP2Pの第4世代というのは、意味情報によってルーティングすることを指す人がいる。例えばNTT研究所が開発したSIONetがそれである。
意味組織化を3つのキーワードの部分一致の大きさによって意味によるノードの自己組織化を行った事はとても大きな結果である。なによりもシステムの概念が明確であり、その実装も比較的容易と考えられる。
キーワードによる意味組織化は第3世代のDHTによるシステムにも、重要な影響を及ぼす事だろう。
このように実はWinnyはGnutellaの意味する自己組織化をさらにユニークな形でパワーアップしていて、当時として(そして現在でも)先端的なシステムであることがわかる。そこで私はWinnyを2.5世代のP2Pシステムと呼びたい。
本書を読むと金子氏はDHTシステムに近いモデルを模索していた事がわかる。(159P)もし、金子氏が当時DHT
に関する文献を読んでいたら一体どんなシステムになっていたのだろうか?とても興味が沸くところである。
本書の同じページにはこのようなことが書かれている。
「いまなら分散ハッシュテーブル(DHT)を使う事も考えられますし、現在のWinnyはP2Pネットワーク上で遠方にあるノードへの検索を諦めてしまっているので、もう少し効率のよい方法もあるでしょう。」
次回は上流、下流について考えてみたい。