ASP.NET Univarsal Providers のセッションプロバイダを使ってみる (2)

全開前回の続きです。

前回、セッションIDにAppDomainAppIdの値が付与されるから複数台な環境だとAppDomainAppIdを合わせておかないとセッション共有ができないんじゃね?という話をしました。

理屈上はそうなので、どうしようかと思って実際にWindows Azure上で見てみると…

おや。複数インスタンスでもAppDomainAppId同じですね。Full IISでマルチサイトしてみましたけど、(法則性はよくわかりませんが)全部同じようです。
想像するにWeb Roleを初期化する際、サービス定義ファイル等に基づいてサイトを作成しますがAppDomainAppIdも指定して作成している感じですか。

というわけでセッションIDに関する懸念はWindows Azure上で使う分には気にしなくて良さそうですね。

さて次はパフォーマンスの話。

前回見てみた限りだと明らかにパフォーマンスに問題がありそうな仕組みでした。
ということで実際どれぐらいなんだろう、というのをぱふぉちゅー素人であるおいらが見てみようと思います。
※言うまでもなく実際にASP.NET Univarsal Providersを採用する際はご自身で確認してください。あくまで参考程度に。

さてテストするにあたってASP.NET Univarsal Providers+SQL Azureを使用してセッション共有するようにしたWebアプリを5インスタンスで動かします。それからWebアプリにアクセスしてセッションを作成したりするWorker Roleを20インスタンスほど。

台数にあまり深い理由はないんですがセッションの応答速度みるのにサーバー自体がネックになってもなぁと思いつつ5インスタンスに。クライアント側は多めにということで20インスタンスにしました。

クライアント側は単純にWebClient使ってページを読み込むだけです。で、前後で時間を計測する感じに。

class Program
{
	static void Main(string[] args)
	{
		System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();

		GetPage();

		int count = int.Parse(args[0]);

		for (int i = 0; i < count; i++)
		{
			sw.Reset();
			sw.Start();
			GetPage();
			sw.Stop();
			Console.WriteLine("{0}\t{1}",DateTime.UtcNow.ToString("yyyy/MM/dd hh:mm:ss.fff"),sw.Elapsed);
		}
	}

	static private void GetPage()
	{
		WebClient wc = new WebClient();
		using (Stream st = wc.OpenRead("http://penguindrum.cloudapp.net/"))
		{
			Encoding enc = Encoding.GetEncoding("UTF-8");
			using (StreamReader sr = new StreamReader(st, enc))
			{
				string html = sr.ReadToEnd();
				sr.Close();
				st.Close();
			}
		}

	}
}

Webアプリ側は前回と同じやつでセッションオブジェクトが無ければ現在時刻を放り込むだけの簡単仕様

とりあえずひたすらセッションを作っていくわけですが、Insert処理だとそんなに(?)重くない感じですね。
2万セッションぐらい作って(ページ取得の)平均応答時間が0.5秒ぐらい、長くて2秒。

さてセッションを作りまくるワーカー走らせてる横で、同じようにセッション作って、再度そのセッションを使って1分おきにアクセスするような(=DBを更新するような)クライアントで処理時間見てみようと思います。(※WebClientだとCookieセットできなかったのでHttpWebRequestを使用)

適当にクライアントアプリ作った所為で落ちてますが、うまく更新できるケースもあればタイムアウトでちゃんと応答が返ってこないとか、返ってきても6秒かかってるとか。ちょっと不安定。

一番最後の実行結果は、作ったタイムアウトになった2万セッションがDBに残ってる状態で新規アクセスしたときのですが、期限切れセッションを取得して削除処理が入ってるので52秒かかってます。これ他にアクセスが無い状態での結果なので…

同時アクセスがそんなになく、ユーザー数も少ないようなケース、もしくは多少応答が遅くなってもいいケースでは簡単に使えるので便利ですね。
DB側のチューニングでもう少し改善しそうですけど、あまり詳しくないので触れないでおきます。

まぁなんというか、このエントリそのものはあまり役に立たない内容でしたが、捨てるのもあれなので晒してみました。恥じらいとたくし上げ。

