Static Fileが破損した状態でキャッシュされ配信された件につきまして

88 views
Skip to first unread message

Kazuki Kyakuno

unread,
Aug 10, 2017, 2:21:19 PM8/10/17
to Google-App-Engine-Japan
Google App Engine/Pythonを使用してモバイル向けソーシャルゲームを運営しています。
バイナリアセットを10万ユーザに配信する必要があったため、Unityで作成したAsset Bundleをstatic_dirで配信しました。

app.yamlは、

- url: /assetbundles
  static_dir: AssetBundles
  expiration: "1d"

として、Googleのエッジキャッシュを使用しました。

検証では問題なかったのですが、実運用を行ったところ、破損したファイルが配信されました。

具体的に、以下が破損したファイルの詳細です。

curl -I https://***/AssetBundles/iOS/models_enemyHTTP/1.1 200 OK Date: Fri, 04 Aug 2017 10:17:29 GMT Expires: Sat, 05 Aug 2017 10:17:29 GMT ETag: "kQYaBA" X-Cloud-Trace-Context: 54f52a09f4561b7d19dd54552f198193Content-Type: application/octet-stream Server: Google Frontend Content-Length: 9964431Age: 77979 Cache-Control: public, max-age=86400 Alt-Svc: quic=":443"; ma=2592000; v="39,38,37,36,35"

以下がキャッシュ期間完了後、破損していないファイルに置き換わった際の詳細です。

curl -I https://***/AssetBundles/iOS/models_enemyHTTP/1.1 200 OK Date: Sat, 05 Aug 2017 10:20:17 GMT Expires: Sat, 05 Aug 2017 10:21:17 GMT Cache-Control: public, max-age=60 ETag: "_lKmsg" X-Cloud-Trace-Context: de971220a28ebc7218025cd51f1f6599 Content-Type: application/octet-stream Server: Google Frontend Content-Length: 12061583 Alt-Svc: quic=":443"; ma=2592000; v="39,38,37,36,35"

正常なファイルは12061583byteなのですが、破損したファイルは末尾が欠損しており、9964431byteになっています。転送量の合計は14TBです。
破損したファイルのURLに?nunce=1を付けた場合、正常なファイルが配信されました。

現在は、expiration: "1s"にして運用回避しているのですが、エッジキャッシュに破損したファイルが残り、それが配信されてしまうというのは問題かと考えています。

Google App Engineのエッジキャッシュの信頼性に関しまして、何か情報などありましたら、頂けると嬉しいです。

najeira

unread,
Aug 11, 2017, 12:41:59 AM8/11/17
to Google-App-Engine-Japan
najeiraです。

これまでエッジキャッシュの問題については聞いたことがありません。

1点気になるのは、AppEngine側のリミットで

OutgoingのDaily Limitが14TBです。

これは想像で根拠も特にないのですが、
ちょうどリミットにかかったところでAppEngineの送信が切れてしまい、
中途半端なものがキャッシュされた可能性もあるのかなと思いました。

大規模なstaticなファイルの配信については
Google Cloud Storageを使うと安心かと思います。


2017年8月11日金曜日 3時21分19秒 UTC+9 Kazuki Kyakuno:

Kazuki Kyakuno

unread,
Aug 13, 2017, 3:52:34 AM8/13/17
to Google-App-Engine-Japan
najeira様

コメント、どうもありがとうございます。

AppEngine側のDaily Limitが14TBであるという情報、どうもありがとうございます。
使用帯域は、2017年8月1日~9日の期間で、
 App Engine Out Bandwidth: 14525.292 ギガバイト
ですので、Daily Limitは超えていないのではと考えています。

問題が起きたのは、10MBを超えるファイルに限定されていまして、
かつ、モバイル回線からのアセットのダウンロードに依存している印象があります。

例えば、エッジキャッシュはAppEngineのStaticFileからユーザに転送しながらキャッシュするため、
ユーザが途中でダウンロードを中断した場合に、末尾が欠損したファイルが生成される可能性などあるものでしょうか。

このあたりは、Googleの実装に依存しており、推測するしかないのが難しいところですね。


2017年8月11日金曜日 13時41分59秒 UTC+9 najeira:
Reply all
Reply to author
Forward
0 new messages