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

[English | Japanese]
last-updated: February 13, 2011

このチュートリアルでは、分散環境エミュレータを使って、 その上で複数の 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

# keeps the emulator running
schedule inf control all halt
このシナリオはまず、ノードを 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: ac4d64e281e1ad8670db2c3123a842874c394f4d:emu0:3997
Routing table:
predecessor:
 5de550ebe439e30918a0d11c6173aa0a7df6afff: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 (Sun Feb 13 21:52:18 JST 2011): get a_key
key:   5d8b23c071cb95840397933b5969c69413fc87cf
value: a_value 10798

発展

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