Google AppEngineを使用する必要がありますか?

免責事項 :この記事は、「私がどれだけ賢いか、Googleの愚かさ」についてではありません。 この記事では、Google AppEngine(GAE)の明白でない問題や機能について説明します。これらは、「邪悪な帝国」での作業を開始したい人にとっては嬉しいことです:-)


Googleは多くのすばらしいことをしました-検索、スパムのないメール...
IT業界ではしばらくの間、AppEngineについて十分な騒音がありましたが、新しいプロジェクトで彼と一緒に仕事をしようと決めました。

最高の互換性と速度を得るために、GoogleフレームワークでPythonを選択しました。 私はパフォーマンステストから始めましたが、結果は... ややがっかり。
テスト1秒あたりのリクエスト
「Hello world」を印刷260
1データストアからの読み取り、データストアへの書き込み38
1データストアからの読み取り60
データストアからの10の読み取り値、1エントリ20
memcachedから1回読み取り、memcachedに1回書き込み80
1 memcachedからの読み取り120
通常のLAMPアプリケーション、6つのSQLクエリ、 http://3.14.by/Atom 330サーバーでは240
7ドルの共有ホスティングで198

このテストは、同じ大陸にある2つの異なるサーバーからの20の並列リクエストで実行されました。数値は、実行の7秒間の平均です(後で10分間の空洞化)。 「ヘイ! 結果はそれほど悪くありません。私の[ここにURLを挿入]は1秒間に2つのリクエストしか処理できないため、20-38でもすでに悪くはありません。」 これは数行の最も単純なアプリケーションであると答えます。このアプリケーションでは、1ページあたり5〜25個のデータの要求が必要になります。 さて、毎秒100リクエストを表示しない古典的なLAMP Webアプリケーションは、ダンプに直接送信する必要があります。

さらに、テスト「10読み取り値1レコード「エラー」エラー:サーバーエラー「10以上の並列クエリが使用された場合、内部エラーが発生しました(これらのデータストアエンティティの競合が多すぎます。再試行してください)」-予期しない例外の例の1つ突然です。

拡張性


ある時点で、GAEがアプリケーションを複数のサーバーに配布すると予想していました(少なくとも理論上はそうだったはずです)。 ただし、10分間のストレステストを行い、1日の割り当ての10%をCPUに費やした後、速度はまったく同じままでした。 おそらく、GAEはアプリケーションを高速にスケーリングしません。

ソースコード


非常に簡単:
google.appengine.ext import dbから

クラスカウンター(db.Model):
nick = db.StringProperty()
カウント= db.IntegerProperty()

res = Counter.gql( "WHERE nick = 'test3'")
'Content-Type:text / html'を印刷します
印刷する ''
print '<html> <body> <h1>これはデータストアパフォーマンステストです</ h1>'
print '<h2>カウンタを読み取り、データストアの値をインクリメントします</ h2>'
解像度のvの場合:
v.count = v.count + 1
「新しいカウンター値:」、v.countを印刷します
#v.put()
'</ body> </ html>'を印刷します


アプリケーションはここにアップロードされます: http : //mafiazone-dev.appspot.com/

一般に、Googleが約束するとおり、すべてが実際に機能します。速度は規模に依存せず、小規模ではゆっくり、大規模ではゆっくりです:-) Datastoreまたは複数のMemcachedでの作業を必要とする何かに対する単一の要求でも多くの時間がかかります。 まあ、ページごとにいくつかのリクエストを行う必要がある場合、タイムアウトによって例外が表示される可能性が劇的に増加します。

(私のホームページのような)通常のLAMPアプリケーションは、1日あたり1万件のヒットを簡単に処理できます。さらに厳密な最適化の後、3万件(ピーク時8〜10時間で1秒あたり500件のヒット)に対応できます。 この負荷の少なくとも10%を必要とするプロジェクトはいくつありますか? しかし、処理できなかった、または処理できなかった例外のために、これらのリクエストの0.01%が失敗した場合はどうでしょうか?

私の意見では、問題の一般的なリスト


Google AppEngineを使用する場合は、次のことに注意してください。


だから私はGAEで異なって見たいです:




もう少し考え


しばらく前、私は非常にクールなテクノロジーを使用していました。すべてが冗長で信頼性が高く、「クラウド」で便利なAPIでしたが、フォーラムページの描画には4プロセッサーサーバーで4秒かかりました。 それは完全なたわごとだった。 テクノロジの速度が低下したり、ユーザーがそれに慣れていない場合、このテクノロジは完全に不要です。 「かっこいい」という理由だけでテクノロジーを使用するのは、どういうわけか馬鹿げています。

Google App Engineを使用できる場所と使用しない場所


GAEは、ピーク負荷のない単純な読み取り専用(つまり、複雑なデータベースロジックのない、小さなデータボリューム)アプリケーションに最適です(つまり、オンザフライでスケーリングできない場合があります)。 ホームページは、サポートコストなしでGAEに完全に配置されます。

これは、画面上に多くのロジック、多くのデータがあり、時々shashdot / habra効果がある複雑なアプリケーションには適していません。 Google AppEngineは、1秒あたり数百のリクエストという予期しないピークを処理できない場合があります。

おわりに


これはすべて、ゴーグルのプログラマーとアーキテクトが愚かなことを意味しますか? :クレイジー:まったくそうではありません。実際、そのような条件下では、より良い達成は困難です。 クラスタ用に特別に調整されていないアプリケーションの無制限のスケーラビリティを実現することは本当に困難です。 その結果、ほとんどのアプリケーションはGAEで適切に動作できなくなります。

しかし、アプリケーションがGAEの機能と制限にうまく適合し、パフォーマンスとエラーの可能性に満足している場合、これが最適なソリューションになると思います。

ここにあります 。 そしてここで -英語で。

Source: https://habr.com/ru/post/J70252/


All Articles