大型网站的灵魂——性能

news/2024/5/17 14:48:45/文章来源:https://blog.csdn.net/qinyushuang/article/details/43315239

原文地址:http://www.cnblogs.com/leefreeman/p/3998757.html#3112162

一、前言

    在前一篇随笔《大型网站系统架构的演化》中,介绍了大型网站的演化过程,期间穿插了一些技术和手段,我们可以从中看出一个大型网站的轮廓,但想要掌握设计开发维护大型网站的技术,需要我们一步一步去研究实践。所以我打算写一个系列,从理论到实践讲述大型网站的点滴,这也是一个共同学习的过程,希望自己能坚持下去。系列大概会分为两部分,理论和实践,理论部分尽量通俗易懂,也要讲一些细节。实践部分会抽取一些技术做实践,将方法、解决问题过程分享出来。

本文将讲述大型网站中一个重要的要素,性能。

二、网站访问过程和性能优化

    有人说性能就是访问速度快慢,这是最直观的说法,也是用户的真实体验。一个用户从输入网址到按下回车键,看到网页的快慢,这就是性能。对于我们来说,需要去挖掘这个过程,因为这决定我们怎么去做性能优化。

这中间发生了什么?


用户访问网站的整个流程:用户输入网站域名,通过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、购买代理服务,也就是原来联通用户需要通过联通骨干网——>联通互联互通路由器——>电信骨干网——>网站服务器的过程。通过代理服务,代理服务器直连到电信骨干网,访问网站服务器。

3、在主要地区城市购买CDN服务,缓存对应的数据,用户可先从最近的CDN运营商获取请求数据。

第三路径

第三路径主要是网站服务器内部处理的过程,当中包括执行程序、访问文件、数据库等资源。

这是对于我们来说最可以发挥的地方:

1、使用缓存,根据需要使用本地缓存或分布式缓存;

2、使用异步操作,这种方式不仅可以提高性能,也提高了系统的扩展性;

3、代码优化;

4、存储优化;

缓存

如果缓存数据较少,可以利用OSCache实现本地缓存:


当缓存数据过多时,利用Memcached实现分布式缓存:


Memcached实现分布式缓存,缓存服务器之间是互不通信的,也就是我们可以方便的通过增加Memcached服务器对系统进行扩展。

异步操作


使用同步请求的方式,在高并发的情况下,会对数据库造成很大的压力,也会让用户感觉响应时间过长。异步请求方式,则可以快速的对用户做出响应,而具体的数据库操作请求,则通过消息队列服务器发送给数据库服务器,做具体的插入操作。插入操作的结果则已其他方式通知客户端。例如一般在订票系统当中,出票行为就是异步完成,最终的出票结果会以邮件或其他方式告知用户。

代码优化

这里就不在详细描述,另一篇随笔《怎样编写高质量的java代码》对代码质量和风格做过大致的介绍,有兴趣可以看一下。

存储优化

大型网站中海量的数据读写对磁盘造成很大压力,系统最大的瓶颈还是在磁盘的读写。可以考虑使用磁盘阵列、分布式储存来改善存储的性能。

三、性能的指标和测试

    上面通过解析用户访问网站的过程来思考怎么提高用户感知的性能,对于用户来言性能就是快和慢。但对于我们来说,不能这样简单描述,我们需要去量化他,用一些数据指标去衡量它。这里讲到几个名词:响应时间、并发量、吞吐量。

响应时间:就是用户发出请求到收到响应数据的时间;

并发量:就是系统同时能处理多少用户请求;

吞吐量:就是单位时间内系统处理的请求数量;

    为了通俗的了解这三个概念,我们以高速公路的收费站为例子:响应时间是指一辆车经过收费站的时间,也就是车辆从进入收费站、付钱、开闸、离开收费站的时间;并发量是指这个收费站同时能通行多少辆车,可以理解为收费站的出口数量。吞吐量是指:在一段时间内,这个收费站通往了多少了车。

这个例子不晓得恰不恰当。

对于性能测试来说,基本也是围绕这些方面来测试,下图说明了性能测试的过程:


左图表示响应时间和并发用户量的二维坐标图,从图上可以看出,并发用户量在一定量增加时,响应时间很短,并且没有太大的起伏,这表示系统目前处于日常运行期,可以很快处理用户请求(A点之前);随着并发量的增加,系统处于请求高峰期,但仍然可以有序的处理用户请求,响应时间较日常有所增加(A、B之间);当并发量增加到一定数量时,超过了系统的负载能力,系统处于濒临崩溃的边缘(B、C之间),响应时间严重过长,直到系统崩溃。

    右图表示吞吐量与并发用户量的二维坐标图,可以看出,随着并发用户量的增加,吞吐量逐渐增加;在并发量到达一定量时,由于系统处理能力达到最大,吞吐量增加放缓;当并发量超过系统负载时(E点),系统处理能力开始下降,不能再请求增加的用户请求,吞吐量反而降低。

