你们有好奇过为啥大型电商网站一般情况下是如何抵挡住大型的流量的吗?
展开话题之前,我们先来看看一般网站的部署结构:
首先是用户发起访问,访问的是静态页面,静态页面中的变量数据是基于模板向后端数据库发起进行修改的.
优点: 访问速度快,响应快.
缺点: 页面模板会成为瓶颈,每次后端修改数据的时候,总需要用户主动点击进行刷新,那么在并发量大的情况下,数据库压力增加,就会导致数据加载慢的情况.
当然如上的模型是基于最简单的单库支撑,但是在大型的电商环境下,都是多库,多服务的,形成一种微服务架构,例如如下模型:
当然光靠微服务架构,明显还是不能够支持大型并发的访问的,在高并发的情况下,redis和MQ中间件则可以很好的规避这个问题.
- 中间件
中间件的优势简单来说就是异步,消峰,解耦.
异步:无需和同步一样等待,即可返回.
消峰:在流量大的情况下,不会对系统造成毁灭性伤害,简单来说,喂,吃饭先排队,大家抢,没饭吃.
解耦:互相不受牵连,简单来说就是,你生病了,好你在家休息吧,没生病的朋友,继续上班哈.
以上三大优点可以很好的将流量进行控制,以面对大量的请求.(这是其中一层均衡)
还记的如上所说的的小型电商网站的缺点吗?
在频繁请求下更新数据更新慢的问题,为了缓解这个问题,可以采取缓存这一法宝解决
用缓存将模板更新的数据进行规避,每次当模板更改的时候,商品服务可以主动将更改的数据推送至MQ中.
然后redis基于对应的监听服务消费MQ中修改的数据,由被动获取,变为主动获取,大大提升数据的更新效率.
每次用户的查询就可以直接基于redis进行提供,只有在redis不存在的情况下才会主动发起后端的数据的刷新访问,减少数据库的访问次数,大大减少系统的压力.