web-dev-qa-db-ja.com

Google Go vs Python and Java App Engineでのリソース使用量

Google Goは、PythonおよびJava App Engineの場合)よりも少ないリソースを使用しますか?インスタンスの起動時間は、JavaおよびPythonの起動時間よりも高速ですか?

Goプログラムは、バイナリまたはソースコードとしてアップロードされていますか?ソースコードとしてアップロードされている場合、一度コンパイルされるか、インスタンスの起動ごとにコンパイルされますか?

言い換えると、コストの観点からApp EngineでGoを使用するメリットはありますか? (開発時間ではなく、appengineリソースのコストのみを考慮に入れます)

52
Per Arneng

Google Goは、PythonおよびJava App Engineの場合)よりも少ないリソースを使用しますか?インスタンスの起動時間は、JavaおよびPythonの起動時間よりも高速ですか?

はい。Goインスタンスのメモリは、PythonおよびJava(<10 MB)よりも低くなっています。

はい。Goインスタンスは、JavaおよびPython同等のものよりも速く起動します。これは、ランタイムがアプリケーションを起動するために単一の実行可能ファイルを読み取るだけでよいためです。

また、ATMがシングルスレッドであっても、Goインスタンスはゴルーチンを使用して着信要求を同時に処理します。つまり、1つのゴルーチンがI/Oを待機している場合、別のゴルーチンが着信要求を処理できます。

Goプログラムは、バイナリまたはソースコードとしてアップロードされていますか?ソースコードとしてアップロードされている場合、一度コンパイルされるか、インスタンスの起動ごとにコンパイルされますか?

Goプログラムは、SDKを使用してアプリケーションの新しいバージョンをデプロイするときに、ソースコードとしてアップロードされ、(一度)バイナリにコンパイルされます。

言い換えると、コストの観点からApp EngineでGoを使用するメリットはありますか?

Goランタイムはパフォーマンス/価格比に関しては間違いなくEdgeを備えていますが、Peterの回答で説明されているように、他のAPI割り当ての価格設定には影響しません。

45
proppy

インスタンスのコストは、アプリのコストの一部にすぎません。私はJavaランタイムを現在使用しているだけなので、PythonまたはGoでどれほど効率が良いかまたは低いかはわかりませんが、私は知りません桁違いになるとは想像できません。インスタンスだけが考慮すべきコストではないことは知っています。アプリの機能によっては、ランタイム間の小さな違いよりもAPIまたはストレージのコストの方が重要である場合があります。すべてのAPIコストは、使用するランタイムと同じです。

言語の「可能性」がこれらのコストに影響を与える:

  • オンデマンドのフロントエンドインスタンス
  • 予約済みフロントエンドインスタンス
  • バックアップされたインスタンス

言語非依存コスト:

  • 高レプリケーションデータストア(格納されるギグあたり)
  • 送信帯域幅(ギグあたり)
  • Datastore API(オペレーションごと)
  • Blobstore APIストレージ(ギグあたり)
  • メールAPI(メールごと)
  • XMPP API(スタンザごと)
  • Channel API(チャネルごと)
20
Peter Recore

質問はほとんど関係ありません。

Goアプリの最小メモリフットプリントは、Pythonアプリよりも小さく、Javaアプリよりも小さいです。これらはすべてインスタンスごとに同じコストがかかるため、余分なヒープスペースを使用してアプリケーションのパフォーマンスが向上しない限り、この問題は関係ありません。

Goの起動時間はPython起動時間Java起動時間未満です。多くのインスタンスの起動を通じてチャーンする特別な理由がない限り、シャットダウンサイクルの場合、これはコストの観点からは無関係です。一方、アプリが例外的にバースト性非常に短い時間の場合、起動時間は利点。

他の回答で述べたように、多くのコストはすべてのプラットフォーム、特にデータストア操作で同じです。 Go vs Python vs Javaがインスタンス時間の請求に影響を与える範囲で、以下に関連しています。

  • アプリは大量のゴミを生成しますか?多くのアプリケーションで、最大の計算コストは​​ガベージコレクターです。 Javaは、はるかに成熟したGCを備えており、シリアライゼーションなどの基本的な操作はPythonを使用した場合よりも劇的に高速です。Goのガベージコレクターは、開発の進行中のテーマのようですが、大まかなWeb検索からではありません。 (まだ)誇りの問題のようです。

  • あなたのアプリは計算集約型ですか? Java(JITコンパイル済み)およびGoは、数学演算ではPythonよりも優れています。

3つの言語すべてに長所と呪いがあります。ほとんどの場合、他の問題を独占させた方がいいです。どの言語を最もよく使っていますか?

14
stickfigure

言語の選択よりも、リソースの割り当て方が重要です。 GAEは言語に依存しないように構築されているため、おそらくどの言語にも組み込みの利点はありませんが、快適でやる気のある言語を選択することで利点を得ることができます。私はpythonを使用していますが、私の配備をより費用対効果の高いものにしたのはpython 2.7へのアップグレードであり、正しいサブセットを使用する場合にのみそのアップグレードを行うことができますしたがって、快適な言語を選択すると、コンボ言語+環境自体ではなく、その言語を使用する能力から利点が得られる可能性があります。

要するに、私はpythonをお勧めしますが、これは私が試した唯一のApp Engine言語であり、私がJava私の好きな言語のpythonを使用すると、プロジェクトははるかにコンパクトになります。

私のアプリは small から medium のサイズで、費用は何もないようになっています。

enter image description here

1

私はGoを使用していませんが、インスタンスのロードと実行がはるかに速く、コンパイルされているため、メモリの使用量が少ないと確信しています。グループからの逸話として、少なくともインスタンスの起動時間において、PythonはJavaよりも応答性が高いと思います。

インスタンスの読み込み/起動時間は重要です。インスタンスが処理できないほど多くのリクエストにヒットすると、別のインスタンスが起動するためです。これにより、リクエストがより長くかかり、サイトが一般的に遅いという印象を与える可能性があります。 JavaとPythonはどちらも仮想マシン/インタープリターを起動する必要があるため、ここではGoが桁違いに高速になると予想します。

他に1つ問題があります。Python2.7が利用可能になり、Goがシングルスレッドの唯一のオプションです(皮肉にも、Goが最新のマルチプロセス言語として設計されていることを考えると)。したがって、Goリクエストはより高速に処理される必要がありますが、インスタンスはリクエストをシリアルにしか処理できません。この制限が長く続くと、私は非常に驚きます。

0
FoxyLad