Python web项目在linux上的高并发部署

  • 2017-02-23 09:25:20
  • 2774
  • 0

开门见山,这里介绍下当前部署python web项目的主流架构之一:nginx+gunicorn+gevent+webapp。

下面将一一对每个模块进行部署相关讲解(主要是配置方面)

1、nginx

​nginx("engine x")基本大家都听过,但很多人会读错, 是一款性能非常优秀的轻量级Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。这玩意如果要完全吃透,不是一篇博客能搞定的。

​这里只简单的介绍下最简单的反向代理的写法。直接上配置文件:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                  '$status $body_bytes_sent "$http_referer" '

                  '"$http_user_agent" "$http_x_forwarded_for" "$request_time" "$upstream_response_time"';


server { listen 80; server_name *.com; #碰到域名 则直接用nginx来解析 access_log host.access.log main; proxy_ignore_client_abort on; location ~ /static/ { root /var/www; } location ~ / { proxy_set_header Host $host; proxy_pass http://127.0.0.1:8008; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

2、gunicorn

​a、安装:pip install gunicorn 

​b、配置文件(此配置文件一般置于项目的主目录下)假如命名为:guni.conf:

# 运行web服务的IP以及端口
bind = '127.0.0.1:8000'
#同时的并发工作进程数量(视服务器cpu数量而定)
workers = 4
#工作模式,可以为'sync', 'gevent'等。
worker_class = "gevent"
# 可以同时打开的链接数
worker_connections = 1000
#超时时间设置
timeout = 20
#使用gunicorn启动的进程名称
proc_name = 'gunicorn.proc'
#pid 保存文件
pidfile = '/tmp/gunicorn.pid'
#gunicorn日志文件
logfile = '/var/log/gunicorn.log'
#日志级别
loglevel = 'debug'
#是否app层先启动
preload_app = True
#当有文件更改时,是否重新加载类似于web框架的是否选择debug模式
reload = False

从配置文件可以出,在web项目每个请求时间无法再改进的情况下,web项目并发量主要由workers, worker_connections决定。

​3、gevent

a、安装:pip install gevent 

​b、无需单独的配置文件,可在gunicorn 配置文件中被调用。

​c、安装相应数据库驱动时,必须安装对应数据库的python语言的驱动否则数据库层面无法达到异步效果。(可以理解成gevent只能通过python这块的通信在系统层实现对应线程的挂起,从而达到异步的效果)

4、webapp与gunicorn的启动。

​gunicorn的启动语法:

​gunicorn -c "gunicorn配置文件" "定义app对象的py文件":"app对象的具体命名"

拿django 和 flask 此二者框架举例:

​1、django框架定义app对象的文件路径一般为:项目主目录/项目名/wsgi.py。内容一般为:

 

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "search.settings")

application = get_wsgi_application()

​所以django项目的启动方式为:在当前项目的主目录下输入指令:​gunicorn -c guni.conf projectname.wsgi:application

​2、flask框架定义app对象的文件路径一般比较简单,假如就是项目主目录下的views.py文件且创建app对象的代码一般为:

app = Flask(__name__)

 

​所以 flask项目的启动方式为:在当前项目的主目录下输入指令:gunicorn -c guni.conf views:app

gunicorn启动之后, 再将nginx启动,再将项目的所有静态文件放入/var/www/下, 至此,整个python web项目的高并发部署基本完成!


发表评论

* *