大型网站的页面静态化

news/2024/5/19 5:27:27/文章来源:https://blog.csdn.net/suifeng629/article/details/95375349

目录

  1. 前言
  2. 方案一:网页静态HTML化
  3. 伪静态
  4. 布局样式模板化
  5. 应用层nginx
  6. 分发层nginx

前言

我们小伙伴们在访问淘宝、网易等大型网站时有没有考虑到,网站首页、商品详情页以及新闻详情页面是如何处理的?怎么能够支撑这么大流量的访问呢?

很多小伙伴们就会提出他们都采用了静态化的方案,这样用户请求直接获取静态数据html,就不需要访问数据库了,性能就会大大提高;而且提高网站SEO优化。那今天老顾就带着大家聊一下静态化。把老顾之前工作场景中静态化方案遇到的问题,以及如何演变的,分享给小伙伴。

关于相关的静态文件的CDN技术,老顾就不在这边讲了。这个大型网站肯定都会用到的,什么是CDN,小伙伴们可以在网上查询看一下,比较简单;我们这边注重看技术方案。

方案一:网页静态HTML化

这个方案是老顾最早使用的方案,我们就拿CMS系统举例,类似网易的新闻网站;核心流程图

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

 

上图的核心思想:

1)管理后台调用新闻服务创建文章成功后,发送消息到消息队列

2)静态服务监听消息,把文章静态化,也就是生成html文件

3)在静态服务器上面安装一个文件同步工具,此工具的功能可以做到只同步有变动的文件,即做增量同步(老顾用久没用了,忘了工具的名称)

4)通过同步工具把html文件同步到所有的web服务器上面

这样的话就达到了,用户访问一些变化不大的页面时,是直接访问的html文件,直接在web服务器那边直接返回,不需要在访问数据库了,系统吞吐量比较高。

这个方案的问题:

1、网页布局样式僵化,无法修改

如果产品经理觉得新闻详情页面的布局要调整一下,现在的不够美观,或者加个其他模块,那就坑爹了,我们需要把所有的已经静态html化的文章全部重新静态化。这个是不现实的,因为像网易这么大的体量,新闻量是很大的,会被搞死。

2、页面会出现暂时间不一致

会出现用户刚刚再看最新的新闻,刷新一下又不存在了。这个是因为同步工具在同步到web服务器是要有时间的,同步到web服务器A上面了,但web服务器B还没有来得及同步。用户在访问的时候通过nginx进行负载均衡,随机把请求分配给web服务器的导致的。当然可以调整nginx负载均衡策略去解决。

3、Html文件太多,无法维护

这个是很明显的问题,html文件会越来越多,对存储空间要求很大,而且每台web服务器都一样,浪费磁盘空间;将来迁移维护也会带来很大的麻烦。

4、同步工具的不稳定

因为文件一旦多之后,同步工具稳定性就出现了问题

这个方案应该是比较传统的(不推荐)

方案二:伪静态化

什么是伪静态?

举个例子:我们一般访问一个文章,一般的链接地址为:http://www.xxx.com/news?id=1代表请求id为1的文章。不过这种链接方式对SEO不是太友好(SEO对网站来说太重要了);所以一般进行改造:http://www.xxx.com/news/1.html 这样看上去就是个静态页面。一般我们可以采用nginx对url进行rewrite。小伙伴如何有兴趣可以自行了解,比较简单。

之所以是伪静态其实也是需要动态处理的。

针对方案一上面问题,方案进一步的演化,如下图

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

 

此方案的核心思想

1)管理后台调用新闻服务创建文章成功后,发送消息到消息队列

2)缓存服务监听消息,把文章内容缓存到缓存服务器上面

3)用户发起请求,web服务器根据id,直接查询缓存服务器

4)获取数据返回给用户

此方案就解决了方案一的一个大问题,就是html文件多的问题,因为不需要生成html,而且用缓存的方式,解决不需要访问数据库,提升系统吞吐量。

不过此方案的问题:

1、网页布局样式维护成本比较高,因为此方案照样是把所有的内容放到了缓存中,如果需要修改布局,需要重新设置缓存。

