Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

ASP.NET Universal Providersによるセッション管理

Windows Azure 新機能チュートリアル(11)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/03/05 14:00

 本稿では、Windows Azureにおけるセッション管理の現状と、新しく利用できるようになったASP.NET Universal Providersの設定方法について紹介します。

目次

はじめに

 Windows Azure SDK 1.4より新しくASP.NET Universal Providersというセッション管理のパッケージが同梱されるようになりました。これ以前にはWindows Azureキャッシュを利用する方式が提供されていたり、Windows Azureストレージを利用したサンプルが公開されていました。同梱されたことによって、また一つ選択肢が増えたことになります。本稿では、従来から提供されている方式とともに比較し、ASP.NET Universal Providersについて解説します。

対象読者

  • Windows Azureの概要を理解している方。
  • Windows Azureのサブスクリプションを持っており、Azureを利用したことがある方。

必要な環境

  • Windows Azureサブスクリプション
  • Visual Studio 2010もしくは、Visual Web Developer 2010 Express
  • Windows Azure SDK for .NET ‐2011年11月(SDK 1.6)

Windows Azureのセッション管理について

 セッション管理は、Webアプリケーションを開発する上で必須です。従来のASP.NETアプリケーションは、インプロセスモード、SQL Serverモード、ステートサーバーなどでセッション情報の管理ができましたが、これらの方法はWindows Azure上で利用できないものがあります。

 Windows Azureの各ロールインスタンスへの通信は、必ずロードバランサーを経由しますが、このロードバランサーにはセッション維持機能が実装されていません。したがって、各リクエストはロードバランサーで分散され、任意のインスタンスと通信することになります(図1)。

図1 セッション管理の概念図
図1 セッション管理の概念図

 例えば、1回目のリクエストはWebロールのインスタンス1、2回目のリクエストはインスタンス2へと振り分けられます。このときはインプロセスモードのように各インスタンスのメモリ上にセッション情報を保持しておく仕組みであった場合に、2回目のリクエストで、本来あるはずのデータが見つからずに問題となります。

 そこでWindows Azureではセッションデータをロールインスタンスの外で管理するのが一般的です。現在、利用できるセッション管理方法には以下があります。

 アプリケーション構成ファイル(Web.config)の設定を変更することで、同一コードで異なるセッション管理方法を選択できます。

  1. SQL AzureでSQL Serverモードを利用
  2. ASP.NET Universal Providerを利用
  3. Windows Azureキャッシュを利用
  4. Windows Azureストレージサービスを利用

 それでは、それぞれの特徴を解説します。

SQL Serverモード

 SQL Serverモードのセッション管理を、SQL Azureを利用して実現する方法です。セッション状態プロバイダーも.NET標準のものを利用できます。状態を管理するためのテーブルなどを設定するツールは、.NET Frameworkに付属するものは利用できないため、マイクロソフトのWebサイトよりダウンロードしてくる必要があります(注1)。

 この方法にはいくつか制限があります。1つは正式にサポートを受けられない点です。2つ目は、有効期限が切れたセッション情報が自動的に削除されない点です。通常のSQL Serverであれば、SQL Serverエージェントによって削除されるように構成されますが、現時点ではSQL Azureにエージェント機能は存在しません。したがって、Workerロールやオンプレミス側から、定期的に有効期限切れのセッション情報を削除するプロシージャを実行する必要があります。

注1

 ASP.NET SQL Server登録ツール(aspnet_regsql.exe)です。登録ツールは、「KB2006191」からダウンロードできます。

ASP.NET Universal Providers

 ASP.NET Universal Providersは、Windows Azure SDK 1.4からパッケージとして同梱(注2)されるようになったセッション管理方法です。SQL Serverモードと同じくセッション情報はSQL Azureに保管しますが、以下の点で異なります。

  • ASP.NET Universal Providerで提供されているカスタムセッション状態プロバイダーを利用する
  • 管理に必要なテーブルなどは、初回の接続時に動的に作成される
  • 有効期限切れのデータは、任意の接続タイミングで削除される

 したがって、運用方法がSQL Serverモードに比べて簡素化されていますが、接続タイミングによっては、セッション情報の読み書き以外の管理処理が実行されるため、レスポンスが悪化する可能性があります。また、SQL Serverモードと同様に正式なサポートは受けられません(注3)。

注2

 NuGetギャラリーからも取得可能です。

注3

 詳細な使用許諾は、同梱されているEULA.rtfを参照してください。

Windows Azureキャッシュ

 Windows Azureのサービスとして提供されているキャッシュ機能を利用する方法です。セッション状態管理プロパイダーは、SDKに同梱されています。詳細は、「Windows Azure AppFabric Cachingでスケールアウトを実現しよう」で紹介しているため、そちらを参考にしてください(注4)。特徴として以下が挙げられます。

  • オンメモリであるため性能が良い
  • SQL Azureと比較して価格が高い。128MB 同時接続数10までで¥4,000弱
  • サポートが受けられる

注4

 現在ではWindows Azure AppFabricという名称は使われなくなっています。

Windows Azureストレージサービス

 最後はWindows Azureストレージサービスを利用したセッション管理です。Windows Azureのサンプルプログラムに含まれています。特徴として以下が挙げられます。

  • SQL Azureやキャッシュに比べてコストが安い
  • キャッシュやSQL Azureを利用した場合に比べて性能は低い
  • サンプルであるためサポートが受けられない

 サンプルソースは、「Windows Azure ASP.NET Providers Sample」からダウンロードできます。

 これらのセッション管理方法の特徴をまとめると下表の通りです。サポートについてはカスタムセッション状態プロバイダーについてであって、情報のストア先については通常通りサポートを受けられます。

表:セッション管理方法の比較
  SQL Severモード ASP.NET Universal Providers Windows Azure キャッシュ Windows Azure ストレージ
コスト
1GB 900円 ~

1GB 900円~
×
128MB 4000円~

容量とトランザクションに影響するがSQL Azureよりは安い
サポート なし なし あり なし
利点 従来の方法の延長線上で利用可能 SQL Serverモードより簡易に運用できる インメモリキャッシュであるため高速 コストが安い
欠点 期限ぎれのセッション情報が削除されない 接続タイミングによってレスポンスが悪化 コストが高い ストレージを利用するため低速

 選択の基準としてどの程度のコストを見込んでいるのか、利用にあたって十分なレスポンスが期待できるかなどから、これから提供しようとするサービスの要件にあった方式を選択することになります。いずれにしても、Windows Azureキャッシュ以外は、利用者責任となることに注意してください。

補足:インプロセスモードについて

 Windows Azure上で、インプロセスモードが動作しないわけではありません。通常のWindows Azureアプリケーションは、SLAや可用性の関係上から2インスタンス以上での稼働が推奨されています。これらのサポートを受けないかわりに1インスタンスで稼働するのであればインプロセスモードで運用することは可能です。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2012/03/06 23:45 1ページ目の表 サポートについて誤りを修正。また、サポートについて追記した。

著者プロフィール

  • WINGSプロジェクト statemachine(statemachine)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2017年5月時点での登録メンバは52名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:Windows Azure新機能チュートリアル

もっと読む

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5