簡體   English   中英

如何使用 fastapi 部署可擴展的 API?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM