我想问一下,使用gunicorn uvicorn和Python运行以及使用默认的tiangolo有什么区别?
我已经尝试使用JMeter进行压力测试,并设置了线程属性:
我已经尝试使用JMeter进行压力测试,并设置了线程属性:
通过这些,我得到了结果:
我尝试过以下方法:
- 使用tiangolo基础Dockerfile
- 使用python:3.8-slim-buster Dockerfile,并使用gunicorn命令运行
- 使用python:3.8-slim-buster Dockerfile,并使用python命令运行
这是我用于第一种情况(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(基于Python,使用gunicorn命令):
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
这是我的第三个案例的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 的新手。我需要一些关于这个问题的建议。谢谢。
这是我的 Cloud Run 命令
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