【问题标题】:FastAPI on Google App Engine: Why am I getting duplicate cloud tasks?Google App Engine 上的 FastAPI:为什么我会收到重复的云任务?
【发布时间】:2021-11-01 05:14:36
【问题描述】:

我已将 FastAPI ML 服务部署到 Google App Engine,但它表现出一些奇怪的行为。 FastAPI 服务旨在接收来自主服务的请求(通过 Cloud Tasks),然后发回响应。这确实发生了。但处理这些请求的 FastAPI 服务中的路由似乎被调用了四次而不是一次。

我的假设是 GAE、gunicorn 或 FastAPI 将确保处理程序在每个云任务中运行一次。但似乎多个工作人员或我的配置中的其他问题导致处理程序被调用四次。以下是更多细节和一些具体问题:

  • Fast API 应用通过gcloud app deploy app.yaml 部署到 Google App Engine (flex)
  • app.yaml 文件包括 GUNICORN_ARGS: "--graceful-timeout 3540 --timeout 3600 -k gevent -c gunicorn.gcloud.conf.py main:app"
  • FastAPI 项目根目录(用于 gcloud 部署)中的 Dockerfile 还包括最终命令 gunicorn -c gunicorn.gcloud.conf.py main:app

这是gunicorn conf:

bind = ":" + os.environ["PORT"]
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = "uvicorn.workers.UvicornWorker"
forwarded_allow_ips = "*"
max_requests = 1000
max_requests_jitter = 100
timeout = 200
graceful_timeout = 6000

所以我很困惑:

  • Dockerfile 中的app.yamlgunicorn 参数中的GUNICORN_ARGS 是否优先?
  • 我应该使用多个工作人员还是这正是导致多个任务的原因?

很高兴提供任何其他相关信息。

【问题讨论】:

    标签: google-app-engine gunicorn fastapi uvicorn google-cloud-tasks


    【解决方案1】:

    GAE Flex 在 app.yaml 文件 [1] 中定义环境变量。 查看 Docker Compose “在环境、标签、卷和设备的情况下,Compose “合并”条目与本地定义的值优先。 [2],取决于他们是否使用 .env 文件“shell 中的值优先于 .env 文件中指定的值。” [3]

    [1]https://cloud.google.com/appengine/docs/flexible/custom-runtimes/configuring-your-app-with-app-yaml#defining_environment_variables [2]https://docs.docker.com/compose/extends/ [3]https://docs.docker.com/compose/environment-variables/

    该问题不太可能是 Cloud Task 重复问题,“在生产中,超过 99.999% 的任务只执行一次。” [4]。你可以调查调用源

    [4]https://cloud.google.com/tasks/docs/common-pitfalls#duplicate_execution

    您还可以调查日志内容,看看是否有唯一标识符,或者它们是否是相同的日志。

    关于uvicorn [0] workers的第二个问题,你可以尝试将“workers”的值硬编码为1,并验证是否没有重复。

    [0]https://www.uvicorn.org/

    【讨论】:

      猜你喜欢
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      相关资源
      最近更新 更多