4

私はJava eeが初めてで、特定の要件を実装する方法がわかりません。

一連のルールと状態を維持し、クライアントに API を提供するオブジェクトの大規模なセット (数百万) が必要です。これらの各オブジェクトは長寿命です。これらのものが非常に多いことを考えると、多くの VM にわたってそれらを分割し、RMI を使用してそれらにアクセスする必要があります。

私の質問は、オブジェクトのインスタンスを見つけるという問題を解決するための Java EE アプローチがあるかどうかです。これにより、クライアントは、オブジェクトがどのマシン上にあるかを意識する必要なく、オブジェクトへの参照を取得できます。

JNDI については知っていますが、各オブジェクトを JNDI ディレクトリに登録することが適切かどうかはわかりません。各オブジェクトが属する VM を認識できる "Locator" ライブラリを作成する必要がありますか?

4

2 に答える 2

2

これ以上具体的な詳細は省きますが、探索のためのいくつかの道を冒険させてください。

私があなたを正しく読んでいるなら、あなたが望むのはDHTに似たものですが、生データだけでなく、オブジェクト(コード+データ)またはサービスノードをホストおよび検索するためのものです。興味深いアイデアのように聞こえますが、私はそのようなプラットフォームを知りません。

Java EE 自体 (仕様として) は指定されておらず、リファレンス実装も、あなたが探していると思われる大規模な分散クラスタリングとシャーディングのための「すぐに使える」ソリューションを提供していません。

Glassfish (Java EE RI) 自体は、 GrizzlyまたはJGroupsのいずれかを基礎となるグループ通信プラットフォームとして使用できるクラスタリング フレームワークとしてShoalを使用します。

したがって、あなたの特定のケースでは、グループ通信用に JGroups を構築して使用することを検討します。次に、中央レジストリの代わりに、サービス/オブジェクトの場所を DHT に依存します。既存の成功している DHT ベースのプラットフォーム (memcached、Apache Cassandra) がどのようにパーティショニングとルックアップ、フォールト トレランスとフェイルオーバーを実装し、それらを適応/採用するかを見てください。その後、RMI/RPC をクライアント サーバー (サービス ノード) の呼び出しに使用できます。

私が理にかなっていることを願っています、そして幸運を祈ります!これを自分で展開する場合は、オープン ソース化できるかどうかを確認してください。;)

于 2011-08-17T06:08:47.470 に答える
0

ご質問に直接お答えすることはできませんが、Oracle Coherence はデータを配布するだけでなく、そのデータに対する計算も配布できることを知っています。

簡単なサンプルコードはこちら。com.tangosol.uti.InvocableMap.EntryProcessor を実装するクラスを介して計算を記述します。これにより、データが存在するサーバーで計算を行うことができます。制限の 1 つは、データがネットワークを介して移動するため、データをシリアライズ可能にする必要があることです。

public class CalcLogic implements EntryProcessor {
....
    //InvocableMap.Entry is the "data"
    //You write your calculation in this process methods.
    public Object process(InvocableMap.Entry entry {
        (YourObjectType) obj = (YourObjectType)entry.getValue();
        //do some calculation against obj here
        entry.setValue(obj);   
        return null;
    }

....
}
于 2011-08-18T00:53:16.270 に答える