書き込みすると何が起こるのか
2005-11-19
新月のネットワークについては前に説明しましたが、 より実際的に、ネットワーク全体ではなく1ノードに注目しての解説をします。 用語についてはネットワークをご覧ください。
書き込みをすると次のような通信が発生します (朔の場合)。
- 共有ノード・隣接ノードから1つ選ぶ。
- そのノードに「書き込みしたよ」というメッセージを送る。
- 相手から「書き込みを見せて」というメッセージが来る。
- 書き込みを送る。
- 最初に戻る。
Perl版のときはこんな感じでした。
- 隣接ノード全体に「書き込みしたよ」というメッセージを送る。
- 相手から「書き込みを見せて」というメッセージが続々と来る。
- それぞれに書き込みを送る。
これだと「書き込みを見せて」というメッセージが集中して 通信が行えなくなってしまう恐れがあったため、上のように変更したわけです。
実測してくださった方によると、 現在のネットワーク(10ノード弱?)だと20分程度で全体に伝わるようです (2005-12-11追記: 別の実験では3分で伝わったこともあります)。 ノードが増えると所要時間は対数関数的に増加すると考えています。
通信が行えなくなるとどうなるのでしょうか。 新しい書き込みは他のノードには伝わることなく、 書き込まれたノードだけに存在します。 各ノードは1〜5時間に1回の周期でデータの同期を行いますので、 運がよければ検索ノードが書き込みをみつけてくれます。 現在はノード数が少ないため、 数日もすれば書き込みはネットワーク全体に伝わります。 しかしノード数が増えればうまくいきません。
新月で書き込みの伝播に数時間から数日かかっているとしたら、 それはバグ・不具合の類いです。 新月本体のバグなのか、回線が混んでいるのか、 WindowsXP SP2 の同時接続制限のようなOSの問題か、 原因はともかく不具合だと考えてください。