四、小结

    本文通过用户访问网站的过程,分析了三个路径过程中提高性能的想法和手段,最后介绍了描述性能的指标,并对性能测试做了简要说明。




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

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

相关文章

PHP绿色集成环境在云服务器上的应用,PHPWAMP在服务器上搭建网站案例

问&#xff1a;什么叫WAMP&#xff1f;答&#xff1a;Windows下的ApacheMysqlPHP&#xff0c;称之为WAMP。本文案例采用的PHP集成环境是我自己开发的纯绿色版WAMP软件&#xff08;PHPWAMP&#xff09;。我在这款集成环境里集成的组件都是完全版的&#xff0c;适合本地调试&…

编码 括号_如何知道自己的网站是utf8还是gbk编码

用过织梦建站的站长们应当都知道网站代码有utf8与gbk两种编码格式&#xff0c;如果两种编码混用网站就有可能出现乱码。而我们在初次搭建网站的过程中往往没有在意自己使用的是utf8编码格式还是gbk编码格式&#xff0c;导致自己在选用织梦模板、安装织梦插件时不知所措。今天跟…

jsp+jquery 音乐商城网站_JSP+Servlet+C3P0+Mysql实现的苹果网上商城

项目简介项目来源于&#xff1a;https://github.com/gpengDemo/Estore本系统基于JSPServletC3P0Mysql。涉及技术少&#xff0c;易于理解&#xff0c;适合JavaWeb初学者学习使用。难度等级&#xff1a;简单技术栈编辑器IntelliJ IDEA 2019.1.1 (Ultimate Edition)前端技术基础&a…

会不会网站建设,要看有没有网站建设技能认证证书了

会不会网站建设&#xff0c;要看有没有技能认证证书了&#xff0c;为什么会这样呢&#xff1f; 众所周知阿里在云服务器界&#xff0c;是做的最早也算是做的最好的一家空间服务商。阿里云最近又在搞各种优惠活动&#xff0c;一个云服务器的价格比那些虚拟主机还要便宜&#xff…

网站搭建教程(详细步骤 )

目录 网站组成 一、服务器 二、网站程序 三、域名 四、空间基本介绍 搭建网站的基本步骤流程(教程解说) 一、购买域名 二、购买服务器 三、相关配置 网站组成 一、服务器 什么是服务器? 我们可以理解为一个容器,用来存放网站的内容部分,我们在互联网上能够看到的网…

大型网站架构演变

一、最开始的网站架构最初的架构&#xff0c;应用程序、数据库、文件都部署在一台服务器上&#xff0c;如图&#xff1a;二、应用、数据、文件分离将应用程序、数据库、文件各自部署在独立的服务器上&#xff0c;并且根据服务器的用途配置不同的硬件&#xff0c;达到最佳的性能…

background图片不显示_您的网站图片也不显示?禁用响应式图片加载属性srcset和sizes吧...

可能因为第一次有自己的网站所以更新网站兴趣比较高&#xff0c;没想到今天刚打开网站突然发现所有网站文章里的图片全部不能显示了&#xff0c;如图1图一但文章的预览图都还可以显示&#xff0c;而且进wordpress网站文章编辑后台也可以看到图片如图二图二甚至看到文章编辑源代…

linux 卸载redis_大数据学习路线,从Linux基础到大型网站高并发处理项目实战

相信大家在学习大数据的时候都不知道怎么来学习&#xff0c;因为知识点太多了&#xff0c;也太杂了&#xff0c;没有一个系统的路线来引导大家学习. 为了解决大家这个困惑&#xff0c;小编整理了从Linux基础到大型网站高并发处理项目实战的学习路线和知识点&#xff0c;希望大家…

经典flash_市面80%的模板站网站还都是flash,即将面临打不开的风险

最新消息&#xff1a;Adobe公司宣布&#xff0c;2020年12月31日&#xff0c;今年的最后一天&#xff0c;将是其旗下产品Flash Player生命终结之日&#xff0c;也就是 End-Of-Life Date。提到flash player相信大家绝对不陌生&#xff0c;无论是我们曾在网页播放器内满怀期待的观…

怎样将优酷网站下载的视频KUX转MP4格式

