昨日寝る前にP2P掲示板について10分くらい考えた

考えてみた。

いきなりずれるが、ひとつ驚いたことは、今まで何度もP2PのBBSについてどうしようかと考えてきたが、昨日考えた方法は、今までとは全く違う方法だった。
たぶん、少し前に読んだBitTorrentの説明が、自分の中にあった前提の1つ「すべては平等で同等とする」を壊してしまったのだと思う。

P2P掲示板を考えた始めた時点で、今まではどいつもこいつも同じように見えていたノードたちに3つの分類ができていた。
スレッドへの書き込み要求を一時キューに貯めて排他メッセージで同期をとりながら順番に書き込み処理を行っている小さなノード集合、そこらからデータを読み出そうとするたくさんの一般ノード、ここ1分以内にデータを読んだことで配布を行うようになったノード集合。P2Pとは実はネットワークをまたいだマルチスレッドシステムだったんだと思った。パソコン1台がITRONのタスクだ。そして平等というのは、全ての瞬間において平等という意味ではなく、機能平等、やろうと思えばそれもできる(だが今しているとは限らないし、今はできないかもしれない)ということだと考え直した。

書き込み集合は、小さなネットワークを形成していて、その中で排他制御と書き込み要求の反映を行っている。大体つねに10ノードくらい必要だ。欠けたときは、代わりをつれてくる。この小さなネットワークの維持はスレッドの維持だ。書き込み集合に誰もいなくなると、スレ落ちする。スレ落ちしたスレッドは過去ログになる。過去ログとは自分の周りで最も更新日の新しいログだ。そのログ以外は見えない。なので、そのうち本当に一番新しいログだけがネットワーク上に残る。だれが書き込み集合に参加できるのか。簡単だ。そのスレッドをよく見ているやつだ。何度も何度も更新しているやつだ。受験に失敗したので全裸をうpしますという書き込みを見て何時間も何日も粘着しているやつだ。
書き込み集合は配布集合も兼ねている。書き込み集合に属するノードが持っているデータが最新のスレ情報だ。これは小さなネットワーク内で整合性が保たれていて、規律を乱して勝手に書き換えるやつは集合の外の追い出される。この仕組みは単純で、書き込み集合に属するものは定期的に一般ノードを経由して、同じ集合内にいるノードからログを取得する(ログはハッシュ値:データの2パートに分かれている。ハッシュ値の合わないデータは捨てられる。チェックだけする場合は、ハッシュ値だけ受信した時点で、回線を切断する。送る側はチェックされるか、本当に送るのか分からない。よって、騙すことはできない。)。これを全員分行う。その中で変なやつがいることを集合内で多数決する。半数以上が変だと判断したなら、そいつは多分変だから追い出したほうがいい。一人だけあいつが変だというノードがいたらそいつのほうが変だ。追い出したほうがいい。
書き込み集合が配布も兼ねているとつらくなる場合がある。人気スレだ。これを助けるのは、1分以内に書き込み集合から最新のログを取得したノードだ。このノードたちは1分の間、書き込み集合の変わりに配布を行うことができる。ただし、これはある意味で過去ログだ。そういうマークが付く。信頼性も微妙だ。少し気になるのが、大体最新で正しいと思っていい。
そして今までの話は全てファイル共有ソフトでいうところの『ダウンロード機能』だ。検索用のネットワークは別に持っている。これはWinnyと全く同じでもいいと思っている。
注意することは、書き込み集合に属するノードも一般ノードであるし、読み込みノードの場合もある。それはノードのPC内の別スレッドが行っていると考えればいい。ごく普通の話だ。


今日は、乱暴に書く試みを行いました。
乱暴でごめんなさい。>_