若者ならオーバレイ大好きだろ全体に公開
2006年01月17日01:05
大好きかどうかはともかく、Overlay Weaver というソフトウェアをリリースしました。
コミュニティ: http://mixi.jp/view_community.pl?id=555162

オーバレイ構築ツールキット Overlay Weaver
http://overlayweaver.sf.net/index-j.html

コメント

シュドウ2006年01月17日 01:05
Overlay Weaver はオーバレイ構築ツールキットです。アプリケーション開発
に加えて、オーバレイのアルゴリズム設計もサポートします。

アプリケーション開発者に対しては、分散ハッシュ表 (DHT) やマルチキャス
トといった高レベルサービスに対する共通 API を提供します。この API を用
いることで、特定のトランスポートプロトコル、データベース、ルーティング
アルゴリズムに依存しないアプリケーションを開発できます。

Overlay Weaver は、ルーティングアルゴリズムとして Chord、Kademlia、
Pastry、Tapestry の実装を提供しています。ルーティング層の分割によって、
これらのアルゴリズムをたかだか数百ステップで実装することが可能となりま
した。ルーティング層は高レベルサービスの下位に位置し、ルーティングドラ
イバ、ルーティングアルゴリズム、およびメッセージングサービスから構成さ
れます。この分割によって、新規アルゴリズムの実装も容易になっています。
Overlay Weaver はまた、新たに実装したアルゴリズムを試験、評価、比較す
るためのエミュレータも提供しています。このエミュレータは数千の (仮想)
ノードを扱うことができ、大規模エミュレーションによるアルゴリズム間の公
正な比較を可能にします。

特徴:

- Java 5 で実装されています。
(IPv4 マルチキャストルータの一部は C です。)

- 複数のルーティングアルゴリズムの実装を提供しています:
Chord, Kademlia, Pastry, Tapestry。
iterative / recursive ルーティングを行う

- 2種類のルーティングドライバを提供しており、
任意のルーティングアルゴリズムと組み合わせて使うことができます。
(Kademlia の recursive ルーティング、を除く。)

- 分散環境エミュレータを提供しており、1 GB メモリの 32 ビットマシンで
4000 の (仮想) ノードをエミュレートできています。

- 通信層には 3種類の実装があります:UDP, TCP, エミュレータ実装。
UDP 実装は UDP hole punching を行います。

- 可視化ツール Messaging Visualizer を提供しています。
ノードと通信を動作中に可視化します。
エミュレータと実ネットワークの双方で動作します。

ウェブサイトには、スクリーンショットやデモも用意してあります。
御覧頂けますと幸いです。

本ツールキットを使ったアプリケーション開発、アルゴリズム研究、
テストベッド構築、運用等の活動を、可能な限りサポート致します。
御連絡、もしくは、ML への御参加を検討頂けますと幸いです。
du__92006年01月17日 01:56
おぉ、面白そうです。
じっくりと読ませていただきます。
Tom2006年01月17日 05:32
素晴らしいです。リリースおめでとうございます。
&勉強させていただきます!
2006年01月17日 08:43
芸者ならオーバーレイにみえてちょっとドキドキしてしまいました。
シュドウ2006年01月19日 16:33
ありがとうございます>皆様

これで僕は、情報交換や普及活動のためということで、堂々と仕事中に mixi を使えます :)
feb2006年01月20日 13:18
はじめまして
僕もp2pに興味があり、小さな勉強会も開いたことがあります。

質問があります。
「4000の仮想ノードをエミュレート」とのことですが、エミュレータと実ネットワーク間の互換性はどのように保証されているのですか?
シュドウ2006年01月20日 13:51
「互換性」が、上に載るアプリケーションの互換性という意味だとすれば、ウェブページの「概要」図1にあるMessaging Serviceの実装によって、です。

Messaging Serviceの実装として、UDPで通信する実装、TCPで通信する実装、単一Java仮想マシン上のスレッド間で通信する実装が用意してありまして、これを使う限りは、実ネットワーク上でもマシン1台上でも同じソフトが動く、と。

また、ひと口に「エミュレータ」と言っているのですが、次の2つのパートから成ります:
(1) 単一JVM上に複数のアプリを起動して制御する仕掛け
(2) 単一JVM上のアプリ(スレッド)間で通信をエミュレートする仕掛け。
前述したのは (2) についてです。

(2) は使わずに (1) だけを使うことで、Overlay Weaver とは関係ない (Java) アプリを1台上でたくさん動かすこともできます。
その場合、TCP, UDP のポート番号が衝突することを防ぐ必要があるかもしれないです。
feb2006年01月20日 14:23
すばやいお返事ありがとうございます。

定量的な互換性はどうでしょうか?
実ネットワークの場合、各ノードの間の通信コストは同じではないですよね。
シュドウ2006年01月20日 15:41
そうなんですよ。
それは今後の課題です。

アルゴリズムに(処理性能やネットワーク性能の)非均質性への配慮を含める場合には、非均質な環境をエミュレートしないといかんなあ、と考えてます。

議論や御質問は、よろしければ、Overlay Weaver の ML かコミュニティに書いていただけると嬉しいです。
feb2006年01月20日 16:13
仰る通りです。質問する場所を間違えました。

それにも関わらず、いろいろ答えて頂いてありがとうございました。
早速Overlay Weaverのコミュニティ、MLに参加させて頂きます。
シュドウ2006年01月20日 16:16
御興味を持っていただいただけでも大変感謝してます。