質問

私はマルチプレイヤー ゲームに取り組んでおり、メッセージ キューが必要です (つまり、メッセージの受信、メッセージの送信、予期しないキャッシュの削除がないことを前提とした重複メッセージや削除されたメッセージ)。私が知っている memcache ベースのキューは次のとおりです。

memcache キューの概念を学んだのは、 このブログ投稿:

すべてのメッセージは整数をキーとして保存されます。次のキーを持つキーが 1 つと、キュー内の最も古いメッセージのキーを持つキーが 1 つあります。これらにアクセスするには、インクリメント/デクリメント メソッドがアトミックとして使用されるため、ロックとして機能する 2 つのキーがあります。これらはインクリメントされ、戻り値が 1 の場合はプロセスがロックを持ち、それ以外の場合はインクリメントを続けます。プロセスが完了すると、値は 0 に戻ります。シンプルですが効果的です。1 つの注意点は、整数がオーバーフローするため、その制限に近づくと使用されるキーを 1 に設定するロジックが用意されていることです。インクリメント操作はアトミックであるため、ロックは 2 つ以上の memcache が (冗長性のために) 使用されている場合にのみ必要となり、それらの同期を維持します。

私の質問は、App Engine 上で実行できる memcache ベースのメッセージ キュー サービスはあるのかということです。

役に立ちましたか?

解決

この方法でGoogle App Engine Memcacheを使用する場合は、非常に慎重になります。 「予期しないキャッシュ削除」について心配するのは当然です。

Googleでは、データを保存ではなく、キャッシュに使用することを期待しています。キャッシュにデータを保持することを保証しません。 GAEドキュメントから:

  

デフォルトでは、アイテムは期限切れになりません   メモリのためにアイテムが追い出される可能性があります   圧力。

編集:常に AmazonのSimple Queuing Service があります。ただし、これは次のいずれかの価格/パフォーマンスレベルを満たさない場合があります。

  1. GoogleからAmazonサーバーへの呼び出しには遅延が発生します。
  2. すべてのデータトラフィックに対して2回の支払いが発生します。Googleを離れるために料金を支払い、その後Amazonに行くために再度料金を支払います。

他のヒント

単純なPython Memcachedキューを開始しました。これは便利かもしれません。 http://bitbucket.org/epoz/python-memcache-queue/

データが失われる可能性を許容できる場合は、ぜひ続行してください。ただし、他のものと同様に、memcache は一般にデータストアよりもレイテンシが低いですが、単一の要素に対して実行するアトミックな操作の頻度が高い場合には影響を受けることに注意してください。これはデータストアの問題ではなく、単にアクセスをシリアル化する必要があるという問題です。

それができない場合は、Amazon の SQS が実行可能な選択肢のように思えます。

タスクキューを使用しない理由:
https://developers.google.com/appengine/docs/python/taskqueue/
https://developers.google.com/appengine/docs/java/taskqueue/

Memcachedベースのキューでメッセージが失われる可能性がなく、問題を解決するようです。

Googleが適切なジョブキューを実装するまで、データストアを使用しませんか?他の人が言ったように、memcacheは単なるキャッシュであり、キューアイテムを失う可能性があります(これは悪いことです)

データストアは、必要なものに対して十分に高速である必要があります-キー/値のペアに限定されないため、memcacheよりも柔軟な単純なJobモデルが必要です

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top