2、分布式缓存压力比较大,一旦缓存故障就导致所有请求会查询数据库,导致系统崩溃

还有个小问题,就是实时数据处理,就是页面中如价格,库存需要到后台读取的。当然小伙伴也许就会说,也可以处理啊,用户把商品内容请求到后,然后在用浏览器发送异步的ajax请求获得商品数量就好了啊。这样就是无形的增加了一次请求。(此问题可以忽略)

此方案类似很多公司都在使用,如:同程旅游等

方案三:布局样式模板化

针对方案二的问题,我们可以采用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. 如果对实时性要求不高,布局样式调整不频繁,可以考虑方案二,系统比较简单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_815363.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B2B2C商城系统定制要注意什么 B2B2C模式典型的代表网站有哪些?

电子商务的出现改变了人们的购物习惯,甚至让我们的生活也发生了很大的变化,在这种大环境下,越来越多的企业加入到电商大军中。那么我们一起来了解一下B2B2C商城系统定制要注意什么?B2B2C模式典型的代表网站有哪些?下面是易族智汇javashop为您编辑整理的…

Win2008R2配置WebDeploy发布网站

一、配置服务器 1.安装管理服务 2.点击管理服务进行配置 二.安装WebDeploy 2.1通过离线安装包方式安装: https://www.iis.net/downloads/microsoft/web-deploy离线包没有WebDeploy3.6版本的,不过影响不大2.2通过Web平台安装程序安装: 我当时…

主机模拟i2c检测设备时出现错误死循环_西部数码使用指南:网站打不开数据库错误等常见问题解决方法...

版权归西部数码所有,原文链接:https://www.west.cn/faq/list.asp?unid7671、“主机开设成功!”上传数据后显示此内容,是因为我司默认放置的index.htm内容,需要核实wwwroot目录里面是否有自己的程序文件,可…

如何理解O2O模式网站建设的三大核心功能?

电商的迅速发展,让O2O模式大火起来,很多企业选择开发O2O系统为企业获得更多的利润的,那么如何理解O2O模式网站建设的三大核心功能?下面是易族智汇javashop 为您编辑整理的,欢迎阅读,仅供参考。 1、O2O合作加…

使用Intellij IDEA来发SpringMVC网站(二)

注意:承接上一文:使用IntelliJ IDEA开发SpringMVC网站(一)开发环境 五、SpringMVC框架配置 进行完上面的配置,那就说明现在基本的开发环境已经搭建好了,现在要开始进行SpringMVC的网站开发。 1、web.xml配…

使用IntelliJ IDEA开发SpringMVC网站(一)开发环境

一、相关环境 - Intellij IDEA 2016.2 Ultimate - Tomcat 8.0.35 - JDK 1.8.0_92 - Spring 4.2.6 - MySql 5.7 - Maven 3.3.9 - Bootstrap 3.3.5 以上是我要做的这个demo所需要的东西,当然有些是可选的,版本也是可控的。比如说如果你用不惯Maven的话可以…

asp建站系统源码_自助建站怎么样?你需要注意这四个重点

随着互联网快速发展,网站建设受到越来越多的关注。优秀的企业网站能够为企业形象代言,也可以成为产品或服务宣传的重要窗口、企业收集反馈客户意见的重要渠道、搭建产品信息数据库等。常见的建站方式主要为模板建站和定制开发2种,模板网站主要…

千万级用户的大型网站,应如何设计其高并发架构

目录 (1)单块架构 (2)初步的高可用架构 (3)千万级用户量的压力预估 (4)服务器压力预估 (5)业务垂直拆分 (6)用分布式缓存抗下读…

修改网站首页批处理_做一个简单的企业网站需要多长时间?

做一个简单的企业网站需要多长时间?我想这大概是每个想要做网站的朋友除了关心网站价格之外最关心的另外一个问题了,今天小编就给大家介绍下网站从开始筹划到完成上线全程所需要的时间。1、域名实名认证备案和服务器虚拟机实名认证时间做网站之前首先需要…

