Hatena::ブログ(Diary)

Ryoの開発日記 RSSフィード

"bitcoin:1PdaRuCYRCtxHpRowuSQDjCNe6Won7J8kk"



個人サイト( ryogrid.net )|| プロフィール || 業績等
大学時代の研究 || ddkの日記 || tyouiifanの日記 || Yoshikuniの日記
あなくつと愉快なソフトウェアたち|| CLKs
Ceekz Logs||RyoのFacebook||Ryoのmixi|| 登 大遊@筑波大学情報学類の SoftEtherVPN日記
はてなブックマークをマッシュアップした情報推薦サービス
TOFU-G||高校時代の活動|| 分散マシン操作ライブラリ Svengali
Linkedin|| Google+|| ひらめいったー
Ryoのつぶやき ||Ryoに響いた言葉 ||Ryoの本棚 ||スマホでキャッチボールのキャチボ
github|| 顔面偏差値スカウター||機械学習でFXシステムトレード

2008-01-01 元旦

P2Pニコ動キャッシュ共有プロキシ実験結果

P2Pニコ動キャッシュ共有プロキシ作ってみた(http://d.hatena.ne.jp/kanbayashi/20071229/p1)の続報です。


合計8人の方々にご協力頂き実験を行いました。皆様ありがとうございました。


結果ですが、やはりNATを挟んだ環境でのP2PSocketを用いた通信には厳しいものがありそうです。

というのも、P2Pネットワークへの参加人数が8人に増えてもネットワークの安定性はそれほど変わらなかったのです。

実際に試してみると、10回コネクションを張ろうとして1回成功すると良い方という感じでした。

#コネクションさえ張れてしまえば数十メガぐらいのデータの送受信はできましたが

完全にピュアP2Pネットワーク(JXTA*1ネットワークにはトポロジを管理する中央サーバなどがいない)*2で、継続的なコネクションを貼ってデータ(結構大きな)を送受信しようというのは、そもそも無茶があるのかもしれません。

#ちなみに、Winnyなどは小さなピース単位データを送受信するので、継続的なコネクションは必要ないはずです。


そんなわけで、私の作ったプロキシは(現状の実装では)使い物になりそうにありません。期待させてすいませんでした。


ただ、解決案もない事はないです。


    • 通信路の確保をもっと賢く

現状でのコネクションの管理としては、何かファイルが欲しかったら、1つのノードを決めてそのノードコネクションを貼り、データの送受信が終わったら切ってしまうという実装になっています。

これを、同時に複数ノード接続をかけるようにしてうまくコネクションが貼れたところとデータを送受信して、それが終わったらコネクションをキャッシュしておくというように変えます。こうすればコネクション貼れない問題はある程度は軽減できるかもしれません。

#あるビデオキャッシュを保持しているノードがたくさんいるような状況にならないといけない、つまり利用者がかなり増えないとこの解決策は有効にならないですが。。


    • JXTAをもっとちゃんと使う1

ご存知の通り、P2PSocketはJXTAを簡便に使えるようにするためのラッパーライブラリです。

現状では、そのようなP2PSocketをそのまま普通に使っていますが、そうではなく、P2PSocketに手を加えて、JXTA使用方法を変えてやることで、通信路の信頼度を上げられる可能性があります。

具体的には、JXTAではネットワーク内で自分がココにいるよ〜っという情報を他のノード達に知らせるために、アドバタイズメントという小さなデータをばらまくのですが、それの量を変えたりすることでコネクション確立の信頼性を上げられるかもしれません。

#推測ですが


    • JXTAをもっとちゃんと使う2

P2PSocketではいくつか用意されているランデブーピアというノードのうちの一つ(リストを取得するためのCGIがある)に最初に接続するようなのですが、そこの部分を自分で用意した唯一のランデブーピアに接続させるようにすると、コネクションをちゃんと貼れる確率が上げられるような気がします。

#特定のプロパティを設定しておくとP2PSocketはそのランデブーピアに接続しに行ってくれる?

#要調査


しかし、以上の解決案が仮にある程度有効だったとしても、P2PSocketの動作を見ている限り、あまりよいパフォーマンスは実現できない気がしています。

第三者のノードが入ってのリレーを行うような環境で数十メガも送れるような継続的なコネクションを提供してもらうというのは、やはり厳しい注文だと思うからです。

#P2Pネットワークでは、中間ノードが居なくなるなんて事が当然起きるわけです


真面目に設計するなら、継続的なコネクションを必要としない、ファイルピース単位で送受信するような仕組みにする必要があるでしょう。


↓のエントリでそれについて説明します。

P2Pニコ動キャッシュ共有プロキシ実装案(http://d.hatena.ne.jp/kanbayashi/20080101/p2)

*1:参考-> http://www.shudo.net/article/JXTA-DHT-20040408/

*2ランデブーピアというやつがそれに近いことをしているみたいではありますが

scalarscalar 2008/01/03 10:03 ランデブーピアはkanbayashiさんが用意して、そこに接続するように
したのですか?
JXTA はランデブーに接続できないと上手く働かないし、公開されている
ランデブーは私が試した限りではかなり不安定であまり接続できなかった
記憶があるので、どのようにランデブーを確保したのか興味があります。

kanbayashikanbayashi 2008/01/03 14:21 特に何をしたわけではないのですが、毎回、普通にランデブーピアにはつながっていたようです(P2PSocketが吐き出すログを見るか限り)。
#P2PSocketがうまいことしてくれている?

scalarさんが試したのはいつごろの話ですか?

kanbayashikanbayashi 2008/01/03 14:42 P2PSocketのコードを眺めてみたらこんなURLがハードコードされていました

http://rdv.jxtahosts.net/cgi-bin/rendezvous.cgi?2

ここで使えるランデブーピアを調べているようですね。

kanbayashikanbayashi 2008/01/03 15:08 自前でランデブーピアを用意して、みんなそこに接続させるようにすれば、相互接続性はかなりよくなるのかもしれませんね。


面倒そうだけど。。

kanbayashikanbayashi 2008/01/03 15:26 ちなみに
http://rdv.jxtahosts.net/cgi-bin/rendezvous.cgi?2
で提供されるアドレスをwhoisで調べたら、全てSunのものでした。


なるほどですねぇw

scalarscalar 2008/01/03 16:07 > 毎回、普通にランデブーピアにはつながっていたようです(P2PSocketが吐き出すログを見るか限り)。
P2PSocket の実装が優秀なのか、もしくは私の実装がヘボ
なのか…。私は JXTA のサンプルプログラムから書き起こした
ので、最新バージョンの JXTA には合わなかったのかも
しれません(PDF の Programmer’s Guide のやつ)。

> scalarさんが試したのはいつごろの話ですか?
2006年9月〜2007年3月くらいです。

> 自前でランデブーピアを用意して、みんなそこに接続させるようにすれば、相互接続性はかなりよくなるのかもしれませんね。
ポートを空けないといけないのが面倒ですね。それ以外だと
メソッドを1個呼ぶだけなのでそんなに大変ではないかと。

> http://rdv.jxtahosts.net/cgi-bin/rendezvous.cgi?2
今見てみると、以前には見たことがない IP みたいです。
以前はもっといろいろなホスト名やら IP があったんですが、
廃止、整理されたのかもしれません。新しいランデブーは
ちゃんと動くタイプなのかもしれないですね。

scalarscalar 2008/01/03 16:14 もしかして、v2.5 を使ってらっしゃいます?今、JXTA のサイトを見たら v2.5 ではかなり信頼性向上がなされているみたいですね。
私は v2.4.1 を使っていたので、その差が出たかもしれないです。

kanbayashikanbayashi 2008/01/03 16:46 >scalarさん
P2PSocket自体が結構前からメンテナンスされておりませんので、バージョンはかなり古いと思います。

2.2とか2.3とかかな

scalarscalar 2008/01/03 16:54 >kanbayashiさん
JXTA のバージョンが2.2,2.3あたりだと2.4.1と似た感じでしょうね。そうなると、用意されているランデブーピアが良いものになったのかな。
参考になりました。ありがとうございます。

kanbayashikanbayashi 2008/01/03 17:24 ちなみに、ランデブーピアだけ自前で用意して、リレーピアは
http://rdv.jxtahosts.net/cgi-bin/relays.cgi?2
のものを使うということはできるのでしょうかね?

scalarscalar 2008/01/03 18:13 たぶん可能です。Configurator への設定でランデブーとリレーは別々の項目で設定できますから(JXTA ver2.4.1の場合ですが)。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証