mixiアプリ「the Actress」運用に
あたっての課題へのチャレンジ



                 appengine ja night #13
自己紹介

名前: 岡野真也
twitter: @tokibito
blog: http://d.hatena.ne.jp/nullpobug/
所属: 株式会社ビープラウド
弊社について

株式会社ビープラウド
http://www.beproud.jp/
主にWebサイトなどの受託開発(PC/モバイル)
プログラミング言語はPython(Django)
iPhone, Androidアプリもやってます
GAEのAPI Expertがいます(@IanMLewis) 
「the Actress」

  http://www.lux.co.jp/campaign/actress/
  mixiアプリ(PC+モバイル)
     PC側 - FlashからのAPIアクセス
     モバイル版 - 動的にhtml生成
  AppEngine/Python
  Kay framework(ver 0.8.0)
     アプリケーション数 - 80個ぐらい
  同時リクエスト数 - 100~200前後(2010/11)
     インスタンス数 - 100~250前後(2010/11)
リクエスト数
Kay frameworkについて

 AppEngine用アプリケーションフレームワーク
 url: http://code.google.com/p/kay-framework/
 作者: @tmatsuo
 ライセンス: New BSD License
Kay frameworkについて(2)

 アーキテクチャ
  Django風MVC(Model-Template-View)
  Jinja2テンプレートエンジン
  Werkzeug
  国際化(babel)
  遅延ロード
課題

短時間でDeadlineExceededErrorが連続して発生
する
短時間でImportErrorが連続して発生する
有効なはずのURLへアクセスすると404 NotFound
メモリ使用量の制限でインスタンスが落とされる
DeadlineExceededError

 タイムアウトで発生する例外
   どの行でも発生する可能性
     例外が発生しないのが前提なコードはダメ
 SDKでは2箇所で定義されている
   google.appengine.runtime.apiproxy_errors
   google.appengine.runtime
例.
DeadlineExceededError(対策)

 ロードや処理時間を短く
 例外が発生する可能性を常に考慮
 例外が発生しても破綻しない構造
ImportErrorの連続発生

 モジュールは存在するはず
 ロードに時間がかかるモジュール
  Jinja2
     初回ロード時にほとんどのモジュールをロー
     ドする
 ロード中にDeadlineExceededErrorが発生して中
 途半端な状態になることがある
ImportErrorの連続発生(2)

 try exceptで例外を握りつぶさないように
 http://code.google.
 com/p/googleappengine/issues/detail?id=1409
例.
ImportErrorの連続発生(対策)

 スピンアップ時のインポートを減らす
   遅延ロード
 warmupを使う
404 NotFound


   スピンアップ時のURL構築~キャッシュ部分で
  DeadlineExceededErrorが発生
  中途半端な状態でキャッシュされていた
  kayの問題
メモリ使用量制限

 GAE/Pyのインスタンス(PythonVM)でメモリを使用
 しすぎると強制終了
 メモリ使用量がおよそ150~250MB程度で発生?
 集計に注意
   大きすぎるリスト
   大きすぎる辞書
メモリ使用量制限(2)

 変数を使ってキャッシュする際に注意
  メモリリークの可能性
 アプリケーションの規模が大きい場合
  コード量、モジュール数が多い
    各ロジックで使えるメモリが少ない
Exceeded soft memory limit ...
メモリ使用量制限(対策)

 1リクエストの処理を減らす
   タスクキューで分割
 モジュールは遅延ロードする
   使用頻度の低いものは極力ロードしない
 変数によるキャッシュを減らす
   Memcacheやデータストアを使う
キャッシュ不具合のデモ

(時間があれば。)
まとめ

 例外を潰さないように!
 例外が発生しても破綻しないように!
 1リクエストの処理は小さく!
 AppEngineはスケールするよ!
ありがとうございました。

mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