計算機 1台上での複数ノードのエミュレーション

[English | Japanese]
last-modified: April 18, 2009

このチュートリアルでは、分散環境エミュレータを使って、 その上で複数の DHT シェルを動作させます。

ツールキットはインストール (展開 & ビルド) 済みであると仮定します。 bin ディレクトリ以下のコマンドを実行するための、 環境変数 PATH の設定も済んでいると仮定します。 ただし、PATH の設定なしに、ディレクトリを指定して起動しても問題ありません。

シナリオファイルの準備

エミュレータはシナリオをファイル、またはウェブから読み込みます。 エミュレーションに先だってシナリオを用意する必要があります。

次の内容で、 SimpleScenario という名前のファイルを用意します。

timeoffset 2000

# invokes the first node
class ow.tool.dhtshell.Main
arg -p 10000
schedule 0 invoke

# invokes 3 nodes, which contacts the first node (emu0) to join an overlay
arg emu0
schedule 1000,1000,3 invoke
このシナリオはまず、ノードを 1つ起動します。 起動されたノードは TCP の 10000番ポートでネットワーク越しの接続を待ち、 そこから DHT シェルのコマンドを読み込みます。 続いて 3つのノードを起動します。 これら 3ノードは最初に起動されたノード (emu0) と 通信することでオーバレイに参加します。

エミュレータの起動

次のコマンドでエミュレータを実行します。

owemu SimpleScenario
以下の通り、4つの DHT シェルからのメッセージが出力されます。
...
DHT configuration:
  hostname:port:     emu3:3997
  transport type:    UDP
  routing algorithm: Chord
  routing style:     Iterative
  directory type:    VolatileMap
  working directory: .
  initial contact:   emu0:3997
A DHT started.

DHT シェルの制御 (手動)

オプションで指定された通り、 最初の DHT シェルは 10000 番ポートで接続を待っています。 このシェルに接続します。

別のキャラクタ端末を開き、DHT シェルに telnet します。

telnet localhost 10000
コマンド入力を促すメッセージが出力されます。
Ready.
status コマンドで、ノードの経路表を見ます。
status
ID and address:
 040aa927c1d39e8a2ad5a91d10548343ec7d8a52:emu0:3997
Routing table:
predecessor:
 de5db97b4393177aea00325099a080b7218a708e:emu1:3997
successor list: [
...
quit コマンドでシェルを抜けます。
quit

次に進む前に、例えば Ctrl + C を押して、 エミュレータを終了させておきます。

DHT シェルの制御 (シナリオ)

続いては、より高度なシナリオを実行します。 AdvancedScenario という名前で、次の内容を持つファイルを用意します。

timeoffset 2000

# invokes the first node
class ow.tool.dhtshell.Main
arg -p 10000
schedule 0 invoke

# invokes 3 nodes
arg
schedule 1000,1000,3 invoke

timeoffset 7000

# 3 nodes join an overlay
schedule 0 control 1 init emu0
schedule 1000 control 2 init emu0
schedule 2000 control 3 init emu0

# put and get
schedule 4000 control 1 put a_key a_value
schedule 5000 control 1 get a_key
このシナリオは 4つの DHT シェルを起動して制御します。 制御のためには、先ほどのシナリオにはなかったコマンド "schedule" を使います。 このコマンドは、各 DHT シェルへのコマンド送信をスケジュールします。 例えば "schedule 5000 control 1 get a_key" というコマンドは、 ある時刻の 5000ミリ秒後に、 仮想計算機 1番 (emu1) 上の DHT シェルに対して "get a_key" というコマンドを送信するという指示です。 ある時刻とは、そのコマンドより前の "timeoffset" コマンドで 指定された 7000ミリ秒を指します。

このシナリオファイルを与えてエミュレータを実行します。

owemu AdvancedScenario
2つめの DHT シェルに対する get コマンドの結果を見ることができます。
...
control 1: get a_key
key:   5d8b23c071cb95840397933b5969c69413fc87cf
value: a_value 599 0xe5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4

発展

このウェブサイト上にあるデモは、もう少し複雑なシナリオを使います。 このシナリオは、DHT シェルだけでなく Overlay Visualizer も起動します。 一般的な PC、例えばメモリ 8 GB、2.7 GHz Athlon LE-1640B 上で、 エミュレータは 250,000 ノードを動作させることができています。 以下のアーカイブには、10,000 ノードを起動 するシナリオが含まれています。 エミュレータにはここで紹介した以外の機能もあります。 一般の Java アプリケーションを起動したり、 ウェブからシナリオを読み込んだり、 複数の計算機を用いてエミュレーションを行うことが可能です。 詳しくはマニュアルを参照して下さい。 DHT シェルには statusquit 以外のコマンドもあります。 詳しくはマニュアルを参照して下さい。
Return to Documents page
Return to Overlay Viewer main page