目录
如何提高项目的并发量
1 前端
1 用cdn(分布式的内容分发网,比如七牛云)。静态资源,放到cdn上。使用第三方存储(js,css,静态图片)。这样就不会向我的后端发送请求,项目的并发量就会增多一些。
2 用精灵图(一个大图,上面有很多小图,用定位,定位到小图),一次请求拿回来的图,以后好多位置可以用。
3 前端缓存(响应头设置缓存时间)cache-control
2 高性能web服务器部署项目:nginx
1 nginx的请求转发,nginx性能高,负载均衡
2 nginx做集群,dns解析做负载 --> 往上软件就解决不了的,可以用,负载均衡硬件 f5
3 动静分离(nginx对静态文件的转发性能比较高,静态资源直接通过nginx转发;uwsgi只负责处理动态请求)加入有10个请求,8个是静态,2个是动态,这样只有2个才会进入我们的项目中
4 集群化部署,一个项目部署在5台机器上
5 拆服务(分布式,微服务)
3 项目部署(使用性能高服务器部署项目:gevent+uwsgi)
-https://zhuanlan.zhihu.com/p/358163330
1 替代性能低的wsgiref部署项目-使用uwsgi(c写的wsgi服务器)部署
2 使用 gunicorn(python写的wsgi服务器)部署
4 代码层面
1 做缓存(redis)
2 页面静态化(不适用于app和小程序),提前生成一个首页页面(被访问频繁的页面),数据不一致(当有数据增加,再重新生成一次这个页面,双协议一致性问题),可以每隔10秒中,再次生成一个页面。用异步:用celery,django的信号(异步操作),当对象保存时,重新生成静态页面
3 异步操作(celery),一个请求需要耗时3s,设计成异步 --> 请求来了--> 直接返回(任务已提交,请求正在处理,别的线程处理)
小米秒杀:您正在排队(前端设置了定时,每隔5s,发送一个请求,查是否秒杀成功)
保存视频,发送邮件,保存文章
后台管理,统计最近三,六个月的订单量-->折线图,饼状图展示
4 数据库优化,优化sql,外键尽量不建立,适当建索引,读写分离,数据库集群,分库分表
5 优化代码,尽量不在for循环里查数据库(for循环的大小不好估计)--->算法
6 换语言,python是解释性语言,运行时需要翻译。可以换成编译型语言
5 代码优化不了的,加机器
-但是,如果加机器的成本超过了优化代码的成本。就要使用优化代码的方式
-C10K问题:单台服务器如何支持10k个并发连接。
https://blog.csdn.net/chinawangfei/article/details/102780959