ASP.NETでCacheSeviceのOutputCache有効にすると超遅くなる現象

ASP.NET MVC4でAzure CacheServiceを使ったOutputCacheを有効にすると超遅くなる、という現象があって困ったのでメモ。

  1. 普通にASP.NET MVC4なアプリを作ります
  2. Install-Package Microsoft.WindowsAzure.Caching します
  3. Web.configを編集してOutputCacheプロバイダを設定します。
  4. 実行してみます

わかりやすいようにMiniprofilerも入れてみました。

image

ファッ!?

ローカルでこの遅さ。パーシャルViewとか使うともりもり+100msとかかかります。ありえない。

結論から言うとテンプレートに含まれる既定のMicrosoft.AspNet.Web.OptimizationがASP.NET既定のOutputCacheProvider以外はサポートしてないから処理に時間がかかる、ということでした。

NuGetでMicrosoft.AspNet.Web.Optimizationを1.1.0に更新すれば解決。

image

 

image

まともになりました。ふぅ。

教訓: 更新忘れずに。

Windows Azure Cache Service (Preview)を使ってみる

どうも、この間のJAZUGイベントのLTで圧倒的多数ッ! の (´・ω・`)ショボーン をゲットした@kamebuchiです。

あれか、ストアアプリ動かなかったからか!そうなのか!

あ、しばやん大先生、アプリ作成ありがとうございました。( ´∀`)bグッ! 
うまい棒贈呈します。

というのは置いといて、この間リリースされたばかりのWindows Azure Cache Service(Preview)をさっそく使ってみたいと思います。

※一応、【祝】Azure日本DC前夜祭!★Japan Windows Azure User Group 3周年のLTフォローアップ的な何かです。
※あ、Cache ServiceはPreviewなので申請が必要です。(すぐにActiveになりますが)

続きを読む

Windows Azure Cache Serviceとか

例によってアップデートです。今回の目玉は新しいWindows Azure Cache Service(Preview)ですね。

  • 占有キャッシュサービス Preview
  • オートスケールの拡張
  • Webサイトのログ改善
  • 操作ログのフィルタリング

参考:

では個別に見てみましょう。

続きを読む

Windows Azure AppFabric Caching を使ってみる

ASP.NET Universal ProvidersおよびカスタムのHighPerformanceSessionStateProviderを見てきたわけですが、本命(?)のWindows Azure AppFabric Cachingだと、どんなもんなんでしょうか。

構成等は今までと同じで、Windows Azure AppFabric Cachingも同じエリア(東アジア)に作って試してみました。

※Azure AppFabric Cachingの使い方等は適当に検索で(
※アセンブリ追加してWeb.configにもろもろ追加+セッションプロバイダの変更をしただけです。(ちなみに今回はSSLなエンドポイントを使用)

↓結果

えらい早い ( ゚д゚) 12万セッションだだだっと作るのに3分ぐらい。

作りながら同じセッションで継続アクセスした場合はこんな感じ

削除処理とかはAzure AppFabric Caching側が面倒みるのでいつかわかりませんが、きちんと破棄されたりしているようです。

とまぁこんな感じでした。

Windows Azure + ARR で勝手キャッシュ・リバースプロキシサーバーを構築する

前回Squidを利用してキャッシュ・リバースプロキシサーバーを構築しましたが、Squid版では以下の問題がありました。

  • Locationヘッダ等によるリダイレクトを抑制できない
  • 絶対パスのリンクを書き換えられない

これらはURLのRewriteをリバースプロキシな処理の中で行えば解決しますが、外部公開サイトに対してはいろいろグレー+Squidだと少し面倒でした。

さて代替方法として(緊急で対応する必要もだいぶ減ったので)IIS+Application Request Routing 2.0を使用してキャッシュ、リバースプロキシ、URL Rewriteを行いたいと思います。

※今回実装にあたってはMicrosoftさんを始めJAZUな面々、多数の方にご協力頂きました。ありがとうございます。

デプロイパッケージを作成するにあたって実装している点は以下の通りです。

  • WebPICmdLineツールを使用してStartup TasksでARRのインストール(依存するWeb Farm Frameworkもインストール)
  • 設定の簡略化のためにApplicationHost.configを直接書き換え(そのためにRoleのEntryPointが特権で動作するように設定)

コードはやっつけ仕事もいいとこですね。

成果物はこちらからダウンロードください。

利用方法は上記パッケージをダウンロードしてDeployPackageフォルダにある .cscfg のインスタンス数や対象URL、公開URLを修正してデプロイするだけです。

今は1:1の書き換えしか対応できません。もし1つのサーバーで複数展開する場合は現状のコードでは対応できませんので、RDPの設定をして頂き、展開後手動でIIS+ARRの設定を行ってください。
非常時用ですのでこんな感じです。

CDNを利用する場合や、より細かな対応、本格的にAzure化する為にコンテンツホルダーとの調整が必要な場合等は こちらのサイト を参考にして頂き、Microsoftさんへコンタクトを取っていただくのもよいと思います。

Windows Azure + Squid による勝手キャッシュ&リバースプロキシサーバーの構築

3月11日、東北地方太平洋沖地震が発生しました。私のほうではうまく表現できません。ただ心より祈るばかりです。

とはいっても、できることはないだろうか?と漠然と思っていたところ、日本赤十字社のサイトが過負荷で見えない、という話題が流れていました。
ぱっと思いついたのはとりあえずキャッシュサーバーとリバースプロキシを組み合わせて負荷を軽減できないか?ということでした。

幸い、リソースはWindows Azureですぐに展開できますし、SquidとDelegateは少し触ったことがあったので @halmnm を巻き込んでSquidを構築することに決めました。

並行してMicrosoftさんがAzure Passの90日無償開放、4インスタンス、転送量無制限という臨時仕様で解放してくれました。ありがとうございます。

続きを読む