Overlay Weaverを使ってみる 1日目
Unstructured overlay と Structure overlayやChord プロトコルを活用したシステム開発の実際(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