掌握设计开发维护大型网站的技术之性能

news/2024/5/9 0:39:18/文章来源:https://blog.csdn.net/weixin_33905756/article/details/90505600
前言
在前一篇随笔《大型网站系统架构的演化》中,介绍了大型网站的演化过程,期间穿插了一些技术和手段,我们可以从中看出一个大型网站的轮廓,但想要掌握设计开发维护大型网站的技术,需要我们一步一步去研究实践。所以我打算写一个系列,从理论到实践讲述大型网站的点滴,这也是一个共同学习的过程,希望自己能坚持下去。系列大概会分为两部分,理论和实践,理论部分尽量通俗易懂,也要讲一些细节。实践部分会抽取一些技术做实践,将方法、解决问题过程分享出来。
本文将讲述大型网站中一个重要的要素,性能。
什么是性能
有人说性能就是访问速度快慢,这是最直观的说法,也是用户的真实体验。一个用户从输入网址到按下回车键,看到网页的快慢,这就是性能。对于我们来说,需要去挖掘这个过程,因为这决定我们怎么去做性能优化。
这中间发生了什么?
用户访问网站的整个流程:用户输入网站域名,通过DNS解析,找到目标服务器IP,请求数据经互联网达到目标服务器,目标服务器收到请求数据,进行处理(执行程序、访问数据库、文件服务器等)。处理完成,将响应数据又经互联网返回给用户浏览器,浏览器得到结果进行计算渲染显示给用户。
我们把整个过程,分为三段路径:
1、第一段在用户和浏览器端,主要负责发出用户请求,以及接受响应数据进行计算渲染显示给用户;
2、第二段在网络上,负责对请求数据、响应数据的传输;
3、第三段在网站服务器端,负责对请求数据进行处理(执行程序、访问数据库、文件等),并将结果返回;
第一路径
第一路径花费的时间包括输入域名发起请求的时间和浏览器收到响应后计算渲染的时间。
输入域名发起请求,实质过程是:
1、用户在浏览器输入要访问的网站域名;
2、本地DNS请求网站授权的DNS服务器对域名进行解析,并得到解析结果即IP地址(并将IP地址缓存起来)。
3、向目标IP地址发出请求。
从这个过程我们可以看到,优化的地方主要是减少DNS解析次数,而如果用户浏览器设置了缓存,则再第二次访问相同域名的时候就不会去请求DNS服务器,直接用缓存中的IP地址发出请求。因此这个过程主要取决于浏览器的设置。现在主流的浏览器默认设置了DNS的预取功能(DNS Prefetch),当然你也可以主动告知浏览器我的网站需要做DNS预取:
<meta http-equiv=”x-dns-prefetch-control” content=”on” />
浏览器将数据进行计算渲染的过程:
1、浏览器解析响应数据;
2、浏览器创建DOM树;
3、浏览器下载CSS样式,并应用到DOM树,进行渲染;
4、浏览器下载JS文件,开始解析执行;
5、显示给用户。
从这个过程,我们可以找出不少可以优化的地方。首先我们可以尽量控制页面大小,使得浏览器解析的时间更短;并且将多个CSS文件、JS文件文件合并压缩减少文件下载的次数和大小;另外注意将CSS放在页面前面,JS访问页面后面,这样便于页面首先能渲染出来,再执行js脚本,对于用户来说有更好的体验。最后我还可以设置浏览器缓存,下次访问时从缓存读取内容,减少http请求。
<meta http-equiv=”Cache-Control” content=”max-age=5″ />
该代码说明了浏览器启用了缓存并在5秒内不会再次访问服务器。注意缓存的设置需要结合你的业务特性来适当配置。
以下是京东商城的HTML简图:
css样式放在html前面,并且进行了合并。
大多数的JS文件放在页尾。
第二路径
第二路径在网络上,花费的时间同样包括请求数据的传输时间和响应数据的传输时间,这个两个时间取决于数据传输的速度,这里我们要讲一个名词“带宽”。什么是带宽,我们经常说带宽10M,20M是什么意思?我的带宽20M,这意味着什么?我们知道带宽速度分为上行、下行速度,也就是上传和下载的速度。带宽20M对于用户来说则是下载速度20M(20×1024×1024比特率),换算成字节20M/8=2.5M。也就是说20M的带宽下载速度理论可达2.5M/s,而对于家庭用户而言上传速度一般比下载速度小的多,大约是不到十分之一。而对于网站服务器(企业用户)来说,则不然,一般上行速度等于下载速度。这也是运营商根据实际需求分配的,毕竟用户的主要需求是下载数据,而不是上传数据。
整个流程从传输方式看就是:用户发送请求数据(上传),网站服务器接受请求数据(下载),网站服务器返回响应数据(上传),用户接受响应数据(下载)。对于用户来说,上传数据是很小的(Url参数),而下载数据是较大的(响应数据);对于服务器来说,下载数据是很小的(url参数),上传数据是较大(响应数据)。理解了这个,我们可以解释为什么有时用户反映为什么自己的带宽足够,但打开某些网站仍然很慢,就是因为尽管用户的下载速度很快,但网站服务器的上传速度很慢,这就像一个抽水管和一个出水管,不管抽水管再大,但出水管很小,同样抽到的水量是有限的。了解了这个原理我们来看怎么提高数据传输的速度,首先用户的上传、下载速度我们是无法决定的,我们能决定的是网站服务器的上传、下载速度,所以我们可以做的是适当的增加服务器带宽(带宽是很贵的,盲目的增加只会增加不必要成本)。购买合适的带宽需要根据网站业务特性、规模以及结合运维人员的经验来选择。通常可以考虑的算法,即根据一次响应数据的大小,乘以PV数,除以对应的高峰时间段,从而大致估算出网站带宽的需求。
 下面我们继续进一步研究第二路径:
