ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Overlay WeaverコミュのOW をデーモン・プログラムとして動かすには?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
新たなトピックを作るべきか迷ったんだけど、
OW を使う上では一般的な質問かと思ったので…

複数のサーバーに OW をインストールして DHT の
実験環境を作ろうとしています。で OW 自体は
無事に動いているようなのですが、owdhtshell を
デーモン的に起動する方法が分かりません。

ソースやホームページを探しまくった結果、
http://overlayweaver.sourceforge.net/demo/index-j.html
に掲載されている DemoScenario が参考になるのかな?と
当たりをつけたのですが、一体どういう仕掛けで
動いているのか良く分からないので足踏み状態です。

ご存知の方、どなたか教えていただけませんか?

コメント(15)

owdhtshell コマンドに -n オプションを与えると、標準入力からのコマンド読み込みをしなくなります。
いかがでしょうか。

 マニュアル: DHTシェル
 http://overlayweaver.sourceforge.net/doc/manual/dhtshell/index-j.html
> owdhtshell コマンドに -n オプションを与えると、
> 標準入力からのコマンド読み込みをしなくなります。
> いかがでしょうか。

-n オプションと -p オプションを併用した場合は
どうなりますか?telnet ポートは有効?
いずれにせよ DHT シェルの init コマンドを実行しないと
オーバレイには参加できないんですよね?

何か勘違いしてますか?
> -n オプションと -p オプションを併用した場合は
> どうなりますか?telnet ポートは有効?

その通りで、telnet ポートだけは有効になります。

> いずれにせよ DHT シェルの init コマンドを実行しないと
> オーバレイには参加できないんですよね?

init コマンドの他にも、起動時のコマンドライン引数として最初のコンタクト先を与えることもできます:

| コマンド行引数が与えられた場合、 DHT シェルはそのノードと通信することでオーバレイに参加します。
> init コマンドの他にも、起動時のコマンドライン引数
> として最初のコンタクト先を与えることもできます:
> | コマンド行引数が与えられた場合、DHT シェルは
> そのノードと通信することでオーバレイに参加します。

了解。つまり…

 owdhtshell -n -p 1000 192.168.1.50:4800

で起動するとポート番号 1000 で telnet 接続が出来、
起動時にIPアドレス 192.186.1.50 のポート番号 4800 に
接続しにいくわけですね?

ちなみにノード間の通信プロトコルは XML-RPC なんですか?
それともクライアントとのインタフェースのみ XML-RPC?
> ちなみにノード間の通信プロトコルは XML-RPC なんですか?
> それともクライアントとのインタフェースのみ XML-RPC?

その通りです。
ノード間の通信プロトコルは、独自のものです。
しつこく食い下がって申し訳ないのですが…

Linux をインストールした1台のPCで
数十台分のノードを動かしたいと思っていますが、
ノード分だけをコマンドを起動(つまりプロセスを生成)
する方法しかないないですか?

重くならないかなぁと思ったり…
> Linux をインストールした1台のPCで
> 数十台分のノードを動かしたいと思っていますが、

その場合はエミュレータを使って、
複数のノードを同一Java仮想マシン上で動かす
っていう手があります。

消費メモリ量は、1,000ノード動作させて、Chord で 17X MB、Tapestry で 13X MB っていうところです。
(Linux/x86 の場合)
その場合の、owemu コマンドに与えるシナリオの内容は、例えば

class ow.tool.dhtshell.Main

arg -p 10000
daemon

arg -p 10001
daemon

arg -p 10002
invoke

このシナリオでは、daemon (Java用語)(*) として2ノード、非daemonとして1ノードが起動されます。

(*) Java仮想マシンは、非daemonスレッドが1つもなくなった時点で、実行を終了します。
確かエミュレータは「分散環境を
エミュレート」してるんですよね?
で 1000 ノード分をエミュレートしている PC を 10 台集めて
合計 10000 ノードの構造化オーバーレイは構築可能?

# これが出来たらすごいことだと思うんだけど…
> で 1000 ノード分をエミュレートしている PC を 10 台集めて
> 合計 10000 ノードの構造化オーバーレイは構築可能?

