1

最近,我在 Google App Engine 上的服务负载出现了短暂的急剧增加。负载从~1-2 req/second 到大约 10 req/second 大约几个小时。我的动态实例数量迅速增加,但在此过程中,我确实收到了一些“请求等待时间过长”的超时消息。

所以下一次,我想准备好足够的空闲实例来处理我的负载。但现在的问题是,我如何确定多少才足够。我预计这次的负载会有更大的爆发——从几乎没有请求到平均每秒 500 个请求,峰值可能达到 3000 个。这将持续 15 分钟到 1 小时。

我的主要目标是确保通过 HTTP Post 传递的信息通过单次写入保存到数据存储区。

以下是我为准备爆发所采取的步骤:

  1. 我修剪了禁用分析和其他报告的快速路径,这些报告通常会生成 2 个 urlfetch 请求。
  2. 数据存储写入将通过延迟库延迟到任务队列

我想知道的是: 1. 计算每 N 个请求/秒需要多少空闲实例的提示/见解。2.好像一个任务队列的最大吞吐量是500/秒。这是你可以推动任务的速度吗?如果不是,那有上限吗?我猜不是,因为这些可能只是数据存储写入,但我想确定。

如果我对保存这个快闪族的所有信息没有信心,我的后备计划是设置一个强大的 Amazon EC2 实例,在其上运行一个 Web 服务器,并让我的客户向这个服务器发送一个备份请求。

4

1 回答 1

2

您必须了解只有在启动新的前端实例时才使用空闲实例。这意味着它们仅在流量增加时使用。当流量稳定时,它们不会被使用。

现在,如果您的实例需要 20 秒才能启动并且可以处理 10 个请求/秒的稳定流量,并且您的流量 INCREASE 是 5 个请求/秒,那么如果您不想要,您将需要 20 * 5 / 10 = 10 个空闲实例任何请求都被丢弃。

你应该做的是:

  1. 最大化实例吞吐量(它可以处理的请求数):优化代码,使用异步数据库操作并启用并发请求

  2. 最小化您的实例启动时间。这很重要,因为在启动新实例期间会使用空闲实例,启动新实例所需的时间与您需要多少空闲实例直接相关。如果您使用 Java,这意味着摆脱任何执行类路径扫描的繁重框架(Spring 等)。

第四,所需的前端实例数量是非常特定于应用程序的。但是由于您已经增加了流量,您应该知道您的前端实例每秒可以处理多少个请求。

编辑:您应该做一件更明显的事情:HTTP 缓存。GAE 有一个透明的 HTTP 缓存,可以通过Cache-Control标头简单地控制。

Also, if analytics has a big performance impact on your server, consider using client side analytics services (like Google Analytics). They also work for devices.

于 2013-03-03T19:05:20.940 回答