appengine ja night 18 ( #ajn18 )
http://www.zusaar.com/event/170203◯Google App Engineの倹約のすゝめ
<スライドのURL>
http://goo.gl/R99Uj
→見直し、価格を抑えられる
#ajin18
#gaeja
クラウド組
・GAEの簡単な詳解
2008-04-08から公開
2011-11月に正式リリース
・新旧課金体系の違い
無料枠が小さくなった、純粋な値上げ
単位時間アタチの使用料が値上げ
有料とプレミアムの3種類
最低$9+$2.1/週
APIの使用回数が課金対象
データストアAPI
無料・回数無制限のAPIもある
・重要な項目
ユーザから立ち上がって起動する
フロントエンド
・Frontend Instance Hours
Frontend インスタンスが起動していた時間
・Datastore Weits
Datastoreの書き込み操作
→CPU時間だったのがインスタンス時間になった
起動終了管理できるのが
バックエンド
インスタンスごとの稼働期間+APIの使用料を課金。
インスタンスの数が大きく影響する。
・CPU HoursとInstancee
CPU Hoursだけでなく、インスタンスの起動時間+αが課金対象になる
インスタンス CPU時間に比べると単位が大きくなる
→インスタンス数を減らす
インスタンスが空くまで、キューの中で待機する(Pending Request Queue)
・スケジューラ
どの空きインタンスに(Idle Instance)に処理を任せるのかを決める。
・Application Settings - Performance
Max Idle Instance Instances:ここで設定した数以上のアイドルインスタンスが存在しても課金対象にならない。
Min Pending Latency:Pending Latencyがここで設定した時間を超えるまではインスタンスが立ち上がらない。
どのくらいきゅーでますか?
Max Idle Instances 最小限の1を設定する
Min Pending Katency 15sに設定する
できるだけインタンスを〜〜
・スケール設定による節約の事例
LingrのBot
RedmineのActivityをURLFetchする
データストアのwriteとreadを設定しないと
・インスタンス時間を減らす
concurrent requestを利用する
1つのインスタンスで同時に複数のリクエストを処理できる
PythonはHIDに限る
appengine-web.xml
app,yaml
threadsafe: true
・Put Ops, Index Writes Opsとは
新規PUT
Entity Tableへの書き込み
Index Tableへの書き込み
1 Put Ops + 11 Index Write Ops = 12 Write Ops
上書きPUT(p2のみ変更)
・Datastore Writes Operationを節約
一回のPUT操作=1 write ops...ではない
・Single Property Indexを使わない方法
・Java
entity.set〜〜
・Slim3
@Attribute(unindexed = true) private String unindexedString;
・Python
indexed=false
・Go
noindex
・unindexed設定後二回目以降のPUT(2)
p2,p3がunindexedになっ
unindexedで保存しなおしても、一回目は
二回目に効果が出る
一回のPUT操作=1 write ops..ではない!
Single Property Indexを節約した事例
・ソーシャルゲームアプリケーション
位置情報を利用した、領地取りゲーム
・設定前
〜〜〜
・Datastore Read Ops
Memcache APIを活用する」
・クエリを実行したて50件のエンティティを取得する
1Query Ops
50Fetch Ops
・51 Read Opsを消費する
・キャッシュしても問題ないクエリ結果はキャッシュする。
memcache APIは無料
・Keyだけで良い場合はKeyだけ取得する
・Keyの取得だけならSmall Opsとなる
1Query Ops
50 Key Fetch Ops
1 Reads Ops + 50 Small Ops
・Backend Instanceにも無料枠がある
$0.72/dayの無料枠があるので活用しないともったいない。
Taskの実行に使うのが便利。
backendsの定義とアプリケーションをデプロイする
queueの定義のtargetにbackendsの名前を指定する
・まとめ
まずは「課金対象か?」を理解する。
・現在の課金の状況を正しく把握する。
・節約するポイントを決め、節約する。
・Instance Hourの節約
スケジューラの調整
concurrrent requetの節約
Datastore APIの節約
Writes・・・Single Property Index
Reads・・・Memcache、Key
フロントエンドは15分単位だとバックエンドのインスタンスも15分単位
Staticファイルのキャッシュは
アンインデックスにしていいがやっぱり復活したい
→インデックスしなおさないといけない
PUTしたタイミングでかわる。
PUTしなおせばよい。
concurrent request の設定はPython2.5でも有効?
→有効ではない
RPCしていないCPUでも複数スレッドに鳴る
カスタムインデックスはどんんだけながくても1
プロパティクラスをつくればいける?
Expand 動的にインデックスされる?
フロントエンドとバックエンドは料金は特別変わらない
・再便場の機能をひと通りレビュー
松尾さん
App Engine 細心除法
→GDDとほぼ同じ情報
1.5.1 X-AppEngine-Country ProtoRPC(JSONベースRPCのハンドラ構築用モジュール) SDKでのHRDエミュレーション
・Pending Latencies
11/7リリースでは設定できる
Max必ず新しいインスタンスを生成するようになる
Min Idle InstancesはAlways Onでは一部の人は設定できた。(1-7)
※今はできない
failfastをfalseにするとPending Queueに入れられる
Python Memcache CAS
CASはCompare And Setの略
排他的なアップデートができる
API Console 新しめのやつを管理できる
プレミアムアカウント
沢山のメールをやりとりしてやっと取得
・SSL for Custom Domain TT
Androidも前のバージョンが使えない
モダンブラウザならOKだが一部使えない
AppEngineはトランザクションが苦手。
できるが、触るエンティティは1つのエンティティの中にいないといけない
Slim3はGlobal Transactionを実装している
XG-transactionは5EGまで同時にトランザクションかけれる
Instance hour が半額 PythonもJavaも。
Python2.5&Linuxで1.55から1.6に上げると重い(レスポンスが悪い。)
→Chromeのバージョンが関係ある可能性がある。
Pre-connectが関係する。切ってもなおらない?
有料から無料にするとどうなる?
Frontendキャッシュが効かなくなる
エッジサーバがあるが、
MAXインスタンスで瀬尾ギョできるのは
#ajn18
Input系 Unity
左クリック マウス用if (Input.GetMouseButtonDown(0)) { Debug.Log("MOUSE"); }
これはマウスだけでなくAndroidもなぜか認識
Input.mousePosition;
Scene::raycastAnyShape: The maximum distance must be greater than zero!
Raycastをインスペクタで選択させる方法
http://unity3d.com/support/documentation/ScriptReference/LayerMask.html
public LayerMask mask = -1; void Update() { if (Physics.Raycast(transform.position, transform.forward, 100, mask.value)) Debug.Log("Hit something"); } }
mask.valueだよ。maskではない。
16進数の"0x"プレフィックス由来
http://q.hatena.ne.jp/1149751438OnCollisionStayは常ではなかった Unity
コライダーがぶつかっている間常にログを吐かなかったので、コライダーがぶつかっている間は常に判定はしていない。
void OnCollisionStay(Collision collision) { Debug.Log("log"); }
タグ付け Unity
gameObject.tag = "hoge"
hogeというタグがない(インスペクタで作ってない)のにGameObjectへ充てるとどうなるか実験した。
こんなエラーになる
UnityException: Tag: タグ名 is not defined!
スタンドアロンサーバ for Unity
node.jsの使いかたわからないので他のサービスを調べた・SlimNet
→アセット作ってるがこれはサービスではなさげ?
http://forum.unity3d.com/threads/111299-Release-SlimNet-Public-Alpha-(Free)
・Photon
http://www.exitgamescloud.com/
→Hello Worldのやりかた
http://doc.exitgames.com/v3/quickstart/helloworldpart1
→「Viking MMO Demo」と「Bootcamp FPS Demo」とプラグイン
http://doc.exitgames.com/v3/demos/unitydemos
・uLink
http://www.muchdifferent.com/?page=game-unitypark-products-ulink
→FREE (30 DAYS)
・SmartFox
http://www.smartfoxserver.com/
→