以前に書いたことがある Web Apps の Local Cache について、やっと公式ドキュメントが用意されていることを Azure 界の抱かれたい男 No.1 に教えてもらいました。
Azure App Service Local Cache Overview https://t.co/fFVhBPT3mh しばやんさんんへ
— こすもす.えび (@kosmosebi) 2016年3月8日
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 だけです。
Local Cache が有効になると WEBSITE_LOCALCACHE_ENABLED = True となります。以下の情報は Kudu 側ですが、値が変わっていることが簡単に見て取れます。
興味深いキーとしては WEBSITE_VOLUME_TYPE = PrimaryStorageVolume です。このキーの値を調べることで、現在のストレージがデフォルトのファイルストレージなのかキャッシュなのか確認出来ます。
以下が Local Cache が有効になっている Worker Process の環境変数です。
WEBSITE_LOCALCACHE_READY というキーが追加されていますが、これはアプリケーションのキャッシュが完了したかどうかを表しています。そして WEBSITE_VOLUME_TYPE が LocalCache になっていることも確認出来ました。
そして肝心のキャッシュのパフォーマンスですが、以前に試した時にはファイル数が多いアプリケーションで 20% 程の改善が見られました。
Local Cache のベストプラクティス
公式ドキュメント曰く、Local Cache は Staging と Production のスロットを使うようにし、スワップで本番反映を行っていくスタイルで一番有効とあります。
Local Cache の設定は Slot Sticky として Production のみに設定を行います。ステージングスロットには頻繁にデプロイが行われるので、キャッシュ設定などは追加しないようにします。
このようにしておくと、スワップのタイミングでキャッシュのウォームアップが行われるらしいです。