ラベル GAE の投稿を表示しています。 すべての投稿を表示
ラベル GAE の投稿を表示しています。 すべての投稿を表示

2011年1月14日金曜日

”AppEngine ja night #13”参加録

行ってきました、”AppEngine ja night #13”
http://atnd.org/events/11626


コンテンツは、


・セッション1 「mixiアプリ『Xmas 2010』開発トピック」
・セッション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ドルで運用できるインフラはインパクト大!

・企画力、アイディア大事。使ってみたいと思えるサービスあってのクラウド。
・情報の収穫逓増。集めたデータを利用してさらなる価値が産まれる。

2010年11月18日木曜日

RingoJSインストール周辺メモ

Antが入ってる状態からのメモ@ MacOSX 10.5。

antのパスが通っているかは、ターミナルで確認。
  ant -version

基本的なインストールは本家サイトを参照しつつ、その前後で起きたエラーと対処について書きます。

【インストール時のエラーと対処】
・ERROR①:"Unable to access jarfile"
ant jarコマンドを打ち忘れると出るエラー。
ターミナルから、git cloneまたはダウンロードしてきたringojsディレクトリ直下で
  ant jar
すると、ringojs/build/classesにクラスが生成される。

・ERROR②:"java.io.FileNotFoundException: Can't find file admin/create"
或るサイトを参照してターミナルでアプリ作成コマンドを
  bin/ringo admin/create
と打つも、上記エラー。

正解は
  bin/ringo-admin create
の様子、バージョンの違い?

【アプリ起動】
・デモアプリ起動
インストールしたringojsディレクトリ直下で、
  bin/ringo apps/demo/main.js
のコマンド叩くとjettyが起動して、http://localhost:8080/でアプリが見れます。

・パッケージのインストール(GitであればUserID/RepositoryNameで良いとの公式サイトに…例:ringo-admin install robi42/ringo-hibernate)

上記installコマンド叩くも、ERROR③:”JavaException: java.util.zip.ZipException: error in opening zip file (ringo/zip.js#16)”発生。

zip.jsの16行目と調査リンク先を見る限り、Path周辺が問題の様子

けれども、コマンド打たなくてもパッケージのインストールはできる(※参照)ようなので、
  git clone git://github.com/hns/ringo-cometd.git
でローカルに落としたpackageを、ringojs/packageディレクトリにコピー



その後、ringoコマンドでパッケージ内のmain.jsを叩けば、起動します。
  bin/ringo packages/ringo-cometd/app/main.js





・アプリ作成ヘルプは
  bin/ringo-admin create -h

・Google App Engine の雛型作成は
  bin/ringo-admin create -a






たしかにスケルトンが出来上がってます。
GoogleAppEngineに載せるところは未テスト。


【参照】
・RingoJS Home
・GAE deploy 参照動画
・Comet 参照動画

2010年11月2日火曜日

ヒトマネ提案サイト”ミミクリ”の使用法

Mashup Award 6 (#MA6)に向けて、Twitterのユーザーの関心ごとをキャッチアップするツールを作成しました。


Mimikury(ミミクリ)


【使用法】
①:左上のユーザ名入力欄に「Twitter ID」を入力し、「Sign in with Twitter」ボタンを押してください。

②:ポップアップウィンドウが表示されるので、「認証」ボタンを押してください。

③:ブラウザにTwitterログイン歴が残っていない場合、下記の画面が表示されるので、「ユーザ名」と「パスワード」を入力し、「許可する」ボタンを押してください。

④:認証に問題なければ、下記認証完了画面が表示されるので、「close window」を押して、このウィンドウを閉じてください。
※:下記エラーが発生して、ログインできない場合は、再度ブラウザの更新ボタンを押して、再ログインの処理を行ってください。

⑤:ログインが完了すると、『画面左パネル』にフォロー者のツイートから抽出したキーワードが表示されます。(このキーワードは、2分間隔で自動的に変わります)

⑥:項番⑤『画面左パネル』のキーワードをクリックすると、『画面真ん中パネル』のツイートと、『画面下部』のショーケースの表示が変化します。

⑦:『真ん中パネル』、『下部ショーケース』上のテキストをクリックすると、データベースに情報が登録され、該当部の☆の色が変化します。
※ここでは、気になった情報に対して、クリックをしてみてください。
クリックしたデータからキーワードと思われる情報が『画面右パネル』に表示されます。
使用法は以上です。


なお、本開発では下記ツールを用いました。
  • Google App Engine(Java)
  • jQuery
  • Yahoo! キーフレーズ検索API
  • Twitter Search API
GAE上のOAuth実装にあたり、ご協力いただいたOtchyさんありがとうございました。


Blogger Syntax Highliter