234
190

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Cloud Platformにはエッジキャッシュの機能がある。
あんまりDocumentにも乗ってないので、今回はエッジキャッシュを紹介します。

エッジキャッシュの特徴

エッジキャッシュはGoogleが利用しているキャッシュサーバに、自分のGCP上のコンテンツも乗せることができる機能です。
GCPのキャッシュサーバは全世界にあるため、日本だけで無く、海外も視野に入れたサービスでも有効です。

特徴

  • すさまじいキャパシティ
  • とっても安価

キャッシュサーバの管理はGoogleで行ってくれる上に、すさまじいキャパシティを誇り、google.co.jpが落ちるぐらいのトラフィックが来ない限りは、問題ないとまで言われています。
料金も非常に安く、うまく使えば課金額を1桁減らしてくれます。

注意点

  • アクセス制御は使えない
  • キャッシュに乗っている時間はベストエフォート
  • キャッシュを明示的に消すことはできない

エッジキャッシュは、単純にキャッシュを返すだけで、ロジックを入れることはできません。そのため、アクセス制御はできません。
キャッシュの有効期限は設定できますが、その時間まで必ずキャッシュが生存している保証はありません。また、キャッシュを明示的に削除するAPIはありません。

使用感

きめ細やかなコントロールできないけど、安価でキャパシティがでかいのが、GCPのエッジキャッシュです。そのため、誤ったものがキャッシュされるのが怖い場合は、有効期限を数秒程度にしておくと良いでしょう。それでも、同時接続数が多ければ、かなりのトラフィックをキャッシュでさばいてくれます。

エッジキャッシュを利用できるサービス

エッジキャッシュは以下のサービスで利用可能です。

  • Google App Engine
  • Google Compute Engine
  • Google Cloud Storage

App Engineでエッジキャッシュを利用する

App Engineでエッジキャッシュを利用する方法は2つあります。

cache-control header

APIのReponseにcache-control headerを付けることで、Responseをエッジキャッシュに乗せることができます。

この機能を使えば動的生成されたResponseでもエッジキャッシュに乗せることができます。
QueryStringも含めたURLでキャッシュに乗るため、検索条件がQueryに乗っていても、まるごとキャッシュしてくれます。
QueryStringが異なればOriginalを取りに行くため、?time={epoch time}などにすれば、キャッシュを避けてOriginalを取りに行くこともできます。

protected Navigation run() throws Exception {
		response.setHeader("cache-control", "public, max-age=3");
		response.setContentType("text/plain");
		response.getWriter().println("hello edge cache!");
		response.flushBuffer();
		return null;
	}

static-files setting

AppEngineには元々エッジキャッシュ以外に、static resouceを乗せるstatic serverが存在します。
static serverに乗せるためには、appengine-web.xmlに設定を記入します。
この設定を入れると、static serverに乗るだけでなく、エッジキャッシュにも乗せてくれます。

appengine-web.xml
<static-files>
  <include path="/**.*"/>
</static-files>

上記の設定はexpiratinを指定していないので、defaultに従い10minになります。
値を変更したい場合は、expirationを指定します。

appengine-web.xml
<static-files>
  <include path="/**.png" expiration="4d 5h" />
</static-files>

細かい指定については、Documentを参照してください。

Compute Engineでエッジキャッシュを利用する

HTTP(S) LBCloud CDN を利用する

gcloud compute backend-services update [BACKEND_SERVICE_NAME] --enable-cdn

CloudStorageでエッジキャッシュを利用する

CloudStorageでpublicなobjectについては、defaultで3600secのCache-Controlが設定されるようになっている。
そのため、publicにしてさえいれば、特に何もしなくても、エッジキャッシュは利用される。
設定を変えたいのであれば、FileUpload時に、ResponseHeaderにCache-Controlを付けるように指定する。

例えば、以下の様に行う。

gsutil -h "Cache-Control: public,max-age=3" cp -r {your src} gs:{your bucket name}/{your dest}

以下でもエッジキャッシュについて、言及されているので参考にどうぞ。

静的ファイルの配信を Google Cloud Storage に移行しました

また、CloudStorageのACLについては、こちらにも書いてます。

234
190
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
234
190

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?