1

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

  1. 负载测试 #1 (LT1):每 2 秒调用 /rest/cheap1,每 60 秒调用 /rest/cheap2

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

两个负载测试都进行

  • 在 30 分钟内从 0 到 10.000 个并发用户,
  • 在 10.000 个用户中停留 30 分钟,
  • 然后在 30 分钟内下降到 0 个用户。

URL 的主要区别在于延迟。平均而言,延迟为

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

运行 LT1 时,GAE 仅启动少数实例,每个实例最多可发出70 个请求/秒。在 LT2 中添加 /rest/expensive{1,2,3,4} 后,GAE 启动的实例显着增加,每个实例仅放置5-7 个请求/秒,导致成本增加。

  • 我可以做些什么来使用更少的实例?有没有办法利用最频繁操作 /rest/cheap1 的小延迟?GAE 调度程序有很多设置,例如最小/最大挂起延迟、最小/最大空闲实例、实例类。在这种情况下,我如何利用它们来发挥自己的优势?

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

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

更新:

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

2 回答 2

1

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

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

  • 到处使用 memcache——也许是最大的收获
  • 获取列表而不是单个实体
  • 如果不需要,请不要迭代
  • 获取键而不是实体
  • Ajax 可以比纯 python 更快

为了使您的测试表现更好,我建议您查看测试的编写方式以及它是否测试了您想要测试的内容。

当您的 python 实例启动时,它会快得多,它是我的测试中慢的第一个字节。

于 2013-06-05T00:02:45.820 回答
0

减少实例数

要减少实例数量,您有多种选择:

减少内存和 CPU 占用

减少代码的内存和 CPU 使用率,以便更多执行适合给定实例。我不会继续这样做,因为从你的问题我知道你不想修改你的代码。

减少最大空闲实例数

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

最大空闲实例数

让请求等待可用的实例

在 App Engine 控制台中,增加“最小挂起延迟”参数。此参数决定 App Engine 调度程序在决定启动新实例以服务您的请求之前等待多长时间。它越高,启动的实例就越少。但是,当然,您的请求的延迟会增加。

最小等待延迟

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

所有这些选择都是取舍。您将无法在保持延迟不变的同时减少实例数量。

请注意,“最小等待延迟”不是请求的完整延迟。这只是请求在等待提供可用实例时在队列中花费的时间。它没有考虑实际处理请求所需的时间(例如 Datastore 调用)。

查看本文以更好地了解 App Engine 如何处理可伸缩性。我特别推荐最佳做法表,以便更好地了解 App Engine 控制台中可用的性能参数。我将在下面复制它:

GAE 最佳实践

于 2014-05-13T02:00:43.300 回答