7.18. Webアプリケーションをステートレスにする¶
目次
7.18.1. 基本的な考え方¶
サーブレットAPIが提供するHTTPセッションはAPサーバで状態を持ってしまうため、そのままではスケールアウトができない。 通常、APサーバのスケールアウトを行うには以下のような対処が必要となる。
- ロードバランサーでスティッキーセッションを有効にする
- APサーバのセッションレプリケーション機能を使用する
- APサーバのHTTPセッション保存先をNoSQLにする
1, 2は Twelve-Factor App で言うところの廃棄容易性の点で劣り、2, 3はAPサーバ依存となる。
Nablarchが使用する機能では、HTTPセッションに依存しているものがあるが、 これらの機能をHTTPセッション非依存のものに切り替えることで、 APサーバをステートレスにすることができる。
7.18.2. HTTPセッションに依存している機能¶
以下の機能は、デフォルトではHTTPセッションに依存している。
7.18.3. HTTPセッション非依存機能の導入方法¶
HTTPセッションに依存している機能 の各機能について以下の通り設定することでHTTPセッションへの依存をなくすことができる。
7.18.3.4. HTTPリライトハンドラ¶
HTTPリライトハンドラ を使用しない。 使用する場合にはセッションスコープにアクセスしないよう設定する。
7.18.4. ローカルファイルシステムの使用¶
アップロードしたファイルなどをAPサーバのローカルに保存してしまうと、ステートを持つことになってしまう。 このような場合は、共有のストレージを用意するなどして、APサーバがローカルにファイルを持たないようにする必要がある。
7.18.5. HTTPセッションの誤生成を検知する¶
設定漏れや実装ミスによって誤ってHTTPセッションを生成してしまうことを防ぐために、HTTPセッションの生成を検知する機能を提供している。 この機能を有効にすると、HTTPセッションを生成しようとしたときに例外が送出されるようになる。
この機能は、 WebFrontController の preventSessionCreation
プロパティに true
を設定することで有効にできる(デフォルトは false
で無効になっている)。
具体的には、 WebFrontController のコンポーネントを定義した設定ファイルで、次のように記述することで検知機能を有効にできる。
<!-- ハンドラキュー構成 -->
<component name="webFrontController"
class="nablarch.fw.web.servlet.WebFrontController">
<!-- HTTPセッションの誤生成を検知する -->
<property name="preventSessionCreation" value="true" />