我最近在Google App Engine上的服务负载急剧增加。负载从~1-2 req /秒变为大约10 req /秒大约几个小时。我的动态实例数量很快就扩大了,但在这个过程中我确实得到了一些“请求等待时间太长”的超时消息。
所以下一次,我想准备足够的空闲实例来处理我的负载。但现在的问题是,我如何确定有多少是足够的。我预计这次会有更大的负载爆发 - 从几乎没有到平均500次请求/秒,可能达到峰值3000.这将持续15分钟到1小时。
我的主要目标是确保通过HTTP Post传递的信息通过单次写入保存到数据存储区。
以下是我为爆发做准备的步骤:
我想知道的是: 1.计算每个N个请求/秒需要多少空闲实例的提示/见解。 2.似乎任务队列的最大吞吐量是500 /秒。这是你可以推动任务的速度,如果没有,那么是否有上限?我猜不是,因为这些可能只是数据存储区写入,但我想确定。
我的后备计划如果我没有信心保存此Flash手机的所有信息,那就是设置一个强大的Amazon EC2实例,在其上运行Web服务器并让我的客户端向此服务器发送备份请求。 / p>
答案 0 :(得分:2)
您必须了解空闲实例仅在新的前端实例正在旋转时使用。这意味着它们仅在流量增加期间使用。当交通稳定时,他们不会被使用。
现在,如果您的实例需要20秒才能启动,并且可以处理10 req / sec的稳定流量,并且您的流量增量为5 req / sec,那么如果您不需要20 * 5/10 = 10个空闲实例不希望任何请求被删除。
你应该做的是:
最大化实例吞吐量(它可以处理的请求数):优化代码,使用异步数据库操作并启用Concurrent Requests。
最小化您的实例启动时间。这很重要,因为在启动新实例期间使用空闲实例,而直接启动新实例所需的时间与您需要的空闲实例数相关。如果你使用Java,这意味着摆脱任何进行类路径扫描的繁重框架(Spring等)。
第四,所需的前端实例数量非常具体。但是,由于您已经增加了流量,因此您应该知道您的前端实例每秒可以处理多少请求。
编辑:您还应该做一件更明显的事情:HTTP缓存。 GAE有一个transparent HTTP cache,可以通过Cache-Control
标头进行简单控制。
此外,如果分析对您的服务器产生巨大的性能影响,请考虑使用客户端分析服务(如Google Analytics)。它们也适用于设备。