【转载】大型网站性能
参考这篇文章:http://www.csdn.net/article/2014-09-30/2821940
把整个过程,分为三段路径:
- 第一段在用户和浏览器端,主要负责发出用户请求,以及接受响应数据进行计算渲染显示给用户;
- 第二段在网络上,负责对请求数据、响应数据的传输;
- 第三段在网站服务器端,负责对请求数据进行处理(执行程序、访问数据库、文件等),并将结果返回;
第一路径:
输入域名发起请求,实质过程是:用户在浏览器输入要访问的网站域名; 本地DNS请求网站授权的DNS服务器对域名进行解析,并得到解析结果即IP地址(并将IP地址缓存起来)。 向目标IP地址发出请求。
优化:
从这个过程我们可以看到,优化的地方主要是减少DNS解析次数,而如果用户浏览器设置了缓存,则再第二次访问相同域名的时候就不会去请求DNS服务器,直接用缓存中的IP地址发出请求。因此这个过程主要取决于浏览器的设置。现在主流的浏览器默认设置了DNS的预取功能(DNS Prefetch),当然你也可以主动告知浏览器我的网站需要做DNS预取:<meta http-equiv="x-dns-prefetch-control" content="on" />
渲染:
浏览器将数据进行计算渲染的过程:浏览器解析响应数据; 浏览器创建DOM树; 浏览器下载CSS样式,并应用到DOM树,进行渲染; 浏览器下载JS文件,开始解析执行; 显示给用户。
优化:
从这个过程,我们可以找出不少可以优化的地方。首先我们可以尽量控制页面大小,使得浏览器解析的时间更短;并且将多个CSS文件、JS文件文件合并压缩减少文件下载的次数和大小;另外注意将CSS放在页面前面,JS访问页面后面,这样便于页面首先能渲染出来,再执行js脚本,对于用户来说有更好的体验。最后我还可以设置浏览器缓存,下次访问时从缓存读取内容,减少http请求。<meta http-equiv="Cache-Control" content="max-age=5" /> 该代码说明了浏览器启用了缓存并在5秒内不会再次访问服务器。注意缓存的设置需要结合你的业务特性来适当配置。
第二路径
带宽
我们知道带宽速度分为上行、下行速度,也就是上传和下载的速度。带宽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运营商获取请求数据。
第三路径
第三路径主要是网站服务器内部处理的过程,当中包括执行程序、访问文件、数据库等资源。
这是对于我们来说最可以发挥的地方:使用缓存,根据需要使用本地缓存或分布式缓存; 使用异步操作,这种方式不仅可以提高性能,也提高了系统的扩展性; 代码优化; 存储优化;
缓存 Redis/Memcached
异步操作
如下图,使用同步请求的方式,在高并发的情况下,会对数据库造成很大的压力,也会让用户感觉响应时间过长。 异步请求方式,则可以快速的对用户做出响应,而具体的数据库操作请求,则通过消息队列服务器发送给数据库服务器,做具体的插入操作。 插入操作的结果则已其他方式通知客户端。例如一般在订票系统当中,出票行为就是异步完成,最终的出票结果会以邮件或其他方式告知用户。
代码优化
http://www.cnblogs.com/leefreeman/p/3585032.html (后面会另开一文记录读书笔记)
存储优化
磁盘阵列、分布式存储、flash硬盘
性能的指标和测试
响应时间、并发量、吞吐量
响应时间:就是用户发出请求到收到响应数据的时间; 并发量:就是系统同时能处理多少用户请求; 吞吐量:就是单位时间内系统处理的请求数量;
之间的关系,下面这张图描述得挺好:
小结
三个路径过程。各自主要优化点。三个重要指标。
转载于:https://www.cnblogs.com/charlesblc/p/5991418.html
【转载】大型网站性能相关推荐
- [转载]大型网站架构演变和知识体系
之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的.ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不 ...
- 大型网站性能监测、分析与优化常见问题QA
@tanwen110 (唐文),曾负责腾讯四大平台之一网络媒体平台的整体运维.运营规划工作:曾任百度T7架构师和百度性能优化TOPIC.百度UAQ.APM平台负责人:畅销书<海量运维.运营规划之 ...
- [转载] 大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理
原文: http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文 ...
- 大型网站性能优化途径
性能优化途径 Web前端性能优化 1.浏览器访问优化 减少http请求 合并css,合并js,合并图片 使用浏览器缓存 启用压缩 CSS放在页面最上面,JS放在页面最下面(浏览器会在下载完CSS之后才 ...
- 计算机书籍-大型网站性能优化实战
去天猫看看智能鼠标 作者:周涛明 出版社:电子工业出版社 出版时间:2019年01月
- 炫技,从12.67s到1.06s的网站性能优化实战
(给视学算法加星标,提升全栈技能) 作者:jerryOnlyZRJ https://juejin.im/post/5b6fa8c86fb9a0099910ac91 0.引言 作为互联网项目,最重要的便 ...
- 网站性能优化实战—从12.67s到1.06s的故事
本文是对之前同名文章的修正,将所有webpack3的内容更新为webpack4,以及加入了笔者近期在公司工作中学习到的自动化思想,对文章内容作了进一步提升. 0.引言 作为互联网项目,最重要的便是用户 ...
- 网站性能优化实战——从12.67s到1.06s的故事
--本文是对之前同名文章的修正,将所有webpack3的内容更新为webpack4,以及加入了笔者近期在公司工作中学习到的自动化思想,对文章内容作了进一步提升. 原文链接:imweb.io/topic ...
- JavaScript系列—性能优化之《网站性能优化实战——从12.67s到1.06s的故事》
本篇博文来源于网络 226 人赞同了该文章 原文作者:IMWeb jerryOnlyZRJ 原文链接:网站性能优化实战--从12.67s到1.06s的故事 - 腾讯Web前端 IMWeb 团队社区 ...
- 从 12.67s 到 1.06s 的网站性能优化实战
作者:jerryOnlyZRJ https://imweb.io/topic/5b6fd3c13cb5a02f33c013bd 本文是对之前同名文章的修正,将所有webpack3的内容更新为webpa ...
最新文章
- 自动化部署必备技能—定制化RPM包[转载]
- oracle:ORA-01940无法删除当前已连接用户的解决方案
- python字符串写入excel-Python向excel中写入数据的方法
- DCMTK:根据DICOM第11部分媒体存储应用程序配置文件制作DICOMDIR
- 【Centos 8】【Centos 7】【Docker】 安装 RabbitMQ
- iphone NSNotificationCenter
- 对于python的感受_聊聊我对python的感受
- JSON.parse 函数
- 持续集成部署Jenkins工作笔记0009---创建SVN版本库并提交Maven工程
- redis扫描特定keys脚本,可避免阻塞,不影响线上业务
- python程序化 k线指定时间更新_Python获取股票历史、实时数据与更新到数据库
- 第一节:Scrapy开源框架初探
- 中间人攻击的实践与原理(ARP毒化、DNS欺骗)
- 1月23日阴阳师服务器维护,阴阳师1月23日体验服更新 双神降临概率UP
- win10如何找计算机管理员密码,win10管理员密码忘了怎么办 win10系统找回admin密码方法...
- 特斯拉又发生车祸!电池夜间还自燃3次
- 西电计算机学院在读博士刘潇,西电版博士研究生学术期刊目录(学科).doc
- python二进制格式追加_Python追加/填充二进制文件添加garbag
- Linux 新手必会的21条命令合集
- 【红帽rhcsa基础命令】