如果自动伸缩不能创建新的实例,App Engine请求会怎样?

问题描述 投票:0回答:1

因为实例限制。所以有一个请求,它在队列中坐了足够长的时间,但是App Engine自动缩放无法启动一个新的实例。

这个请求会怎么样呢?是无限期地保留在队列中,还是过一段时间就中止了?

google-app-engine instance autoscaling
1个回答
2
投票

它返回一个消息"率超过。"给用户,并在日志中出现以下错误"由于等待时间过长,无法为您提供服务,请求被中止。"

下面是我的测试方法。

我创建了一个类来计算经过的时间,以确保我确实在执行多个并发请求。以及一个基本的Python应用,它有一个20秒的睡眠功能.然后在app.yaml中,我将最大实例设置为1,最大并发请求设置为1.然后通过简单地打开5个带有应用URL的标签并同时运行它们,其中至少有一个会失败,并出现上述错误。

在GAE标准版上测试

定时器.py:

import time
class TimerError(Exception):
    """A custom exception used to report errors in use of Timer class"""
class Timer:
    def __init__(self):
        self._start_time = None
    def start(self):
        """Start a new timer"""
        if self._start_time is not None:
            raise TimerError(f"Timer is running. Use .stop() to stop it")
        self._start_time = time.perf_counter()
    def stop(self):
        """Stop the timer, and report the elapsed time"""
        if self._start_time is None:
            raise TimerError(f"Timer is not running. Use .start() to start it")
        elapsed_time = time.perf_counter() - self._start_time
        self._start_time = None
        print(f"Elapsed time: {elapsed_time:0.4f} seconds")

main.py:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    import time
    from timer import Timer
    t = Timer()
    t.start()
    print('Started')
    time.sleep(20)
    t.stop()
    return 'Hello World!'

if __name__ == '__main__':

要求.txt:

Flask==1.1.2
codetiming

app.yaml:

service: scaling
runtime: python37
instance_class: F1
automatic_scaling:
  target_cpu_utilization: 0.65
  min_instances: 1
  max_instances: 1
  min_pending_latency: 30ms  # default value
  max_pending_latency: automatic
  max_concurrent_requests: 1

部署。

gcloud app deploy

然后: 同时打开5个标签页与部署的应用链接。

结果:用户得到。"速率超过。"GAE日志显示: ERROR"由于等待时间过长,无法为您提供服务,请求被中止。"

© www.soinside.com 2019 - 2024. All rights reserved.