【问底】李平:大型网站的灵魂——性能

news/2024/5/19 8:46:47/文章来源:https://blog.csdn.net/u013800446/article/details/84659284

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

什么是性能

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

这中间发生了什么?

用户访问网站的整个流程:用户输入网站域名,通过DNS解析,找到目标服务器IP,请求数据经互联网达到目标服务器,目标服务器收到请求数据,进行 处理(执行程序、访问数据库、文件服务器等)。处理完成,将响应数据又经互联网返回给用户浏览器,浏览器得到结果进行计算渲染显示给用户。

我们把整个过程,分为三段路径:

  • 第一段在用户和浏览器端,主要负责发出用户请求,以及接受响应数据进行计算渲染显示给用户;
  • 第二段在网络上,负责对请求数据、响应数据的传输;
  • 第三段在网站服务器端,负责对请求数据进行处理(执行程序、访问数据库、文件等),并将结果返回;

第一路径

第一路径花费的时间包括输入域名发起请求的时间和浏览器收到响应后计算渲染的时间。

输入域名发起请求,实质过程是:

  1. 用户在浏览器输入要访问的网站域名;
  2. 本地DNS请求网站授权的DNS服务器对域名进行解析,并得到解析结果即IP地址(并将IP地址缓存起来)。
  3. 向目标IP地址发出请求。

从这个过程我们可以看到,优化的地方主要是减少DNS解析次数,而如果用户浏览器设置了缓存,则再第二次访问相同域名的时候就不会去请求DNS服务 器,直接用缓存中的IP地址发出请求。因此这个过程主要取决于浏览器的设置。现在主流的浏览器默认设置了DNS的预取功能(DNS Prefetch),当然你也可以主动告知浏览器我的网站需要做DNS预取:

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <meta http-equiv="x-dns-prefetch-control" content="on" />  

浏览器将数据进行计算渲染的过程:

  1. 浏览器解析响应数据;
  2. 浏览器创建DOM树;
  3. 浏览器下载CSS样式,并应用到DOM树,进行渲染;
  4. 浏览器下载JS文件,开始解析执行;
  5. 显示给用户。

从这个过程,我们可以找出不少可以优化的地方。首先我们可以尽量控制页面大小,使得浏览器解析的时间更短;并且将多个CSS文件、JS文件文件合并 压缩减少文件下载的次数和大小;另外注意将CSS放在页面前面,JS访问页面后面,这样便于页面首先能渲染出来,再执行js脚本,对于用户来说有更好的体 验。最后我还可以设置浏览器缓存,下次访问时从缓存读取内容,减少http请求。

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <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运营商获取请求数据。

第三路径

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

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

  • 使用缓存,根据需要使用本地缓存或分布式缓存;
  • 使用异步操作,这种方式不仅可以提高性能,也提高了系统的扩展性;
  • 代码优化;
  • 存储优化;

缓存

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

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

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

异步操作

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

代码优化

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

存储优化

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

性能的指标和测试

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

  • 响应时间:就是用户发出请求到收到响应数据的时间;
  • 并发量:就是系统同时能处理多少用户请求;
  • 吞吐量:就是单位时间内系统处理的请求数量;

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

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

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

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

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

小结

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

原文链接: 大型网站的灵魂——性能(责编/仲浩)

关于作者:李平,目前在一家支付企业从事开发、设计等工作。喜欢高效而愉快的工作氛围,支持敏捷,支持重构,抵制加班、抵制外包。熟悉JavaEE、SOA、敏捷开发、移动支付、分布式架构。

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

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

相关文章

大型网站系统架构的演化

http://www.cnblogs.com/leefreeman/p/3993449.html 一个成熟的大型网站&#xff08;如淘宝、京东等&#xff09;的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性&#xff0c;它总是随着用户量的增加&#xff0c;业务功能的扩展逐渐演 变完善的&#xff0c;…

使用Varnish代替Squid做网站缓存加速器的详细解决方案

