英文:
How to resolve google app engine latency?
问题
以下是您提供的内容的翻译:
我们的项目运行在Google App Engine标准环境中,自动扩展配置如下所述。应用中启用了预热请求,并且我们正在使用Google终端点服务。然而,在不同的场景中,我遇到了延迟问题。
环境:Java 8,实例类型:F4_1G
自动扩展配置:
最小实例数:2
最大并发请求数:80
最小挂起延迟:6秒
最大挂起延迟:10秒
我使用JMeter进行了测试,配置了85个异步请求,斜坡上升时间为10秒。
从应用程序日志中我可以注意到,AppEngine花费了很长时间来处理请求。以下是我提出的问题:
-
大多数请求因超时而失败。在图像1中,我们可以看到请求花费了88.2秒的时间。我知道AppEngine自动扩展有60秒的请求超时限制。但是,我们已经配置了最少2个实例的自动扩展,并且没有最大实例的限制。AppEngine实例应该处理该请求,否则AppEngine应该扩展以处理该请求。为什么没有发生?
图像1 -
在扩展过程中,请求花费了43.6秒的时间。在图像2中,我们能够看到请求在印度标准时间(IST)的20:27:01:663到达,并且API执行的第一行从IST的20:27:40:407开始。在这段时间内发生了什么?我能得到这段时间的日志吗?
图像2 -
扩展后,后续请求的处理时间也非常长。例如,API请求通常在2秒内完成。在图像3中,我们可以注意到API在没有加载请求过程的情况下需要42.4秒,然后请求在IST的20:27:01:728到达。API执行的第一行从IST的20:27:40:708开始。在这段时间内发生了什么?
图像3
英文:
Our project is running on the Google App Engine standard environment with auto-scaling configured as mentioned below. Warm up requests are enabled in the app and we are using Google Endpoints service. However, I am facing a latency issue in the different scenarios.
Environment: Java 8, Instance type: F4_1G
Configuration for autoscaling:
min-instances: 2
max-concurrent-requests: 80
min-pending-latency: 6s
max-pending-latency: 10s
I tested with JMeter with configuration of sending 85 asynchronous requests with a ramp up period of 10 seconds.
From the application logs I can notice that appengine takes a long time to serve the request.Below are the questions I have
1.Most of the requests are failing because of time exceed. In image 1, we can spot that the request takes 88.2 seconds. I know that AppEngine auto scaling has a 60 seconds request timeout limit. But we have configured autoscaling with a minimum 2 instances and there is no restriction for max-instance. The AppEngine Instance should handle the request otherwise AppEngine should scale up to handle the request. Why is it not happening?
Image_1
- While scaling up, the request takes 43.6 seconds. In image 2, we are able to see that the request came at 20:27:01:663 IST and the first line of API execution starts at 20:27:40:407 IST. What is happening in between time? Can I get a log for this period?
Image_2 - After the scaleup, subsequent requests also take a very long time to serve. For instance an API request usually gets completed within 2 seconds. In image 3, we can note that API takes 42.4s without loading-request process and then request comes at 20:27:01:728 IST. The first line of API execution starts at 20:27:40:708 IST. What is happening in between time?
Image_3
答案1
得分: 1
我认为这与Java 8运行时有关,部署新实例需要很长时间,因为Java是一个重量级运行时。
部署时间超过60秒,您的无人值守请求将因超时而结束。
我认为您可以改进升级策略,例如尝试使用更多的实例启动您的服务,并添加此选项“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个并发请求时启动。
英文:
I think that is related with Java 8 runtime that takes long time to deploy a new instance, because java is a heavy runtime.
The deploy time exceed 60s and your unattended requests will be ended by timeout.
I think that you can improve your you escalation strategy, for example try to start your service with more instances and add this option "target_throughput_utilization" in order to start to raise a new instance before hit your 80 concurrent requests
the documentation state that:
'When the number of concurrent requests reaches a value equal to max-concurrent-requests times target-throughput-utilization, the scheduler starts a new instance.'
min-instances: 4
max-concurrent-requests: 80
target_throughput_utilization:0.75
min-pending-latency: 6s
max-pending-latency: 10s
In my example the new instance will start when the actual instance has (80 X 0.75) 60 concurrent requests
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论