当我们在网站上举办的持续一个小时的促销活动期间突然出现高峰时,我应该如何处理 App Engine 上的实例?

How should I go about handling instances on app engine when there is a sudden spike during a sale we host on our website which lasts for an hour?

我们每个月都会举办一次促销活动。准备好所有交易数据后,我们会向所有用户发送通知。结果,我们在几秒钟内获得了巨大的流量,并且持续了大约一个小时。目前我们正在销售时间之前将实例 class 类型更改为 F4_1G 并在一小时后返回 F1。有没有更好的方法来处理这个问题?

更改 instance class of App Engine Standard based on the expected demand that you have, you can (and should) also consider a good scaling approach for your application. App Engine Standard offers three different scaling types 的一部分,其中有详细记录,但让我在这里总结一下它们的主要功能:

  • 自动缩放: 基于请求率、响应延迟和其他应用程序指标。这可能是您提出的用例的最佳选择,因为将根据需求启动更多实例。
  • 手动缩放: 连续 运行,实例保持状态,您可以配置您想要的实例的确切数量 运行。如果您已经知道如何处理以前出现的使用高峰时的需求,这将很有用。
  • 基本扩展:实例数量随着需求量的增长而扩展,您可以设置可服务的最大实例数量。

根据您在问题中提出的用例,我认为自动缩放是更符合您要求的缩放类型。所以让我在使用它的时候在the parameters that you can tune上多获得一点in-depth:

  • 每个实例要处理的并发请求数:设置一个实例在启动新实例之前可以接受的最大并发请求数。
  • 空闲实例可用:有多少空闲(不服务流量)实例应该准备好处理流量。当您遇到流量高峰时,您可以将此参数调整得更高,以便在短时间内处理请求,而无需等待实例启动。高峰期过后,您可以将其设置为较低的值以降低部署成本。
  • 响应中的延迟:允许在不启动新实例的情况下将请求留在队列中的时间(当没有实例可以处理它时)。

如果您尝试使用这些配置参数,您可以以非常确定的方式定义您想要拥有的实例数量,能够适应大峰值,然后返回到较低的值以减少使用和成本。

在使用自动缩放时您应该考虑的另外一点是,在流量负载高峰之后,您可能会看到比您指定的更多的空闲实例(它们不会被拆除以避免新实例必须开始),但您只需为指定的 max_idle_instances 付费。