2009-07-31 19 views
1

8ノードクラスタにシーケンス/カウンタを複製する必要があります。これは、各HTTP要求が、シーケンス状態がすべてのサーバーで同期されるgetNextIntAndIncrement()などを呼び出すことによって、シーケンス内の次の値を受け取ることを意味します。明確にするには、セッションではなくアプリケーション/グローバルスコープに存在しなければなりません。私はそれがひどいアイデアのように聞こえ、間違いなくボトルネックにつながることを知っていますが、これが要件です。アプリケーションレベルのスコープを持つクラスタリング/レプリケートカウンタ状態

私の質問は何が最善の解決策ですか?私はステートフルセッションBeanを見てきましたが、それらは1つのクライアントに対してのみ設計されているようです。私はデータベースのシーケンスを考えました。私はテラコッタのクラスタリングも見てきました。彼らはシーケンスデモを持っていますhttp://www.terracotta.org/web/display/orgsite/Recipe?recipe=sequencerしかし、私はJ2EEソリューションが存在する場合、サードパーティのソリューションを避けたいと思います。私はWeblogic 8.1を使用しています。

答えて

2

Java EEベンダーの中には、すでにサードパーティ製品を識別しているキャッシュソリューション(たとえばWebSphereのObject Grid)がありますが、ポータブルスタンダードは存在しません。

DBソリューションに問題がありますか?ロックが必要になることは明らかです。だから、DBに立ち寄ってはいかがですか。私の推測では、真の増分値が本当に必要な場合、値が欠落していないなど、他のデータベース値とのトランザクション関係が重要になるので、DBを使用してください。

絶対的なシーケンシャル値の必要性を緩和することができれば(つまり、ギャップを許して)、数の集合を分割して競合を大幅に減らすことができます。シーケンシャルな値が必要でギャップがなければ、インスタンス間である程度のロックの必要性を抱いてしまいます。使用を「コミット」するまで、2番目の「スレッド」が新しいシーケンス番号を取得することはできません。現在のもの。奇数のシーケンス番号を失うことができれば、はるかに良くなります。または、インスタンス間で独立した番号付けスキームを使用できる場合は、はるかに優れた立場にあります。たとえば、サーバーa、b、cの名前をids a001、a002、b001、c001、c002などにします。

+0

。ありがとうございます – Andrew

1

データベースシーケンスは、特に高度にシリアライズされたトランザクションを使用して要求する場合に、最も決定的な結果をもたらす可能性が高いと思います。

しかし、私は真剣にこのようなことの妥当性に疑問を呈しますが、それはちょうど私の2セントです。

0

Weblogicではクラスタシングルトンを許可しています。例えばフェイルオーバーをサポートするクラスタごとに1つのインスタンス。

これはあなたの要件を満たす必要があります。私は、データベース・ソリューションを追求するつもりだ

http://e-docs.bea.com/wls/docs100/javadocs/weblogic/cluster/singleton/SingletonService.html

+0

私は(まだ)これがどのように役立つか理解していません。 1)。あるサーバのHttpRequestプロセッサは、シングルトンサービスで維持されているカウントにどのようにアクセスしますか? 2)。 Singletonインスタンス(またはそのサーバー)が失敗する場合、カウントはどのように維持されますか? DBやその他のメカニズムで? – djna

+0

提案をいただきありがとうございますが、weblogic 8.1を使用しています – Andrew

関連する問題