8

JavaServer Faces がサーバー側で本質的にステートフルであることを考えると、JSF 2.0 アプリケーションを水平方向にスケーリングするにはどのような方法が推奨されますか?

アプリケーションが複数の JSF サーバーを実行する場合、次のシナリオを想像できます。

  1. スティッキー セッション: 特定のセッションに一致するすべてのリクエストを同じサーバーに送信します。
    • 質問:これを実現するために一般的に使用されているテクノロジーは何ですか?
    • 問題:サーバー障害の結果、セッションが失われます...そして、特に新しく開始する場合 (既存のアプリケーションをスケーリングしようとしない場合) は、一般的に壊れやすいアーキテクチャのように見えます。
  2. 状態 (セッション) レプリケーション: クラスタ内のすべての JSF サーバーで JSF 状態をレプリケートします。
    • 質問:これを実現するために一般的に使用されているテクノロジーは何ですか?
    • 問題:スケーリングしない。クラスタの合計メモリ = 最小サーバーの合計メモリ
  3. 外部リソース (たとえば、非常に高速なメモリ内データベースを実行している別のサーバー) にその状態を格納するように (構成を介して) JSF に指示し、アプリケーションの状態が必要なときに JSF サーバーからそのリソースにアクセスしますか?
    • 質問:これは可能ですか?
  4. ステートレスになるように (構成を介して) JSF に指示しますか?
    • 質問:これは可能ですか?

[編集]

スティッキー セッションに関する Ravi の提案に応じて更新

4

3 に答える 3

4

これは、ロードバランサーをスティッキーセッションモードで構成することで実現できます。

詳細情報

このようにして、後続のすべてのリクエストが同じアプリケーションサーバーに送信されます。

于 2012-04-15T23:57:19.387 に答える
4

Jelastic PaaS からのアイデアは次のとおりです。

2 サーバー クラスターでアプリケーション インスタンスをペアリングし、1 つのクラスター内のこれら 2 つのインスタンス間でセッション レプリケーションを適用します。次に、必要な数の 2 インスタンス クラスターを追加し、クラスター間で要求を負荷分散して、各セッションが元のクラスターに固定されるようにします。クラスタ内では、リクエストはインスタンス間で負荷分散できます。

このようにして、クラスター内の 1 つのインスタンスに障害が発生した場合、別のインスタンスが同じセッション状態で引き継ぐため、ある程度のフェイル セーフが実現されます。一方、メモリへの影響は完全なレプリケーションほど深刻ではありません。

つまり、質問の1.と2.の組み合わせです。もちろん、可用性を重視する場合は、各クラスターに 2 つ以上のインスタンスを配置できます。

Jelastic ドキュメントへのリンクhttp://jelastic.com/docs/session-replicationからアイデアを取り上げました。

免責事項: 私は実際に JSF2 でこれを構成する方法を知りません。また、Jelastic とは何の関係もありません。アイデアが気に入っただけで、役立つかもしれないと思いました。

于 2013-05-21T09:53:54.453 に答える
1

「バディ」セマンティクスを使用したセッション複製はどうですか?

1 つのバディを使用すると、合計メモリが半分になります (すべてのサーバーが 2 つのサーバーのセッション データを保持する必要があります)。これは、すべてのサーバーのデータを保持するよりもはるかに優れています。

バディ レプリケーションは、帯域幅のオーバーヘッドも削減します。

于 2013-02-12T19:22:06.223 に答える