Flask+Gunicorn+Docker搭建高性能服务框架

Flask 简介

Flask是一个用Python编写的Web应用程序框架。Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。两者都是Pocco项目。

Flask也被称为“microframework” ,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。

Gunicorn 简介

Gunicorn是一个 Python Web Server Gateway Interface (WSGI) HTTP server框架,它基于pre-fork worker模型,由一个主管理进程( master process )用来管理 worker 进程集合。Master不关心客户端的信息。所有的请求和响应处理都是由 worker 进程来处理的。

实例

Gunicorn 配置文件 gun.py

import os
import gevent.monkey
gevent.monkey.patch_all()

import multiprocessing

debug = True
loglevel = 'debug'
bind = '0.0.0.0:15000'
#pidfile = 'log/gunicorn.pid'
#logfile = 'log/debug.log'

#workers = multiprocessing.cpu_count() * 2 + 1
workers=1
worker_class = 'gunicorn.workers.ggevent.GeventWorker'  使用Gevent作异步支撑
timeout=1200  当workers超过1200秒无法被主管理进程感知,就会被kill并且重启
keepalive=5 
graceful_timeout=120
x_forwarded_for_header = 'X-FORWARDED-FOR'

启动:

reload: False
  limit_request_field_size: 8190
  nworkers_changed: 
  timeout: 1200
  keyfile: None
  ca_certs: None
  tmp_upload_dir: None
  backlog: 2048
  logger_class: gunicorn.glogging.Logger
[2020-10-03 18:13:52 +0800] [2715] [INFO] Starting gunicorn 19.9.0
[2020-10-03 18:13:52 +0800] [2715] [DEBUG] Arbiter booted
[2020-10-03 18:13:52 +0800] [2715] [INFO] Listening at: http://0.0.0.0:15000 (2715)
[2020-10-03 18:13:52 +0800] [2715] [INFO] Using worker: gunicorn.workers.ggevent.GeventWorker
[2020-10-03 18:13:52 +0800] [2718] [INFO] Booting worker with pid: 2718
[2020-10-03 18:13:52 +0800] [2715] [DEBUG] 1 workers

集成Docker
在项目目录下增加Dockerfile

FROM python:3.8-slim-buster
MAINTAINER      tomliu "[email protected]"
WORKDIR /microservice
COPY . .
run pip install Flask
run pip install requests
run pip install gevent
run pip install gunicorn


CMD exec gunicorn -c gun.py app:app --log-config log.conf

生成镜像
docker build . -t tomliu/flaskhp
运行
docker run -p 5001:15000 -v /yourhostpath/logs:/microservice/logs tomliu/flaskhp
其中 -p 5001:15000 为将应用端口映射到5001
-v /yourhostpath/logs:/microservice/logs 是将容器内部日志/microservice/log映射到外部主机路径/yourhostpath/logs

本项目完整代码,见我的github,https://github.com/tomliu112/flask-docker-hp

你可能感兴趣的:(Flask+Gunicorn+Docker搭建高性能服务框架)