intra-mart Accel Platform セットアップガイド 第29版 2019-08-01

11.5. セッション管理モジュール

11.5.1. 概要

../../../_images/overview.png
セッション管理モジュールは、アプリケーションサーバのセッション管理機能を利用せずに intra-mart Accel Platform にてセッション管理を行う機能です。
セッション管理モジュールでは、セッション情報をオンメモリで管理します。永続化設定を行うことでデータベースにセッション情報を永続化することも可能です。永続化設定を行うことにより、アプリケーションサーバの再起動を行った場合でも再起動前のセッション情報が参照可能です。

コラム

セッション管理モジュールを利用した場合、アプリケーションサーバのセッションに関する設定が無視されます。

11.5.1.1. クラスタリング

../../../_images/backup.png
クラスタ構成を採用している場合セッション情報は各ノードに分散して保持します。また、1つのセッション情報はメイン/バックアップの2つが異なるノードにてそれぞれ保持されます。このため永続化設定を行わない環境においても、単一のノードが停止した場合にクラスタの再構築により停止したノードが保持していた情報が復元されます。

11.5.2. 前提条件

  • アプリケーションサーバには Resin を使用してください。

  • 以下のモジュールが必要です。
    • セッション管理モジュール
    • セッション管理 組み込みHazelcast連携

11.5.3. セットアップ

11.5.3.1. セッション管理設定

IM-Juggling で以下の設定を行います。
  • セッション管理モジュール - セッション管理設定 session-store-config.xml
詳細は設定ファイルリファレンスの「セッション管理設定」を参照してください。

11.5.3.2. Hazelcast設定

IM-Juggling で以下の設定を行います。
  • セッション管理 組み込みHazelcast連携 - Hazelcast設定 hazelcast-config.xml
詳細は設定ファイルリファレンスの「Hazelcast設定」を参照してください。

11.5.4. クラスタ構成場合

  1. TCPを採用している場合、Hazelcast設定の以下の要素をノードの台数分指定します。

    hazelcast-config/network/join/TCP/member-list/member

      <network>
        <join>
          <TCP>
            <member-list>
              <member>127.248.100.1</member>
              <member>127.248.100.2</member>
              <member>127.248.100.3</member>
            </member-list>
          </TCP>
        </join>
      </network>
    
  2. Hazelcast設定の以下の要素にノード間通信に利用するスレッド数を指定します。

    hazelcast-config/base/io-thread-count

      <base>
        <id>im_session_store</id>
        <io-thread-count>3</io-thread-count>
      </base>
    

11.5.5. セッション情報の永続化を行う場合

注意

セッションの永続化を有効にしていない場合でも、フェイルオーバーを行うことはできます。
フェイルオーバーに加えて永続化を行いたい場合のみ、本項記載の設定を行ってください。

永続化を有効にした場合は、永続化先としてデータベースが利用されます。
データベースへのアクセスがリクエストの都度発生するため、有効にしない場合に比べてパフォーマンスが劣ります。

データベースへのアクセスが遅延すると、リクエスト処理のパフォーマンス劣化が発生します。
セッションの永続化は、必ず以下のような検証を行った上でご利用ください。
  • 負荷試験
  • 運用環境に応じたデータベースのチューニング
  1. セッション情報の永続化に利用するデータソースを用意します。

    セッション情報の永続化先用にアプリケーションサーバのデータソース設定を追加してください。
    以下は resin-web.xml<database> でデータソース設定を行う例です。
      <database jndi-name="jdbc/session-store">
        <driver>
          <type>org.postgresql.ds.PGConnectionPoolDataSource</type>
          <url>jdbc:postgresql://domain:5432/session_store</url>
          <user>session_store</user>
          <password>session_store</password>
        </driver>
        <max-connections>1024</max-connections>
      </database>
    
    詳細は設定ファイルリファレンスの「resin-web 設定」を参照してください。

    注意

    セッション管理機能で利用するデータソースと他の機能で利用するデータソースが同時に利用された場合、永続化するセッション情報に不整合が発生する可能性があります。 セッション情報の永続化に利用するデータソースはセッション情報管理専用のデータソースを用意してください。

    注意

    データソースへの書き込み/読み込みはアプリケーションサーバへのリクエストの都度発生する可能性があります。このため、データベース製品のアーカイブログが大量に出力される可能性があります。

  2. データベースにセッション管理を行うためのテーブルを作成します。

    永続化先データソースに対して以下のSQLを実行してください。SQLの実行は各データベース製品が提供しているSQL実行ツールを利用してください。

  3. Hazelcast設定の以下の要素を true に設定します。

    hazelcast-config/store/persistence@enable

  4. Hazelcast設定の以下の要素に用意したデータソースのJNDI名を指定します。

    hazelcast-config/store/persistence/jndi-name

      <store>
        <persistence enable="true">
          <jndi-name>java:comp/env/jdbc/session-store</jndi-name>
        </persistence>
      </store>
    

11.5.6. セッションストアメモリサイズの計算式

セッション管理 組込Hazelcast連携では、各ノードのメモリサイズを設定する必要があります。この設定により、各ノードでセッション情報をどの程度保持できるのかが決まります。

コラム

メモリサイズの設定に関しては、「設定ファイルリファレンス」-「セッションストアメモリサイズ設定」を参照してください。

各ノードのメモリサイズについては、以下の計算式で見積もることができます。
  • クラスタ構成を採用している場合(ノード数が2以上の場合)

    メモリサイズ =(1)×(2)× 2 ÷(3)
  • スタンドアローンの場合(ノード数が1の場合)

    メモリサイズ =(1)×(2)
(1)... 1つのセッションで使用するメモリサイズ
(2)... ピーク時に保持するセッション数
(3)... ノード数

コラム

クラスタ構成を採用している場合、システム全体でセッションを保持するために利用可能なメモリサイズは以下のよう求められます。

システム全体でセッションを保持するために利用可能なメモリサイズ =(1)×(2)÷ 2

(1)... 設定した各ノードのメモリサイズ
(2)... ノード数

クラスタ構成を採用した場合、バックアップが保持されます。そのため、計算式において2で割っています。

コラム

1つのセッションで使用するメモリサイズについては、以下の方法で確認できます。
  1. <%RESIN_HOME%/conf/resin.properties> ファイルを開きます。

  2. 「jvm_args」プロパティに「-Dhazelcast.jmx=true」を追加して JMX 経由で内部情報を確認できるようにします。

  3. アプリケーションサーバを起動します。

  4. 業務でよく利用する機能を一通り操作します。

  5. JConsole を起動し、MBeans タブで「jp.co.intra-mart.system.hazelcast」の以下を展開します。

    • 「IMap」-「_hzInstance_1_im_session_store」-「im_session_store」-「属性」
  6. 「localHeapCost」と「size」を確認します。

    localHeapCost そのノードで保持しているすべてのデータのメモリサイズです。
    size データのエントリ数です。
    ../../../_images/memory_size.png
  7. 確認した localHeapCost を size で割ることで、1つのセッションで使用するメモリサイズが確認できます。