Google App EngineでCache-controlヘッダーを使うと、インスタンスの使用率を劇的に改善することが可能です。
ただし、Paidサービスでしか利用できません。Billingを有効にしてない無料版では使えません。
画像は、無料版でstaticにアクセスしたものが、有料版になってcacheが有効になった模様が描かれています。
使い方
出力のヘッダーにCache-Controlを追加します。
resp.setHeader("Cache-Control", "public, max-age="+age); //ageは秒指定
すると指定した秒数の間、このキャッシュしたコンテンツをキャッシュサーバーが返します。
キャッシュ時間を長めに設定すれば、表示に関しては1つのインスタンスだけで、いくらでもこなせるようになるでしょう。
次は、転送量のコストを心配する段階になります。
静的なコンテンツなら、Google Cloud Storageのベータ段階が終われば、これと組み合わせれば料金コントロール可能な静的コンテンツを楽に運用できそうです。
注意点
デプロイ直後は不安定 これに限らず、何もかも不安定ですが
ageの最大は、365日の31536000以内にした方がいいらしい。
Cached Requestはグラフに出ますのでテストで確認してみましょう。
コンテンツの確認方法
実際にアクセスして確認します。
クロムのコンソール開いて、ネットワークに切り替えて、ページを開くと、読み込んだコンテンツの一覧が出ます。
それで、Name/pathの所をクリックして開くと、ヘッダーとかが表示されます。
レスポンスヘッダーの中の Cache-Controlというのが、キャッシュです。
ここの max-ageが指定通り出ていれば、キャッシュの指定がうまくいっています。
画像では出ていませんが、
Age: というヘッダーがあって、これが、作成されてからの時間を表します。
これが、あればキャッシュが機能しています。当然、無償版のGAEではキャッシュは作成されません。
あと
appengine-web.xml の<static-files>中に指定した、expirationもcache-controlヘッダーになっています。
max-ageの数字が合わないときは、こちらの指定も確認しましょう。