主要的知识:
redis集群+storm集群+nginx+tomcat+mysql
真正能支撑高并发以及高可用的复杂系统中的缓存架构有哪些东西?
(1)如何让redis集群支撑几十万QPS高并发+99.99%高可用+TB级海量数据+企业级数据备份与恢复?:redis企业级集群架构
(2)如何支撑高性能以及高并发到极致?同时给缓存架构最后的安全保护层?:(nginx+lua)+redis+ehcache的三级缓存架构
(3)高并发场景下,如何解决数据库与缓存双写的时候数据不一致的情况?:企业级的完美的数据库+缓存双写一致性解决方案
(4)如何解决大value缓存的全量更新效率低下问题?:缓存维度化拆分解决方案
(5)如何将缓存命中率提升到极致?:双层nginx部署架构,以及lua脚本实现的一致性hash流量分发策略
(6)如何解决高并发场景下,缓存重建时的分布式并发重建的冲突问题?:基于zookeeper分布式锁的缓存并发重建解决方案
(7)如何解决高并发场景下,缓存冷启动MySQL瞬间被打死的问题?:基于storm实时统计热数据的分布式快速缓存预热解决方案
(8)如何解决热点缓存导致单机器负载瞬间超高?:基于storm的实时热点发现,以及毫秒级的实时热点缓存负载均衡降级
(9)如何解决分布式系统中的服务高可用问题?避免多层服务依赖因为少量故障导致系统崩溃?:基于hystrix的高可用缓存服务,资源隔离+限流+降级+熔断+超时控制
(10)如何应用分布式系统中的高可用服务的高阶技术?:基于hystrix的容错+多级降级+手动降级+生产环境参数优化经验+可视化运维与监控
(11)如何解决恐怖的缓存雪崩问题?避免给公司带来巨大的经济损失?:独家的事前+事中+事后三层次完美解决方案
(12)如何解决高并发场景下的缓存穿透问题?避免给MySQL带来过大的压力?:缓存穿透解决方案
(13)如何解决高并发场景下的缓存失效问题?避免给redis集群带来过大的压力?缓存失效解决方案
一些感悟
像老师所言,redis,memcached,activemq等等很多技术,如果只会简单的操作,其实是很吃亏的,起码我们需要想明白几个问题:
1.我们为什么要用这个东西?(这个真的很重要,但是好像以前学习的时候,没有去想)
2.我们应该在什么场景下使用这个东西,应该怎么使用
3.这个东西是怎么解决我们面对的问题的(内部是怎么实现的)
4.学了之后怎么用,企业级的系统怎么结合知识去实践
小型电商网站的架构以及瓶颈
小型电商如果使用页面静态化的架构:
如果模板改变了,如果是全量渲染,那么需要重新把所有的数据都渲染一遍,生成html,这样工作量会特别大。
如果不是全量渲染,那么来一个渲染一个再返回,假设请求量突然增加,那么就会导致网站请求超时。
页面静态化:利用动态技术生成HTML页面,来一个请求,返回一个页面(已经渲染好),这样的好处是:
1.加快页面打开浏览速度,静态页面无需连接数据库打开速度较动态页面有明显提高;
2.有利于搜索引擎优化SEO
3.减少服务器的负担,浏览网页不需要调用系统的数据库服务器。
4.网站更加安全,减少注入的可能性。
缺点当然也有:
1.交互性差,功能上有所限制
2.占用硬盘资源
3.不是很灵活,静态化需要开关,这个需要专门设计。
页面少的时候,可以使用上面这一套,但是如果页面很多,上亿的量,一个模板修改,重新渲染消耗太多时间。
大电商网站的系统架构
从最左边开始,各种服务可能最底层直接依赖了mysql,如果这些服务的数据有变更,那么就直接写到MQ消息队列中。
数据缓存生产服务监听MQ,不断更新缓存的数据。这个数据缓存生产服务可能会使用ehcache等。这个ehcache会把数据放到redis中,到这里就结束了。这样ehcache,redis就会一直保持着最新的数据,与数据库同步。特殊情况ehcache也会去直接查询数据库。
监听MQ,能及时监听到修改,更新ehcache,更新到redis。缓存的数据需要设置过期时间。
前端如果有访问nginx去本地缓存中查询数据,填充到模板中返回。
如果缓存中没有,会去redis查询缓存,查到了写一份本地缓存,渲染模板,返回。
但是如果redis也没有,怎么办?nginx直接去查询ehcache,查询到之后,写一份到redis,写到本地缓存,填充,返回。
如果html模板变了,那么不需要全部都渲染,只需要将模板放到nginx服务器上就可以了,因为这样直接用缓存是很快的,来一个渲染一个。没有网络的开销,没有业务逻辑,渲染到模板中,html页面返回。
两者的区别
小电商由于没有缓存服务,那么不可能每一个请求来之后,再去查询数据库,查到数据之后再渲染得到模板,这样的话业务处理,网络开销很费时间。但是如果采取全量渲染的话,量多的情况下就需要渲染很长时间。
大电商结构,采取缓存,相当于加了很多中间层,缓存的速度是特别快的,所以就不需要全量渲染,所以应该保证数据的新鲜度就就可以了。所以在中间用了ehcache和redis等。
感觉有点像计算机系统的设计结构(不够快,加一层)
高并发
同一时间数量极大的访问量。
QPS:每秒钟的请求量(Query Per Second)
高可用性
网站能够回应访问,正常运行,就是可用状态,各种宕机,服务器挂了,就是不可用状态。
99.99%可用性就是:一年365天中,有99.99%的时间是可用的。
此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~
技术之路不在一时,山高水长,纵使缓慢,驰而不息