6.7. 分散可能な Web セッション設定の distributable-web サブシステム

distributable-web サブシステムは、柔軟で分散可能な Web セッション設定を実現します。このサブシステムは、一連の分散可能な Web セッション管理プロファイルを定義します。これらのプロファイルのいずれかが、デフォルトのプロファイルとして指定されます。これは、分散可能な Web アプリケーションのデフォルト動作を定義します。例を以下に示します。

[standalone@embedded /] /subsystem=distributable-web:read-attribute(name=default-session-management)
{
    "outcome" => "success",
    "result" => "default"
}

デフォルトのセッション管理では、以下の例が示すように、Web セッションデータを Infinispan キャッシュに格納します。

[standalone@embedded /] /subsystem=distributable-web/infinispan-session-management=default:read-resource
{
    "outcome" => "success",
    "result" => {
        "cache" => undefined,
        "cache-container" => "web",
        "granularity" => "SESSION",
        "affinity" => {"primary-owner" => undefined}
    }
}

この例と利用できる値で使用される属性は以下になります。

  • cache: 関連するキャッシュコンテナー内のキャッシュ。Web アプリケーションのキャッシュは、このキャッシュの設定に基づいています。定義されていない場合は、関連付けられたキャッシュコンテナーのデフォルトキャッシュが使用されます。
  • cache-container: セッションデータが格納される Infinispan サブシステムで定義されたキャッシュコンテナー。
  • granularity: セッションマネージャーがセッションを個別のキャッシュエントリーにマッピングする方法を定義します。以下の値が使用できます。

    • SESSION: 単一のキャッシュエントリー内にすべてのセッション属性を保存します。ATTRIBUTE 粒度よりも大きいですが、クロス属性オブジェクト参照を保持します。
    • ATTRIBUTE: 各セッション属性を個別のキャッシュエントリー内に保存します。SESSION 粒度よりも効率的ですが、クロス属性オブジェクト参照は維持しません。
  • affinity: Web リクエストがサーバーに必要とするアフィニティーを定義します。関連する Web セッションのアフィニティーでは、セッション ID に追加されるルートを生成するアルゴリズムが決まります。以下の値が使用できます。

    • affinity=none: Web リクエストには、いかなるノードへのアフィニティーもありません。Web セッションの状態がアプリケーションサーバー内で維持されていない場合は、これを使用します。
    • affinity=local: Web リクエストには、セッションに対する要求を最後に処理したサーバーにアフィニティーが設定されます。このオプションは、スティッキーセッションの動作に一致します。
    • affinity=primary-owner: Web リクエストには、セッションのプライマリー所有者に対してアフィニティーがあります。これは、この分散セッションマネージャーのデフォルトのアフィニティーです。バッキングキャッシュが分散または複製されていない場合は、affinity=local と同じように動作します。
    • affinity=ranked: Web リクエストには、プライマリーおよびバックアップ所有者を含むリストの先頭のメンバーと、最後にセッションを処理したメンバーのアフィニティーがあります。
    • affinity=ranked delimiter: エンコーディングしたセッション識別子内の個別のルートを分離するために使用される区切り文字。
    • affinity=ranked max routes: セッション識別子にエンコードするルートの最大数。

複数の順序付けされたルートを持つセッションアフィニティーを設定するには、ランク付けされたセッションアフィニティーをロードバランサーで有効にする必要があります。詳細は、JBoss EAP設定ガイドロードバランサーでのランク付けされたセッションアフィニティーの有効化 を参照してください。

セッション管理プロファイルを名前で参照するか、デプロイメント固有のセッション管理設定を指定して、デフォルトの分散可能なセッション管理動作をオーバーライドすることができます。詳細は、デフォルトの分散可能セッション管理動作のオーバーライド を参照してください。

6.7.1. リモート Red Hat Data Grid での Web セッションデータの格納

distributable-web サブシステムを設定すると、HotRod プロトコルを使用して、リモート Red Hat Data Grid クラスターに Web セッションデータを格納できます。Web セッションデータをリモートクラスターに格納すると、キャッシュレイヤーはアプリケーションサーバーとは独立してスケーリングできます。

設定例:

[standalone@embedded /]/subsystem=distributable-web/hotrod-session-management=ExampleRemoteSessionStore:add(remote-cache-container=datagrid, cache-configuration=__REMOTE_CACHE_CONFIG_NAME__, granularity=ATTRIBUTE)
{
    "outcome" => "success"
}

この例と利用できる値で使用される属性は以下になります。

  • remote-cache-container: web セッションデータを格納するために Infinispan サブシステムに定義されたリモートキャッシュコンテナー。
  • cache-configuration: Red Hat Data Grid クラスターのキャッシュ設定の名前。新しく作成されたデプロイメント固有のキャッシュは、この設定に基づいています。

    名前に一致するリモートキャッシュ設定が見つからない場合は、リモートコンテナーに新しいキャッシュ設定が作成されます。

  • granularity: セッションマネージャーがセッションを個別のキャッシュエントリーにマッピングする方法を定義します。以下の値が使用できます。

    • SESSION: 単一のキャッシュエントリー内にすべてのセッション属性を保存します。ATTRIBUTE 粒度よりも大きいですが、クロス属性オブジェクト参照を保持します。
    • ATTRIBUTE: 各セッション属性を個別のキャッシュエントリー内に保存します。SESSION 粒度よりも効率的ですが、クロス属性オブジェクト参照は維持しません。