[英]How to deploy a scalable API using fastapi?
我有一個復雜的 API,當我使用 Uvicorn 部署它時,它需要大約 7GB memory。
我想了解如何部署它,這樣我就希望能夠發出並行請求。 部署的 API 應該能夠同時處理兩個或三個請求。
我正在使用帶有 uvicorn 和 nginx 的 FastAPI 進行部署。 這是我部署的命令。
uvicorn --host 0.0.0.0 --port 8888
有人可以提供一些關於人們如何實現這一目標的明確說明嗎?
您可以使用gunicorn而不是 uvicorn 來處理您的后端。 Gunicorn 提供多個工作人員來有效地對到達的請求進行負載平衡。 這意味着您將擁有與您指定的一樣多的 gunicorn 運行進程來接收和處理請求。 根據文檔,gunicorn 應該只需要 4-12 個工作進程來處理每秒數百或數千個請求。 但是,worker 的數量不應超過 (2 x number_of_cpu_cores) + 1 以避免出現 memory 錯誤。 您可以在doc中查看這一點。
例如,如果您想為基於 fastapi 的后端使用 4 個工作人員,您可以使用標志w
指定它:
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b "0.0.0.0:8888"
在這種情況下,我擁有后端功能的腳本稱為main
並且 fastapi 被實例化為app
。
我正在使用 Docker 和 NGINX 進行類似的工作。
有一個 Docker 官方圖像由開發 FastAPI 的人創建,它為您部署 uvicorn/gunicorn,可以根據您的需要進行配置:
花了一些時間來掌握 Docker 的竅門,但我現在真的很喜歡它。 您可以使用以下配置構建 nginx 映像,然后在單獨的容器中構建 x 數量的應用程序,無論您需要多少作為主機。
下面的示例為我的兩個應用程序服務運行加權負載均衡器,如果這兩個應用程序服務失敗,則備份第三個。
https://hub.docker.com/r/tiangolo/uvicorn-gunicorn-fastapi
nginx Dockerfile:
FROM nginx
# Remove the default nginx.conf
RUN rm /etc/nginx/conf.d/default.conf
# Replace with our own nginx.conf
COPY nginx.conf /etc/nginx/conf.d/
nginx.conf:
upstream loadbalancer {
server 192.168.115.5:8080 weight=5;
server 192.168.115.5:8081;
server 192.168.115.5:8082 backup;
}
server {
listen 80;
location / {
proxy_pass http://loadbalancer;
}
}
應用 Dockerfile:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7
RUN pip install --upgrade pip
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . /app
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.