20ノードでの接続実験

今までWinnyに甘えていて、ポエニー同士でネットワークを作れる自身がなかったので、20個の本物プログラムを起動して接続実験してみた結果のテキトウなレポート。

@ やろうとした内容

  1. 1-20番の20ノードを起動する。このときポート番号以外の設定(回線速度など)は全て同じ。各ノードは1-5番ノードを初期情報として保持した状態から起動する。
  2. 1-3番の回線速度を15kb/sに変更する
  3. 4-6番の回線速度を50kb/sに変更する
  4. 7-9番の回線速度を1000kb/sに変更する
  5. 2番ノードのアップロードフォルダに30個ポエムをいれる
  6. 観察

@ 1回目 結果

ダメ。起動時点で全く上流検索リンクを作れないノードが半数以上。
原因は、下流検索リンク接続してきたノードの情報をノード情報テーブルに登録していないため、ノード情報の拡散がうまくできていないからだと思えたので、その部分を修正した。

再チャレンジ。

@ 2回目 結果

微妙。とりあえず、全ノードが初期接続まではうまくできた。
回線速度を変更すると、そこそこうまく接続方向が変わっていく様子がうかがえるのだけど、本来2つ上流検索リンクを作れるはずが1つしか作れていないノードがちらほらいた。
どうやら、接続優先度の更新がうまくいっておらず、同じノードばかりに接続指向を繰り返して断られ続けているもよう。
コードを調べてみると、ノード情報の登録処理で、ノード情報テーブルに既に同じノード情報があったパターンが、壮大にバグってることが発覚。
(壮大->いろんなやつらがさまざまな方法でまずくさせている)

最終的には、検索用、接続用と2つ持っていたノード情報テーブルを1つにするという大掛かりな修正をしようとして、その途中でやめ。
この部分はあまりよく考えられていない気がしたので、もう一度よく考える必要がある。

ということで一時中止!

キーの拡散に関しては、うまくいっていて数秒後には2番ノードの保持するキーが全ノードに届いていた。

  • 追記

何度試していると、ネットワークが完全に分割される場合あった。
こうなると別のネットワーク上にあるファイルが全く見つからなくなる。
これは接続を定期的に切ってやる(別のノードに繋ぐように仕向ける)とそのうち分割されているネットワークが結合するので、切るタイミングさえきちんと決めてやれば、そんなに問題にならないかなと。

それと、たくさん起動して負荷が高い状態だからか、タスク間でうまく同期が取れていない処理がちらほら見えてきた。
特に設定変更時にノードタスクとコネクションタスクが再起動するあたりが最悪で、タイミングによってはUIタスクがデッドロックしているみたい・・・ので、修正要。