【问题标题】:GAE send requests to all active instancesGAE 向所有活动实例发送请求
【发布时间】:2016-11-30 20:33:02
【问题描述】:

有没有办法向 Google App Engine 中模块/服务的所有活动实例发送请求?

如果我可以获得所有活动实例 ID 的列表,我可以为每个实例发出类似 https://instance-dot-version-dot-service-dot-app-id.appspot.com 的请求。

在非常不寻常的情况下,我需要它来更改一些内存的全局变量(这可以节省我对数据存储或内存缓存的请求和时间)。如果它们是频繁更改,我显然更喜欢使用 memcache...

【问题讨论】:

  • 虽然 Dan 发布了答案,但我不确定这是否真的是您需要实现的最佳方法。您认为您可以进一步详细说明吗?
  • 您可以在实例的 RAM 内存中、MEMCACHE 或 DATASTORE(或其他 NSQL)中拥有一个标志。获取该标志值的时间可能是 0.001、2 或 50 毫秒(示例),具体取决于所选存储。如果我的应用程序的所有请求都读取了该标志,那么从实例的 RAM 内存中读取它可以节省金钱和时间(假设 10 M 请求/天并计算数字)。当实例启动时,您从 Datastore 中读取值并将其作为全局变量放入 RAM。但是如果标志发生变化,我正在寻找一种方法向所有实例发送消息以更新其 RAM 中标志的值。
  • 在我之前的示例中,该标志只能每月更改一次,或者在某些 Google 服务失败的情况下(如 GAE 任务队列),但在这种情况下,我们需要一个中间传播。当前的解决方案是刷新内存缓存并再次上传应用程序的最后一个版本,因此所有实例都被初始化并使用新的标志值重新启动......我正在寻找一种更优雅的方式来做到这一点。我需要它用于自动缩放实例。

标签: python google-app-engine


【解决方案1】:

您可以使用 Google App Engine Admin API 的 REST apps.services.versions.instances.list 方法获取特定服务版本的实例列表:

列出版本的实例。

HTTP 请求

GET https://appengine.googleapis.com/v1/{parent=apps/*/services/*/versions/*}/instances

URL 使用Google API HTTP annotation 语法。

另见相应的Google App Engine Admin API Client Library for Python 的pydoc 页面here

使用实例列表,您可以使用 GAE 的 routing via URL 根据需要向每个特定实例发送请求。

重要说明与问题中的此假设相关:

如果我可以获得所有活动实例 ID 的列表,我可以创建一个 请求像 https://instance-dot-version-dot-service-dot-app-id.appspot.com 为 每个实例。

来自Targeted routing

注意:在为自动扩展或基本扩展配置的服务中不支持以实例为目标。

【讨论】:

  • 此解决方案不适用于自动扩展实例。我得到了实例 ID,但 instance.service.version.app.appspot.com 请求不起作用。文档指出“为自动扩展或基本扩展配置的服务不支持以实例为目标。”
  • 确实如此,但我认为这是原始帖子设置的上下文问题I could make a request like https://instance-dot-version-dot-service-dot-app-id.appspot.com for each instance. :)
  • 我尝试了所有的符号变化,但都不起作用。我的实例是自动扩展的,不适用于文档中所说的。我希望他们将来会改变这一点。
  • 有没有找到自动缩放的解决方案?
  • 据我所知没有(但我最近没有检查)。
猜你喜欢
  • 2015-05-03
  • 1970-01-01
  • 2021-08-15
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 2012-07-11
相关资源
最近更新 更多