App Engine 上に構築する際に学んだ 6 つのポイントを以下に示します。さらに詳しく知りたい場合は(アプリケーションのアーキテクチャ概要および 15 分間の Q&A を含め)
webinar を参照してください。
1. ユーザーの GET リクエストへの高速対応
これは App Engine に固有のものではなく、ほとんどの Web アプリケーションにも言えることです。ユーザーの GET リクエストには迅速に対応しなければなりませんが、App Engine の場合すべてのリクエストに対して
60 秒でタイムアウトします。実際、ユーザーとの対話後の全待ち時間が 200ms 以上にもなれば、ユーザーはアプリが遅いと思うでしょう。リクエストに高速に対応するには、計算や複雑なクエリなどの重い処理をバックグラウンドあるいは書き込み時のいずれかで行う必要があります。そうすれば、ユーザーがデータをリクエストしたときには(読み出し時には)、すでに事前に計算されており、提供する準備ができていることになります。
2. Managed VMs の利用
次に Managed VMs についてみてみましょう。
Managed VMs は App Engine のための新しいホスティング環境で、大規模なコンピューティング リソースを活用したり、カスタムのランタイムを実行したりすることができます。例えば、我々はバックエンドのデータ処理モジュールを
App Engine のフロントエンド インスタンスではなく、n1-standard-1 マシン(1 CPU と 3.75 GB のメモリ)のインスタンスにホストしています。これは、
sustained use discounts という継続割引を利用することで優れたコストパフォーマンスが得られます。Managed VMs は App Engine のフロントエンド インスタンスよりも起動が速く、我々のバックグラウンド処理のニーズに最適です。
3. 高速読み出しのための非正規化
Cloud Datastore は NoSQL データベースですので、データモデリングに関しては RDBM とは異なったアプローチが必要になります。SQL の join が存在しないので、データの
非正規化と複製は行わなければなりません。データの複製が面倒に感じることがあっても、読み出しを非常に高速にすることができます。
4. アプリケーションのモジュールへの分割
Modules によって App Engine のアプリをさまざまなコンポーネントに簡単に分割できます。例えば、ユーザーサイドのトラフィックとバックグラウンド処理とに別々のモジュールを持たせることができます。各モジュールはそれぞれ yaml ファイルを持っているので、インスタンスのサイズ、バージョン番号、使用するランタイム言語、など多くのパラメータを設定することができます。前述のように、バックエンド モジュールには性能対コスト比に優れた Managed VMs を使用する一方で、フロントエンド モジュールには素早くスケール可能な App Engine のフロントエンド インスタンスを使用しています。ドキュメントでは
アプリ構築の方法を説明しています。
5. 積極的なデプロイとトラフィック分割の使用
App Engine ではバージョン管理、デプロイメント、およびロールアウトが簡単にできますので、Streak のデプロイメントは始終行っています。実際、変更を顧客に提供するために、ときには 1 日に 20 回デプロイを実行することがあります。積極的にデプロイを行ってアプリの多くのバージョンを作成し、選択的に新機能を有効にしてユーザーに提供しています。
トラフィック分割により新しいバージョンのトラフィックはわずかしか増加しないので、問題があっても早期かつ高頻度で補足できます。それぞれの新しいコードのデプロイは小さな機能しか持たないので簡単に対処することができます。従って、コードベースで関連する問題を見つけるのも容易です。また、
Google Cloud Monitoring と(下記の #6 をベースとした)当社独自のシステムを使用して、これらデプロイの変更を監視しています。
6. BigQuery を用いたログファイルの分析
アプリケーションとリクエストのログはパフォーマンスを知るうえで貴重な情報となり、製品の改善に役立ちます。スタートしたばかりなら、最新のリクエストに関するログビューアのリストだけでも役立ちますが、ある規模に達したら、集計データや特定ユーザーのリクエストを分析する必要がでてくるでしょう。我々は
Google BigQuery にログをエクスポートするためのカスタムコードを作成しましたが、今では Developers Console から直接
ログをストリームすることができます。これらによって、優れたユーザー エクスペリエンスを構築することができます。
Webinar を見てみる
App Engine は我々の成功にとって不可欠なものとなっています。アプリケーションがスケールするにつれて App Engine もスケールするので、運用に対してではなく、顧客に提供する機能の構築に焦点を当てることができます。当社のアーキテクチャ概要と 15 分間の Q&A を含め、App Engine 利用のポイントの詳細については、
webinar をご確認ください。
-Posted by Aleem Mawani, CEO and co-founder, Streak
0 件のコメント :
コメントを投稿