Day52-大厂百亿PV架构演变独家精讲
1. 静态网页资源
1.1 静态网页资源介绍
在网站设计中,纯粹HTML格式的网页(可以包含图片、视频、JS(前端功能实现)、CSS(样式)等)通常被称为“静态网页”,早期(大约2000年(16年)前)的网站大多都是由静态网页制作的。静态网页是相对于动态网页而言的,是指没有后台数据库、不含程序(如php、jsp、asp)和可交互的网页。
1.2 静态网页资源特点
静态网页资源的特点是,开发者编写的是什么,它显示的就是什么、一旦编写完成,就不会有任何改变。静态网页的维护和更新相对比较麻烦,每个不同的网页都需要单独编辑更新,静态网页一般适用于更新较少的宣传展示型网站(例如:酒、家具、猪饲料等的宣传网站),是早期(2000年以前)很多中小网站展示的形式。
静态网页资源的对应程序及资源文件的常见扩展名为:
- 纯文本类程序或文件,如htm、html、xml、shtml、js、css等。
- 图片类文件或数据文档,如jpg、gif、png、bmp、txt、doc、ppt等。
- 视频类流媒体文件,如mp4、swf、avi、wmv、flv等。
1.3 静态网页资源有几个重要的特征:
- 每个页面都有一个固定的URL地址,且URL一般以.htm、.html、.shtml等常见形式为后缀,而且地址中不含有问号“?”或“&”等特殊符号。
- 网页内容一经发布到网站服务器上,无论是否有用户访问,每个网页的内容都是保存在网站服务器文件系统上的,也就是说,静态网页是实实在在保存在服务器上的文件实体,每个网页都是一个独立的文件。
- 网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)。
让网站内容更容易被百度等收录岗位叫SEO。 - 网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作的方式比较困难(缺点)。
- 网页的交互性较差,在程序功能实现方面有较大的限制(缺点)。
- 网页程序在用户浏览器端解析,如IE浏览器,程序解析效率很高,由于服务端不进行解析,并且不需要读取数据库,因此服务器端可以接受更多的并发访问。当客户端向服务器请求数据时,服务器直接把数据从磁盘文件系统上返回(不做任何解析),待客户端拿到数据后,在浏览器端解析展现出来(优点)。吃火锅。火锅店。
网站静态页面的特点就相当于在餐馆吃火锅,餐馆把原材料和工具都给你准备好,你自己只需要涮着吃就行,不需要饭店大厨给你炒菜做菜了,因此,对于饭店来讲,服务顾客的效率大大提高了。而对于静态页面来讲就是不需要服务器端解析,因此提供网站方服务器的压力也大大减轻了。
1.4 静态网页语言
常见的静态网页语言有html、js、css、xml、shtml等,具体语言的特点不在本书范围内,读者如果感兴趣可以参考相关网页开发的书籍。
回顾一下静态网页的核心特点,如下:
1)程序在客户浏览器端解析,不读取后端数据库,因此性能和效率很高。
2)因为后端没有数据库的支持,所以和用户的交互性较差,功能实现也很少。
1.5 有关静态网页的架构思想
在高并发、高访问量的场景下做架构优化,涉及的关键环节就是把动态网页转成静态网页,而不直接请求数据库和动态服务器,并且可以把静态内容推送到客户浏览器缓存(或CDN)中提供服务,这样就可以提升用户体验,节约服务器和维护成本。
2. 动态网页资源
2.1 动态网页资源介绍
所谓的动态网页是与静态网页相对而言的,也就是说,动态网页的URL后缀不是.htm、.html、.shtml、.xml、.js、.css等静态网页的常见后缀扩展名形式,而是以.asp、.aspx、.php、.js、.do、.cgi等形式作为后缀的,并且一般在动态网页网址中会有标志性的符号——“?,&”,此外,在大多数情况下后端都需要有数据库支持等。下图为动态网页地址的形式。
2.2 动态网页资源特点
-
网页扩展名后缀常见为:.asp、.aspx、.php、.jsp、.do、.cgi等。
-
网页一般以数据库技术为基础,大大降低了网站维护的工作量。
-
采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、投票、用户管理、订单管理、发博文等等。
-
动态网页并不是独立存在于服务器上的网页文件,当用户请求服务器上的动态程序时,服务器解析这些程序并可能读取数据库返回一个完整的网页内容。
-
动态网页中的“?”在搜索引擎的收录方面存在一定的问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,或者出于技术等方面的考虑,搜索蜘蛛一般不会去抓取网址中“?”后面的内容,因此在企业通过搜索引擎进行推广时,需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索引擎的抓取要求。
-
程序在服务器端解析,这相当于顾客点餐,饭店厨师做饭做菜,耗时长,效率低。由于程序在服务端解析,因此,会消耗大量的CPU和内存、I/O等资源,并且多数还要读取数据库等服务,因此,其访问效率远不如静态网页,在服务端解析动态程序的服务常见的有PHP引擎、Java容器(tomcat、resin,jboss、weblogic)。
2.3 有关动态网页的架构思想
一般来说,静态网页的性能效率是动态网页的10~30倍。且动态网站效率很差,并发能力也很低,在高并发场景中,应尽可能转换成静态网页提供服务。动态转静态几乎是所有高并发网站必备的架构方案思路,也是高级架构师的职责所在。
此外,动态转静态也要根据业务需求设计,例如,对于更新频繁的网站如果设计不好就可能会产生数据不一致的情况,即用户看到的数据不是网站最新的内容,而是过时的静态的内容。
3. 伪静态网页
3.1 伪静态网页介绍
如标题字义,伪静态就是通过某些技术(如rewrite)把动态网页的URL地址伪装成静态网页URL地址,但实质上用户访问的还是动态网页,只不过给用户看起来URL地址是符合静态网页地址特征的,因此,用户及某些搜索引擎会误认为是静态网页。
3.2 伪静态网页特点
从网站的URL地址看,伪静态表面上看起来是静态内容(如地址结尾带html),这是通过rewrite规则来实现的URL地址重写。改写后的URL地址规范、美观,有利于搜索引擎抓取,以及提升用户访问体验。如:http://oldboy.blog.51cto.com/2561410/803606和http://www.discuz.net/forum-3967-1.html这样的两个地址都是伪静态的。因为伪静态网页还是动态网页,从性能上考虑,伪静态功能不但没有提升网站性能,反而会降低网站的性能。这一点读者要理解。那么,有些读者可能就会有疑问了,为什么动态网页需要伪装成静态呢?为什么不能直接转成静态网页呢?
3.3 伪静态网页作用
由于搜索引擎无法正确读取带参数的动态网页内容,造成网页中很多具有丰富信息的页面无法被搜索引擎收录,因此才有了伪静态技术,它的作用是把动态网页URL改写成静态网页的URL,虽然同样是消除了动态网页中的参数,但是并不需要生成任何网页,仅仅是改变了网页地址路径,这样做的主要目的有两个,一是让搜索引擎收录网站内容,实现让更多的用户访问企业网站内容,二是提升用户访问体验,动态地址带特殊符号等的URL看起来也不如看着静态网页地址舒服。
3.4 伪静态网页的缺点
动态网页伪装静态网页,虽然可以让搜索引擎收录,并且可提升用户访问体验,但伪静态网页并不能提升网站的访问效率性能,从理论上说还会降低网站的性能,没有动态转静态网页效率高,但是对于一些并发不是超大的情况来说,或者是硬件资源充足的情况来说,伪静态还是一个不错的实用功能,因为,要把动态网页真正地转成静态网页,不是一朝一夕的事情,需要技术团队通力配合才能行。
现在很多大型的网站都采用了动态网页生成静态网页的技术,消除动态网页中的参数,使搜索引擎收录更多的内容,达到优化网站的效果。当网站遇到访问瓶颈时,如果有技术力量将动态网页转化成静态网页,那就再好不过了,但是,有些更新频率很快的业务并不适合这么做,或者将动态转为静态有很大难度,这时就可以考虑设置伪静态。相关架构内容可以参加老男孩老师高级架构师课程内容。
3.5 伪静态网页小结
- 利用rewrite技术将动态网页伪装成静态网页(URL地址改写)。
- 便于搜索引擎搜录提升用户访问量以及用户体验。
- 访问性能没有提升,并且转换伪静态会消耗资源,因此性能反而会下降。
- 尽可能将动态网页转换成真正的静态页面。
- 并发量不是很大或者动态更新过于频繁的时候,用rewrite实现伪静态也是不错的。
- 伪静态网页的实现过程,一般是由SEO运营产品提出需求,开发和运维共同实现的。
课外作业:请在后文部署完开源站点discuz bbs和wordpress blog程序后,请把这两个网站的访问地址做成伪静态访问。提示,各自的官方网站上就有说明。
4. 生产Web架构优化实战方案
由于静态网页程序在客户端解析,大大降低了服务器端的访问压力,因此解析效率更高,在实际高并发网站架构中,可以考虑把用户请求的数据解析后存成静态文件放于磁盘中或放于内存中,来降低动态服务器的压力,节约企业成本,提升用户体验。有关高并发网站架构从动态转静态的内容,可以参考老男孩老师的文章“浅谈千万级PV/IP规模高性能高并发网站架构”:http://oldboy.blog.51cto.com/2561410/736710
下面介绍几个高并发网站架构从动态转静态不用更改企业业务产品代码就可以实现的例子。
-
门户新闻业务
新闻网站的特点是一旦发布完成,几乎不会再改动网页内容。因此,对于新闻业务内容的静态化相对比较简单。
第一步:程序要支持发布动态内容转成静态功能。
第二步:运营编辑人员发布新闻网页后,后台程序立刻将动态网页生成静态文件。
第三步:运维人员通过发布或事件触发把运营编辑生成的静态网页发布到事先搭建好的公司缓存集群服务器上,或者把静态内容同步到购买的全国所有CDN服务器节点上,然后,再提供给用户提供访问浏览。 -
视频网站业务
视频网站和新闻网站类似,特点都是一旦发布完成,几乎不会再改动网页内容。因此,实现视频业务网站高效访问也很简单。
以优酷视频网为例,用户在上传视频时,需要经历转码→审核的过程(大概1个小时),然后一些热点视频也可能会被提前推送同步到CDN的核心节点或全国所有CDN服务器节点,用户访问时才会更快。 -
Blog/BBS/SNS/微博社区业务/电商(如淘宝、京东)
这几类业务的动态转静态是比较困难的,因为,用户发布完成内容,可能会随时更新并查看,这种情况一般会通过异步方式,例如消息中间件技术加上NoSQL集群技术实现实现转换,当然也会改进产品细节,例如:在访问的环节设置延时、异步加载等手段,较为详细的说明见如博客“浅谈千万级PV/IP规模高性能高并发网站”(http://oldboy.blog.51cto.com/2561410/736710和http://edu.51cto.com/course/course_id-3093.html)。
nodejs 后端的nodejs的使用场景有限,确实不如java和go,坑多且前人经验总结不如其他语言,但是写业务写工具写脚本写中间层应用,nodejs有自己的优势,可惜也不是独有,上手快是真的(这非常重要)。我个人的体会,只代表我自己,如果专注后端开发,不建议nodejs作为主力开发语言,会对自己有局限,而且学到最后也是去学c++了。对于前端而言,nodejs是必须掌握的,虽然语法都是js,但是目前的发展趋势是前端全干化,后端向云和基础服务下沉,nodejs的优势很明显,贴近业务,扩大前端职能,让人的产出更好更多更快,对企业有价值,也可以同时帮前端工程师更好的提升自己的视野,了解js,了解整个前后端应用开发流程,也就是所谓的BFF,全称是Backends For Frontends(服务于前端的后端)。
5. CDN网站加速服务
5.1 什么是CDN?
CDN全称是Content Delivery Network 内容分发网络
CDN本质是一套分布式、缓存、集群,范围可以是全国或全球,
其运行实质是通过【智能DNS】获取用户的【来源地域】以及【上网线路】,
为用户选择一个最【接近用户地域】以及和【用户上网线路相同的服务器节点】,
因为访问节点距离用户地域近,且运营商线路相同,所以,可以大幅提升用户浏览网站的体验。
5.2 为什么要使用CDN?
CDN产生背景之一:
企业网站流量不断地激增,网站撑不住用户快速增加。
IDC机房:服务器托管的地点。
1、单线带宽(或者网通、电信、铁通、教育)。20-30元/M月,CDN大部分使用单线带宽。M/30-100元。
2、多线带宽(BGP带宽),网通、电信、铁通、教育整合一起。独享,150-1000元/M月,企业用多线机房。
CDN利用差发展起来了。
企业使用多线带宽缺点:
1.价格高
2.速度慢
3.防护能力弱。
BGP机房虽然可以提升用户体验,但是价格昂贵,那CDN的诞生可以提供比BGP机房对于用户更好的体验(让地区的同一线路访问当地的同一线路的网站),BGP机房和普通机房价格将近5-10倍的价格差。CDN使用单线的机房,根据用户的线路以及位置,为用户选择靠近用户的位置以及相同的运营商线路,即提升了用户体验价格又降下来了。
5.3 Cdn的特点:
1.CDN大部分使用单线带宽
2.节点都是缓存服务器。
3.利用智能DNS调度用户到最佳最适合的服务器节点。
5.4 Cdn的价值:
1、CDN为企业客户公司省钱。
2、提升企业网站的用户访问体验(相同线路,相同地域,内存访问)。
3、可以帮企业阻挡大部分流量攻击(DDOS)。
20元/M月----------------60-100元/M月
蓝汛、网宿
5.5 100万并发架构,如何设计?
100%:
1.浏览器、APP缓存。20%还剩80%
2.设计CDN:98%,还剩1.6%。
3.网站加一层varnish缓存。0.16%
4.静态服务器+存储 0.16%万 并发1600.
尽量把数据放到CDN或者客户的浏览器里,减去CDN的流量,剩下的流量是,网站需要设计的架构规模。
只需要做并发1600规模的架构方案就可以了。存储和数据库数据量并没有改变。
首页CDN:
[root@web01 ~]# curl -I https://www.163.com
HTTP/1.1 403 Forbidden
Date: Fri, 16 Jul 2021 08:18:36 GMT
Content-Type: text/html
Content-Length: 237
Connection: keep-alive
Server: web cache
Expires: Fri, 16 Jul 2021 08:18:36 GMT
X-Ser: BC99_lt-hebei-shijiazhuang-9-cache-1
Cache-Control: no-cache,no-store,private
cdn-user-ip: 125.33.246.181
cdn-ip: 121.29.46.125
X-Cache-Remote: HIT
cdn-source: baishan
https://phat.jd.com/10-156.html
https://img12.360buyimg.com/babel/jfs/t1/194795/12/4937/62204/60acdd1dEddeb5066/1f3c1093ac4c0f2b.jpg.webp
https://img10.360buyimg.com/imgzone/jfs/t1/179469/11/2838/113055/609601e3Ec740e9b5/e0a36b6494ade491.jpg
###
blog.etiantian.org
blog.etiantian.org/image/oldboy.jpg
5.6 CDN 服务提供商架构的关键元素
- DNS和智能DNS集群(bind,powerdns,dnspod,f5) #←选 IP,bind,view
- Cache 集群(squid,ats,nginx,varnish) #←提供数据
- 用户源站(cdn服务的客户,我们未来的企业)
- 外围(计费、日志分析、存储、protal展示)
6. 轻松应对IDC机房带宽突然暴涨问题!
【提出问题】
【实际案例一】
凌晨3:00点某公司(网站业务)的一个IDC机房带宽流量突然从平时高峰期150M猛增至1000M,如下图:
该故障的影响:直接导致数百台服务器无法连接,该机房全部业务中断。
作业整理,带宽,IDC故障,DDOS攻击及解决办法:
链接: https://blog.51cto.com/oldboy/909696