在休息之余&#xff0c;相信大多数人都会拿手机看电视剧听音乐之类的&#xff0c;最近拍了很多的新片子&#xff1a;《毒液&#xff1a;致命守护者》、《无名之辈》、《亡命救赎》《影》等等优质电影&#xff0c;但是很多的电影都只能在电影院观看的&#xff0c;如果不去电影院…

这些资源网站为什么能获得5万知乎大佬推荐,而我错失了什么吗?

现在很多朋友可能只要是一听到资源网站&#xff0c;想必就会好奇是什么网站&#xff0c;用用看是不是由说的那么厉害&#xff01;其实资源网站给我们的诱惑是在是太大了&#xff0c;其主要原因是可以帮助我们搜索到很多意想不到的资源&#xff01; 为了回应大家的需求&#xff…

oracle linux zfs,测试数据及结论分析(5) - Linux平台ZFS-FUSE与EXT4、Btrfs大比拼_Linux新闻_Linux公社-Linux系统门户网站...

最后一项测试&#xff0c;使用 IOzone 读取 8GB 数据中&#xff0c;ZFS-FUSE 的磁盘读取性能结果实际上和 EXT4 和 Btrfs 相近&#xff0c;不过那是因为 ZFS 模块在读取时使用了缓存的缘故。鉴于一些 Phoronix Premium成员要求在文件系统测试中同时提供 CPU 占用的结果&#xf…

mysql数据库优化课程---7、网站的搜索技术怎么选

mysql数据库优化课程---7、网站的搜索技术怎么选 一、总结 一句话总结&#xff1a; 1.量很小&#xff08;像小网站&#xff09;---like 2.量大一点&#xff08;&#xff09;---标签 3.量超级大&#xff08;像百度&#xff09;---搜索引擎 1、数据库中取一列比取*要快给了我们什…

java常用网站有哪些类型有哪些类型_java常用的数据类型有哪些

java基本数据类型就8种&#xff0c;记住就好了。除了这些都是引用型的了。java常用的数据类型介绍&#xff1a;(推荐&#xff1a;java视频教程)java四类八种基本数据类型第一类&#xff1a;整型 byte short int long第二类&#xff1a;浮点型 float double第三类&#xff1a;逻…

linux隐藏文件怎么运行,Linux下如何隐藏文件_网站服务器运行维护

linux系统怎样安装软件_网站服务器运行维护linux系统安装软件的方法&#xff1a;1、使用apt命令进行安装&#xff0c;如【apt install app_name】&#xff1b;2、使用rpm命令进行安装&#xff0c;如【rpm -i app_name.rpm】。这篇文章主要介绍了Linux下隐藏文件方法&#xff0c…

python自动下载安装numpy_[Python]自动、使用镜像网站自动和手动安装Numpy

直接安装numpy模块在cmd输入直接pip install numpy若出现报错&#xff1a;ou are using pip version 18.1, however version 20.2.2 is available. You should consider upgrading via the ‘python -m pip install --upgrade pip’ command.根据提示&#xff1a;您使用的是pip…

大型网站架构技术

大型网站的挑战主要来自庞大的用户&#xff0c;高并发的访问和海量数据&#xff0c;任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户&#xff0c;问题就会变得棘手。大型网站架构主要就是解决这类问题。1 前端架构前端指的是用户请求到达网站应用服务器之前经历的…

宝塔linux优化wordpress,宝塔面板搭建的WordPress网站,如何进行服务器缓存优化 ?...

宝塔面板搭建的WordPress网站&#xff0c;如何进行服务器缓存优化 &#xff1f;首先安装好必要的web环境&#xff0c;那么我们开始安装缓存了&#xff0c;有三个是必装的&#xff0c;这里以安装Wordpress建站为例。1.PHP版本我们最起码选择7.0以上的版本&#xff0c;越高越好&a…

网站云服务器需要数据库吗,网站云服务器需要数据库吗

网站云服务器需要数据库吗 内容精选换一换云数据库RDS服务支持开启公网访问功能&#xff0c;通过弹性公网IP进行访问。您也可通过弹性云服务器的内网访问云数据库RDS。准备弹性云服务器或可通过公网访问云数据库RDS。通过弹性云服务器连接云数据库RDS实例&#xff0c;需要创建一…

这些免费的网络工程师资源网站,收藏起来,一年省下好几个W

授人以鱼&#xff0c;不如授人以渔。我收集了一些互联网相关论坛或网站&#xff0c;大家有其他好用的也可以在评论区补充&#xff01; 哔哩哔哩&#xff08;网工学习教程&#xff09; 头条(资料、技术推文) 学知网(教材下载) TelReading社区 (综合、传输技术) CSNA&#x…