Google App Engineは良いですか?

ハブラーでは、GAEに対する批判はあまり見られませんでしたが、ますます肯定的なレビューがありました(たとえば、 ここここ )。 そのため、状況を少し多様化し、クラウド内のすべての作業を妨げるいくつかの重要なニュアンスについて説明します。



私はGAEを約6か月という比較的短い時間使用しています。 最近まで、これらは静的コンテンツを含むシンプルなサイトでした。 GAEはそれらに最適です-無料のクォータ+ javaを使い果たすことのない低トラフィック。 すべてのhtml / javascript Webアプリケーションは、Mavenの助けを借りて迅速かつ便利にアップロードされます。 mvn gae:deployを作成すると、アプリケーションはすぐにクラウドに配置されます。



新しいプロジェクトのためにデータベースをもう少し積極的に使用する時が来たので、ここでレーキが始まりました。 アプリケーションは自動的にスケーリングされるため、インスタンス間でデータを同期する必要があります。 これらの目的のために、多くの場合、データベースとアプリケーションまたは外部ツールのキャッシュ(memcache)が使用されます。 ただし、このアプローチでは、データストア操作の無料の割り当てが非常に迅速に終了します。 現在、これは1日あたり合計50,000回の書き込みと読み取りです。 もちろん、必要に応じて、クォータを購入できます。 以下は、データストアクォータのコストです。



0.10 $ 100,000回の書き込み操作
0.07 $ 100,000回の読み取り操作
0.01ドル 100,000件の小規模オペレーション




残念ながら、2つのインデックスを持つテーブルに1つのレコードを配置する必要がある場合、書き込み操作の数は1ではなく6です。1つのレコードを更新すると、9つの書き込み操作が使用されます。 より明確にするために、データベースを操作する際の操作の支出に関する表を示します。



高度な操作 低レベルの操作が必要
1件のエントリを読む

(エンティティ取得)
1回読む
エントリを1つ追加

(新しいエンティティプット)
2書き込み+インデックス付きプロパティ値ごとに2書き込み+複合インデックス値ごとに1書き込み
更新1レコード

(既存のエンティティプット)
1書き込み+変更されたインデックス付きプロパティ値ごとに4書き込み+変更されたコンポサイドインデックス値ごとに2書き込み
エントリを1つ削除します

(エンティティ削除)
2回の書き込み+インデックス付きプロパティ値ごとに2回の書き込み+複合インデックス値ごとに1回の書き込み
複数のエントリをリクエストする

(クエリ)
読み取り1回+取得されたエンティティごとに1回小さい
キーのみをリクエストする

(クエリ、キーのみ)
1回の読み取り+キーごとに1回の取得
キー作成

(キー割り当て)
小1




したがって、memcacheでの最適化とキャッシュを考慮しても、1人のユーザーリクエストに平均で約30のデータストア操作が費やされることがわかります。 つまり、1600人までのユーザークエリに対して十分な無料のクォータしかありません。 cronタスクに関するデータベースの作業をユーザークエリに追加します-本当に難しくなります。



DataStoreには一意のキーがないため、状況はさらに悪化します。システムをスケーリングする場合、データベースにデータを追加する前または後に、レコードの一意性を手動で確認する必要があります。 これはスケーラブルなシステムでは一般的ですが、クォータがすでに高価なデータベースの負荷をさらに増加させます。



GAEの制限に対処しているときに、 Carlos Bleのブログでおもしろい記事-Goodbye Google App EngineGAE Cupboardで同様のセクションを見つけました。 既知の制限に加えて、私はまだ到達していなかったものをさらにいくつか追加しました。 GAEで説明されている問題の一部は既に修正されているが、かなりの割合が残っていることをすぐに言わなければならない。

  1. リクエストは30秒以上完了できません。 バックアップやアップグレードなどのメンテナンスには特に重要です。
  2. DELETE FROM tableA WHERE conditionBという形式のクエリを実行することはできません。 すべてのレコードは1つずつ削除され、多大な費用がかかります。
  3. データベースは「LIKE」タイプのクエリをサポートしていません-データベースの非正規化とページネーションが必要です。
  4. テーブルを結合できません。
  5. ベースは非常に遅いです。
  6. ローカル環境でのデータベースの動作は、クラウドでの動作とは異なります。
  7. DataStoreおよびMemCacheで断続的にクラッシュします。 MemCacheの場合、これは恐ろしいことではありませんが、データベース内のデータを失うことは重要です。 バックアップも困難です。1日あたり50,000件のレコードのバックアップでは、DataStoreの無料割り当てが不足し、さらに操作の30秒の制限があります。 ベースのバックアップにGoogleに100ドルを寄付しますか? はい、簡単です!




合計:





コードはGAEに強く結び付けられていませんが、私はLinodeに頼ります。 次に、何をどのように説明します。

画像







All Articles