上图表示用户访问网站服务器时网络的大致情况,从图上可以看出假设网站服务器从电信网络接入,而用户A作为电信的宽带用户,则可以通过电信骨干网快速的访问到网站服务器。用户B,用户C作为移动和联通用户需要通过运营商的互联互通经过较长路径才能访问到服务器。
针对这种情况,我们可以采取以下方法来优化:
1、在各运营商发达的地区的IDC(互联网数据中心,可以理解成机房)部署网站服务器,各运营商的用户即可通过各自的骨干网访问服务器。
2、购买代理服务,也就是原来联通用户需要通过联通骨干网——>联通互联互通路由器——>电信骨干网——>网站服务器的过程。通过代理服务,代理服务器直连到电信骨干网,访问网站服务器。
2、在主要地区城市购买CDN服务,缓存对应的数据,用户可先从最近的CDN运营商获取请求数据。
 第三路径
第三路径主要是网站服务器内部处理的过程,当中包括执行程序、访问文件、数据库等资源。
这是对于我们来说最可以发挥的地方:
1、使用缓存,根据需要使用本地缓存或分布式缓存;
2、使用异步操作,这种方式不仅可以提高性能,也提高了系统的扩展性;
3、代码优化;
4、存储优化;
缓存
如果缓存数据较少,可以利用OSCache实现本地缓存:
当缓存数据过多时,利用Memcached实现分布式缓存:
Memcached实现分布式缓存,缓存服务器之间是互不通信的,也就是我们可以方便的通过增加Memcached服务器对系统进行扩展。
异步操作
使用同步请求的方式,在高并发的情况下,会对数据库造成很大的压力,也会让用户感觉响应时间过长。异步请求方式,则可以快速的对用户做出响应,而具体的数据库操作请求,则通过消息队列服务器发送给数据库服务器,做具体的插入操作。插入操作的结果则已其他方式通知客户端。例如一般在订票系统当中,出票行为就是异步完成,最终的出票结果会以邮件或其他方式告知用户。
代码优化
这里就不在详细描述,另一篇随笔《怎样编写高质量的java代码》对代码质量和风格做过大致的介绍,有兴趣可以看一下。
 存储优化
大型网站中海量的数据读写对磁盘造成很大压力,系统最大的瓶颈还是在磁盘的读写。可以考虑使用磁盘阵列、分布式储存来改善存储的性能。
性能的指标和测试
上面通过解析用户访问网站的过程来思考怎么提高用户感知的性能,对于用户来言性能就是快和慢。但对于我们来说,不能这样简单描述,我们需要去量化他,用一些数据指标去衡量它。这里讲到几个名词:响应时间、并发量、吞吐量。
响应时间:就是用户发出请求到收到响应数据的时间;
并发量:就是系统同时能处理多少用户请求;
吞吐量:就是单位时间内系统处理的请求数量;
为了通俗的了解这三个概念,我们以高速公路的收费站为例子:响应时间是指一辆车经过收费站的时间,也就是车辆从进入收费站、付钱、开闸、离开收费站的时间;并发量是指这个收费站同时能通行多少辆车,可以理解为收费站的出口数量。吞吐量是指:在一段时间内,这个收费站通往了多少了车。
这个例子不晓得恰不恰当。
对于性能测试来说,基本也是围绕这些方面来测试,下图说明了性能测试的过程:
左图表示响应时间和并发用户量的二维坐标图,从图上可以看出,并发用户量在一定量增加时,响应时间很短,并且没有太大的起伏,这表示系统目前处于日常运行期,可以很快处理用户请求(A点之前);随着并发量的增加,系统处于请求高峰期,但仍然可以有序的处理用户请求,响应时间较日常有所增加(A、B之间);当并发量增加到一定数量时,超过了系统的负载能力,系统处于濒临崩溃的边缘(B、C之间),响应时间严重过长,直到系统崩溃。
右图表示吞吐量与并发用户量的二维坐标图,可以看出,随着并发用户量的增加,吞吐量逐渐增加;在并发量到达一定量时,由于系统处理能力达到最大,吞吐量增加放缓;当并发量超过系统负载时(E点),系统处理能力开始下降,不能再请求增加的用户请求,吞吐量反而降低。
小结
本文通过用户访问网站的过程,分析了三个路径过程中提高性能的想法和手段,最后介绍了描述性能的指标,并对性能测试做了简要说明。

