1 补充 django3.0
# 补充:django 3.0以后支持异步
-ASGI:WSGI是基于 HTTP 协议模式的,不支持WebSocket(需要其他模块处理,eg:channels)
ASGI的诞生则是为了解决 Python常用的WSGI,不支持当前Web开发中的一些新的协议标准,例如:websocket,http2的协议,且还支持异步
-django 3.0支持了异步还需要celery吗?
-需要,一些特别耗时的操作,eg:操作视频等,还需要celery的进程
# 是起 多进程来操作,降低了当前进程的线程 处理效率
-但一些简单的异步,eg: 发邮件,发短信,就可以用django3.0的异步
# 是单线程下的并发,协程,还是当前线程下在操作
2 如何提高项目并发量
两个大点:减少交互 和 提高接口并发
2.1 前端方面
# 前端:
1 使用cdn 不管移动端还是web端,静态资源,都使用cdn
cdn: 内容分发网络,将资源存储备份多个节点,距离哪个节点近,就从哪个节点服务器给你返回数据
2 使用第三方存储 图片、短视频,放在第三方存储服务上
3 使用精灵图 将好多小图片做成一个图,在前端通过定位来显示不同的图片
精灵图(sprites): 将网页中的一些小背景图像整合到一张大图中 ,将多个图片的请求降低到一次请求
4 使用前端存储 将请求之后的一些不敏感数据,保存到客户端本地
localStorage : 永久存储,除非手动删除
sessionStorage : 当会话结束(当前页面关闭的时候,自动销毁)
5 使用前端缓存 请求之后,客户端有缓存,缓存有效期内,不会发送真正的访问请求
响应头中有Cache-Control: max-age=xxx
2.2 部署方面
# 后端部署:
### 单台服务器机器下:
6 使用nginx转发
1.不是直接使用uWSGI接受http请求
2.nginx转发给uWSGI,采用的是uwsgi协议的socket转发,而不是http协议来转发 要更深入一层
7 使用性能高的WSGI服务器部署项目 uWSGI、gunicorn
8 使用nginx的动静分离
uWSGI只负责处理动态请求,静态请求直接用nginx去取
9 静态资源(头像、图片),使用cdn,放到第三方云平台
---> oss、七牛云、公司自己搭建存储服务器(fastdfs,ceph)
10 单台机器 起多个 uWSGI+django 服务,监听多个端口
11 nginx做负载均衡,转发给多个 uWSGI+django 服务
### 多台服务器机器下
12 多台机器 起多个 uWSGI+django 服务,nginx做负载均衡
13 页面静态化(eg:实时性不高的页面,首页,秒杀场景秒杀页面)
但涉及到数据同步问题
只要数据库变更了(eg: 管理员新增了一个轮播图)
静态化的页面就需要重新生成(celery使用场景)
14 单台nginx顶不住,高可用keepalive,nginx做集群
前面,使用硬件负载均衡器(F5硬件负载均衡器)接受,再转发到nginx集群,最后转到服务
更甚着,最前面再加一个域名解析的负载均衡(dns负载均衡)
根据域名dns解析,转到最近的服务器地址,再转到F5硬件,再...
2.3 后端方面
# 代码层面:
15 使用异步,用多线程,用协程 eg:发短信等
16 使用异步任务框架celery,使用消息队列(rabbitmq),把任务做成异步
17 数据库优化
1.查询语句的优化
2.sql索引的创建
3.尽量不要在for循环中执行sql(常慢sql)
4.读写分离,集群,分库分表
18 使用缓存 接口的缓存,redis,主从、哨兵、集群 6台机器
19 个别热点接口,全用缓存(qps高的接口)
热点接口的数据,都放缓存中
但又会有缓存的问题,缓存击穿、穿透、雪崩等
20 搜索场景 使用全文检索es、es集群
21 优化代码逻辑层
22 考虑换语言,写成一个个服务,一点点替换
标签:异步,缓存,并发,eg,nginx,使用,django3.0,uWSGI
From: https://www.cnblogs.com/Edmondhui/p/17373844.html