首先简单介绍一下这几个东东。
Flask是一个轻量级的Web应用框架, 基于Werkzeug和 Jinja2 模板引擎,使用 Python编写,可扩展强。
Nginx是一个高性能的 HTTP 和 反向代理服务器,在高并发方面表现非常不错。
Gunicorn 是一个Python WSGI UNIX的HTTP服务器,从Ruby的独角兽(Unicorn )项目移植,能与很多Web框架兼容,只需非常简单的执行,轻量级的资源消耗,以及相当迅速。
Redis是一个高性能的key-value存储系统,支持集合、列表、字典等复杂的数据结构,数据既可以保存在内存中也可以持久化到硬盘,对关系数据库起到很好的补充。
前段时间做了个图片类网站,目前已上线,使用到了这几个东东。算起来学习python后台开发有4个月了,但是水平还是菜鸟级别,所以本文也就简单讲讲配置问题以及该项目的架构,如有错误,请各位看官指正。由于是小站,目前访问人数也不是特别多,现在就一台服务器。前端使用nginx做反向代理和动静分离(把css、js、image、html等静态文件直接通过nginx转发,不通过后端处理),后端使用gunicorn+flask的方式,刚开始就直接使用flask跑,但是有一次就出现502了,发现由于flask是单进程处理请求的,不像Tornado的异步,同时访问的人数稍微过多,就会出现阻塞的情况,导致nginx出现502的问题。gunicorn可以指定多个工作进程,底层实现应该是通过调用fork函数创建子进程,这样就可以很好的利用服务器多核的特性了,实现并发功能。进程数应该指定多少呢,可以参考gunicorn官网上的一个例子:workers = multiprocessing.cpu_count() * 2 + 1。为了减少服务端的压力,对访问比较多的页面做了静态化处理,然后把访问和变化都比较频繁的数据使用redis做缓存处理,关系数据库使用的是mysql,网站的图片使用CDN的。
flask和redis的安装就不讲述了,也十分简单,下面主要讲nginx和gunicorn的配置。
1.安装和配置nginx
首先安装pcre,让安装Nginx支持rewrite,这个功能还是挺重要的
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.20.tar.bz2