from http://blog.s135.com/post/313 我曾经写过一篇文章──《初步试用Squid的替代产品──Varnish Cache网站加速器》&#xff0c;但当时仅仅是用着玩&#xff0c;没做深入研究。  今天写的这篇关于Varnish的文章&#xff0c;已经是一篇可以完全替代Squid做网站缓存加速器的…

html h5 页面 字体大小 fontsize 5px 不生效_必途必:如何通过网站页面布局优化提升seo关键词排名?...

大多数做SEO的人不会忽视网站的页面优化。很多人把注意力集中在网站主页的页面优化上。网站页面优化也是网站内部优化的第一步。通过页面内容的布局调整和设计&#xff0c;可以创建一个用户喜欢并有利于搜索引擎抓取和识别的页面&#xff0c;从而提高搜索引擎的排名。让网站获得…

php如何安装织梦cms,“织梦CMS”网站程序详细安装步骤?

我们之前把网站程序上传到了空间&#xff0c;并解压缩&#xff0c;现在我们只要把上传的程序安装成功&#xff0c;网站就搭建完成了&#xff0c;可以正常运营了&#xff0c;怎么安装那?其实每一套程序中都有“程序安装指南文档”按照指南就可以安装成功的&#xff0c;网站安装…

filezilla怎么上传HTML,filezilla如何上传网页网站,filezilla上传网页网站的方法

FileZilla是一个快速免费跨平台的FTP软件&#xff0c;实用多功能和界面直观的FTP客户端。那么FieZilla 怎么上传网页和网站呢?下面格子啦小编就给大家分享下filezilla上传网页网站的方法。 1、打开刚刚装好的FileZilla&#xff0c;点击菜单中的“文件” 2、点击站点管理器 3、…

怎样分析网站日志?

分析网站日志对于网站体验的优化、蜘蛛的友好度有着重要的意义&#xff0c;而网站日志分析应当主要包括以下维度。 一、网站日志的基本分析方向 1、蜘蛛日志 网站日志分析必不可少的环节就是分析蜘蛛日志&#xff0c;其蜘蛛类型应当囊括当前主流的蜘蛛分类、异常蜘蛛类型、蜘蛛…

自己开发网站日志分析工具,需要掌握何种技术?

对于网站运营而言&#xff0c;熟练掌握网站日志的分析是一门必会的技术。那么&#xff0c;如果要做网站日志分析&#xff0c;除了使用在线日志分析工具外&#xff0c;还有别的方法吗&#xff1f; 如果要自己开发网站日志分析工具&#xff0c;需要掌握何种技术呢&#xff1f; 分…

网站日志分析的维度与日志在线分析工具推荐

分析网站日志对于网站体验的优化、蜘蛛的友好度有着重要的意义&#xff0c;而网站日志分析应当主要包括以下维度。 蜘蛛类型 1、蜘蛛日志 网站日志分析必不可少的环节就是分析蜘蛛日志&#xff0c;其蜘蛛类型应当囊括当前主流的蜘蛛分类、异常蜘蛛类型、蜘蛛总数、蜘蛛抓取频次…

记录一个很有意思的事情(关于自己的网站自己不能访问,别人通过公网却可以访问)

问题描述&#xff1a; 首先是这样的&#xff0c;无意之中打开自己的网站www.ishells.cn发现竟然不能访问了,很纳闷怎么回事儿&#xff1f;就打开了云服务器检查了一下nginx&#xff0c;博客应用都在运行着&#xff0c;于是又通过 IP 端口的方式发现网站是可以正常访问的&#…

网站源码出现高危漏洞,请尽快修复,避免严重损失,的解决方法

源码出现这种情况的解决方法&#xff1a; 友价商城里的后台管理界面出现这个的 我按照上面的提示&#xff0c;将执行选框取消勾选后&#xff0c;它又出现这个的&#xff1a; 解决方法是 在宝塔里开启防火墙和网站防护设置即可解决

电脑版支付宝支付对接网站问题彻底解决方法总结

