如何减少GAE启动的前端实例数量?

2024-09-30 14:19:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

两个负载测试

  • 在30分钟内从0到10000个并发用户
  • 在10000个用户处停留30分钟
  • 然后在30分钟内降到0个用户。在

URL的主要区别在于延迟。平均来说

  • /rest/便宜的{1,2}是70ms
  • /休息/昂贵{1,2,3,4}600毫秒

当运行LT1时,GAE只启动少数实例,并且每个实例上的请求数高达70个。在LT2中添加/rest/expense{1,2,3,4}之后,GAE启动了更多的实例,并且只在每个实例上放置5-7个请求/s,从而导致成本增加。在

  • 如何使用较少的实例?是否有办法利用最频繁操作/休息/便宜1的延迟?有很多settings for the GAE scheduler,例如min/max挂起延迟、min/max空闲实例、实例类。在这种情况下,我如何利用这些优势?>

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

  • 将min.pending latency设置为>;=600毫秒,实例计数会受到什么影响?>

更新:

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

Tags: 实例用户程序运行resturl利用minmax
2条回答

减少实例数

要减少实例数,您有几个选项:

减少内存和CPU占用

减少代码的内存和CPU使用量,以便在给定实例上执行更多的操作。我不会继续下去,因为从你的问题我知道你不想修改你的代码。在

减少空闲实例的最大数量

在AppEngine控制台中,减少“最大空闲实例数”参数。这些实例由appengine保存以处理加载pikes。如果您不介意在加载pikes期间增加延迟,那么可以减少实例的数量。在

Max number of idle instances

使请求等待可用实例

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

Min pending latency

关于GAE可伸缩性的进一步讨论

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

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

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

GAE best practices

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

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

  • 在任何地方都使用memcache——这也许是最大的收获
  • 获取列表而不是单个实体
  • 如果不需要迭代,就不要迭代
  • 获取键而不是实体
  • Ajax可以比纯python更快

为了使您的测试执行得更好,我建议您看看测试是如何编写的,以及它是否测试了您想要测试的内容。在

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

相关问题 更多 >