0

Canoo の RIA Suite を使用して、GAE でリッチ アプリを構築しています。このパッケージは、Java Swing コンポーネントをサーバー側とクライアント側の部分に分割します。サーバー上では、「デスクトップ」Java アプリケーションのように見えます。クライアントは、これらの半分の間に独自のマップを保持します。GAE が新しいインスタンスを開始するとき、クライアント側の部分はそれを認識していません。送信する次のリクエストが間違ったインスタンスにルーティングされると、悪いことが起こります。

次の 2 つのいずれかを実行すれば、この問題を回避できると思います。

  1. GAE インスタンスが 1 つの HTTP セッションのみを提供するように強制しました。
  2. 各 HTTP リクエストを特定の GAE インスタンスに送信します。

私の質問は、GAE 環境で、これらのいずれかを実行できるかということです。

4

2 に答える 2

1

これら 2 つのオプションのどちらも問題を解決しません。App Engine インスタンスはいつでも停止して置き換えられる可能性があるためです。

サーバー側の「半分」の状態をデータストアに保存できれば、リクエストが「間違った」インスタンスにヒットしたときにそれをロードできますが、おそらくあまり効率的な解決策ではありません。

Compute Engineインスタンスを使用した方がよい場合があります。

于 2014-06-09T16:54:50.257 に答える
0

これらの 2 つのオプションのどちらもうまくいかないことに同意します。現在の設計の意味は、状態をインスタンスのメモリに保存していることであり、GAE (または自動スケーリング分散システム) では機能しません。memcache (揮発性)、データストア、cloudSQL のいずれであっても、任意の状態を分散データ ストアに配置する必要があります。

GAE/J には Java セッションのサポートが組み込まれています。セッション状態はリクエスト間でデータストアに保持されるため、どのインスタンスでも有効です。これが機能するには、セッションに保存されているすべてのものをシリアライズ可能にする必要があります。

これを有効にするには、次の手順に従います。

それ以外の場合は、サーバーの状態を memcache によって高速化されたデータストアに保持し、それを Cookie を使用して「セッション」にリンクすることができます。この道をたどる場合は、GAE データストアでの結果整合性の意味を理解していることを確認してください。

于 2014-06-09T22:56:07.753 に答える