リリースされたばかりのiOSゲームのバックエンドとしてGoogleAppEngineを使用しています。
ゲームをプレイするというその行為を通じて、プレイヤーはレベルを作成し、それからそれらは彼らの友人や世界全体と共有されます。GAEは、これらのレベルを保存および取得するために使用されます。GAEは、Game Centerが処理できるよりも複雑であるため、プレーヤーのハイスコアも管理します。
全体として、GAEはうまく機能します。負荷を常に監視しなくても、GAEが必要に応じて新しいインスタンスを起動する方法が気に入っています。このゲームでは、GAEは約10個のインスタンスを実行し、1秒間に約8個のクエリを処理します。
しかし、小さな問題があります。
プレイヤーがハイスコアテーブルに2回乗ることがあることに気づきました。新しいスコアを出す前に古いスコアを削除するので、これは不可能なはずです(これはGAEへの1つのクエリで行われます)。
いくつかのテストと突っ込みの後、プレーヤーはハイスコアを取得し、インスタンス1が古いスコアの削除と新しいスコアの追加を処理するように見えます。その後、プレーヤーは新しいハイスコアを取得しますが、今回はインスタンス4がリクエストを処理するものであり、他のスコアについてはまだ認識していません。
最速では、プレーヤーが新しいハイスコアを取得するのに10秒かかる場合があります。データの複製には2、3秒しかかからなかったと私は理解していました。
ロードによって2つのインスタンスが開始されることはめったにないため、テスト中にこの問題は発生しませんでした。
これは、何が起こっているのか、各インスタンスのデータがどのように保存されているのかについてのもっともらしい説明のように見えますか?
あるインスタンスで追加、削除、または変更されたデータが別のインスタンスで利用可能になることを保証する方法はありますか?ハイスコアは「ミッションクリティカル」ではないので、あまり心配していませんが、データの一貫性が非常に重要である、より複雑な状況ではGAEを使用したいと思います。
それはGAEで可能ですか、それとも他の解決策を検討する必要がありますか?