Windows Azure Accelerator for Web Roles を使おう

ちょっと前の話題ですが、Codeplexに「Windows Azure Accelerator for Web Roles」なるものが公開されました。

簡単に言うと、Visual Studioから簡単にWebサイト/アプリをWindows Azure上のWebロールに発行できて、しかも発行したサイト/アプリが永続化されてて複数インスタンスにも対応、という優れたヤツです。

まぁ詳しいことはAzureの小ネタさんのところに書かれてるのでそちらを参照。

さて、細かいのは見てもらって把握された前提で以下2点ほど小ネタを。

続きを読む →

祝:Windows Azure Platform 管理ポータル 日本語化

あっという間(前回の投稿から的な意味で)にWindows Azure Platform管理ポータルも日本語化されました!

※追記しました

今のところ11言語が使えるようです。

ステータスも日本語でわかりやすくなりましたね。

 

新しくなったポータルでは右クリックメニューでそれぞれの項目に応じたメニューが表示されます。

ちなみにプロパティ欄でもコピーが使えるので、ID等のコピーが少しだけマシになりましたw

日本語になったおかげで、初心者の方も使いやすくなったのではないでしょうか。

またパフォーマンスの改善ということでローカルのテンポラリキャッシュを使えるようになったようです。その為初回起動時にSilverlightの設定を変更するかどうか確認されます。

セキュリティリスクを最小化するために機密情報は保存しないようになってるそうですが、どうしても気にする場合はInPrivateモードで操作するのがいいようです。(ローカルキャッシュを作成しないらしい)

その他の変更点としてはデプロイしたサービスを削除する際の操作性の向上がありました。
以前は一旦サービスを停止して、それから削除という操作が必要でしたが今回のアップデートで直接削除することができるようになったようです。

あ、あとSQL Azureな管理のところでCo-Adminが追加できるようになったようですよ。

誤訳の報告やその他要望もろもろフィードバックは画面下にあるリンクから!

祝:Windows Azure AppFabric ACS 管理ポータル日本語化

そんなわけで Windows Azure AppFabric ACSの管理ポータルが日本語化されていました!!

Labsじゃないですよ!本番ですよ!

右上の言語一覧から選択できます。

今のところはこんな感じ。

さてメインのWindows Azure開発者ポータル(管理ポータル)は、いつ日本語化されるんでしょうね~たのしみです。

Windows Azure 公認キャラクター 利用ガイドライン

ようは、クラウディアさん達を2次利用するためのガイドラインです。

今のところ「クラウディア 窓辺」と「クロード 窓辺」のみが対象となっているようです。

※権利的に微妙なポジションの「窓辺ななみ」と「店長」がどうなるのか気になりますね~

また素材集として画像ファイル(jpgとpsd)、ボイスサンプルが提供されています。(同ガイドラインページからダウンロードできます)
※今のところボイスサンプルはクラウディア窓辺だけですね。

細かいところはガイドラインを参照ください。むちゃくちゃ判りにくいということはなく、結構すっきりまとまって良いガイドラインだと思います。(適用例等がきちんと挙げられてるのもいいですね)

基本的には無償利用(非商用)の場合は著作者表示を行えば良さそうです。(もちろん公序良俗に反しないようにしましょう)
有償利用の場合は申請が必要なようですね。
※より正確な内容はガイドラインを参照ください。

WP7ではない記事を書くとPVがあがると噂のななふぉさんが結構ちから入れてレビューしてますので紹介しておきます。

—-

最初はパブリックドメインにしてくれとかCCにしてくれとか無茶な意見言ってたんですがさすがにそれは無茶だったようでw。でもここまで2次利用を考えたガイドラインになってうれしい限りです。

今のところ、マイクロソフト全体で2次利用を考慮したガイドラインはVisual Studioに入ってるあれやこれや以外に知らないので(特にこういったコンテンツではなおさら)、是非ガイドラインを遵守していい方向に持って行きたいですね~

MSKKの、いやMSHQ含めて新しい路線の幕開けかもしれませんね。相乗効果を期待しましょう!