http://atnd.org/events/11626
コンテンツは、
・セッション1 「mixiアプリ『Xmas 2010』開発トピック」
・セッション2 「mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ」
・セッション2 「mixiアプリ『the Actress』運用にあたっての課題へのチャレンジ」
以下自分用メモ。
***
【AppEngine ja night #13】
バスキュール社
田中さん
担当:プロデューサー・スタッフィング・技術可不可・コンテンツ品質向上
2000年
Web制作会社として創業
インタラクティブコンテンツ制作企業
スタッフ40名@西新橋
プランナーディレクター12名
AD,デザイナー8名
クライント側ディベロッパー20名(Flash)
サーバ側委託が多い
withビープラウド社
ケータイコンテンツも手がける
・Gyorol
AmazonEC2事例
「新宿駅前浴場」
AXEのプロモーション
Ustream
Twitter連動コンテンツ
→1秒間15ツイート
→リアルタイム回答受付
『ネットで社会をおもしろくしたい!』
ネットのコミュニケーション
ソーシャルグラフをいかに利用するかが鍵
Facebookが公開グラフしているように…
・mixi Xmas
2週間で100万人
・AXEヨバゲー
・mixiFes
mixi application
・mixi Xmas2010
・The Actress
北島ハリーさん
5年目プログラマー
テクニカルディレクター
mixi Xmas企画
クリエイティブ進行担当
ポイント獲得
好みの靴下を飾る
確率でクーポン出る
有料でギフト送れる
ケータイからも見れる
25日当日に靴下にプレゼント届く
とある評価:リア充アプリw
エモーショナルなイベントですが。。
クリスマスまで1ヶ月→飽きがこない
迷いのない動線、ユーザインターフェース
分かりやすくて可愛いもの。
普遍のストーリーは演出
インスタントくじ
リアルな商品が当たる。
ソーシャルギフト
QRコードにアクセスするとバーコードが出る
ソフトバンクギフト提携でセブンイレブンの店頭で商品交換可能!
12/1~12/25
アクセス250万人
鳴らされたベル数8000万回
最大秒間620req
LAMPで作るといくら…?^^;
開発環境
・Flash
・Java
・AmazonEC2
・Paymentプログラム
・ソフトバンク連携
◇mixi Xmas
森田真克さん@mouri45
あゆた社
ソーシャルアプリ受託
mixi / OpenSocial
GAE/J(Slim3)
PC版にはJSONデータ送受
PCアプリ版、モバイルアプリ版
2ヶ月実装は1.5ヶ月
WebAPI20(リリース後に+3
モバイル画面50(リリース後に+15
Kind数12
秒間620Req
1日2200~2500万
12/1~12/24 約5億3000万
ダイナミックリクエスト
朝がピーク、通勤通学中と思われる(制限一日1回あり)
最大インスタンス420
DataStore 95GB
レコード数は2億件
【GAE開発ノウハウ】
設定情報をstaticにして保持!
Memcasheへのアクセスを減らす
アプリケーション全体で利用する設定情報
Static変数が空、有効期限切れならMemchacheまたはDataStore
設定更新までのタイムラグは発生
AppEngineAPIなるべく使いたくない。
mixiアプリ制限
クライアントからのリクエストへのリスポンスは10秒制限
それ以上はタイムアウト
JOIN停止
モバイルアプリでは一定時間に一定回数タイムアウトすると新規ユーザ登録停止
データストアへの集中アクセスにより、時折リスポンスに3秒~6秒ほどかかった
JOIN対策
requestがキューにたまる時間を削る
DataStoreアクセス時のデッドラインを指定する
DataStoreServiceConfigを使用するとDSアクセスの制限時間を指定可能!
LowLevelAPIでDataStoreServiceConfigのdealine指定
JavaDocから参照
Slim3でも同様
アクセス毎なら
Spin-upへの施策
インスタンス起動時間
Static変数をフラグにしてSpin-upの判定
モバイルはリダイレクト対応
WarmUp Request利用
クエリよりバッチゲットを優先
不要なSinglePropetyIndex作らない
検証は不十分なところもあった
カスタムインデックスとマージジョンは控えた
※画像を修正したときに起きるらしい…?
件数多いkindはマージジョイン利用時にカスタムインデックスつくろうとする。
task queue を多様
ベル鳴らし時に相手にポイント付与
しかし秒間数百回となる可能性を考慮して実用は控えた
決済機能に対してこれを使用
※デフォルト値10回、設定ファイルいじれば問題ないらしい
GAEでPageView取得したものの…
GoogleAnalytics、モバイル版imgタグ使ってリクエスト誤るので
別GAEアプリにimgタグを用いてアクセス数を取得した(迂回
→予想以上に費用高くついたので、最終的にEC2にApacheでログを集めた
キーの命名
先頭にタイムスタンプ付けてクエリ結果ソートできる…が
GAEのBigTableはTabletServerにより管理される
ひとつのTabletServerにアクセス集中
数百PPS
キー文字列先頭にハッシュ値をつけることでひとつのTabletServer分散
GAE劇的にパフォーマンス改善
GAEソーシャルアプリに向いてる
GAE/J+Slim3+Eclipseのすすめ
Q:ログ拾うのになぜEC2使う?
A:mixi10秒制限へのServletの負荷を軽減
※キー分散
自動採番でPutが多い場合は考慮すべき
1組1000個程をTabletServerに送りつける事情を考慮した
TabletServerのインデックスのプロパティに書き込み
◇The Actress
山手線のトレインチャンネルで流された期間もあり
Luxの既存顧客は30~40代対象だが、20代以下にターゲティングしたためmixiアプリにした
女性向け
mixi
バナー
いわゆる女優ゲーム
「シンプルさ」でなく「詰め込んで」体験できるゲームにした
平均滞在時間1回10分ほど
1日平均4回アクセス
通算80万人登録(75万
DailyActiveUser10万以上(ピーク20万
ピークタイム200~300Req/Ssc
1日1000万~1500万リクエスト
GAEインスタンス数およそ500
ピークで1.5倍増大
ユニリーバ
バスキュール@大阪
(mixi、イラスト、映像制作、声優キャスティング)
テラポート
(コンテンツ開発)
バスキュール
テレポート+ビープラウド(GAE運用)
6ヶ月長期プロジェクト
ビープラウド
岡野さん
@tokibito
プログラミング言語はPython
GAE API Expert @lanMLewis
mixiアプリ
PC側 Flash
モバイル版 動的にHTML生成
GAE/python
Kay Framework アプリ数80個
秒間同時リクエスト数100~200
Kay Frameworkについて
@tmatsuo制作
アーキテクチャ
Django風
Jinja2テンプレート
Werkzeug(ベルセルク
国際化(Babel
遅延ロード
短時間でDeadlineExceedError
ImportError
有効URLで404
メモリ使用量制限落ち
DeadlineExceedError
タイムアウト
SDKでは2箇所で定義されている
(google.appengine.runtime.apiproxy_errors
google.appengine.runtime)
エラーハンドリングしないといけない
※起きうる状況
・API呼び出し
・FileIO
・システム系Call
Spin-up時のImportで起きた
APIフォール
Pythonもってる
モジュール数多い箇所でエラー
ImportError
Jinja2は初回でモジュールたくさん読み込む
テンプレートロード中で中途半端に
Spin-up時のモジュールに注意
warmupを使う
GAE/python
集計時のメモリリーク
1リクエスト処理を減らす(タスクキューで分割
モジュールは遅延ロード(使用頻度低いのはロードを控える
変数のキャッシュを減らす(MemChacheとか
ListよりもIterate系でとるべし
◇まとめ
2日半で100万人
1週間で200万人
想定外の集客
コスト:今までの6案件のなかでの概算値
1000万リクエスト=100ドル!(すべてDynamicRequestの場合)
LUXは1日1000~1500万アクセスだから…
ケタ違いに安い(ゼロ一つ安い)
インフラが心配で却下してきたことも…
(イニシャルコスト・スケーラビリティ)
TVやイベントをネットと連動でも!
大多数ユーザとのデジタル体験の提供が可能
システムリソースが確保できても経験もつ人的リソースが足りない!
ソーシャルグラフ利用のサービスもやっていきたい。
***
【所感】
・1000万リクエスト=100ドルで運用できるインフラはインパクト大!
・企画力、アイディア大事。使ってみたいと思えるサービスあってのクラウド。
・情報の収穫逓増。集めたデータを利用してさらなる価値が産まれる。