c语言 将包含关键词的段落摘录出来_超快排:SEO优化长尾关键词并做好关键词挖掘,网站排名快速飙升!...

长尾关键词seo优化可以有效提升我们首页目标关键词的排名,因此长尾关键词的优化是每一个网站要去做的事情,长尾关键词优化的好,我们的网站才会有大量的流量,有了流量才有可能带来转化,单一的目标关键词带来的流量是非常…

strace java_Strace诊断CPU跑高问题(java/php网站)

早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的字符&#…

IIS部署ASP.NET网站后提示只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态......

今天&#xff0c;在IIS上部署网站后&#xff0c;出现了下面错误&#xff1a; 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时&#xff0c;才能使用会话状态。还请确保在应用程序配置的 <system.web><httpModules> 节中包括 System.Web.Session…

2009年国外100大最佳设计博客网站(转载)

近日&#xff0c;国外知名电子商务网站Invesp Consulting公布了其收录的20000多个优秀博客的最终排名。Invesp Consulting将这些博客分为文化艺术、商业、计算机互联网、历史和宗教、兴趣、生活等六大类。 下面是文化艺术分类下设计领域内的排名前100名的博客。这100个博客涵盖…

纯php网站改织梦网站数据不变,dede全站URL静态化改造[070414更正]

dede全站URL静态化改造[070414更正]更新时间&#xff1a;2007年04月17日 00:00:00 作者&#xff1a;1、将include复制到网站中的include目录。2、修改数据库将所有文档设置为“仅动态”&#xff0c;可以进入数据库管理中&#xff0c;执行下面命令&#xff1a;update dede_arc…

适合程序员学习的网站

github 这是一个全球性的面向开源社区和私有软件的托管平台&#xff0c;它提供关于程序员的综合资讯&#xff0c;软件更新资讯&#xff0c;每周软件推荐&#xff0c; 码云最新推荐&#xff0c;网页开发&#xff0c;app&#xff0c;h5营销众包。技术问答和各种各样小众领域的博客…

博览更多……微软最有价值专家(MVP)网站

Explore the many...MVP Web Sites 博览更多……微软最有价值专家&#xff08;MVP&#xff09;的网站[url]http://www.mvps.org[/url]向大家提供一个绝好的网站&#xff0c;其中按照微软产品线分类&#xff0c;汇聚了全球MVP的站点或Blog。可谓非常非常的全面&#xff0c;希望对…

ISA网站发布之二 发布虚拟主机

今天我们来用ISA发布多个虚拟的网站&#xff0c;我们在北京这台计算机上建立两个网站&#xff0c;一会我们通过ISA把它们发布出去。我们先确保这两个网站访问正常这两个网站都是守候80端口的&#xff0c;有人会问都在一个端口能正常吗?IIS实现虚拟网站可以通过IP、端口、主机头…

Java 专业人士必备的书籍和网站列表

级别&#xff1a; 初级 Roy Miller (royroywmiller.com), 创始人兼总裁, The Other Road, LLC 2007 年 1 月 15 日 对于 Java™ 语言开发人员来说&#xff0c;信息过量是一个真正的问题。每个新入行的程序员都要面临一个令人畏缩的挑战&#xff1a;要进入的行业是一个具有海量知…

【建站笔记】:在wordpress博客文章中插入代码段并高亮显示

一直以来在wordpress发布文章的时候不管代码的显示格式&#xff0c;都是按普通的文章本格式来发布的&#xff0c;但是这样很不美观而且影响阅读,最近找到了一个CodeColorer插件&#xff0c;用起来不错&#xff0c;还可以调整配色风格&#xff0c;下面简单记录一下CodeColorer的…

Ubuntu10.10下Mono2.10+Nginx+fastcgi 部署asp.net网站

上一篇(windows下nginxmonofastCGI部署asp.net网站)参考了诸多前辈终于在windows下部署成功,唯一点遗憾就是asp.net webform下面样式有点不对劲,mvc倒还可以. 本篇说说我近两天折腾Ubuntu的成果,对于一个没接触过Linux系统的人来说得从基础干起呀.下面先简单的介绍下Ubuntu系统…