【问题标题】:Django application with ASGI Uvicorn increasing the latencies by 4x使用 ASGI Uvicorn 的 Django 应用程序将延迟提高了 4 倍
【发布时间】:2022-08-18 18:47:31
【问题描述】:

我们正在使用 Django 应用程序 (https://github.com/saleor/saleor) 来处理我们的电子商务用例。我们在生产中使用 ASGI 和 Uvicorn,有 4 名工人。基础设施设置 -

  1. 4 个 4 核 16 GB 机器实例,用于托管 Django 应用程序 (Saleor)。
  2. 在所有实例上使用 docker 部署应用程序。
  3. 2 个 4 核 16 GB 的 Celery 实例。
  4. 具有一个主副本和一个副本的托管 PostgresQL 解决方案。

    Saleor 使用 Django 和 Graphene 来实现 GraphQL API。 API 之一是 createCheckout,它需要大约 150 毫秒到 250 毫秒,具体取决于有效负载实体。在使用 1 个用户运行负载测试时,API 始终提供类似的延迟。当并发用户数增加到 10 时,延迟增加到 4 倍(1 秒 - 1.3 秒)。对于 20 个用户,它达到了 10 多秒。

    平均 CPU 使用率不超过 60%。在跟踪延迟时,我们发现即使有 20 个用户发出并发请求,核心 API 的耗时也不超过 150-250 毫秒。这意味着所有延迟都被添加到 ASGI + Uvicorn 层。

    不知道我们在这里错过了什么。从部署的角度来看,我们遵循标准的 Django + ASGI + Uvicorn 设置进行生产。任何有关这方面的帮助或建议将不胜感激。

    标签: django uvicorn asgi saleor


    【解决方案1】:

    当销售商设置不包括 celery runner 时,我们遇到了类似的问题。你能确定 celery 是通过 redis 连接的,并且它按预期处理每次结帐的请求吗?如果没有,saleor 将无法运行任何异步任务并尝试同步运行它们,从而增加了很多延迟..

    【讨论】:

      猜你喜欢
      • 2020-05-27
      • 2020-09-19
      • 1970-01-01
      • 2022-06-15
      • 2019-05-10
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多