BitTorrent に遊ばれる

<< 戻る   トップ >>

1サーバに 1クライアントの状態でダウンロードに20分かかるモノを、1サーバに24クライアントでダウンロードしたら何分かかる? 意外なことに線形計算、20分/台×24台=480分(8時間)ではなく、360分(6時間)ほどで完了した。おそらくクライアントの書き込み処理に時間がかかって、一対一ではサーバ/ネットワークシステムには余裕があったのだろうな。たぶんサーバ/ネットワークには 15分で一台を処理する能力があるようだ。2台でも40分はかからず、30分で処理できる、というわけだ。

それにしても、24クライアントでは6時間かかる。この状況はどうにかしたい。たとえ敬愛するケリー・ジョンソンの教え "KISS" に背いても。いや、ケリージョンソンならそれこそ解決すべき課題と指摘するだろうな。

要するに、1サーバに24クライアントという状況が問題なのだ。解決方法の一つが、24クライアントを一つにする、という方法だ。ブロードキャストを使ってファイルを配信する、というやりかたで、サーバからクライアントに一斉にファイルを送りつけ、1サーバ対仮想的1クライアントという状況に持っていく、というやり方だ。永年、この解決方法がつかえないかな、と構想していたのだが、もう一つの解決案があることに先日ふと気がついた。

BitTorrent -P2P- によるファイル配布だ。この場合、25サーバで24クライアントに配信することになる。しかも、場合によってはサーバの数を増やすことも可能だ。1対1より高速化することすら夢ではない。

というわけで、BitTorrent を実装しよう。まず、localhost をサーバとし、localhost をクライアントとする例から始めよう... 動かない。再び濃密に英語ドキュメントと接しよう。なにしろ、BitTorrent をキーワードとして google 検索すると、BitTorrent を Winny の仲間と見なしているサイトのクライアントの使用方法が山ほど引っかかる。BitTorrent はファイルのアップロード元を隠蔽して著作権侵害を助長するような珍妙なシステムではないから、POST Winny にはなり得ないのだがな。

愛と悲しみの BitTorrent

やっと BitTorrent が動いた (localhost内)。しばし喜びの舞いを踊った後、なんでちゃんとドキュメントを読み取れなかったのか、と悲しくなった。"Start a downloader as a resume on complete file." のセクションを単なるクライアント操作方法のセクションと間違えていた。BitTorrent のファイル配布における重要事項だったのだ。

完全なファイルの供給者としてのダウンローダの開始

クライアントダウンローダがファイルを取得すために、完全なファイルを所持したダウンローダを一つ実行しておかなくてはならない。以下に例を示す。

./bittorrent-console --save_as myfile.txt http://myserver/myfile.torrent

--save_as で指定したファイルが配布すべきファイルでなくてはならない。

この完全なダウンローダが他のダウンローダと同じマシンや同じ LAN上のマシンで実行されている場合は、完全なダウンローダには --ip オプションをつけて起動しなくてはならない。--ip オプションには IP アドレスでも DNS に登録されているホスト名を指定できる。(以下略)

Bittorrent のサービスデーモン化

動作が確認できたので、BitTorrent をサービスデーモンとして動かすスクリプトを検討する。tracker はバックグラウンドで起動すればよいだろう。問題は例の "Complete Downloader" だが、特定のディレクトリに .torrent ファイルとその元のファイルがあれば、自動的に bittorrent を起動する仕組みにしておこう。

... と思ってつらつらと /etc/init.d を見ていたら bttrack と btseed というサービスを発見。ああ、別に検討しなくてもよかったわけだ。

それでは、/etc/init.d/bttrack から内容を見てみる。コマンドオプションとして、お馴染みの --port と --dfile だけではなく、--logfile, --allowed_dir が付け加えられている。--logfile は推して知るべしなのでかまわないが、--allowed_dir はこのディレクトリ以下のファイルしかダウンロードを許さない、というオプションで、デフォルトでは /svr/bittorrent/data ということになっている。現在の配布ファイルは /var/pub/images 下だから、シンボリックリンクでも作って調整することにしよう。

次に、/etc/init.d/btseed を解析したいのだが、そろそろ酔いが回って面倒くさい。ええ、飲んでます。とはいえ、私が btseed の作者なら、ダウンロード対象のファイルと .torrent ファイルを /srv/bittorrent/data に置けば後はオッケェ、というシステムにするだろうからテスト用の二つのファイルを作って件のフォルダに入れ、ダウンロードを試みてみよう。

予想通り動きました。なんか拍子抜け。それでは、妻に「喜びの舞い」を披露して参ります。見たがっていたので。

...

まだ21時だというのに、眠っていて見てくれませんでした。この手の「喜びの舞い」はめったに踊らないので残念です。猫の「さくら」だけはジッと見てくれました。驚愕から不審へと表情が変化していきました。残念ながら猫には「喜びの舞い」の素晴らしさがわからないのでしょう。もしかすると、「突然踊り出すヒト」と化した飼い主を憐れんでいたのかもしれません。

予告: 「BitTorrent で遊ぶ」

次の作業は「WCS への組み込み」だ。こうなると、Windows Cloning System で ntfs の圧縮イメージをアップロードした場合にも、同時に .torrent ファイルを作成する仕組みが必要となる。もとのファイルが 8, 10GBytes と巨大なので、.torrent ファイルの作成にはそれぞれ 6, 12.5 分かかるが、配布の時間短縮のためこのさい我慢してもらおう。また、展開するためのスクリプトもまた楽しめそうな仕事である。

作成: 2007-09-12 17:17:15.0更新: 2007-09-13 21:40:57.0
http://museo-anonimo.jp/nanban/?id=548,http://museo-anonimo.jp/nanban/tr/548