6

私の要件は、クラスター全体で Java オブジェクトを共有することです。

混乱する

  • EJB を作成してクラスタ全体で Java オブジェクトを共有するか、
  • infinispan、memecached、terracotta、または
  • JCacheはどうですか?

という制約で

  • アプリケーション サーバーに固有のソース コードを変更することはできません (weblogic のシングルトン サービスの実装など)。
  • クラスター環境と非クラスター環境の 2 つのビルドを提供することはできません。
  • パフォーマンスはダウングレードしないでください。
  • 使用する必要がある場合は、オープン ソースのサード パーティのみを探しています。
  • weblogic 、 Websphere 、 Jbos 、および Tomcat でも動作する必要があります。

これらの制約を念頭に置いて、誰でも最適なオプションを思い付くことができますか?

4

3 に答える 3

4

これは、クラスターで共有するオブジェクトのユース ケースによって異なります。

最も複雑なものから最も単純なものまで、実際には次のオプションに帰着すると思います

分散キャッシュ http://www.ehcache.org

すべてのノードのキャッシュからオブジェクトにアクセスできるようにする必要がある場合は、分散キャッシュが適しています。私は ehache を使用して非常にうまく配布しました。スケールが必要でない限り、テラコッタサーバーをセットアップする必要はありません。rmi を介してインスタンスを一緒にポイントするだけです。また、要件に応じて同期および非同期で動作します。また、ノードがダウンした場合にキャッシュ レプリケーションが便利であるため、キャッシュは実際には冗長であり、何も失うことはありません。オブジェクトがすべてのノードで更新されていることを確認する必要がある場合に適しています。

クラスタ実行・データ配信 http://www.hazelcast.com/

クラスター全体で Java クラスを実行する方法を提供する Hazelcast も優れたオプションです。これは、実行する必要がある作業単位を表すオブジェクトがあり、それが実行される場所をあまり気にしない場合に便利です。

分散コレクション、つまり分散マップまたはキューにも役立ちます

独自の RMI/Jgroup を展開する

独自のクライアント/サーバーを作成できますが、扱うオブジェクトの要件が複雑になり始めると、より大きなフレームワークが解決する問題に遭遇し始めると思います。現実的には、Hazelcast は非常にシンプルで、自分で作成する必要はありません。

于 2013-08-07T12:42:29.907 に答える
1

オープンソースではありませんが、Oracle Coherence はこの問題を簡単に解決します。

JCache の実装が必要な場合、現在利用できると私が認識しているのは Oracle Coherence だけです。参照: http://docs.oracle.com/middleware/1213/coherence/develop-applications/jcache_part.htm

完全な開示のために、私はオラクルで働いています。この投稿で表明された意見や見解は私自身のものであり、必ずしも私の雇用主の意見や見解を反映するものではありません.

于 2014-07-11T13:53:24.887 に答える
0
  • それはただの考えです。正確な実装を確認したい場合があります。
  • パフォーマンスが低下しますが、それを回避する方法がわかりません。
  • 実装するのは簡単ではありません。クラスタリングではなく負荷分散を検討する必要があるかもしれません。

RMI や動的プロキシを検討することもできます。

  • オブジェクトのインターフェースを抽出します。
  • RMI を使用して実際のオブジェクトにアクセスします (実際にオブジェクトを保持しているクラスターを含むすべてのクラスターから)。
  • 既存のコードの RMI を作成するには、dynamic-proxy を使用できます (これも実装については不明です)。

*動的プロキシは、任意のオブジェクトをラップし、各メソッド呼び出しで事前および事後タスクを実行できます。この場合、RMI 呼び出しに元のオブジェクトを使用する可能性があります。

  • RMI オブジェクトを伝搬するには、クラスター間の接続が必要です。
于 2013-08-07T12:26:52.987 に答える