Pergunta

Eu estou trabalhando em um jogo multiplayer e precisa de uma fila de mensagens (ou seja, mensagens em, mensagens para fora, há duplicatas ou mensagens excluídas assumindo que não há despejos de cache inesperados). Aqui estão as filas baseada memchache eu estou ciente de:

Eu aprendi o conceito de memcache fila de este post :

Todas as mensagens são salvos com um inteiro como chave. Há uma chave que tem a chave seguinte e aquele que tem a chave da mensagem mais antiga na fila. Para aceder a estes o incremento método / decréscimo é usado como atômica, então existem duas chaves que atuam como fechaduras. Eles se incrementado, e se o valor de retorno é 1 o processo tem o bloqueio, caso contrário, ele continua incrementando. Uma vez que o processo for concluído que define o valor de volta para 0. simples, mas eficaz. Uma ressalva é que o inteiro vai transbordar, para que haja alguma lógica no lugar que define as teclas utilizadas para 1, uma vez que estamos perto desse limite. Como a operação de incremento é atômica, só é necessário o bloqueio se dois ou mais memcaches são utilizadas (para redundância), para manter aqueles em sincronia.

A minha pergunta é, existe um serviço de fila de mensagens baseados em memcache que pode ser executado no App Engine?

Foi útil?

Solução

Eu ficaria muito cuidado usando o Google App Engine Memcache desta forma. Você tem razão de ser se preocupar com "despejos de cache inesperados".

O Google espera que você usar o cache de memória para cache de dados e não armazenamento -lo. Eles não garantem a manter os dados no cache. Do GAE Documentação :

Por padrão, os itens nunca expiram, embora itens podem ser despejado devido a memória pressão.

Editar: Há sempre simples Queuing Service da Amazon. No entanto, isso pode níveis não se encontram preço / desempenho, quer como:

  1. Não seria a latência de chamar a partir dos Google a Amazon servidores.
  2. Você iria acabar pagando duas vezes para todo o tráfego de dados -. Pagar por ele para deixar o Google e, em seguida, pagar novamente para que ele vá para a Amazon

Outras dicas

Eu comecei uma simples Python Memcached fila, ele pode ser útil: http://bitbucket.org/epoz/python-memcache-queue/

Se você está feliz com a possibilidade de perda de dados, por todos os meios vá em frente. Tenha em mente, porém, que, embora memcache geralmente tem latência mais baixa do que o armazenamento de dados, como qualquer outra coisa, ele vai sofrer se você tem uma alta taxa de operações atômicas que você deseja executar em um único elemento. Este não é um problema de armazenamento de dados -. Ele é simplesmente um problema de ter de acesso serialize

Na falta deste, SQS do Amazon parece ser uma opção viável.

Por que não usar fila de tarefas:
https://developers.google.com/appengine/docs/python/taskqueue/
https://developers.google.com/appengine/docs/java/taskqueue/

Ele parece resolver o problema sem a perda provável de mensagens em fila com base em Memcached.

Até Google impliment um trabalho a fila adequada, por que não usar os dados-store? Como já foi dito, memcache é apenas um cache e pode perder itens da fila (que seria .. ruim)

Os dados loja deve ser mais do que suficiente rápido para o que você precisa - você só tem um modelo de trabalho simples, o que seria mais flexível do que memcache como você não está limitado a pares de chave / valor

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top