解决高并发问题的思路

一:页面静态化:

答:正常流程是,用户访问首页信息,服务器先返回浏览器模板页面,然后浏览器再次动态请求服务器数据库中内容,浏览器得到内容后再填充页面。但是对于像网站首页,用户访问量大,并且不易修改的网页,我们可以采用异步的方式,让另外一个celery每隔1个小时生成重新生成一次网页,一个小时内,后端直接返回给前端渲染好的页面,而不是先返回模板页面,再要求用户访问数据库。这样降低了用户的访问量。

二:搭建Redis集群:

对于经常访问的数据,我们可以先在数据库中将数据读取到redis数据库中,由于redis是缓存型数据库,读写速度非常快,提高效率。如果redis读不到数据,再访问数据库,并且将数据库数据读取到redis数据库中。而redis集群更加提高服务器的性能。

三:CDN加速:

答:CDN的工作原理就是将您源站的资源缓存到位于全球各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验

四:消息队列:

答:
在不使用消息队列服务器的时候,用户的请求数据直接写入数据库,在高并发的情况下数据库压力剧增,使得响应速度变慢。但是在使用消息队列之后,用户的请求数据发送给消息队列之后立即 返回,再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。由于消息队列服务器处理速度快于数据库(消息队列也比数据库有更好的伸缩性),因此响应速度得到大幅改善。

五:分布式开发:

答:对于耗时的操作,比如发送短信,由于发送短信业务是关于第三方服务的业务,会受到网络环境和第三方服务器的影响,如果Django调用了容联云发送了短信,但是容联云因为网络原因,没有给用户发送短信验证码,此时Django就会处于等待状态,前端效果就是点击发送短信,但是秒数不减少。
采用Celery框架之后,由于Celery是生产者消费者模式,Django作为生产者,只负责将任务发布到消息队列中去(redis),Tasks会在消息队列中自动捕获任务执行。这样不会阻塞Django,即使出现问题,也不会造成服务器卡死。

六:MYSQL数据库读写分离:

答:现实中数据库读的压力远远大于写的压力,因此我们可以部署一台主数据库专门用来数据库的写入操作,配置多台服务器进行读取操作,这样就降低了数据库的压力。
MySQL服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。

在这里插入图片描述

七:数据库的水平分表和垂直分表:

答:
水平分表:思路原来用一张表存,现在用10张表存储,每次取用户数据,只需要用自己的id对10取余就可以确定那张表了。如果不对id进行分表,可以使用,MD5进行加密 因为MD5加密后是16进制 那么就就可以进行取余。
垂直分表:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。

水平分表:
在这里插入图片描述
垂直分表:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奈何碎银没有几两

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值