缓存层
自建web缓存,或者购买CDN,将用户经常访问的,更新频率低的资源存放起来,这样用户再次请求相同资源的时候,就不会对后端的服务造成影响。为防止互联网上的恶意访问爬虫,我们应该做好相应的安全措施。
缓存之类的措施一定要适合公司的当前业务,如果是项目的静态资源很多,只要我们购买的cdn够好,用户访问量可随便。
搭建服务器集群,用户访问就近的地区服务器。用户请求由不同的多台服务器承担,减轻服务器访问压力,在用户使用量低的时间段,子服务器顺序把数据上传到总服务器上,总服务器整合完,把数据分发到子服务器上。
代理层
提高用户高质量的分发。
借助nginx做反向代理操作,提高分发量,最好的办法是基于请求的关键字进行合理的分流。
基于请求的ip地址信息,封闭恶意ip访问,提高正确ip用户访问效率
基于请求的浏览器信息,分发到相应的后端应用,
基于请求的协议方法,做好读写分离业务的精确分流
基于请求的路径信息,做好指定业务的精确分流
1随着接口功能的增加,可以将upstream拆分到不同的功能目录中
2对location的匹配规则尽量描述清楚,特别是匹配的location_match,最好使用^&来锚定首尾字母
项目后端web访问
当动态web请求过多,压力大时,常见的解决方法有哪些
解决思路:
可以根据架构演变的思路,我们合理的调整页面访问的关键流程,在技术方面我们可以
1分析动态的请求瓶颈点在哪里,请求量大还是数据访问量大
请求量大:
web缓存/CDN,或者动态web集群
例:可以将经常访问的登录和注册页面进行静态化处理,静态化都交给nginx来维护静态页面,不需要django来处理请求了
数据库操作多:
把经常操作的数据,放在redis缓存数据库中 减轻mysql 的压力
如何提高静态web资源的访问质量
解决思路
结合前端缓存的功能,在代码或者代理部分设置合理的资源缓存过期时间,定时、实时推送相关的信息到前端的缓存层
数据库方面
解决用户访问数据有压力
热点数据读取频繁的话,可以考虑前端数据缓存,分布式数据缓存,优化查询搜索方法
对于数据频繁写入压力的话,可以考虑数据库集群,读写分离,分库分表,增加数据管理层方法
开发角度
关注数据库表的设计 ,表的索引合理,查询的时候,尽量使用条件查询 django也可使用原生mysql语句查询
读写分离存储
存储层方面
存储设备质量,分布式存储,备份策略