首页 > 其他分享 >django3.0异步、提高项目并发量

django3.0异步、提高项目并发量

时间:2023-05-05 13:36:54浏览次数:33  
标签:异步 缓存 并发 eg nginx 使用 django3.0 uWSGI

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

相关文章

  • 云原生时代崛起的编程语言Go并发编程实战
    @目录概述基础理论并发原语协程-Goroutine通道-Channel多路复用-Select通道使用超时-Timeout非阻塞通道操作关闭通道通道迭代定时器-TimerAndTicker工作池-WorkerPools等待组-WaitGroup原子操作-Atomic互斥锁-Mutex读写互斥锁-RWMutex有状态协程单执行-Once条件-Cond上下文-Conte......
  • 【动手学深度学习】第十二章笔记:异步计算、数据并行
    为了更好的阅读体验,请点击这里12.1编译器和解释器原书主要关注的是命令式编程(imperativeprogramming)。Python是一种解释性语言,因此没有编译器给代码优化,代码会跑得很慢。12.1.1符号式编程考虑另一种选择符号式编程(symbolicprogramming),即代码通常只在完全定义了过程之后才......
  • async await 异步运行
    测试代码:classProgram{staticvoidMain(string[]args){TestAsynctestAsync=newTestAsync();System.Diagnostics.Stopwatchstopwatch=newSystem.Diagnostics.Stopwatch();stopwatch.Start();Task<bool>resOne......
  • JUC并发编程原理精讲(源码分析)
    1.JUC前言知识JUC即java.util.concurrent涉及三个包:java.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks普通的线程代码:ThreadRunnable没有返回值、效率相比入Callable相对较低!Callable有返回值!【工作常用】1.1进程和线程进程:是......
  • 17 15 | 限流器设计:如何避免超预期的高并发压力压垮系统?
    你好,我是李智慧。在互联网高可用架构设计中,限流是一种经典的高可用架构模式。因为某些原因,大量用户突然访问我们的系统时,或者有黑客恶意用DoS(DenialofService,拒绝服务)方式攻击我们的系统时,这种未曾预期的高并发访问对系统产生的负载压力可能会导致系统崩溃。解决这种问题的一......
  • 《asyncio 系列》5. 基于 asyncio + SQLAlchemy 并发请求数据库
    楔子上一篇文章探讨了使用aiohttp库发出非阻塞Web请求,还讨论了使用几种不同的异步API来同时运行这些请求。通过结合asyncioAPI和aiohttp库,可以同时运行多个耗时的Web请求,从而提高应用程序的运行速度。但我们上一章学到的概念不仅适用于Web请求,也适用于运行SOL查......
  • 异步电机的无传感器矢量控制,matlab,仿真模型,控制算法为MRAS模型参考自适应。
    异步电机的无传感器矢量控制,matlab,仿真模型,控制算法为MRAS模型参考自适应。ID:44100668158918155......
  • 异步电机有速度传感器矢量控制,matlab,仿真模型。
    异步电机有速度传感器矢量控制,matlab,仿真模型。转速外环电流内环。双闭环控制,控制精度高,响应速度快,抗负载扰动性能强。加入了电流滞环控制。ID:6369668159274320......
  • Go并发编程:发生死锁、活锁的案例分析
    什么是死锁、活锁什么是死锁:就是在并发程序中,两个或多个线程彼此等待对方完成操作,从而导致它们都被阻塞,并无限期地等待对方完成。这种情况下,程序会卡死,无法继续执行。什么是活锁:就是程序一直在运行,但是无法取得进展。例如,在某些情况下,多个线程会争夺同一个资源,然后每个线程都......
  • 《asyncio 系列》4. 如何并发运行多个任务(asyncio.gather、asyncio.as_completed、asy
    楔子在上一篇文章中,我们了解了套接字的内部工作原理,并构建了一个基本的回显服务器。现在我们将学到的知识应用到并发的、非阻塞的Web请求中,基于asyncio可以并发发送大量的Web请求,缩短应用程序的运行时间。当我们必须向一组RESTAPI发出多个请求时,这很有用,比如在微服务架......