一: nginx + uWSGI 提高 Django的并发性
1. uWSGI :
使用uWSGI web服务器,它是WSGI协议的实现。
uWSGI的主要特点是:
超快的性能
低内存占用
多app管理
详尽的日志功能(可以用来分析app的性能和瓶颈)
高度可定制(内存大小限制,服务一定次数后重启等)
uWSGI服务器自己实现了基于uwsgi协议的server部分,我们只需要在uwsgi的配置文件中指定application的地址,uWSGI就能直接和应用框架中的WSGI application通信。
2. nginx :
Nginx 是一个高性能的负载均衡HTTP和反向代理服务器,Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件代理服务器。
特点是占有内存少,并发能力强,转发能力强
结构与扩展:一个主进程和多个工作进程。工作进程是单线程的,且不需要特殊授权即可运行;
3. nginx和uWSGI的关系:
nginx相当于是服务器,负责接收请求
uwsgi是服务器和服务端应用程序的通信协议,规定了怎么把请求转发给应用程序和返回,负责转发请求
2个基本概念:
服务器(接收请求),应用程序(处理请求并返回)
通信过程:
客户端发送一个http请求,被nginx服务器接收,nginx服务器将请求转发给uwsgi,uwsgi将请求转发给实现uwsgi
协议的应用程序(flask,gunicorn等等)
二:对代码层面的优化
对前端的优化主要有:
1:减少 http 请求,减少数据库的访问量,比如使用雪碧图。
2:使用浏览器缓存,将一些常用的 css,js,logo 图标,这些静态资源缓存到本地浏览器,通过设 置 http 头中的 cache-control 和 expires 的属性,可设定浏览器缓存,缓存时间可以自定义。
3:对 html,css,javascript 文件进行压缩,减少网络的通信量。
后端优化:
1:合理的使用缓存技术,对一些常用到的动态数据,比如首页做一个缓存,或者某些常用的数据做 个缓存,设置一定得过期时间,这样减少了对数据库的压力,提升网站性能。
2:使用 celery 消息队列,将耗时的操作扔到队列里,让 worker 去监听队列里的任务,实现异步操 作,比如发邮件,发短信。
3:如果数据只是存在mysql中做备份,建议使用异步的方式写入库,先把数据写到缓
存下发给用户,之后在利用后台异步任务一点点的写入,例如聊天系统可以这样干
4:就是代码上的一些优化,比如:不要在for循环内使用ORM的查询,改为在for循坏歪一次查询
经过这些优化,单点部署的并发提高了,如果还想再高就可以考虑一下nginx的负载均衡
三:服务器集群与nginx负载均衡
搭建服务器集群,将并发访问请求,分散到多台服务器上处理。
参考博客:https://www.cnblogs.com/slqt/p/10240311.html
原文:https://www.cnblogs.com/blackali/p/14693309.html