最新内容请见作者的GitHub页:http://qaseven.github.io/

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

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

相关文章

LinkedIn 推出在线学习门户网站 LinkedIn Learning

LinkedIn 推出在线学习门户网站 LinkedIn Learning 责任编辑&#xff1a;editor006 作者&#xff1a;aiko | 2016-09-24 22:41:46 本文摘自&#xff1a;36kr LinkedIn 宣布推出在线学习门户网站 LinkedIn Learning&#xff0c;该网站整合了 LinkedIn 去年以 15 亿美元在去年收…

SEO页面标题Title的优化

我在一个月前改过页面标题&#xff08;Title&#xff09;&#xff0c;随后表现是&#xff1a;百度网页快照4天不更新&#xff0c;Google正常。而我仅仅是改了两个词组而已。在建博初期&#xff0c;修改Title的最频繁的时期&#xff0c;下面卢松松就我经历的修改Title过程给大家…

细说地方门户网站运营的六大经验

在几年的地方门户网站运营中&#xff0c;总结以下观点与站长朋友们分享。 一、网站好用好看&#xff1a;做好美工细节、优化交互效果&#xff0c;持续改善用户体验 地方门户网站精美的UI设计与良好用户体验&#xff0c;给用户一个好印象。 常言道&#xff1a;筑好巢&#xff0c…

8.1 排序的基本概念(时间复杂度、空间复杂度、稳定性、内部排序、外部排序、可视化网站)

1. 什么是排序&#xff1f;2. 排序算法的应用3. 排序算法的评价指标4. 排序算法的分类5. 知识回顾 1. 什么是排序&#xff1f; 2. 排序算法的应用 3. 排序算法的评价指标 4. 排序算法的分类 5. 知识回顾 学习链接

SEO优化:网站优化的swot介绍分析

开发十年&#xff0c;就只剩下这套Java开发体系了 >>> 著名的竞争战略专家迈克尔.波特提出的竞争理论从产业结构入手对一个企业“可能做的”方面进行了透彻的分析和说明&#xff0c;而能力学派管理学家则运用价值链解构企业的价值创造过程&#xff0c;注重对公司的…

网站开发规范及流程

Web 开发的分散性和交互性&#xff0c;决定了 Web 开发必须遵从一定的开发规范和技术约定&#xff0c;只有每个开发人员都按照一个共同的规范去设计、沟通、开发、测试、部署&#xff0c;才能保证整个开发团队协调一致的工作&#xff0c;从而提高开发工作效率&#xff0c;提升工…

jQuery插件ReverseOrder实现Javascript倒序及了解prependTo函数

是否需要将网页元素进行倒序&#xff0c;使用jQuery插件ReverseOrder可以实现此功能&#xff0c;ReverseOrder插件可以将HTML元素&#xff0c;如<p>&#xff0c;<li>等任意元素进行重新倒序排列&#xff0c;效果图如下&#xff1a; 使用说明 需要使用jQuery库文件和…

从上百幅架构图中学得半点大型网站建设经验(上)

从上百幅架构图中学大型网站建设经验&#xff08;上&#xff09;引言 近段时间以来&#xff0c;通过接触有关海量数据处理和搜索引擎的诸多技术&#xff0c;常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外&#xff0c;更为架构图背后所隐藏的设计…

正在播放2020Me比较特别的我_现在比较流行的网站设计风格是什么?

