しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure Web Apps に追加された Local Cache を紐解く

以前に書いたことがある Web Apps の Local Cache について、やっと公式ドキュメントが用意されていることを Azure 界の抱かれたい男 No.1 に教えてもらいました。

typo しているのは大人なのでスルーしました。

さて、肝心の Local Cache は Web Apps の弱点の一つである、共有ストレージに起因する問題を解決するものです。機能の説明だけではなく、仕組みもドキュメントに書いてありました。

Web Apps は複数のインスタンス間で D:\home 以下を共有しているため、WordPress などのアプリケーションをそのままスケールアウトさせることが可能です。

しかし、Azure Blob を使ったファイルサーバーを SMB でマウントしているため、Azure Storage やファイルサーバーに障害が発生するとダイレクトに影響を受けますが、Local Cache を有効にしている場合は Web Worker で完結するため、影響範囲を抑えられる可能性があります。

当然ながらローカルに書き込みを行うようなアプリケーションの場合、サーバーの再起動でキャッシュごと破棄されるため有効には出来ません。この点を理解した上で、実際に試す必要があります。

Local Cache を有効にする

Azure Portal で以下のキーを追加すると、Local Cache が有効になります。デフォルトでキャッシュサイズは 300MB ですが、最大で 1GB まで拡張可能です。

  • WEBSITE_LOCAL_CACHE_OPTION = Always
  • WEBSITE_LOCAL_CACHE_SIZEINMB = 300-1000

必須のキーは WEBSITE_LOCAL_CACHE_OPTION だけです。

f:id:shiba-yan:20160308232710p:plain

Local Cache が有効になると WEBSITE_LOCALCACHE_ENABLED = True となります。以下の情報は Kudu 側ですが、値が変わっていることが簡単に見て取れます。

f:id:shiba-yan:20160308232606p:plain

興味深いキーとしては WEBSITE_VOLUME_TYPE = PrimaryStorageVolume です。このキーの値を調べることで、現在のストレージがデフォルトのファイルストレージなのかキャッシュなのか確認出来ます。

以下が Local Cache が有効になっている Worker Process の環境変数です。

f:id:shiba-yan:20160308232530p:plain

WEBSITE_LOCALCACHE_READY というキーが追加されていますが、これはアプリケーションのキャッシュが完了したかどうかを表しています。そして WEBSITE_VOLUME_TYPE が LocalCache になっていることも確認出来ました。

そして肝心のキャッシュのパフォーマンスですが、以前に試した時にはファイル数が多いアプリケーションで 20% 程の改善が見られました。

Local Cache のベストプラクティス

公式ドキュメント曰く、Local Cache は Staging と Production のスロットを使うようにし、スワップで本番反映を行っていくスタイルで一番有効とあります。

Local Cache の設定は Slot Sticky として Production のみに設定を行います。ステージングスロットには頻繁にデプロイが行われるので、キャッシュ設定などは追加しないようにします。

このようにしておくと、スワップのタイミングでキャッシュのウォームアップが行われるらしいです。