java - 管理负载相当重的 Google App Engine java 实例以避免 500 错误

标签 java google-app-engine instances

我们有一个 Google App Engine Java 应用程序,请求速度为 50 - 120/秒,具体取决于一天中的不同时段。

我们的前端 appengine-web.xml 是这样的:

<instance-class>F1</instance-class>
<automatic-scaling>
    <min-idle-instances>3</min-idle-instances>
    <max-idle-instances>3</max-idle-instances>
    <min-pending-latency>300ms</min-pending-latency>
    <max-pending-latency>1.0s</max-pending-latency>
    <max-concurrent-requests>100</max-concurrent-requests>
</automatic-scaling>

通常 1 个前端实例设法处理大约 20 个请求/秒。启动时间约为 15 秒。

我有几个问题:

  • 当我更改前端默认版本时,我收到数以千计的错误 500 - 在尝试为您的请求提供服务后等待太久,请求被中止。 因此,为避免这种情况,我使用按 IP 地址的流量拆分功能从一个版本切换到另一个版本,从 1% 到 100%,步长为 5%,大约需要 5 分钟才能正确完成并避免大量 500 个错误。此外,该功能似乎仅适用于默认前端模块。

->有没有更好的版本切换方式?

  • 为避免数以千计的错误 500 - 请求在尝试服务您的请求时等待太久而被中止,我们必须使用至少 3 个驻留(最小空闲)实例。随着我们的流量增长,即使有 3 个,我们有时仍然会收到大量错误 500。我应该去找 4 个居民吗?我认为 App Engine 很好,因为您只需为使用的实例付费,所以如果为了正常工作,我们需要至少一半的运行实例处于空闲模式,那不是很好,不是吗?这不是真正的成本效益,因为当负载很低时,仍然有 4 个空闲实例是一个很大的浪费:( 奇怪的是它们似乎只等待 10 秒就响应 500 :pending_ms=10248

-> 你有避免这种情况的建议吗?

  • 很多时候,我们还会收到数以千计的错误 500 - 处理此请求的进程遇到问题,导致其退出。这很可能会导致对您的应用程序的下一个请求使用新进程。如果您经常看到此消息,则可能是在应用程序初始化期间抛出了异常。 (错误代码 104)。我不明白,没有任何异常(exception),我们在几秒钟内得到了数百个。

-> 你有避免这种情况的建议吗?

非常感谢您的帮助! ;)

最佳答案

这些错误消息主要与加载持续时间过长的加载请求有关,因此它们以类似于 DeadlineExceededException 的方式结束,这会显着影响性能和用户体验,您可能已经知道.

这是一个非常常见的问题,特别是在将 DI 框架与谷歌应用引擎一起使用时,到目前为止,这是一个不可避免且严重的未解决问题 automatic scaling ,这是 App Engine 自成立以来为处理公共(public)请求而提供的扩展策略。

尝试将前端实例类更改为 F2,特别是如果您的内存消耗高于每个实例 128MB,并且将最小-最大挂起延迟设置为 15 秒,这样您的请求将有更多机会被常驻实例处理。但是,对于某些请求,您仍然会得到很长的响应时间,因为 Google App Engine 可能不会在您的应用程序每次需要新实例时都发出预热请求,而且我不明白 F4 会破产。

关于java - 管理负载相当重的 Google App Engine java 实例以避免 500 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052787/

相关文章:

google-app-engine - 尝试使用Dart在App Engine上的gcloud DB中插入元素时出错

java - 从 URL 获取文件 - 错误

python - 导入错误:没有名为 httplib2 的模块

java - OpenStreetMap 是否有 Point(Source) to Point(Destination) direction uri 在 Android 中使用?

python - 如何使用 webapp2 的用户模型拥有用户名?

c++ - 如何让模板类型名类的两个(或更多)实例使用相同的函数

python - 一个类的多个实例

c# - Visual C# 中的 "Global variable"

java - 调用方法有问题

java - ImageJ 嵌入网站