我正在开发一个多人游戏,它需要一个消息队列(即消息输入,消息输出,没有重复或删除消息,假设没有意外的高速缓存驱逐).以下是我所知道的基于memcache的队列:
MemcacheQ:http://memcachedb.org/memcacheq/
Starling:http://rubyforge.org/projects/starling/
Depcached:http://www.marcworrell.com/article-2287-en.html
麻雀:http://code.google.com/p/sparrow/
我从这篇博文中了解了memcache队列的概念:
所有消息都以整数作为键保存.有一个密钥具有下一个密钥,另一个密钥具有队列中最旧的消息的密钥.要访问这些,增量/减量方法用作其原子,因此有两个键充当锁.它们会递增,如果返回值为1,则进程具有锁定,否则它将继续递增.一旦完成该过程,它将值设置回0.简单但有效.需要注意的是整数将溢出,因此有一些逻辑可以在我们接近该限制时将使用的密钥设置为1.由于增量操作是原子的,只有在使用两个或更多个内存缓存(用于冗余)时才需要锁定,以保持这些内存同步.
我的问题是,是否有可以在App Engine上运行的基于memcache的消息队列服务?
我会非常小心地以这种方式使用Google App Engine Memcache.你担心"意外的缓存驱逐"是正确的.
Google希望您使用内存缓存来缓存数据而不是存储数据.他们不保证将数据保留在缓存中.来自GAE文档:
默认情况下,项目永不过期,但由于内存压力,项目可能会被逐出.
编辑:总有亚马逊的简单排队服务.但是,这可能不符合价格/性能水平,因为:
从Google到亚马逊服务器的呼叫会有延迟.
您最终会为所有数据流量支付两次费用 - 支付费用离开Google,然后再次付费才能进入亚马逊.