Google App Engine中的内存缓存和互斥锁?
问题描述:
我正在研究一个非常有趣的项目,我们希望在内存中保持游戏状态。当服务器启动时,它从数据库加载游戏状态,这是它从数据库读取的唯一时间。只要服务器更改其内存游戏状态,它就会发出相应的写入数据库。Google App Engine中的内存缓存和互斥锁?
每个游戏只有一台服务器写入,如果客户端向错误的服务器发送更新,它会被告知正确的服务器的url,客户端可以再次尝试。
因此,我正在寻找一种方法让App Engine上的游戏状态持续存在内存中,但我很难。我看到的每个地方都说这样的人不应该在内存中拥有状态,但这是我们系统的要求。
如何在App Engine服务器中拥有状态?
PS。请不要告诉我改变我的设计,以便我的服务器没有状态,这是一个很难的要求。
答
每个实例都有自己的实例内存,您可以在设置中指定它们。
的问题,你将要面对的:
- 请求路由到“正确”的情况。
- 实例可随时重新启动。
您可以将您的游戏状态保留在Memcache中,它充当您的所有实例共享的“内存”。这样你的实例可能变成“无状态” - 每个实例在Memcache中找到正确的“游戏”并更新它(然后是数据存储区)。
谢谢!所以如果我正确地理解了这个,就有实例内存,还有memcache。我将探讨在将来某个时候切换到与memcache更兼容的模型,但现在,我将尝试执行实例内存方法。我可以在哪些设置中找到它?我看到了memcache设置和云存储桶设置,但没有实例内存...... – Verdagon
您可以在部署描述中定义“实例类”,例如appengine-web.xml或app.yaml(取决于您的运行时间)。请参阅:https://cloud.google.com/appengine/docs/standard/#instance_classes –