Hatena::ブログ(Diary)

yvsu pron. yas このページをアンテナに追加 RSSフィード

2010-11-08

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に向いてます。

sino200xsino200x 2010/11/09 09:49 大変参考になります。昨日のtogetterがあってのこのエントリなんだろうな、と思いました。(笑)
ところでBigTable内のデータが消失するというのは本当なのでしょうか?あるサービスを考えているのですが、この点が気になっています。

higayasuohigayasuo 2010/11/09 12:55 以前は実際に消えたことがありましたが、今は改善されています。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証