修士論文 (A Stable Braodcast Algorithm) の簡単な説明

例えばDVD一枚分みたいな大きなファイルを色んな人がほしがっているとき、普通は1人だけがダウンロードする場合より、たくさんの人がダウンロードする方が遅くなります。10人同時だと、自分の分け前の速度は1/10になっちゃうのが自然です。

WinnyとかBitTorrentとかp2pと呼ばれるソフトを使うと、10人が同時にダウンロードしても、1/10よりはずっと良い性能が出ます。これらのソフトでは10人が協力して、一人が受け取ったファイルの断片を他の人に転送してあげます。そうすることで、多くの場合、自分の分け前をあまり減らさずに(場合によってはもっとたくさん)データをもらうことができます。

でも、これらのソフトでも常に1人で占有できた時と同じ性能が出るわけではなくて、速い人が遅い人経由で転送されて、足を引っ張られちゃったりします。特に近いところにたくさんコンピュータがつながっている(ネットワークがツリー構造)場合は、せいぜい1/2くらいしか出ません。

じゃあ、誰が速くて誰が遅いのかとか、誰と誰がどうつながってるかが分かってたら、何人が参加しても自分が転送できる分け前が絶対変わらない(一人で占有してダウンロードした時と同じ性能が出る)ような方法はあるんでしょうか? これを実現する方法(アルゴリズム)を考えて数学的にも証明しましたっていうのが、今書いてる論文の主張。

速い人、遅い人がお互い邪魔せずに協力して、みんなが100%の性能が出せるって素敵でしょ?

【FAQ】
☆ BitTorrent/Winnyのライバルを作ってるの?
ちょっと違います。僕のは前提としてコンピュータがどうつながっているか(ネットワークトポロジ)が分かんないといけないから、世界中のコンピュータを用いる転送には向かないです。それにまだアイディアと検証用のプログラムだけで、ちゃんとしたソフト書いてません。

☆ じゃあ、実用にはならないんだ?
研究室(会社)内のパソコン20台に同時にデータを配布する時とかには使えるかも。来年までにLinuxで使える形にして、僕の指導教官の先生が書いたGXPってソフトに付けたいです。Rsh/sshが使える環境なら、ダウンロードしてから3分で百台単位のマシンを使えます。僕が改良した、ファイル転送機能付きタスクスケジュラーも入ってます。http://www.logos.ic.i.u-tokyo.ac.jp/gxp/

☆ Winnyってどう思う?
うーん、いきなり聞かれても…
でもWinnyはすごいソフトだと思うし、書いた人もえらいと思うよ?