Googleが提供しているクラウド環境「Google App Engine」(以下GAE)、個人で利用している人、既に開発として使用している人、これから開発に使う人、色々かと思います。我々も開発プロジェクトとしてGAEを使うこととなり、全く経験のなかった環境やツールに戸惑いながらも開発を進めています。進めていくなかで様々な困難や今までのWEBアプリ開発と違った作法に苦悩いたしました、その苦悩の数々をここに書き記せればと思います。
開発はGAE/Jで行いましたので、これからの内容はGAE/Jの場合のお話とさせていただきます。
今回はGAEが掲げるメリットとともにプロジェクト進行時にハマった点、問題と感じた点を書いていきたいと思います。この記事が出るころには解決している部分も多々あるかもしれません。単に我々の経験・知識が不足しているだけかも知れませんが、同じようにこれからGAEに取り組む方がいれば、その一助になれば幸いかと思います。
次回以降は開発の「設計」「実装」「テスト」の各フェーズで出た課題、問題を全4回くらいで書いていきたいと思います。
「Google App Engine」のメリットは以下のとおりです。
(参照元:http://code.google.com/intl/ja/appengine/docs/whatisgoogleappengine.html)
- 導入が簡単
- 自動的にスケーリング
- Google のインフラストラクチャの信頼性、パフォーマンス、セキュリティ
- コスト効率の高いホスティング
- リスクのない試用期間
以上GAEがメリットとして掲げている項目になりますが、これらの利点は、GAEを利用する上での制約事項につながる要素ですので注意が必要です。
以下に、GAEのメリットの裏側にある課題についてまとめてゆきます。
★「導入が簡単」
App Engine は、幅広く利用されているテクノロジーを使用してウェブ アプリケーションを構築およびホストする総合開発スタックです。App Engine を使用すると、アプリケーション コードを記述して、コードをローカル マシンでテストし、簡単なクリック操作やコマンド ライン スクリプトで Google にアップロードできます。アプリケーションを Google にアップロードすると、Google によってアプリケーションのホストおよびスケーリングが行われます。システム管理、アプリケーションで使用するインスタンスの生成、データベースのシャーディング、新しいマシンの購入などについて心配する必要はありません。維持管理はすべて Google に任せることができるため、ユーザー向けの機能に集中できます。
確かに簡単です、あっというまに公開できます。
プロジェクトにおける「ハードウェアの購入」や「ホスティング先の選定」「データセンターの契約」なんて一切不要で考えられます、イニシャルコストが大幅に軽減できることはメリットといえるでしょう。
「なので開発費用は人件費だけです」
というわけにはいきません、後述しますが開発時、テスト時の課金を考慮しておかないと後々苦労することになります。
特に大量データを扱ったりする場合の影響はおおきいと考えます。
プロジェクトの最初には難しいかもしれませんが「試算」をやっておく必要があります。
身近な例として、GAEにアプリケーションをデプロイする作業について考えてみましょう。
GAEでは、公開するアプリケーションに必要なファイルは全てwarファイルに含める必要があります。
warファイルのサイズには制限がありますので、
・大きい画像をつかっている
・マニュアルが大量にある
ような場合には、制限に引っかかる可能性があり、注意が必要です。
そして、それらは一箇所手直しするたびににデプロイをやり直す必要があるのです。
★「自動的にスケーリング」
BigTable や GFS など、Google アプリケーションのベースとなっているスケーラブルなテクノロジーを、開発したアプリケーションで初めて利用できるようになりました。App Engine には自動スケーリング機能が組み込まれており、デベロッパーはアプリケーション コードを記述するだけでよく、他の作業はすべて Google に任せることができます。App Engine では、ユーザー数やアプリケーションに格納されたデータ量に関係なく、ニーズに応じてスケーリングが行われます。
アクセスの集中があると、自動的にスケーリングして「サーバダウン」なんてことにならないよう調整してくれる素敵な機能なのですが、「よろしくない実装」があった場合もスケーリングしてしまいます。
開発中ならまだしも、運用後に「よろしくない実装」の影響で課金が加速するのは文字通りよろしくない状況になります。
ここは開発者の腕の見せ所かもしれませんが、スケーリングを考慮した設計や実装を心がける必要があります。
※スケーリング(スケールアウト)
負荷に応じてサーバを並列に増やし、サーバ全体での処理性能を向上させる。GAEでは、負荷に応じて自動的にインスタンスを増やすことでスケールアウトを実現している
★「Google のインフラストラクチャの信頼性、パフォーマンス、セキュリティ」
Google インフラストラクチャの信頼性とパフォーマンスの高さには定評があります。App Engine を利用すると、拡張性とパフォーマンスが重視されたシステムの運用において、Google が 10 年の歳月をかけて蓄積してきた知識と経験を活用できます。たとえば、Google アプリケーションと同じセキュリティ、プライバシー、データ保護ポリシーが、すべての App Engine アプリケーションに適用されます。また、Google ではセキュリティを非常に重視しており、万全の体制でコードやアプリケーション データを保護しています。
これらは、情報システム基盤としてこれまでにない優れた特徴といえますが、情報システムの構築では、必ず「非機能要件」という厄介な要素を、お客様と摺り合せていく必要があります。
「そのへんはGoogleに聞いてください!」というわけにもいかないので、根拠を示す必要があるんですが、Googleから公開されている情報だけでは、お客様に説明し納得してもらうには不十分で、開発をする側としては、対応に苦労するところです。
さらに「で、うちの大事なデータはどこにあるの?」と問われると、「アメリカですかね~」なんていうわけにもいかず。。。
データはすべてGoogleにお任せ状態、バックアップは取りたいなんて言われたに日は、バックアップにも課金が発生することになります。GAEの課金や制限を理解し適した内容を提示し理解してもらうことが重要です。
制限に関して言うと、
GAEではリクエストに対して、60秒以内で処理を終わらせなくてはならない制限があります。
過去の例で
「この一覧画面は時間がかかってもいいから大量に画面表示してほしい」
という要求がありました。
今までですと、パフォーマンス要求の範囲外で、遅くともそのまま表示という形で良かったかもしれませんがGAEの場合は60秒で処理を打ち切られてしまいます。
そのため、60秒に収まる処理設計を突き詰めるか、分散して処理させる仕組みを採用するなど、実現のための準備が必要になります。
★「コスト効率の高いホスティング」
App Engine はいつでも無料で始めることができます。また、追加のコンピュータ リソースをご購入いただくことも可能で、この場合は実際に使用した分だけをお支払いただきます。使用量が無料割り当て分(ストレージ 500 MB、月間 500 万ページ ビュー)を超えた場合の料金体系の詳細については、こちらをご覧ください。
無料で開始できますが、無料ゾーンを超えた場合は機能が使えなくなり、サービスが停止してしまいます。
リセットが一日一回のため、場合によっては丸一日使えないということも発生します。
サービスの停止がまずいシステムの場合は、最初から課金の設定をきめたほうがよいかもしれません
公開しているものだけではなく、開発中だとしても
テスト用にデータストアを覗くツールを作ったばあいもその利用は課金対象になります。
「全てをローカルでやれば?」という案もありますが、「品質担保の面からテストは統一の環境でやるべき」と言う場合は詳細な課金計画が必要になります。
★「リスクのない試用期間」
App Engine アプリケーションの作成が容易なだけでなく、無料で利用できます。アカウントを作成してアプリケーションを公開すれば、ユーザーはすぐにアプリケーションを利用できます。費用は一切かからず、何の義務を負うこともありません。効率的なアプリケーションであれば、無料アカウントで、ストレージは 1 GB まで使用でき、ページ ビューは月間 500 万ページ ビューまで処理できます。より多くのリソースが必要な場合は、課金を有効にして、1 日の最大予算を設定して、必要に応じてその予算を各リソースに割り当てることもできます。
大規模な開発になると無料ゾーンはあっという間に使いきります、特にテスト期間など。
一旦超過してしまうと再度つかえるようになるためにリセットされるのですが、タイミングが太平洋時間で0:00(日本時間17:00)です「環境が使えないのでテストできません」という結果になりかねません。
試用期間をうまくつかって、GAEで行くべきなのか評価することが大事だと思います。無料ゾーンでの評価ができないのであれば、評価期間のみ一定の課金を行い、GAEを使い倒すことをおすすめします。
一度プロジェクトが進みはじめると、Google任せになりますので簡単に「のりかえ」はできなくなると思います。
とはいえ、GAEのコンセプトを理解し、うまく使うことで、開発・運用における様々なタスクが楽になるのも事実です。
以上のように、GAEでの開発は、通常のWebアプリの開発プロジェクトの常識や慣習が通用しない箇所が多くあります。
どんな名刀も斬り方をしらないとナマクラになってしまうように、GAEも使い方を間違えなければ素晴らしいものになると考えます。
次回は要件定義フェーズでの課題と対策についてまとめます。ご期待下さい。