django3.0异步、提高项目并发量
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 考虑换语言,写成一个个服务,一点点替换
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)