gpt4 book ai didi

gunicorn - FastAPI Gunicorn Uvicorn 使用 Google Cloud Run 进行生产部署(压力测试)

转载 作者:行者123 更新时间:2023-12-03 17:09:40 27 4
gpt4 key购买 nike

这里我想问你,用python运行gunicorn uvicorn,和默认从tiangolo有什么区别?
我尝试使用 JMeter 对这些进行压力测试具有线程属性:
Screenshot from 2021-02-18 12-29-26
从这些,我得到了结果::
Screenshot from 2021-02-18 12-20-05
从上面我尝试过:

  • 带有 tiangolo 基础的 Dockerfile
  • 带有 python:3.8-slim-buster 的 Dockerfile 并使用 gunicorn 命令
  • 运行它
  • 使用 python:3.8-slim-buster 构建 Dockerfile 并使用 python
  • 运行它

    这是案例 1(Tiangolo 基础)的 Dockerfile:
    FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8-slim
    RUN apt-get update && apt-get install wget gcc -y
    RUN mkdir -p /app
    WORKDIR /app
    COPY ./requirements.txt /app/requirements.txt
    RUN python -m pip install --upgrade pip
    RUN pip install --no-cache-dir -r /app/requirements.txt
    COPY . /app
    这是案例 2 的 Dockerfile(带有 gunicorn 命令的 Python 基础):
    FROM python:3.8-slim-buster as builder
    RUN apt-get update --fix-missing
    RUN DEBIAN_FRONTEND=noninteractive apt-get install -y libgl1-mesa-dev python3-pip git
    RUN mkdir /usr/src/app
    WORKDIR /usr/src/app
    COPY ./requirements.txt /usr/src/app/requirements.txt
    RUN pip3 install -U setuptools
    RUN pip3 install --upgrade pip
    RUN pip3 install -r ./requirements.txt
    COPY . /usr/src/app
    ENTRYPOINT gunicorn --bind :8080 --workers 1 --threads 8 main:app --worker-class uvicorn.workers.UvicornH11Worker --preload --timeout 60 --worker-tmp-dir /dev/shm
    这是案例 3 的 Dockerfile(带有 python 命令的 Python 基础):
    FROM python:3.8-slim-buster
    RUN apt-get update --fix-missing
    RUN DEBIAN_FRONTEND=noninteractive apt-get install -y libgl1-mesa-dev python3-pip git
    RUN mkdir /usr/src/app
    WORKDIR /usr/src/app
    COPY ./requirements.txt /usr/src/app/requirements.txt
    RUN pip3 install -U setuptools
    RUN pip3 install --upgrade pip
    RUN pip3 install -r ./requirements.txt --use-feature=2020-resolver
    COPY . /usr/src/app
    CMD ["python3", "/usr/src/app/main.py"]
    这里我很困惑,从上面的结果看起来它们的结果几乎相同,上面三种方法有什么区别?哪一个最适合生产?对不起,我是生产部署 API 的新手。我需要一些关于这个案子的建议。谢谢
    这是我的云运行命令
    gcloud builds submit --tag gcr.io/gaguna3/priceengine

    gcloud run deploy backend-pure-python \
    --image="gcr.io/gaguna3/priceengine" \
    --region asia-southeast2 \
    --allow-unauthenticated \
    --platform managed \
    --memory 4Gi \
    --cpu 2 \
    --timeout 900 \
    --project=gaguna3

    最佳答案

    根据您的示例,我注意到第一个容器正在使用经过微调的 gunicorn 版本,也在 tiangolo's github page 中。被提及

    This image has an "auto-tuning" mechanism included, so that you can just add your code and get that same high performance automatically.


    从我的角度来看,这可以通过对 gunicorn worker 执行动态缩放和/或使用 Cpython 模块来实现。
    第二个和第三个容器之间的区别在于您为服务定义的工作人员数量,在第二个容器中,您只有 1 个工作人员和 8 个线程,如果您使用配置,您可以提高性能,如上所述 article .
    使用 tiangolo/uvicorn-gunicorn 不是一个坏主意但我建议您锁定容器的版本,这是为了防止将来的更改影响您的生产环境。
    另一方面,使用 vanilla python 图像允许您自定义图像而不必担心破坏某些东西,但这需要一些时间才能获得与 tiangolo 相同的性能。 docker 。

    关于gunicorn - FastAPI Gunicorn Uvicorn 使用 Google Cloud Run 进行生产部署(压力测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66254371/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com