導入
最小要件
はじめる
お問い合わせ
Emissary は、P2P ベースのデータ駆動型ワークフロー エンジンであり、コンピューティング リソースの異種混合、場合によっては広範囲に分散された多層 P2P ネットワーク内で実行されます。ワークフローの旅程は、従来のワークフロー エンジンのように事前に計画されているわけではありませんが、データに関するさらなる情報が発見されると発見されます。通常、Emissary ワークフローではユーザーの操作はなく、データは完了状態に達するまで目標指向の方法で処理されます。
Emissary は高度に構成可能ですが、この基本実装ではほとんど何も行いません。このフレームワークのユーザーは、emissary.place.ServiceProviderPlace を拡張して emissary.core.IBaseDataObject ペイロードに対する作業を実行するクラスを提供することが期待されます。
さまざまなことが実行でき、ワークフローは、STUDY、ID、COORDINATE、TRANSFORM、ANALYZE、IO、REVIEW などの段階で管理されます。
ワークフローの指示を担当するクラスは、emissary.core.MobileAgent とそこから派生したクラスであり、ワークフローを介した一連の関連ペイロード オブジェクトのパスを管理し、利用可能なサービス、そのコスト、およびサービスを管理する emissary.directory.DirectoryPlace です。品質を維持し、P2P ネットワークの接続を維持します。
Linux または MacOSX オペレーティング システム
JDK11
Apache Maven 3.5+
必要なコンポーネントのインストール、ソース コードの取得、Emissary の構築と実行については、DEVELOPING.md ガイドを参照してください。
mvn clean package
実行して Emissary をコンパイル、テスト、パッケージ化します。
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9.132 s [INFO] Finished at: 2022-01-10T22:31:05Z [INFO] ------------------------------------------------------------------------
Emissary には、すべてを実行する 1 つの bash スクリプトがあります。 これは最上位の Emissary ディレクトリにあります。このスクリプトは、さまざまな機能を処理するために使用できるいくつかの Picocli コマンドを含む emissary.Emissary クラスを実行します。
emissaryスクリプトを引数なしで実行すると、すべての設定サブコマンドのリストと簡単な説明が表示されます。
./emissary
./emissary help
を実行すると、引数なしで実行した場合と同じ出力が得られます。 コマンドの詳細情報を参照したい場合は、help の後にコマンド名を追加します。 たとえば、次のサーバーコマンドを実行すると、すべての引数とその説明が表示されます。
./emissary help server
残りのコマンドにはすべて、設定できる(-b または --projectBase)引数がありますが、PROJECT_BASE と一致する必要があります。
config ディレクトリはデフォルトで /config ですが、 (-c または --config)を使用して渡すこともできます。 git checkout から実行する場合は、projectBase としてtargetを使用する必要があります。 開始する前に、target/config 内の設定ファイルを自由に変更してください。
ロギングは logback によって処理されます。 --logbackConfig引数を使用してカスタム ファイルを指定できます。
詳細については、各コマンドのヘルプ -c を参照してください。
このコマンドは、Emissary サーバーを起動し、設定されているすべての場所、乗車場所、および降車フィルターを初期化します。 -m または --modeが指定されていない場合は、スタンドアロン モードで起動します。 デフォルトでは、MobileAgent の数はマシンの仕様に基づいて計算されます。 最近のコンピューターでは、この値が高くなる可能性があります。 -a または --agentsを使用してエージェントの数を制御できます。 以下は実行例です。
./emissary server -a 2
さらに設定を行わないと、http://localhost:8001 で起動します。 その URL を参照する場合は、target/config/jetty-users.properties で定義されているユーザー名とパスワード (emissary と emissary123) を入力する必要があります。
デフォルトの PickUpPlace は、 target/data/InputDataからファイルを読み取るように構成されています。 ファイルをそのディレクトリにコピーすると、Emissary がそれらを処理することがわかります。 toUpper と toLower のみが構成されているため、出力はそれほど興味深いものではないことに注意してください。
エージェント コマンドは、構成されたホストの MobileAgent の数と、それらのエージェントの動作を表示します。 デフォルトでは、ポートは 9001 ですが、 -p または --port を使用して変更できます。
上記のサーバー コマンドから 8001 で実行していると仮定して、次のことを試してください。
./emissary agents -p 8001
プールは、ノードのエージェントを折りたたんだビューです。 これもデフォルトのポート 9001 です。上記で起動したスタンドアロン サーバーで実行するには、次のコマンドを実行します。
./emissary pool -p 8001
このコマンドは、すべてのノードをよりわかりやすく表示できるため、クラスターにとってより便利です。
Env コマンドを使用するには、サーバーが実行されている必要があります。 PROJECT_BASE や BIN_DIR などのいくつかの構成値をサーバーに要求します。 引数を指定しないと、フォーマットされていない JSON 応答がダンプされます。
./emissary env
ただし、bash でのソースに適した応答をダンプすることもできます。
./emissary env --bashable
Emissary サーバーを起動すると、実際にこのエンドポイントが呼び出され、設定された変数を含む $PROJECT_BASE}/env.sh がダンプされます。 これは、シェル スクリプトがsource $PROJECT_BASE}/env.sh
、他の場所での設定を気にせずにそれらの変数を使用できるようにするために行われます。
config コマンドを使用すると、指定した場所/サービス/クラスの有効な設定を確認できます。 Emissary はフレーバーを使用するため、このコマンドはすべてのフレーバーが適用された後のクラスの構成を表示します。このコマンドを使用すると、ホストに-h
(デフォルトは localhost)、ポートに-p
(デフォルトは 8001) を指定することで、実行中の Emissary ノードに接続できます。ポート 8001 でローカルで実行されている Emissary に接続するには、次のコマンドのいずれかが機能します。
./emissary config --place emissary.place.sample.ToLowerPlace ./emissary config --place emissary.place.sample.ToLowerPlace -h localhost -p 8001
オプションで、 --offline
を使用してオフライン モードを指定し、ローカルの CONFIG_DIR で指定された構成ファイルを使用できます。
./emissary config --place emissary.place.sample.ToLowerPlace --offline
オフライン モードでは、フレーバーを提供して構成の違いを確認できます。
./emissary config --place emissary.place.sample.ToLowerPlace --offline --flavor STANDALONE,TESTING
これらは、効果的な構成を確認するのに役立ちますが、詳細モードで実行して、すべての構成ファイルと最終出力を確認することもできます。これは--detailed
フラグで制御されます。
./emissary config --place emissary.place.sample.ToLowerPlace --detailed
またはオフライン モードの場合:
./emissary config --place emissary.place.sample.ToLowerPlace --offline --detailed
Emissary はスタンドアロンでも楽しいですが、実際の作業にはクラスターを実行する方が適しています。 クラスター化を実行する方法はスタンドアロンと似ていますが、ノードに他のノードに接続するように指示するには、 -m クラスターを実行する必要があります。 クラスター化モードでは、Emissary は PickUpPlace の代わりに PickUpClient も起動するため、フィーダーを起動する必要があります。
target/config/peers.cfg を参照して、ランデブー ピアを確認します。 この場合、3 つあります。ポート 8001 および 9001 で実行されているノードは単なるエミサリー ノードです。 7001 で実行されているノードはフィーダーです。 そこで、2 つの異なる端末で 8001 と 9001 を起動してみましょう。
./emissary server -a 2 -m cluster ./emissary server -a 2 -m cluster -p 9001
これらのノードはすべてポート 8001、9001、および 7001 について認識しているため、接続を試行し続けるとログにエラーが表示されます。
実際の展開では、同じノード上で複数の Emissary プロセスを実行しないことに注意してください。 -hを使用してホスト名を構成できます。
ノードがポート 8001 および 9001 で起動された場合、フィーダーを起動する必要があります。 feed コマンドはデフォルトでポート 7001 を使用しますが、フィーダーが読み取るディレクトリを設定する必要があります。 そのディレクトリにドロップされたファイルはワーカー ノードで使用できるようになり、作業はクラスター間で分散される必要があります。 次のコマンドでフィードを開始します
mkdir ~/Desktop/feed1 ./emissary feed -i ~/Desktop/feed1/
ブラウザで http://localhost:8001、http://localhost:9001、および http://localhost:7001 にアクセスし、設定された場所を確認できるはずです。 いくつかのファイルを ~/Desktop/feed1 にドロップし、2 つのノードがそれらを処理することを確認します。 処理が開始されるまでに 1 分ほどかかる場合があります
クラスターモードのエージェントには、モバイルエージェントに関する詳細が再び表示されます。 これは、設定したノード (デフォルトでは localhost:9001) から始まり、認識しているすべてのノードを呼び出して、同じ情報を取得します。 次のように実行します。
./emissary agents --cluster
クラスターモードのプールも、スタンドアロンのプールと同じことを行います。 デフォルトではノード (locahost:9001) から開始され、その後、認識しているすべてのノードに移動し、クラスターの折りたたまれたビューを集約します。 で実行します
./emissary pool --cluster
トポロジは、設定されたノード (デフォルトでは localhost:8001) と通信し、認識しているすべてのノードと通信します。応答はこれらすべてのノードが認識しているものであるため、クラスターのネットワーク トポロジを構築できます。で実行します
./emissary topology
キーストアとキーストアのパスワードは、emissary.client.EmissaryClient-SSL.cfg ファイルにあります。 デフォルトで含まれ、構成されているのは、この機能のテストに使用できるサンプル キーストアです。実稼働環境でサンプル キーストアを使用することはお勧めしません。 独自のキーストアを使用するには、emissary.client.EmissaryClient-SSL.cfg ファイルの構成値を変更します。
スタンドアロン
./emissary server -p 8443 --ssl --disableSniHostCheck
クラスター化された
./emissary server -p 8443 --ssl --disableSniHostCheck --mode cluster ./emissary server -p 9443 --ssl --disableSniHostCheck --mode cluster mkdir ~/Desktop/feed1 ./emissary feed -p 7443 --ssl --disableSniHostCheck -i ~/Desktop/feed1/
このプロジェクトに関してご質問や懸念がある場合は、[email protected] までご連絡ください。
セキュリティの質問と脆弱性の報告については、SECURITY.md を参照してください。