这几天一直在找解决电脑版网站支付宝支付问题&#xff0c;今天特意来好好做个总结&#xff0c; 首先进入支付宝开放平台&#xff1a;https://openhome.alipay.com/developmentAccess/developmentAccess.htm 第一次出现失败的原因&#xff1a;验签出错&#xff0c;这点我后来尝…

电脑网站出现支付宝支付时手机扫码出现系统有点忙....的解决方法总结

这个问题导致的原因是我用的是同一个支付宝账号&#xff0c;也就是收款支付宝和付款支付宝一样的&#xff0c;所以才导致此问题出现了&#xff0c;这是低级错误&#xff0c;解决方法&#xff1a;退出该支付宝账号&#xff0c;重新换另一个支付宝账号&#xff0c;再尝试扫一扫支…

网站中出现点击按钮跳出的还是当前页面的解决方法

这几天遇到这样的问题&#xff1a;点开我网站里的其中一个按钮&#xff0c;跳转的页面一直都是当前页面&#xff0c;此时则需要右键查看源代码里对应的链接是连接到哪个页面了&#xff0c;比如下图中&#xff0c;左边所示的是演示源码正确的链接页面地址&#xff0c;而右侧则是…

如何在腾讯云服务器上安装安全狗提高网站安全解决方法总结

如何在腾讯云服务器上架设安全狗提高网站安全解决方法总结 步骤方法&#xff1a;以下步骤是我自己在学习研究时一步步实操过来的&#xff0c;对于新手很有帮助意义。 1、先登录腾讯云服务器&#xff0c;https://cloud.tencent.com/login?s_urlhttps%3A%2F%2Fconsole.cloud.ten…

如何将一键部署下来的网站源码弄到第二个网站里去的解决方法

按照正常的安装网站的方法之后&#xff0c;还需要做的一步重要工作就是&#xff0c;改数据库&#xff0c;通常是在网站里搜索data相关的文件。如下图 此时&#xff0c;登录网址后&#xff0c;它会出现下图所示情况&#xff1a; 此时&#xff0c;再将站点这两处修改下&#xf…

网站设置微信支付时出现:appid和mch-id不匹配的解决方法

问题描述&#xff1a; 解决方法&#xff1a; 一定要准备一个已认证的服务号&#xff08;我的情况就是如此&#xff09;&#xff0c;然后绑定该服务号&#xff1b; 参考官方文档&#xff1a; https://kf.qq.com/faq/1801116VJfua1801113QVNVz.html

网站微信支付时出现支付二维码不显示的解决方法

问题描述&#xff1a; 解决方法&#xff1a;通过快捷键F12查看源代码&#xff0c;逐级逐级的找到对应的位置源码&#xff0c;然后看到该二维码图片对应的链接&#xff1a;如下图&#xff1a; 然后在链接处右键 选择copy link dress,即可将该链接复制好了&#xff1b;然后直接…

关于网站域名备案流程

域名备案需要看在哪里买的空间服务器&#xff0c;比如我在腾讯云买的空间服务器&#xff0c;那么我就只能在腾讯云官网里备案域名了&#xff1b;

强烈推荐这几个程序员常逛的网站! 多希望你能早点知道!

作为一个每天都泡在电脑面前的程序员来说&#xff0c;选对一些学习的地方、和大家交流的地方就显得尤为重要。 当我们有问题的时候我们想第一时间解决&#xff0c;当我们想学习一门新技术的时候我们可以立马get教程&#xff0c;当我们学习了一门新的技术的时候我们抑制不住自己…

微生物文献调研网站与工具---持续更新(2022.09.16)

全文目录 1. 全文说明2. 文献查询网站2.1 常用期刊查询官网1&#xff09; 高质量的期刊是值得细细品味&#xff0c;期刊官网可以进行长期订阅跟踪&#xff08;排名不分先后&#xff09;2&#xff09;文献库检索网站3&#xff09;科研工作的持续跟进与最新进展4 &#xff09;基于…