パーシステンス

提供: MonoBook
移動: 案内検索

パーシステンス英語:persistence)とは、直訳すると「存続」という意味である。

概要[編集]

ウェブの世界でパーシステンスという場合は、ほぼロードバランサーを咬ました複数台のHTTPサーバーセッションを共有するためのセッションサーバー、およびその構築方法をさしている。明示的に「セッション・パーシステンス」などと記載している事例も見受けられる。

ハードウェアで対応[編集]

パーシステンスの主な実現方法としては高性能なロードバランサー製品を用いる方法がある。高性能なロードバランサー製品には接続は同一のHTTPサーバーにだけ接続しつづけるという機能が付いている。これを使えば共有セッションを保持するサーバーを用意しなくても個々のサーバー内で完結できる。またアプリケーション側での対応が不要であるためプロプライエタリなものや、プログラムの改変をしている場合じゃねぇデスマーチに陥った案件などでは活躍する。

アプリケーションで対応[編集]

アプリケーションでパーシステンスに対応する方法としてはデータベースセッションを保存するという方法がある。この際に用いるデータベースは一般的なRDBMSでもよいが、セッションという単純なデータ構造、かつ頻繁な読み書き、かつスケールアウトしたい要件ではRedisなどのNoSQLを用いるのが現実的である。

PHP: memcached[編集]

PHPではセッションの保存先にmemcachedを指定できる。memcachedを別サーバーにすることでHTTPサーバーをDNSラウンドロビンで単純に複数台設置しても簡単に対応できる。

php.iniで設定するのが手軽である。

session.save_handler = memcached // コメントアウトをはずす
session.save_path = "tcp://localhost:11211" // 追記

ASP.NET: ASP.NET State Service[編集]

Windows ServerIISを入れると「ASP.NET State Service」というサービスが出来上がる。これはIISの一部なのでWindows Serverでなければ利用できない。このため開発機が普通のWindowsであったり、Monoや.NET Coreなどへの対応を考慮すると極めて非推奨である。

サービスを立ち上げてWeb.configのsessionStateに以下のような設定を加えることで利用できる。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=127.0.0.1:42424"
      stateNetworkTimeout="10" />
  </system.web>
</configuration>

ASP.NET: RedisSessionProvider[編集]

マイクロソフトRedisでセッションを管理するライブラリ(セッションプロバイダー)をオープンソースとして公開している。

マイクロソフトの意図としてはAzureでのセッション管理にAzure Redis Cacheを使えという思し召しなのだろう。Azure Redis Cacheはいたって普通のRedisなのでローカルにRedisサーバーを立ち上げてもそのまま利用できる。いたって普通のRedisなのでプラットフォームに依存せず、スケールアウトもする。現状でもっとも推奨される方法であると思われる。

利用にはNuGetから入れられるのが手っ取り早い。

設定方法はマイクロソフトの公式サイトに日本語の資料があるのでこれを見るのが手っ取り早い。

関連項目[編集]

参考文献[編集]