Overlay Weaverを使ってみる 1日目

Unstructured overlay と Structure overlayChord プロトコルを活用したシステム開発の実際(pdf)を読んでいたら,Overlay Weaverなるものを見つけた.このツールは…

Overlay Weaver: An Overlay Construction Toolkit
Overlay Weaver はオーバレイ構築ツールキットです。 アプリケーション開発に加えて、 オーバレイのアルゴリズム設計もサポートします。

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

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

なるものらしい.

やったこと

ソースコードやバイナリは先のサイトでダウンロードしたけれど,シェルを立ち上げたり,エミュレータなるものを立ち上げてみただけで,チュートリアルにある以上のことはしていない.
今回はとりあえず,Overlay Weaver: Screenshots, Video and Demoのoverlayweaver-signed.jarを使って視覚的に遊んでみた.(DemoScenarioというシナリオを弄って,アルゴリズムをChordから変更してみたりした)

シナリオの変更…

最初のDemoScenarioは

# Invokes an Overlay Visualizer and 20 instances of DHT shell

timeoffset 2000

# invokes an Ovelray Visualizer
class ow.tool.visualizer.Main
schedule 0 invoke

# invokes the 1st DHT shell
class ow.tool.dhtshell.Main
#class ow.tool.mcastshell.Main
arg -m emu0
schedule 6000 invoke

# invokes 19 DHT shells
arg -m emu0 emu1
schedule 6000,1000,19 invoke

# emu1, emu13, emu6 and emu12 periodically keep querying
schedule 25000,4000 control 1 get mno
schedule 26000,4000 control 13 get yyy
schedule 27000,4000 control 6 get def
schedule 28000,4000 control 12 get ddd

というもので,20個のノードが生成され,それがルーティングの様式はIterative routing ,ルーティングアルゴリズムはChordで動作する.

これを以下のように変更する.

# Invokes an Overlay Visualizer and 20 instances of DHT shell

timeoffset 2000

# invokes an Ovelray Visualizer
class ow.tool.visualizer.Main
schedule 0 invoke

# invokes the 1st DHT shell
class ow.tool.dhtshell.Main
#class ow.tool.mcastshell.Main
arg -m emu0
schedule 6000 invoke

# invokes 19 DHT shells
arg -m emu0 emu1
schedule 6000,1000,6 invoke

# emu1, emu13, emu6 and emu12 periodically keep querying
schedule 15000,4000 control 1 get mno
#schedule 26000,4000 control 13 get yyy
schedule 17000,4000 control 6 get def
#schedule 28000,4000 control 12 get ddd

と,7個のノードが生成され,それがルーティングの様式はIterative routing ,ルーティングアルゴリズムはChordで動作する.

ルーティングアルゴリズムを変更する…

さらに

# Invokes an Overlay Visualizer and 20 instances of DHT shell

timeoffset 2000

# invokes an Ovelray Visualizer
class ow.tool.visualizer.Main
schedule 0 invoke

# invokes the 1st DHT shell
class ow.tool.dhtshell.Main
#class ow.tool.mcastshell.Main
arg -m emu0 -a Koorde
schedule 6000 invoke

# invokes 19 DHT shells
arg -m emu0 emu1 -a Koorde
schedule 6000,1000,6 invoke

# emu1, emu13, emu6 and emu12 periodically keep querying
schedule 15000,4000,100 control 1 get mno
#schedule 26000,4000 control 13 get yyy
schedule 17000,4000,100 control 3 get def
#schedule 28000,4000 control 12 get ddd

とすると,ルーティングアルゴリズムがChordからKoordeに変わる.(最後のほうの引数も多少変更しないと動いていない…感じがするので,直したほうがいい)
追加した『-a Koorde』の部分を『-a LinearWalker』にしても動作します.それ以外,Kademlia,Pastry,Tapestryでも動作する…ようだけど,なんかおかしい.Tapestryはまともに動いているのかも知れない.いや,動いて無いな……orz



[P2P]ブラウザだけで分散ハッシュテーブル(DHT)を体感しよう!: Tomo’s HotLine