Windows Azure SDK おさらい

Windows Azure SDK 1.6 でだいぶ名称かわったりしました。わかりにくいですよね?もう少しだけ補足しとこうかなと思います。(以前の投稿の補足ですね)

1. Windows Azure Libraries for .NET 1.6

※Web PIからでもいいのですがダウンロードセンターにも個別で公開されています。

以前の投稿でWindows Azure AppFabric SDKがWindows Azure Libraries for .NET 1.6になった的な話でしたが本当でしょうか。見てみましょう。

実際に単体でインストールすると、以下のファイル群しかインストールされません。

ServiceBusとCacheのみですね。それ以外は無いみたいです。ということで少し内容は変わってますがWindows Azure AppFabric SDKはWindows Azure Libraries for .NET 1.6 になったというのがわかります。
※それ以外が含まれてないという意味で

じゃ次。

2. Windows Azure SDK for .NET

Windows Azure SDK for .NET という名前になったこのSDKは何が含まれてるんでしょう?ちょっとWeb PIの依存関係でも見てましょう。

なんだかいろいろありますねー。このうちWindows Azure EmulatorとWindows Azure Authoring Toolsはなんだか怪しいですね(?)

ではWindows Azure Emulatorから見てみましょう。こいつは文字通りエミュレータのようですね。

インストールが終わるとエミュレータのみインストールされます。

もちろん起動もしますよ!

でも本当はSQL Server 2008 Expressが必要だったり、もう少し依存関係は複雑なはずです。(ちょっと使ったイメージが綺麗じゃなかったですね…)
でもまぁエミュレータに必要なものだけがインストールされるようです。

さてもう一方のWindows Azure Authoring Toolsですが、こちらは以前のSDKのイメージに近いですね。

以前のSDKからEmulatorを抜いたものがWindows Azure Authoring Toolsだと思うといいかも。

で、最後はVisual Studio用のWindows Azure Tools for Visual Studioですね。

これらをまとめてWindows Azure SDK for .NET といってるようです。

実際にはURL Rewrite 2.0とか関連する(依存する)コンポーネントがあるわけですけどザックリとどんなものかはわかるかなと思います。
※ダウンロードセンターにも動作要件が書いてるのでそちらも参照

ま、普通にインストールポイントからインストールしようとすると全部まとめてインストールできますし、あまりこの辺気にしないんですけど。

こまけぇことはキニスンナ!

In-place UpdateがUpdateされました

唐突なアナウンスですがWindows AzureのIn-place Update機能が更新されたようです。まぁWindows Azure側の話なので、こちらで何か修正等があるわけではありませんし、既に展開されてるのでみんな恩恵にあずかれます。

元ネタ:Announcing Improved In-place UpdatesOverview of Updating a Windows Azure Service

変更内容ですが、簡単にいうと以下のケースにおいて今までIn-place Updateが出来なかったのですが、それができるようになりました
( ゚Д゚ノノ"☆パチパチパチパチ

  • 仮想マシンのサイズ変更(スケールアップ/スケールダウン) ※たとえばSサイズからLサイズ、SサイズからXSとか
  • ローカルストレージの増加
  • デプロイされてるロールの追加・削除
  • エンドポイントの数や種類の変更

今まで再デプロイとかVIPスワップで対応しないと行けなかったのがIn-place Updateでもいけるのは嬉しいですね!

※ちなみにIn-place UpgradeなのかIn-place Updateなのかははっきりしてほしいですがw(管理ポータルとか見る限りUpgradeだとは思いますけど元ネタのBlogに合わせてます。どっちでもいいんじゃないですかね)

変更できる項目が元ネタのところにまとまってるのでそのまま持ってこようと思います。

変更内容 In-place Update VIP Swap 再デプロイ
Guest OSのバージョン OK OK OK
.NET Trustレベル OK OK OK
仮想マシンのサイズ OK
注意:仮想マシンのサイズを変更するとローカルデータが破棄されます。
Management APIを使用してこの変更を行う場合は強制フラグが必要です
メモ:Azure SDK 1.5以上が必要
OK OK
ローカルストレージの設定 OK(ただし増加のみ)
メモ:Azure SDK 1.5以上が必要
OK OK
ロールの追加または削除 OK OK OK
特定ロールのインスタンス数 OK OK OK
サービスエンドポイントの数や種類の変更 OK
メモ:Azure SDK 1.5以上が必要
エンドポイントが更新されるので、一時的に可用性が損なわれる(接続できなくなる瞬間がある)
NG OK
ConfigurationSettingsの名前と値 OK OK OK
ConfigurationSettingsの値 OK OK OK
証明書の追加 OK OK OK
既存の証明書の変更 OK OK OK
新しいコードのデプロイ OK OK OK

再デプロイは基本的にまっさらな状態でデプロイになるので、まぁこの辺の制約はないわけで。
VIP SwapもIPアドレス付け替えと考えると、サービスエンドポイントが変わらなければOK(つまりそこだけNG)なので納得ですね。

In-place Updateで仮想マシン(インスタンス)のサイズやロール数を変更する場合は、アップグレードダイアログの「VMサイズまたはロール数の更新を許可する」にチェックを付けましょう。付けずに更新しようとするとエラーになります。(Management APIでやる場合も同様に強制フラグをOnにして実行しましょう)

さて他にも幾つか追加された機能がありまして。

In-place Updateをキャンセル/ロールバックなど細かくコントロールすることができます。
アップグレードモードが自動の場合はこれらはよしなにしてくれますが、マニュアルモードの場合、管理ポータルやManagement APIを使って細かく制御できます。

このへん詳しく載っていますので参照ください↓

 

まとめ

ということで、アップグレード手法をまとめるとこんな感じですかね(コピペですけど)

更新方法 説明 メリット デメリット
In-place 新しいパッケージを今稼働してるインスタンスやサービス上に適用する方法 1つのデプロイで済む
各ロールで2インスタンス以上あれば可用性を維持したまま更新できる
更新してる間、更新対象のロールはダウンするのでサービス提供能力が落ちます。
全インスタンスが更新されるまでの間、新旧2つのバージョンのサービスコードが稼働するので動作に差がでてしまいます
VIP Swap 新しいパッケージを別の領域(ステージング)に展開し、IPアドレスを付け替える方法(サービスをスワップする) サービスダウンタイムや提供機能のロスが無い 少なくとも2つデプロイ(プロビジョニングとステージング)が実行されてる必要がある(スワップするのに必要)
再デプロイ 稼働してるサービスを削除して新しいパッケージをデプロイする方法 1つのデプロイで済む サービス削除するので、提供していたサービスはダウンする。デプロイが変わるとIPアドレスも変わるので、DNSの伝達に時間がかかるケースもある

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開発者ポータル(管理ポータル)は、いつ日本語化されるんでしょうね~たのしみです。