全球的流行元素一般都是特别倾向于国际流行色的发布而一些网站设计风格模板当中还没有这样的盛行色在里面,总体的网站色彩就会显得非常的俗套。  一、停止flash播放功能的中型网站  现在比较流行的网站设计风格是可以停止flash播放功能的中型网站,如果用一个小型的比较简单…

关于工商银行网站打不开的问题终极解决办法

首先你应该试一试的:网银最好是用IE菜单: "工具"-->"Internet选项"-->"安全"选项卡, "可信站点", 将所有icbc相关的网站都删除(或者全部删除吧), 99%的错误都是由这个该死的地方产生的.以下是转载的:上面的不行再试试吧. 最近有…

ps 去掉一个人_电脑没有ps软件?只需要这个网站就能帮你搞定

现在很多朋友都喜欢自拍&#xff0c;那么肯定就都会用到一些修图软件&#xff0c;像PS、美图秀秀等&#xff0c;但是有的朋友可能会嫌PS体积太大了&#xff0c;太占电脑空间而不愿意安装PS&#xff0c;但是用到一些比较难搞定的修图问题还就得需要PS来搞定...真的是左右为难&am…

最近新上的电子商务网站

最近新上的电子商务网站&#xff0c;是一个B2C的&#xff0c;做这个站花费20天的时间&#xff0c;感觉很辛苦&#xff0c;但然我好好的了解烘培行业&#xff0c;烘培行业电子商务的企业21 Cake,好利来。 这样的网站在跟踪需求后&#xff0c;需要实现几个关键点&#xff0c;1用户…

我的建站经历(一)

转载自我的博客:https://blog.ljyngup.com 我的建站经历(一) 我建站时的状况为&#xff1a; 1.学生党 2.未满十八岁 3.预算不高(大约200左右) 4.不想花太多精力在建站上&#xff0c;想快速建站开始写博客。 5.不以盈利为目的(以后发展好了另说) 6.想拥有一个属于自己的…

长春网站建设×××,网站制作的步骤

当今互联网时代&#xff0c;人们大多从网络获取信息。为了迎合时代步伐&#xff0c;多数企业选择建立自己的网站&#xff0c;以此来提高企业知名度&#xff0c;扩大企业影响范围。如下就是网站制作的一些基本步骤&#xff0c;供大家了解:一、域名的选择根据所要建站的性质和内容…

干货!手把手教你打造自己的seo生态资源,让排名不在是梦想

又到了分享经验的时刻&#xff0c;每到这时候&#xff0c;高粱seo心里总是美滋滋的&#xff0c;因为分享是一种快乐&#xff0c;更是一种收获&#xff0c;能够与人分享&#xff0c;本身就是一种成功。在上一篇文章当中&#xff0c;高粱seo用两个实战案例&#xff0c;证明了目前…

大型网站技术架构(三)架构核心要素

2019独角兽企业重金招聘Python工程师标准>>> 所谓架构&#xff0c;一种通俗的说法就是“最高层次的规划&#xff0c;难以改变的决定”&#xff0c;这些规划和决定奠定了事物未来发展的方向和最终的蓝图。 而软件架构即“有关软件整体结构与组件的抽象描述&#xff0…

hadoop(datanode)宕机的原因和解决办法?_网站流量异常的10大原因

站点在日常运转的过程中&#xff0c;可能会遇到流量出现异常的现象&#xff0c;我们这里所说的异常是指流量下降达到一个较大的比率&#xff0c;且是如几天以上持续性的。作为一个SEOer&#xff0c;应该学会如何从各个维度去分析与查找到流量波动的原因&#xff0c;这里不仅限于…

公众号网页授权php,微信公众号里的PHP网站进行网页授权

要进行网页授权,肯定要和微信合作,首先,要有一个自己的公众号,而且必须要经过认证的公众号.(如果没有,可以去申请测试号)订阅号和服务号以及测试号:订阅号专注的是推送消息,所以一些高级接口会没有.服务号专注的是用户交互,所以接口会比订阅号多一点,相对的,推送消息的数量就会…

mouseenter 与mouseover 区别

mouseenter 与mouseover 区别 mouseenter与mouseover有什么不同&#xff0c;也许可以从两方面去讲。看他们是是否支持冒泡或者是否为事件的触发时机&#xff1b; 只有当鼠标指针在对象的边界之外&#xff0c;用户把鼠标移动到对象的边界内时&#xff0c;事件mouseenter才触发。…

Nginx 开启 Gzip压缩提升网站速度

多说无益 &#xff0c;直接上配置 vim nginx.conf 参数 gzip配置的常用参数 gzip on|off; #是否开启gzip gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?) gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源) gzip_disab…