去る11月18日に行われた、
appengine ja night #18。「app engine ja nightって?」というのはこちらあたりでも見てもらうこととして、ぼく個人、これに参加したことはありませんでした(主に地理的要因による)し、今回も参加できたというわけでは無いのですが、appengineのpreview版卒業以降、初のajnということで、「きっと、appengineのリソース節約術が聞けるハズ!」と、心から、その開催を待ち望んでいました。 上述のとおり、ぼくの参加の大きな障害である「地理的要因」は今回のajn #18でも変わらず、ただ一方で“リソース節約術”は何としても聞きたい!ということもあり、今回はTwitter + Ustreamを利用しての“初参加”と相成りました〜。
結果、もちろん直接参加とは勝手が違って色々ともどかしかった部分もあったものの、個人的には非常に勉強になった・得られたものが大きかった、ということで、その「個人的に勉強になったこと・得られたもの」をまだ記憶が新しいうちに、(自分用に)メモしておこうと思います。
(Twitter、Ustreamに齧り付いていられたのは、結局shin1ogawaさんのセッションだけだったりするのですが(松尾さんのはUst無かったしぃ〜))
@shin1ogawaさん「Google App Engine 倹約のすゝめ」
- 発表時の資料はこちら。
- スライド1枚目
- 話の導入でのshin1さんからの質問、「GAE、全く使ったことない方はいる?」→0名。
- さすが、ajn!
- 話の導入でのshin1さんからの質問、「GAE、全く使ったことない方はいる?」→0名。
- スライド3枚目
- うさぎかわゆす
- スライド6枚目
- “リソース消費量が少なければ、無料でも利用できる”
- 裏を返せば、リソース節約のためのチューニングの手間を惜しむな!その手間を惜しまなかった者にのみ、gaeの女神は微笑む!・・・ということですよね:)
- “リソース消費量が少なければ、無料でも利用できる”
- スライド8枚目
- 課金体系の変更
- 今までは「無料or有料」だったのが、新体系では「無料or有料orプレミアム」に。
- “有料: 使った分→最低$9+それを超えて使った分に”
- まずは無料枠に収められるようチューニングを行い、それが無理だったら今度は、最低利用額である$9に収められるようにチューニングを行う・・・って感じになるんだよね、きっと!
- で、この$9ってのは「$9/month」ではなく、「$2.1/week」??(不明瞭です・・・でも、一ヶ月が30日とすると計算は合いますね)
- “有料: 使った分→最低$9+それを超えて使った分に”
- 今まではCPU使用時間による課金だったのが、インスタンス起動時間による課金に。起動しているインスタンスの数が大きく影響する。
- 加えて、APIの使用回数でも課金。
- 今までではCPU使用時間に含まれていたのが、別途課金対象に。
- 今までは「無料or有料」だったのが、新体系では「無料or有料orプレミアム」に。
- 課金体系の変更
- スライド15枚目
- スライド17枚目
- そもそも“Frontend Instance”って何物??
- “App Serverとして起動される論理的なマシンのようなもの。開発者が構築したアプリケーションが読み込まれ、実際の処理を行う。リクエストの忙しさに応じて数が動的に増減する(自動スケールアウト).”
- そもそも“Frontend Instance”って何物??
- スライド18枚目
- “Google App Engineでは、基本的には1インスタンスで同時にひとつしかリクエストを処理できない!”
- “新しいリクエストが到着したがインスタンスが空いてない!どうする!?”・・・次のスライドへ
- スライド19枚目
- 一つ目の解。“新しいインスタンスを起動=スケールアウトする”
- あらたにもう一つ、Frontend Instanceが起動するイメージ。
- 一つ目の解。“新しいインスタンスを起動=スケールアウトする”
- スライド20枚目
- スライド21枚目
- スライド22枚目
- スライド23枚目
- スライド24枚目
- このスライドバーによる設定は、いの一番に行える・一番カンタンなチューニングとも言えますね〜
- スライド25枚目
- スライド26枚目
- スライド27枚前
- もうひとつの切り口として、“インスタンスごとの処理数を増やす”。
- スライド28枚目
- スライド29枚目
- “concurrent requestの設定方法”
- appengine-web.xmlに“
true ”でおk! - ただしもちろん、スレッドセーフに作っている必要はあるよね
- appengine-web.xmlに“
- “concurrent requestの設定方法”
- スライド31枚目
- “Datastore APIの価格”。
- datastoreの制限が個人的には一番厳しいんだよな〜。
- スライド33枚目
- スライド34枚目
- スライド35枚目
- “Datastore Writes Operationを節約”
- “一回のPUT操作=1 write ops...ではない!”ことを理解する!
- “Batch操作であれば、Entityの件数分必要”
- “Index Writesも含まれる点に注意”
- “必要ないSingle Property Indexを削減する”
- “インデックスを作らない、を明示的に指定する。”!
- “一回のPUT操作=1 write ops...ではない!”ことを理解する!
- “Datastore Writes Operationを節約”
- スライド36枚目
- スライド37枚目
- ただし、“unindexed設定後一回目のPUT”には要注意!
- “unindexedで保存しなおしても、一回目はIndexの削除のためにIndex Writesが発生してしまう。”
- やるなら最初から、だな〜。
- ただし、“unindexed設定後一回目のPUT”には要注意!
- スライド42枚目
- 続いて、Datastore Reads Operationsを減らすことを考える・・・
- “クエリを実行して50件のエンティティを取得する”と・・・?
- “Keyだけで良い場合はKeyだけ取得する”
- “Keyの取得だけならSmall Opsとなる。”
- “1 Reads Ops + 50 Small Ops”
- shin1さん、これを逆手にとって、keyにデータをブチ込んでしまってみたとかww
- 節約のための最終手段としてなら、ライトなデータはこれでいってみる価値はあるかもだけど・・・あんまりやりたくないなぁw
- スライド44枚目
- “Backend Instanceにも無料枠がある”。
- そもそもBackend Instanceとは、ってところなんですが、こちらのエントリの説明がとてもわかりやすかったです。
- “$0.72/dayの無料枠があるので活用しないともったいない!Taskの実行に使うのが便利。”
- 一番のロースペックで9時間分の無料枠かぁ・・・。
- cronでも特定の時間だけbackendにさせることが可能?
- backendについては、もう少し要勉強だな〜
- “Backend Instanceにも無料枠がある”。
- スライド46枚目
- 今セッションのまとめ。
- “性能が良いアプリケーションを構築する事はこれまで同様...ますますに重要に!”。
- やるべきことをやらずに“高価いよ!!”と言うなかれ。
- “性能が良いアプリケーションを構築する事はこれまで同様...ますますに重要に!”。
- 今セッションのまとめ。
- 質疑応答
- 非常に活発な質疑応答が交わされていました〜。これを整理している方はおられないですかねぇ〜?
- その一部は、ハッシュタグ「#ajn18」や、「appengine ja night #18 - Togetter」で追うことができますが!
他にも、
@tmatsuo さんによるApp Engine 1.6.0解説(資料)があったり、Beer Talkがあったりしたようですが、松尾さんのタイミングでUstが無くなってしまったのと、自分の空腹により(主因)、TLを追っかけることをやめてしまったので、このまとめもここらへんで。
でもほんと今回のは、遠隔参加だったけれども、参加してよかったと心から思えます。今まで「う〜〜・・・。。gaeでWebアプリ動かそうと思ったら、なんかよくわかんないチューニングをしなきゃなんないな・・・」っていう、なんかモヤモヤしてたところの大部分が、一気に晴れた気分。これから作る予定にしてるアプリは今回知ることができたことを最初っから盛り込んで、スムーズにリリースにつなげたいなぁ!
なにはともあれ、皆様、ありがとうございました!