要基于 Gunicorn、Flask 和 Docker 构建一个高并发的模型部署系统,你可以按照以下步骤进行配置:
1. 创建 Flask 应用
首先,创建一个简单的 Flask 应用,用于处理请求。
python
# app.py
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/predict', methods=['POST'])
def predict():
data = request.json
# 模型预测逻辑(假设模型已加载并在这里进行预测)
result = {"prediction": "dummy_result"}
return jsonify(result)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
2. 安装 Gunicorn
在 Flask 应用目录下创建一个 requirements.txt
文件,并将 Flask 和 Gunicorn 添加到其中。
# requirements.txt
Flask==2.0.3
Gunicorn==20.1.0
3. 创建 Dockerfile
在项目目录下创建一个 Dockerfile
,用于构建 Docker 镜像。
dockerfile
# Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "app:app"]
4. 构建和运行 Docker 容器
通过以下命令构建 Docker 镜像并运行容器:
sh
# 构建 Docker 镜像
docker build -t flask-gunicorn-app .
# 运行 Docker 容器
docker run -d -p 5000:5000 flask-gunicorn-app
5. 使用 Docker Compose(可选)
如果你希望在多容器环境中部署应用,可以使用 Docker Compose。创建一个 docker-compose.yml
文件。
yaml
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
deploy:
replicas: 3
resources:
limits:
cpus: "0.5"
memory: "512M"
restart_policy:
condition: on-failure
运行以下命令来启动服务:
sh
docker-compose up --build -d
6. 配置 Nginx 进行反向代理(可选)
为了进一步提高并发性能和进行负载均衡,可以在 Docker Compose 中添加 Nginx 作为反向代理。
创建一个 nginx.conf
文件:
conf
# nginx.conf
events { worker_connections 1024; }
http {
upstream flask_app {
server web:5000;
}
server {
listen 80;
location / {
proxy_pass http://flask_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
更新 docker-compose.yml
文件:
yaml
# docker-compose.yml
version: '3.8'
services:
web:
build: .
expose:
- "5000"
deploy:
replicas: 3
resources:
limits:
cpus: "0.5"
memory: "512M"
restart_policy:
condition: on-failure
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- web
启动服务:
sh
docker-compose up --build -d
总结
上述配置通过将 Flask 应用与 Gunicorn 结合使用,并利用 Docker 容器化部署,可以有效处理高并发请求。通过添加 Nginx 作为反向代理,还可以进一步优化性能和实现负载均衡。根据实际需求,还可以调整 Gunicorn 工作进程数和容器资源配置。