如何减少GAE推出的前端实例数量?

时间:2013-06-04 19:11:31

标签: java python google-app-engine load-testing

我正在对我的GAE / J应用程序运行两个不同的负载测试。

  1. Loadtest#1(LT1):每2秒调用/ rest / cheap1,每60秒调用/ rest / cheap2

  2. Loadtest#2(LT2):除了LT1的URL之外,每个用户还会调用四个不同的URL / rest / expensive {1,2,3,4}。这些URL中的每一个大约每60秒调用一次。

  3. 两个负载测试都是

    • 在30分钟内从0到10.000个并发用户,
    • 留在10.000用户30分钟,
    • 然后在30分钟内转到0位用户。

    网址的主要区别在于延迟。平均而言,潜伏期为

    • / rest / cheap {1,2}是70毫秒
    • / rest / expensive {1,2,3,4} 600 ms

    运行LT1时,GAE仅启动少数实例,并在每个实例上放置 70 requests / s 。在LT2中添加/ rest /昂贵的{1,2,3,4}之后,GAE启动的实例数量明显增加,并且每个实例只放置 5-7个请求/ s ,从而导致成本增加。

    • 如何使用更少的实例?有没有办法利用最常用的操作/休息/ cheap1的小延迟?有很多settings for the GAE scheduler,例如最小/最大挂起延迟,最小/最大空闲实例,实例类。 在这种情况下,我如何利用它们?

    • / rest / expensive {1,2,3,4}的延迟更改如何影响实例计数?例如。如果响应时间减半,GAE会启动一半的实例?

    • 如何通过设置min来影响实例计数。等待延迟到> = 600毫秒?

    更新

    • 是的,我在我的应用程序中将threadsafe设置为true。

2 个答案:

答案 0 :(得分:1)

在我的测试中,我完成了所有优化并使用外部页面检查程序进行了测量,发现Google App Engine中单个最大的延迟来自第一个字节服务器,您的python实例并非“温暖”。

实际进行开发而不是预先编写的测试以减少延迟时的一些技巧

  • 到处使用memcache - 也许是最大的最大收益
  • 获取列表而非单个实体
  • 如果您不需要
  • ,请不要进行迭代
  • 获取密钥而非实体
  • Ajax可以比纯python更快

为了让您的测试表现更好,我建议您查看测试是如何编写的,以及它是否测试您要测试的内容。

当你的python实例启动它会更快,它是我的测试中第一个字节慢。

答案 1 :(得分:0)

减少实例数

要减少实例数,您有以下几种选择:

减少内存和CPU占用

减少代码的内存和CPU使用率,以便更多的执行适合给定的实例。我不会详细说明,因为根据您的问题,我了解您不想修改您的代码。

减少最大空闲实例数

在App Engine控制台中,减少“最大空闲实例数”参数。这些实例由App Engine保留以处理负载峰值。如果您可以在加载加载期间增加延迟,则可以减少实例数。

Max number of idle instances

请求等待可用实例

在App Engine控制台中,增加“min pending latency”参数。此参数决定App Engine调度程序在决定启动新实例以满足您的请求之前等待的时间。它越高,旋转的实例就越少。但是,当然,您的请求的延迟会增加。

Min pending latency

关于GAE可扩展性的进一步讨论

所有这些选择都是权衡取舍。在保持延迟不变的情况下,您将无法减少实例数。

请注意,“min pending latency”是请求的完整延迟。只有在等待服务可用实例时请求在队列中花费的时间。它没有考虑服务请求的实际时间(例如,数据存储调用)。

Check this article for a better understanding of how App Engine handles scalability。我特别推荐最佳实践表,以便更好地理解App Engine控制台中可用的性能参数。我将在下面复制它:

GAE best practices