2

私はここで問題を抱えています。さまざまな交通シミュレーション モデルの統合を可能にするフレームワークを構築することを目指しています。この統合は、シミュレーション間でのリンク接続、リンク コスト、および車両の共有に基づいています。

分散シミュレーションを行うために、「コーディネーター」 (スター トポロジー) を用意する予定です。参加しているすべてのシミュレーションは、単純に登録され、コーディネーターとのみ対話します。次に、コーディネーターは、各シミュレーション間のさまざまなタスクの実行を調整します。

分布の問題の簡単な例は、1 つのシミュレーションが道路などの特定のオブジェクトを「担当」している場合です。そしてもう一つは、他の道路の「担当」です。ただし、これらの道路は相互接続されています (したがって、これらのシミュレーション間の同期が必要であり、データを交換したり、メソッドをリモートで呼び出したりできる必要があります)。

私は RMI を見てきましたが、このタスクに適していると考えています。(オーバーワイヤ シグナリング規則を作成しなければならないことを抽象化するため)。

これは正気ですか?ここでの問題は、シミュレーション間の明示的な同期を確保するために、シミュレーション参加者がデータ ストレージの一部を「コーディネーター」に集中させる必要があることです。さらに、一部のシミュレーションでは、他のシミュレーションのコンポーネントまたはメソッドが必要になる場合があります。(したがって、RMIを使用するという考えです)。

私の基本的なアプローチは、「コーディネーター」に巨大な RMI レジストリーを実行させることです。また、すべてのシミュレーションは、レジストリ内のすべてを検索するだけで、各ステップで正しいオブジェクトが使用されるようにします。

この道を進むためのヒントはありますか?

4

8 に答える 8

10

Hazelcastもチェックしてみてください。Hazelcast は、キュー、トピック、マップ、セット、リスト、ロック、およびエグゼキュータ サービスのオープン ソース トランザクション分散/パーティション実装です。操作は非常に簡単です。クラスパスに hazelcast.jar を追加してコーディングを開始するだけです。設定はほとんど必要ありません。

Runnable、Callable タスクを分散方式で実行することに関心がある場合は、http://code.google.com/docreader/#p=hazelcastで Distributed Executor Service のドキュメントを確認してください。

Hazelcastは Apache ライセンスの下でリリースされ、エンタープライズ グレードのサポートも利用できます。

于 2009-02-04T21:54:12.767 に答える
5

これは正気ですか?私見いいえ。そして、その理由をお話しします。しかし、最初に、これは複雑なトピックであるという免責事項を追加します。そのため、回答は表面をかじっただけと見なす必要があります。

最初に、同じことを繰り返す代わりに、私が少し前に書いたJava グリッド/クラスター テクノロジの概要を紹介します。ほぼ完全なリストです。

スター トポロジは、ポイント ツー ポイントが単純であり、キー コントローラー ロジックの集中化も単純であるため、「ナイーブ」な (悪い意味でという意味ではありません) 実装にとって「自然」です。ただし、耐障害性はありません。スケーラビリティの問題と単一のボトルネックが発生します。これは、コミュニケーションの非効率性をもたらします (つまり、ポイントはセンターを介して 2 段階のプロセスを介して通信します)。

これに本当に必要なのは、おそらくクラスター (データ/計算グリッドではなく) ソリューションであり、 Terracottaを参照することをお勧めします。理想的には、Oracle Coherenceを検討することをお勧めしますが、(無料に比べて) 高価であることは間違いありません。しかし、それは素晴らしい製品です。

これら 2 つの製品はさまざまな方法で使用できますが、両方のコアはキャッシュを分散マップのように扱うことです。何かを入れたり、取り出したりして、キャッシュを変更するコードを起動します。この点でのコヒーレンス (私はよりよく知っています) は、非常にうまくスケールします。これらは、より「サーバー」ベースの製品ですが、真のクラスター用です。

より分散されたモデルを検討している場合は、おそらく SOA ベースのアプローチを検討する必要があります。

于 2009-02-03T12:53:24.857 に答える
0

JINI を見てみましょう。役に立つかもしれません。

于 2009-02-03T12:36:07.993 に答える
0

私が見た限り、すべてグリッドとクラウド コンピューティングに焦点を当てている他の回答への追加として、シミュレーション モデルにはシミュレーション時間という 1 つの固有の特性があることに注意してください。

分散シミュレーション モデルを並行して同期して実行すると、次の 2 つのオプションが表示されます。

  • 各シミュレーション モデルに独自のシミュレーション クロックとイベント リストがある場合、これらをネットワーク経由で同期する必要があります。
  • あるいは、すべての分散 (サブ) モデルの「時間を刻む」単一のシミュレーション クロックとイベント リストが存在する可能性があります。

最初のオプションは、ハイ レベル アーキテクチャ (HLA) について広範囲に調査されています

ただし、2 番目のオプションはよりシンプルで、オーバーヘッドが少ないように思えます。

于 2009-05-03T21:59:26.057 に答える
0

GridGainは良い代替手段です。それらには、「分割と集約の直接 API サポート」と「分散タスク セッション」を備えた map/reduce 実装があります。それらの例を参照して、それらのいくつかがニーズに適合するかどうかを確認できます。

于 2009-02-03T15:21:01.500 に答える
0

Jini、具体的には Javaspaces は、この問題への単純なアプローチを開始するのに適した場所です。Javaspaces を使用すると、マスター (この場合はコーディネーター) がタスクを Javaspace に書き込み、ワーカーがそれらのタスクをクエリして処理し、結果をマスターに書き戻す、マスター-ワーカー モデルを実装できます。あなたの問題は恥ずかしいほど並列ではなく、ワーカーはデータを同期/交換する必要があるため、ソリューションが複雑になります。

Javaspace を使用すると、プレーンな RMI (デフォルトの「ワイヤ プロトコル」として内部で Jini フレームワークによって使用される) を使用する実装に、より多くの抽象化が追加されます。

概要については、sun のこの記事を参照してください。

また、Jan Newmarch のJini チュートリアルは、Jini の学習を開始するのに最適な場所です。

于 2009-02-03T13:01:45.337 に答える