应用引擎。强制单实例
Posted
技术标签:
【中文标题】应用引擎。强制单实例【英文标题】:App engine. Forced to single instance 【发布时间】:2014-02-07 09:36:55 【问题描述】:我在谷歌应用引擎、Python SDK 上为简单的实时多人游戏制作服务器。 请求非常简单,处理时间最长为 1ms。 我将所有游戏数据保存在实例的静态变量中。 我将“最小等待延迟”设置为 15 秒。为了防止产生第二个实例。 但有些时候第二个实例创造了任何方式。
如果第二个实例已经生成,我如何禁用或杀死它,并且仅在单个实例中处理所有请求?
【问题讨论】:
【参考方案1】:如果你在与系统作斗争,这表明你做错了什么。
您不应尝试在单个实例中管理所有请求。这违背了使用 GAE 的全部目的。当然,问题是您不应该将数据作为静态变量存储在实例中。即使除了启动其他实例的问题之外,每个实例都会经常停止并重新启动:因此您的数据将会丢失。
您应该将数据保存在相应的位置:内存缓存和数据存储中。
【讨论】:
重启后我不需要保存任何数据。在应用程序设置中,等待 15 秒,然后再生成新实例。但新实例无需等待即可生成。 你的要求没有意义。如果您需要数据在请求间全局持久化,它还需要在实例重启时持久化,因为这些可能发生在任何时间。如果您不需要持久化数据,请不要将其保存在全局变量中。 我使用单实例,就像玩家之间的代理数据交换器一样。无需将数据保存超过 5-6 秒。 Aki 的回答,下面,已经让位于单个实例中的服务器。还是非常感谢。可能稍后,我将制作第二个重型服务器版本,具有多个实例,并通过 memcache 合并数据。【参考方案2】:除了只有 8 个实例小时是免费的, 您可以使用模块 + 手动缩放来做到这一点
https://developers.google.com/appengine/docs/java/modules/ https://developers.google.com/appengine/docs/python/modules/
【讨论】:
谢谢 Aki,:) 我添加:instance_class: B1 basic_scaling: max_instances: 1 idle_timeout: 10m 到 app.yaml 类。是正确的?或者需要在应用程序中进行额外的更改?还是需要启用模块? 遗憾的是我从未尝试过模块。我对空闲实例感到满意:(自动 - 1)在性能设置中,它是免费的。 我也有 Max Idle Instances = 1,但它不会阻止产生多个实例。无论如何,谢谢,我会关注 app.yaml 中具有新设置的实例以上是关于应用引擎。强制单实例的主要内容,如果未能解决你的问题,请参考以下文章