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

Preview:

Citation preview

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

appengine ja night #13

自己紹介

名前: 岡野真也twitter: @tokibitoblog: 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/PythonKay 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_errorsgoogle.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はスケールするよ!

ありがとうございました。