使用空闲实例和待处理延迟设置调整 AppEngine 性能

Posted

技术标签:

【中文标题】使用空闲实例和待处理延迟设置调整 AppEngine 性能【英文标题】:AppEngine performance tuning with idle instances and pending latency settings 【发布时间】:2012-08-08 16:17:21 【问题描述】:

我有一个应用引擎(付费)应用,平均每天访问量约为 200 次(1000 次页面浏览量,偶尔它会飙升至 1000 次访问量和 10000 次页面浏览量或更多),我目前每天通过 cron 作业唤醒它5分钟以确保合理的性能。这在应用程序引擎延迟峰值期间并不总是有效(幸运的是,最近这种情况并不经常发生),当这种情况发生时,我的 ajax 调用会严重超时。此外,cron-job 策略并不理想,因为它会消耗配额。

目前,我将空闲实例和待定延迟设置全部设置为“自动”。

有人有手动调整这些设置的经验吗?考虑到流量,有哪些典型值可以保证我的应用程序性能更好?

【问题讨论】:

【参考方案1】:

只需将 Idle Instances 设置为 1,而不是 cron 作业。Idle Instances 是处于“保留”状态的实例,可让您即时响应增加的负载。因此,如果您的负载需要三个实例,并且您将 Idle Instance 设置为一个,那么您将有 4 个实例在运行。

缺点是您总是需要为比当前使用的实例多支付一个实例。但是,请记住,您每天可以获得 28 个免费实例小时,免费覆盖一个空闲实例(除非您有一个实例实际处理请求,然后再增加一个空闲实例将产生额外费用)。

另外,如果您设置了 Idle Instances,则 Pending Latency 将几乎没有影响,因为在需要启动新实例时会咨询 Pending Latency,但您始终保留一个实例。警告:如果应用程序代码出现问题或编写不当(例如在请求处理程序中调用外部服务),这可能不是真的,导致响应时间异常长。

底线:将 Idle Instances 设置为 1,然后将 Pending Latency 设置为您的应用仍可接受的某个最大值。

【讨论】:

谢谢您 - 您是否建议根据我的应用程序的流量将空闲实例设置为 1?我想知道更高的流量是否可以证明增加这个数字和增加多少是合理的。在我看来,应用程序在负载下表现得很好,问题主要与我使用应用程序引擎的经验中的实际“不活动”有关。 是的,我建议 Idle=1(最大值和最小值),因为您的应用程序大多处于非活动状态。通常,正如您现在所做的那样,GAE 会停止所有实例,导致在一段时间不活动后第一个请求的加载时间很长。 酷 - 我将禁用我的 cron 作业并试一试!感谢您的提示:)

以上是关于使用空闲实例和待处理延迟设置调整 AppEngine 性能的主要内容,如果未能解决你的问题,请参考以下文章

显示临时标头和待处理的请求

修剪延迟的空闲队列时堆损坏

多波束时间同步(延迟)论述二

如何为 HTML5 视频设置音频延迟(不同步)

Keepalived VRRP-Script抢占延迟VIP单播详解

ASP.NET Core:调用之间的空闲超时有延迟