【问题标题】:How to resolve google app engine latency?如何解决谷歌应用引擎延迟?
【发布时间】:2020-04-07 01:04:30
【问题描述】:

我们的项目在 Google App Engine 标准环境中运行,自动缩放配置如下所述。应用程序中启用了预热请求,我们正在使用 Google Endpoints 服务。但是,我在不同情况下都面临延迟问题。 环境:Java 8,实例类型:F4_1G 自动缩放的配置: 最小实例数:2 最大并发请求数:80 最小等待延迟:6s 最大等待延迟:10 秒

我使用 JMeter 进行了测试,配置为发送 85 个异步请求加速周期为 10 秒。 从应用程序日志中,我可以注意到 appengine 需要很长时间来处理请求。以下是我的问题

1.大部分请求都因为超时而失败。在图 1 中,我们可以发现请求需要 88.2 秒。我知道 AppEngine 自动缩放有 60 秒的请求超时限制。但是我们已经配置了至少 2 个实例的自动缩放,并且对最大实例没有限制。 AppEngine 实例应处理请求,否则 AppEngine 应向上扩展以处理请求。 为什么没有发生? Image_1

  1. 扩展时,请求需要 43.6 秒。在图 2 中,我们可以看到请求在 IST 的 20:27:01:663 发出,API 执行的第一行从 IST 的 20:27:40:407 开始。 在这期间发生了什么?我可以得到这段时间的日志吗? Image_2
  2. 放大后,后续请求也需要很长时间才能服务。例如,一个 API 请求通常会在 2 秒内完成。在图 3 中,我们可以注意到 API 在没有加载请求过程的情况下需要 42.4 秒,然后请求在 IST 的 20:27:01:728 到达。 API 执行的第一行从 IST 20:27:40:708 开始。 这期间发生了什么? Image_3

【问题讨论】:

    标签: java google-app-engine google-cloud-platform paas google-cloud-endpoints-v2


    【解决方案1】:

    我认为这与部署新实例需要很长时间的 Java 8 运行时有关,因为 java 是一个繁重的运行时。

    部署时间超过60s,你的无人值守请求将超时结束。

    我认为您可以改进您的升级策略,例如尝试使用更多实例启动您的服务并添加此选项“target_throughput_utilization”以便在达到 80 个并发请求之前开始引发新实例

    文档声明: '当并发请求的数量达到等于 max-concurrent-requests 乘以 target-throughput-utilization 的值时,调度程序启动一个新实例。'

    min-instances: 4 
    max-concurrent-requests: 80
    target_throughput_utilization:0.75
    min-pending-latency: 6s 
    max-pending-latency: 10s
    

    在我的示例中,新实例将在实际实例有 (80 X 0.75) 60 个并发请求时启动

    【讨论】:

    • 谢谢@JorgeHDZ。在我的配置中,我们有 2 分钟的实例,它能够管理(80 * 0.5 目标吞吐量利用率的最小值)每个实例 40 个请求。然后我配置了10s max pending latency,我们没有提到max instance,min_idle_instances,max_idle_instances 所以都是自动类型。根据谷歌文档,它应该处理 85 个并发请求。 但我不知道为什么它没有发生?我已经配置了系统日志(调试模式)。从日志中我可以注意到 App 引擎上下文加载只需要 4 到 6 秒。所以我认为 与 Java8 无关
    • 您是否尝试在默认模式下设置所有配置?
    • 我没有尝试默认配置。 @JorgeHDZ。
    • 请尝试使用默认配置,可能您的配置影响了您的请求方式
    • 我也尝试过使用默认配置,但我也面临同样的问题。
    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 2022-06-15
    • 2011-05-06
    相关资源
    最近更新 更多