12

私はこの問題に 2 回遭遇しましたが、これに対する解決策があるかどうか疑問に思っています。HTTP JSON RPCを介した Web サイトとの頻繁な通信に依存するアプリケーションを Google App Engine で実行しています。GAE は、ログに次のようなメッセージをランダムに表示する傾向があるようです。

「このリクエストにより、アプリケーションの新しいプロセスが開始されたため、アプリケーション コードが初めて読み込まれました。したがって、このリクエストは、アプリケーションの通常のリクエストよりも時間がかかり、より多くの CPU を使用する可能性があります。」

また、警告なしに RAM に保存されているすべての変数をリセットします。アプリのバージョン番号をインクリメントすると問題が解決するように見えますが、何度変数を再設定したり、新しいコードを GAE にアップロードしたりしても、同じプロセスが何度も繰り返されます。

この動作に関する詳細情報を取得するにはどうすればよいですか? また、それを回避し、Google App Engine で Golang アプリケーションのデータ損失を防ぐ方法を教えてください。

編集:

RAM に格納される変数は、文字列、バイト、ブール、およびポインターの小さなクラスです。複雑すぎたり大きすぎたりすることはありません。

Google App Engine は、使用頻度が高くなると数秒で「新しいプロセスを開始」しているように見えます。これは、アプリケーションが使用されていないためにシャットダウンするのに十分な時間ではありません。アプリケーションが GAE にアップロードされ、その変数が設定されてから、新しいプロセスが作成されるまでの時間は 1 分未満です。

4

3 に答える 3

16

GAE は、負荷に基づいてインスタンスを自動的に管理するクラウド ホスティング ソリューションであることをご存知ですか? これがその主な機能であり、人々がそれを使用している理由です。

負荷が増加すると、GAE は新しいインスタンスを作成します。もちろん、このインスタンスにはすべての RAM 変数が空です。

解決策は、変数が使用可能であることを期待したり、リクエストの最後にそれらを永続ストレージ (セッション、memcache、データストア) に保存したり、リクエストの開始時に存在しない場合はロードしたりすることではありません。

于 2012-03-06T12:10:42.720 に答える
5

GAE インスタンスについては、こちらのドキュメントで読むことができます。パフォーマンス セクションをチェックしてください。

http://code.google.com/appengine/kb/java.html

利用可能な小さなデータがある場合、静的であれば、新しいインスタンスの起動時にメモリにロードできます。動的データの場合は、API を使用してデータベースに保存する必要があります。

GAE インスタンスを維持するための私の推奨事項は、Always-On サービスの料金を支払うか、ここで cron を使用するための私の推奨事項に従ってください。

http://rwyland.blogspot.com/2012/02/keeping-google-app-engine-gae-instances.html

私は、3、7、11 分の cron ジョブの「プライム スケジュール」と呼んでいるものを使用します。

于 2012-03-06T03:34:44.350 に答える
2

常駐メモリを備えた長時間実行インスタンスが必要な場合は、バックエンドの使用を検討する必要があります。

于 2012-04-23T15:43:49.410 に答える