ひがやすを技術ブログ

電通国際情報サービスのプログラマ

AppEngineにどんなアプリが向いているのかを知ろう

AppEngineは、万能なプラットフォームではありません。むしろ、かなり使い道は限定されていると言ってもいいでしょう。
向いていないアプリで使うとかなりはまって、アプリが完成しないリスクがあります。
一方、向いているアプリで使うとこれまでよりかなり費用を節約できたりとか、儲けにつなげることができます。


AppEngineにどのようなアプリが向いているかというと、AppEngineがGoogleの既存のインフラをそのまま利用していることをまず知っておく必要があります。
Googleのインフラは、(極端に単純化すると)大量のデータを多くの人に同時に見せるために最適化されています。
AppEngineも同様で、大量のデータに大量にアクセスがあっても大丈夫なように、BigtableというKVSを使っています。また、自動でスケールアウトするWebのFront Endも既存のインフラをそのまま使ってます。
BigtableGmailでも採用されていて、お世話になっている人も多いのではないでしょうか。


というわけで、インフラから見たAppEngineに向いたアプリというのは

  • 大量のデータを扱う
  • 同時アクセスが多い

ものだということがわかります。難しい言い方をするとWebもデータベースも自動的にスケールアウトすることが必要なアプリということになります。


これが基本です。これから分かることは、大量にアクセスがあるコンシューマー向けサイトにAppEngineは向いていて、そうでないサイトに対しては、インフラが too muchであるということです。
また、自動的にスケールアウトするという性質が、インフラのメンテナンス要員が基本いらないということにつながります。大量にアクセスがあるサイトは、インフラにもかなり気を使い、お金を投入していることでしょう。そのコストの大部分が削減できるのはかなりのメリットですよね。


次に重要なことは、インフラのコスト削減のために、アプリごとに専用のVMを用意するのではなく、アクセスがあったときにアプリケーションを起動し、しばらくアクセスが無ければアプリケーションを終了させ、また次のリクエストで再起動するという仕組みを導入していることです。
使っていないときは、リソースを消費しないので、限られたリソースを効率的に使うことができます。
専用のVMを用意すると使ってなくてもその分のリソースを消費してしまいますからね。
いいことばかりではなく、Sandboxによる制限があったりなどいつくかトレードオフがありますが、今回は省略します。知りたい方は、Slim3本を立ち読みしてください。


このような仕組みが何をもたらしたかというと大きく言って次の二つです。

  • 必要なときしかリソースを消費しないので、CPUなどの従量課金ができるようになった。
  • 使っていないときはリソースを消費しないので、月500万PV相当までは無料で提供できるようになった。


従量課金も安価に提供されています。たとえば、mixiアプリの「ふにゃもらけ」は、一日680万PVを一日15$でAppEngineでさばいているそうです。一日680万PVのサイトというのはかなりアクセス数は多い方です。それを月5万以内で済ませることができるというのは、かなりお得だと言えるでしょう。実際は、もう少しなんだかんだでかかると思いますが、安価なことに代わりはありません。


安価な従量課金が可能になったおかげで、普段はあまりアクセスがないが、ピークにはアクセスが集中するようなサービスにもAppEngineは向いています。急にアクセスが集中しても自動スケーリングで乗り切れますから。


月500万PV相当までは無料というのは、手軽に何かを作りたい人にはぴったりですよねー。でも、これは罠です。あとから説明します。


上記がAppEngineのインフラの特徴から来る向いているアプリの特徴です。


AppEngineに向かないアプリを知るには、AppEngineのデメリットについて知る必要があります。
それは、BigtableというSQLではないKVSを使っているということです。デメリットには、次の二つが挙げられます。

  • SQLの知識が生かせず、Bigtableを一から覚える必要がある。Bigtableのノウハウを取得するにはかなり時間がかかる。
  • BigtableSQL程高機能ではないので、SQLで実現出来ていたことをBigtableでそのまま実現しようとするとかなりの困難が伴う。


自分の経験では、Bigtableを何も知らない状態から大体使いこなせるようになるには、半年以上はかかります。半年以上も使いこなすためにかかるなんて、やってられないですよね。
しかし、心配はありません。先行者達によって、Bigtableを使いこなすためのノウハウはコニュニティに蓄積されています。
twitterで #appengine をタグ(検索キーワードgaeは自分は見ていません。ノイズが多いから)に入れて、聞いてもらえれば、大抵誰かが答えてくれます。
Bigtableは、集計が弱い(count,min,maxは可能だけど、sumやavgができない)、前方一致以外の検索ができないという問題があります。これらの問題に対する解もあるのですが、作り込みのコストがかかるので、Bigtableの弱点を多用するような案件はAppEngineでやるのはおすすめしません。


Bigtableの使い方を覚えるのが大変という問題は、コンパクトなSlim3本を読めば解決するので、今となっては問題とは言えないでしょう。
http://www.amazon.co.jp/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E5%BE%B9%E5%BA%95%E6%B4%BB%E7%94%A8-Slim3-Google-Engine-Java/dp/4798026999/ref=sr_1_2?ie=UTF8&s=books&qid=1280117730&sr=8-2
この本は、Slim3がタイトルに入っていますが、内容はBigtableを理解するためのことがほとんどです。Slim3を使わない人でもBigtableを扱うならオススメ。「Bigtableを使いこなせ」ってタイトルにしたかったんだけど、いろいろな理由があっていまのタイトルになっています。


月500万PV相当までは無料というのは、手軽な感じがすると思いますが、手軽さを求める人にSQLのかわりにBigtableをマスターしろというの無理があるかなぁというのが自分の意見。手軽にやりたいけど、新しいことを勉強するのもやってみたいという方なら問題ないでしょう。


それでは、結論を出すと

  • 大量にアクセスがあるサイトは、Bigtableを使いこなせるようにする手間を引いても十分にお釣りがくるくらいメリットがあるので、AppEngineに向いています。向いていないところがあれば仕様を変えればいい。金が儲かるなら仕様変更は問題ないでしょう。
  • 顧客の言うとおりに作ることが求められる受託開発は、BigtableやSandboxの制限にかかるリスクがあるので、AppEngineに向いていません。
  • アクセスに波があるようなサイトは、従量課金と自動スケーリングがあるので、AppEngineには向いています。ただし、受託だと上記の理由で厳しいでしょう。
  • 手軽さが重要でBigtableの使い方を覚えるのが面倒くさい人はAppEngineに向いていません。
  • 手軽さは欲しいけど、Bigtableを勉強することもやってみたい人はAppEngineに向いてます。