一、静态网页介绍
在网站设计中,早期(大约 2000 年以前)的网站大多都是由静态网页制作的。静态网页是相对于动态网页而言的,是指没有后台数据库、不含程序(如 PHP、JSP、ASP)和可交互的网页。常见的静态网页语言有 HTML、JS、CSS、XML、SHTML 等。
特点
静态网页资源的特点是,开发者编写的是什么,它显示的就是什么,一旦编写完成,就不会有任何改变。静态网页的维护和更新相对比较麻烦,每个不同的网页都需要单独编辑更新,静态网页一般适用于更新较少的宣传展示型网站(如酒、家具、猪饲料等的宣传网站),是早期(2000 年以前)很多中小网站常用展示的形式。
静态网页资源的对应程序及资源文件的常见扩展名如下:
纯文本类程序或文件,如htm、html、xml、shtml、css 等,
图片类文件或数据文档,如 jpg、gif、png、bmp、txt、doe、ppt 等
视频类流媒体文件,如 mp4、swf、avi、wmv、flv等。
静态网页资源有以下几个重要的特征:
1)每个页面都有一个固定的 URL地址,且 URL 一般以.btm、.html、.shtml 等常见形式为后级,而且地址中不含有问号?或&等特殊符号
2)网页内容一经发布到网站服务器上,无论是否有用户访问,网页的内容都是保存在网站服务器文件系统上的,也就是说,静态网页是实实在在保存在服务器上的文件实体,每个网页都是一个独立的文件。
3)网页内容是固定不变的,因此,容易被搜素引擎收录(容易被用户找到)(优点)。
4)网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作的方式比较困难(缺点)。
5)网页的交互性较差,在程序动能实现方面有较大的限制 (缺点)。
6)网页程序在用户浏览器端解析,如 IE 浏览器,程序解析效率很高。由于服务器端不进行解析,并且不需要读取数据库,因此服务器端可以接受更多的并发访问。(优点)
总结如下:
1)程序在客户浏览器端解析,不读取后端数据库,因此性能和效率很高。
2)因为后端没有数据库的支持,所以交互性较差,功能实现也很少。
有关静态网页的架构思想
在高并发、高访问量的场景下做架构优化,涉及的关键环节就是把动态网页转换成静态网页,而不直接请求数据库和动态服务器,并且可以把静态内容推送到前端缓存(或 CDN) 中提供服务,这样就可以提升用户体验,节约服务器和维护成本。
二、动态网页介绍
所谓的动态网页是与静态网页相对而言的,也就是说,动态网页的 URL 后缀不是.htm、.html、.shtml、.xml、js、.css 等静态网页的常见后级扩展名形式,而是以.asp、.aspx、 .php、.jsp、.do、.cgi 等形式作为后缀的,并且一般在动态网页网址中会有标志性的符号?和&,此外,在大多数情况下后端都需要有数据库支持等。
特点
1)常见网页扩展名后缀有.asp、aspx、php、jsp、.do、.cgi 等。
2)网页一般以数据库技术为基础,大大降低了网站维护的工作量。
3)采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、投票、用户管理、订单管理、发博文等。
4)动态网页并不是独立存在于服务器上的网页文件,当用服务器上的动态程序时,服务器解析这些程序并可能读取数据库信息返回一个完整的网页内容。
5)动态网页中的?在搜索引擎的收录方面存在一定的问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,或者出于技术等方面的考虑,搜索蜘蛛一般不会去抓取网址中?后面的内容,因此在企业通过瘦索引擎进行推广时,需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索引擎的抓取要求。
6)程序在服务器端解析,这相当于顾客点餐,饭店厨师做饭做菜,耗时长、效率低。由于程序在服务器端解析,因此,会消耗大量的CPU和内存、IO等资源,并且多数还要读取数据库等服务,因此,其访问效率远不如静态网页,在服务器端解析动态程序的服务常见的有PHP引擎、Java容器(tomcat、resin、jboss、weblogic)。
有关动态网页的架构思想
一般来说,静态网页的性能效率是动态网页的10~30倍,且动态网站效率很低,并发能力也很低,在高并发场景中应尽可能转换成静态网页提供服务。动态转静态几乎是所有高并发网站必备的架构方案思路,也是高级架构师的职责所在。
此外,动态转静态也要根据业务需求设计。例如,对于更新频繁的网站如果设计不好就可能会产生数据不一致的情况,即用户看到的数据不是网站最新的内容,而是静态的内容。
三、伪静态网页
介绍
顾名思义,伪静态就是通过某些技术(如rewrite)把动态网页的URL地址伪装成静态网页URL地址,但实质上用户访问的还是动态网页,只不过URL地址看起来是符合静态网页地址特征的,因此,用户及某些搜索引擎会误认为其是静态网页。
特点
从网站的URL地址来看,伪静态表面上看起来是静态内容(如地址结尾带html),这是通过rewrite规则来实现的URL地址重写。改写后的URL地址更规范、美观,有利于搜索引擎抓取,以及提升用户访问体验。
例如:https://zhuanlan.zhihu.com/p/711842574这个地址都是伪静态的。因为伪静态网页还是动态网页,从性能上考虑,伪静态功能不但没有提升网站性能,反而会降低网站的性能。这一点读者要理解。
作用
由于搜索引擎无法正确读取带参数的动态网页内容,造成网页中很多具有丰富信息的页面无法被搜索引擎收录,因此才有了伪静态技术,它的作用是把动态网页URL改写成静态网页的URL,虽然同样是消除了动态网页中的参数,但是并不需要生成任何网页,仅仅是改变了网页地址路径。这样做的主要目的有两个,一是让搜索引擎收录网站内容,实现让更多的用户访问企业网站内容;二是提升用户访问体验,动态地址带特殊符号等的URL看起来也不如静态网页地址规范。
缺点
动态网页伪装成静态网页,虽然可以让搜索引擎收录,并且可以提升用户访问体验,但伪静态网页并不能提开网站的访问效率性能,从理论上来说还会降低网站的性能,没有动态转静态网页访问效率高,但是对于一些并发不是超大的情况来说,或者是硬件资源充足的情况下,伪静态还是一个不错的实用功能,因为要把动态网页真正地转成静态网页,不是一朝一夕的事情,需要技术团队通力配合才能行。
现在很多大型的网站都采用了动态网页生成静态网页的技术,消除动态网页中的参数以使搜索引擎收录更多的内容,达到优化网站的效果。当网站遇到访问“瓶颈”时,如果有技术力量将动态网页转化成静态网页那就再好不过了,但是,有些更新频率很高的业务并不适合这么做,或者将动态转为静态有很大难度,这时就可以考虑设置伪静态。
小结
利用rewrite技术将动态网页伪装成静态网页(URL地址改写)。便于搜索引擎收录,提升用户访问量以及用户体验。访问性能没有提升,并且转换伪静态会消耗资源,因此网站性能反而会下降。尽可能将动态网页转换成真正的静态页面。并发量不是很大或者动态更新过于频繁的时候,用rewrite实现伪静态也是不错的。伪静态网页的实现过程一般是由运营产品提出需求,开发和运维共同实现的。
四、Web架构优化实战方案
由于静态网页程序在客户端解析,大大降低了服务器端的访问压力,因此解析效率更高,在实际高并发网站架构中,可以考虑把用户请求的数据解析后转换成静态文件存放于磁盘中或放于内存中以减少动态服务器的压力、节约企业成本、提升用户体验。
下面介绍几个高并发网站架构从动态转静态不用更改企业业务产品代码就可以实现的例子。
1、新闻门户网站
新闻网站的特点是一旦发布完成,几乎不会再改动网页内容。因此,对于新闻业务内容的静态化相对比较简单。
第一步:程序要支持发布动态内容转成静态功能。
第二步:运营编辑人员发布新闻网页后,后台程序立刻将动态网页生成静态文件。
第三步:运维人员通过发布或事件触发把运营编辑生成的静态网页发布到事先搭建好的公司缓存集群服务器上,或者把静态内容同步到购买的全国所有CDN服务器节点上,然后再提供给用户访问浏览。
2、视频网站视频网站
和新闻网站类似,特点都是一旦发布完成,几乎不会再改动网页内容。因此,实现视频业务网站高效访问也很简单。
以bilibili为例,用户在上传视频时,需要经历转码→审核的过程(大概需要1个小时),然后一些热点视频也可能会被提前推送到CDN的核心节点或全国所有CDN服务器节点,用户访问时才会更快。
3、Blog/BBS/SNS/微博社区业务/电商(如淘宝、京东)
这几类业务的动态转静态是比较困难的,因为用户发布完成后,可能会随时更新并查看,这种情况一般会通过异步方式,如消息中间件技术加上NoSQL集群技术实现实现转换,当然也会改进产品细节。