昨日はPatterns & Practices Summit 2011に参加してきました。
普段あまり聞けないアーキテクチャなお話とBig Dataなお話が聞けるということで結構無理やりな感じで予定組んでの参加です。
以下メモというか走り書きというか。
昨日はPatterns & Practices Summit 2011に参加してきました。
普段あまり聞けないアーキテクチャなお話とBig Dataなお話が聞けるということで結構無理やりな感じで予定組んでの参加です。
以下メモというか走り書きというか。
全開前回の続きです。
前回、セッション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側のチューニングでもう少し改善しそうですけど、あまり詳しくないので触れないでおきます。
まぁなんというか、このエントリそのものはあまり役に立たない内容でしたが、捨てるのもあれなので晒してみました。恥じらいとたくし上げ。
Tumblrみてたら asp.net mvc – Windows Azure Multi-Tenant Application and SSL – Stack Overflow な話題が。
※SMarxが回答してたりする。
で、マルチテナントでマルチドメインできるの?という話題。まぁ以前からこの手の話はちょくちょく挙がってたので少し考えてみました。
ちょっと前の話題ですが、Codeplexに「Windows Azure Accelerator for Web Roles」なるものが公開されました。
簡単に言うと、Visual Studioから簡単にWebサイト/アプリをWindows Azure上のWebロールに発行できて、しかも発行したサイト/アプリが永続化されてて複数インスタンスにも対応、という優れたヤツです。
まぁ詳しいことはAzureの小ネタさんのところに書かれてるのでそちらを参照。
さて、細かいのは見てもらって把握された前提で以下2点ほど小ネタを。
あっという間(前回の投稿から的な意味で)にWindows Azure Platform管理ポータルも日本語化されました!
※追記しました
今のところ11言語が使えるようです。
ステータスも日本語でわかりやすくなりましたね。
新しくなったポータルでは右クリックメニューでそれぞれの項目に応じたメニューが表示されます。
ちなみにプロパティ欄でもコピーが使えるので、ID等のコピーが少しだけマシになりましたw
日本語になったおかげで、初心者の方も使いやすくなったのではないでしょうか。
またパフォーマンスの改善ということでローカルのテンポラリキャッシュを使えるようになったようです。その為初回起動時にSilverlightの設定を変更するかどうか確認されます。
セキュリティリスクを最小化するために機密情報は保存しないようになってるそうですが、どうしても気にする場合はInPrivateモードで操作するのがいいようです。(ローカルキャッシュを作成しないらしい)
その他の変更点としてはデプロイしたサービスを削除する際の操作性の向上がありました。
以前は一旦サービスを停止して、それから削除という操作が必要でしたが今回のアップデートで直接削除することができるようになったようです。
あ、あとSQL Azureな管理のところでCo-Adminが追加できるようになったようですよ。
誤訳の報告やその他要望もろもろフィードバックは画面下にあるリンクから!
そんなわけで受賞したようです。
これもひとえに皆様の温かいご支援のおかげであります。感謝感謝。
というわけで今後とも アジュルンバッ!!
いろいろありまして、技術評論社の G-CLOUD Magazine 2011 Summer の第2特集に10ページほど書いた文章が載っています。
その他の特集も面白いものばかりですので、是非ご購入検討くださいませ~
もう2か月近く経つ気がしないでもないですが、Windows Azure Connectが更新されてます。
といってもまだベータ(CTP)ですけどね。
今回の更新では以下の2点が強化されています。
ようは、クラウディアさん達を2次利用するためのガイドラインです。
今のところ「クラウディア 窓辺」と「クロード 窓辺」のみが対象となっているようです。
※権利的に微妙なポジションの「窓辺ななみ」と「店長」がどうなるのか気になりますね~
また素材集として画像ファイル(jpgとpsd)、ボイスサンプルが提供されています。(同ガイドラインページからダウンロードできます)
※今のところボイスサンプルはクラウディア窓辺だけですね。
細かいところはガイドラインを参照ください。むちゃくちゃ判りにくいということはなく、結構すっきりまとまって良いガイドラインだと思います。(適用例等がきちんと挙げられてるのもいいですね)
基本的には無償利用(非商用)の場合は著作者表示を行えば良さそうです。(もちろん公序良俗に反しないようにしましょう)
有償利用の場合は申請が必要なようですね。
※より正確な内容はガイドラインを参照ください。
WP7ではない記事を書くとPVがあがると噂のななふぉさんが結構ちから入れてレビューしてますので紹介しておきます。
—-
最初はパブリックドメインにしてくれとかCCにしてくれとか無茶な意見言ってたんですがさすがにそれは無茶だったようでw。でもここまで2次利用を考えたガイドラインになってうれしい限りです。
今のところ、マイクロソフト全体で2次利用を考慮したガイドラインはVisual Studioに入ってるあれやこれや以外に知らないので(特にこういったコンテンツではなおさら)、是非ガイドラインを遵守していい方向に持って行きたいですね~
MSKKの、いやMSHQ含めて新しい路線の幕開けかもしれませんね。相乗効果を期待しましょう!