此方案类似很多公司都在使用,如:同程旅游等
方案三:布局样式模板化针对方案二的问题,我们可以采用openresty技术方案进行,利用http模板插件lua脚本进行解决,这里老顾不会介绍openresty+lua技术,有兴趣的小伙伴,可以到访问https://www.roncoo.com/view/139 这个视频课程 。
如下图:
文章插图
这里说明一下上图中我们小伙伴不需要全部都要了解,这个是比较全的商品详情页的解决方案,涉及到了三级缓存这个概念,在这里老顾就不深入讲三级缓存了 。
我们主要看的是上面怎么会有两层ngnix,分发层和应用层,这个是什么意思?
应用层nginx老顾先介绍一下应用层nginx是什么意思?nginx一般被用做负载均衡,其实nginx还有很多的功能,尤其他的openresty扩展 + lua脚本语言结合起来可以完成很多功能,小伙伴可以理解为lua脚本语言就是类似JAVA语言,可以动态处理业务,如:本地缓存处理,远程http访问,访问redis等 。
应用层nginx就是利用了http模板 + 缓存通过lua脚本完成的网页渲染
http模板
文章插图
1)应用层nginx通过lua脚本语言先获取本地商品数据,然后和http模板进行渲染,形成最终商品详情页返回给用户这个思路就是通过http模板,解决了方案二中的布局样式的问题,如果需要调整布局,只要改一下模板就行了,非常方便 。也解决了实时性问题 。这边涉及到的nginx本地缓存其实就是为了保证不需要访问数据库,提升系统吞吐量 。小伙伴只要了解一下思路,如果不了解openresty和lua可以自行上网了解,也可以联系老顾 。
2)如果应用层nginx本地的缓存没有此商品数据,就通过lua脚本发起http请求访问web服务器,获取商品数据 。
3)web服务器会向redis或本机的ehcache请求商品数据(这里涉及三级缓存概念),如果存在此商品数据,直接返回给用户;如果不存在则请求微服务访问数据库
分发层ngnix为什么上面还有一层分发层呢?这个是因为大型网站的商品数太多了,应用层nginx的本地缓存是有限的,不可能把所有的商品数据缓存在同一个服务器的本地缓存;一台应用层nginx只能缓存部分商品数据,说到这里小伙伴是不是应该就知道为什么了吧?就是利用hash一致性算法,根据商品id路由分发到同一个应用层ngnix服务器 。
文章插图
分发层ngnix的作用就是hash策略的负载均衡,保证了商品id路由到固定的应用层服务器 。
三级缓存保证了系统的稳定性,即使redis缓存崩溃,还有其他2个缓存保障 。
总结:
- 方案三是比较完整的方案,很多大厂都在使用,能够承受亿级流量,但系统比较复杂 。
- 如果对实时性要求不高,布局样式调整不频繁,可以考虑方案二,系统比较简单
【你了解大型网站的页面静态化吗?】
推荐阅读
- C语言中的最常用的两种排序算法你知道吗?
- jsonp的原理你真的懂吗?
- Java 程序员必须掌握的 8 道数据结构面试题,你会几道?
- java架构到底是做什么的,一段对话让你懂
- 印度三大红茶指哪些印度红茶介绍
- 关于祁门红茶的营养价值和保健功效 这些也许你并不知道
- 领导重用你的10种现象 领导器重一个人的表现
- 空腹不能吃什么?你一定也中过这几招
- 教你如何鉴定爱马仕皮带真伪
- 16大汽车故障应急技巧,你必须掌握