実はそういう仕掛けも2通りのやりかたで実装しました。

で、現状、1台でエミュレートするよりむしろスケーラビリティ (エミュレート可能なノード数) が低くなってしまっていて、その状態で放ってあります。
そこをもう一度がんばって作り直せば。。。
> で、現状、1台でエミュレートするよりむしろ
> スケーラビリティ (エミュレート可能なノード数) が
> 低くなってしまっていて、その状態で放ってあります。

了解。そこは「乞うご期待」ということにして…

実験の都合もあるので、
取り合えず daemon-front-end を C で
書いてみようと思います。

まず、ノード分の OW を folk して管理する機能と、
それから telnet ポートがノード分開かれるのでは
ちょっと辛いので、そこを1ポートに集約する機能と、
あと visualizer のための受け口ポートを開いて、
送られてきた情報をログかなんかに退避する機能
…ぐらいかな?

OW で上記の機能がサポートされれば、
1つ目の機能は書き直せばよいから。
さらに性懲りもなく質問です。

おそらく DHT が内部的に使用するデータベースは
ワーキング・ディレクトリに置かれるのだろうと
推測してますが、OW のデフォルトのワーキング・
ディレクトリはカレント・ディレクトリになっていますよね?
Java の daemon (Thread?) を複数起動した場合、
このデータベースなどが競合することはありませんか?
あるいは JavaVM 自体を fork などで複数起動した
場合はどうでしょうか?

# たぶんプロセスごとワーキング・ディレクトリを
# 明示的に指定して起動しなければならないと
# 思うんだが…一応確認を。
デフォルトでは、オンメモリ (のハッシュ表) です。
3種類用意してあって、切り替えることができます:
 (1) オンメモリ(ハッシュ表)
 (2) (1) + たまにチェックポインティング
 (3) Berkeley DB Java Edition

どれを使うかは、DHTFactory から DHT 型オブジェクトを入手する途中で設定できる他、ソースコードを書き換えちゃう手もあります。
src/ow/dht/DHTConfiguration.java の 42行目:
... DEFAULT_DIRECTORY_TYPE = "VolatileMap";
を書き換えます。

(2),(3) の場合はディスク上にファイルを作ります。どこに作るかは、45行目:
... DEFAULT_WORKING_DIR = ".";
がデフォルト値です。

衝突を避けるには、owdhtshell コマンドでは -d オプションを使います。-d <working dir> と指定すると、そのディレクトリ以下にファイルを作るようにします。
> デフォルトでは、オンメモリ (のハッシュ表) です。

なるほど。では、デフォルトならワーキング・ディレクトリに
置かれるファイルについてアクセス競合を心配する必要は
ないのですね?

> どれを使うかは、DHTFactory から DHT 型オブジェクトを
> 入手する途中で設定できる他、ソースコードを書き換え
> ちゃう手もあります。

起動オプションで切り替えられるわけではない?


> (2),(3) の場合はディスク上にファイルを作ります。
> どこに作るかは、45行目:
> ... DEFAULT_WORKING_DIR = ".";
> がデフォルト値です。
>
> 衝突を避けるには、owdhtshell コマンドでは
> -d オプションを使います。-d <working dir> と
> 指定すると、そのディレクトリ以下にファイルを
> 作るようにします。

衝突が発生するのは上記 (2)、(3) の場合だけですよね?
> では、デフォルトならワーキング・ディレクトリに
> 置かれるファイルについてアクセス競合を心配する必要は
> ないのですね?

はい、その通りです。

> 起動オプションで切り替えられるわけではない?

はい、起動時のオプションで切り替えることはできません。
できるようにすることは簡単なのですが、あまり需要もないかな、と思ってました。

ルーティングアルゴリズム (Chord, ...) とか、lookup style (iterative/recursive) はオプションで指定できます。

> 衝突が発生するのは上記 (2)、(3) の場合だけですよね?

はい、そうです。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Overlay Weaver 更新情報

Overlay Weaverのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。