你了解大型网站的页面静态化吗?( 二 )


此方案类似很多公司都在使用,如:同程旅游等
方案三:布局样式模板化针对方案二的问题,我们可以采用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模板进行渲染,形成最终商品详情页返回给用户
2)如果应用层nginx本地的缓存没有此商品数据,就通过lua脚本发起http请求访问web服务器,获取商品数据 。
3)web服务器会向redis或本机的ehcache请求商品数据(这里涉及三级缓存概念),如果存在此商品数据,直接返回给用户;如果不存在则请求微服务访问数据库
这个思路就是通过http模板,解决了方案二中的布局样式的问题,如果需要调整布局,只要改一下模板就行了,非常方便 。也解决了实时性问题 。这边涉及到的nginx本地缓存其实就是为了保证不需要访问数据库,提升系统吞吐量 。小伙伴只要了解一下思路,如果不了解openresty和lua可以自行上网了解,也可以联系老顾 。
分发层ngnix为什么上面还有一层分发层呢?这个是因为大型网站的商品数太多了,应用层nginx的本地缓存是有限的,不可能把所有的商品数据缓存在同一个服务器的本地缓存;一台应用层nginx只能缓存部分商品数据,说到这里小伙伴是不是应该就知道为什么了吧?就是利用hash一致性算法,根据商品id路由分发到同一个应用层ngnix服务器 。
你了解大型网站的页面静态化吗?

文章插图
 
分发层ngnix的作用就是hash策略的负载均衡,保证了商品id路由到固定的应用层服务器 。
三级缓存保证了系统的稳定性,即使redis缓存崩溃,还有其他2个缓存保障 。
总结:
  1. 方案三是比较完整的方案,很多大厂都在使用,能够承受亿级流量,但系统比较复杂 。
  2. 如果对实时性要求不高,布局样式调整不频繁,可以考虑方案二,系统比较简单
  3.  

【你了解大型网站的页面静态化吗?】


推荐阅读