大型网站技术架构之性能

news/2024/5/11 20:19:08/文章来源:https://blog.csdn.net/worn_xiao/article/details/80779202

1.1 网站性能测试

1.1.1 用户视角下的网站性能

用户在浏览器上直观感受的网站响应色度的快慢,用户感受到的时间,包括用户计算机和网站服务通信的时间,网站服务处理的时间,用户浏览器构造请假解析响应的时间。浏览器,带宽的不同直接影响用户感受

1.1.2 开发人员视角的网站性能

  响应延迟,系统吞吐量,并发处理能力,系统稳定性。主要手段是使用缓存加速数据读取,使用集群提高吞吐能力,使用异步消息加快请求响应及实现削峰,代码优化改善程序性能。

1.1.3 运维人员视角的网站性能

基础设施的性能,资源利用率,带宽,服务器硬件配置,数据中心网络架构,主要优化手段是建设优化骨干网,使用高性价比订制服务器,利用虚拟化技术优化资源利用率。

 

1.2 网站性能指标

1.2.1 响应时间

指应用执行一个操作需要的时间,包括从发出请求开始到收到最后请求所需的时间。响应时间是系统性能的重要指标,直观的反应了快慢。重复请求/请求数会得到响应时间

1.2.2 并发数

指系统能够同时处理请求的数目,对于网站而言,并发数即网站并发的用户数据,同时提交请求的用户数目。

一般而言 网站系统用户数目>网站在线用户数目>网站并发用户数目。

在产品设计初期,产品经理与运营人员就需要规划不同发展阶段的网站系统用户数,并已此为基础,根据产品特性和运营手段,推算在线用户数和并发用户数,这些指标将成为系统功能设计的重要依据。

现实中比如电商网站在活动促销的时候,由于并发用户数量过高,超过了网站的最大负载能力,所以响应速度会相对比较慢,客户等不急救疯狂的进行刷新,导致并发数更高,最后以服务器系统崩溃,用户浏览器显示”service is too busy” 而告终。出现这种情况原因就在于网站技术准备不充足,也可能是运营人员错误的评估了用户数导致的。

测试人员通过多线程模拟并发用户的办法来测试系统的并发能力,为了真实的模拟用户行为,测试程序并不是启动多线程不停的发送请求,而是在每两次请求之间加入一个随机等待时间,这个时间被称作思考时间

1.2.3 吞吐量

单位时间内系统处理请求的数量,体现系统的整体处理能力。可以用 “请求数/秒”

“页面数/秒”来衡量。也可以用 “访问人数/天”或者“处理业务数/小时”来衡量。

一般比较公认的吞吐量计量单位是 TPS(每秒处理的用户数),HPS(每秒处理请求数),QPS(每秒查询数)等等。

这个过程中系统吞吐量与相应时间的关系,系统吞吐量和响应时间,先是小幅度的提升,到达吞吐量极限用,系统吞吐量不增返回下载,响应时间快速上升,到达系统崩溃的点的时候,系统资源耗尽,系统吞吐量为零,失去响应。

用一个形象的例子来说明系统吞吐量(收费站费用),响应时间(车速),与请求数(车量)的关系。就像我们的高速公路上行车一样,请求数就等价于车辆,车辆少的时候,车速快,收费站收的费不多。随着车辆的增加,车速慢下来了,收费站收费增多。车辆再增加,车速更慢了,收费站的费用不增,反而因为堵车而下降了。当堵车太久,导致交通瘫痪的时候,收费站停止了收费,车也不行走了。所以网站性能优化应该提高系统吞吐量,最大限度的利用服务器资源。

1.2.4 性能计数器、

  System Load即系统负载,指当前正在被cpu执行或者等待CPU执行的进程数目的总和。 是反应系统忙闲程度的重要指标。完美情况是所有CPU都在使用,没有进程在等待。linux中使用top命令可以查看进程等待数。该值是三个浮点数表示1分钟,10分钟,15分钟的平均进程数。

1.2.5 性能测试方法

1.2.5.1性能测试

以系统初期设计规划的性能指标为目标,对系统不断施加压力,验证系统资源是否在可接受的范围内,是否达到性能预期的目标。

1.2.5.2负载测试

对系统不断的增加并发请求以增加系统压力,直到系统的某项或者多项性能达到安全临界值。如某种资源已经呈饱和状态,这时对系统不断施加压力,系统的处理能力不但没有提高,反而下降。

1.2.5.3压力测试

超过安全负载的情况系,对系统继续施加压力。直到系统崩溃不能再处理任何请求,以此获得系统最大压力承受能力。

 

1.2.6 稳定性测试

 特定硬件,软件,网络环境条件下,给系统加载一定的业务压力。使系统运行一段较长的时间,以此检测系统的稳定性。

1.2.6.1 并发用户吞吐量曲线

如上图所示纵坐标表示系统的吞吐量,随着并发数据的不断增加,刚开始的时候就像在a~b这个区间里,系统的吞吐量会不断的增大,在b点的时候增大到我们设计的逾期目标,此时我们已经完成了性能测试。这个时候随着并发数量的继续增大,系统的吞吐量的增长逐渐放缓慢,直到达到如上图所示的c点最大值点,这是系统的最大负载点,也成为负载测试点。再次随着并发数量的不断增大系统的吞吐量不增返回下降了,直到达到资源的崩溃点d点,此时称为压力测试点。

1.2.6.2 并发用户响应时间曲线

随着并发用户的不断增长,系统的处理能力与用户访问的等待时间如上图所示,等待的响应时间将成一个线性平方阶的增长。

如上图所示是一个性能测试报告样例,随着并发数目的增长可以看出各个阶段的测试结果。

1.3网站性能优化

性能问题分析,先看处理的各个环节的日志,分析哪个环节响应的时间不合理,超过了逾期。性能因素先从内存,磁盘,网络,cpu入手,看是资源不足,还是代码设计不合理。

1.3.1 web前端性能优化

1.3.1.1减少http请求

手段有合并CSS,合并js,合并图片。通过把浏览器一次访问请求的多个CSS文件,JS文件合并成一个,减少页面端的请求加载。通过把多个图片合并成一个进行请求,再通过CSS来偏移鼠标点击操作,响应用户的请求。使用浏览器缓存策略的网站,如果要更新10个图片,不宜一次更新,10个图标文件,而应逐个更新,避免缓存失效,批量更新给服务器造成负载棸增,网络堵塞的情况。

1.3.1.2启用压缩

在服务器断对文件进行压缩,在浏览器断对文件进行解压,对CSS,HTML.javascipt启用gzip的压缩策略,进行压缩。

1.3.1.3 css放上面,js放在下面

浏览器加载完整个CSS后会对网页进行渲染,最好的做法是将css放在上面。让浏览器尽快下载CSS,最快的速度给用户渲染静态页面。js则与之相反。js加载完以后会立即执行,造成页面加载缓慢,所以要放在页面的底部。

1.3.1.4减少cookies的数据传输。

由于再发送请求的时候,浏览器会带上cookies进行传输,网络传输过程中由于cookies中携带了大量的数据,所以哪些数据应该写入cookies中应该慎重进行考虑。减少cookies中数据量的传输。另一方面,对于静态资源的访问,发送cookies是没有意义的。所以尽量使用动静分离的技术,把静态资源的请求域名,与动态数据请求的域名分开,减少cookies的传输次数。

1.3.1.5使用浏览器缓存

对于一个网站而言,css,js,图片,logo等的静态资源更新的频率比较低。而这些文件几乎是每次http请求都需要的,通过设置httpcache-controlexpires属性,可以设定缓存,并且指定缓存的失效时间,失效天数。如果某个js文件有更新,就更新js文件的名字重新生成js,并更新html的引用。

1.3.1.6使用CDN加速

cdn本质上是一个缓存,把数据缓存在离用户访问最近的地方,可以使用户以最快的速度获取到缓存。

cdn可以缓存一些静态资源,如图片,文件, css,js脚本等等,但这些资源请求的频率很高,所以可以大大改善网页的打开速度。

1.3.1.7反向代理

反向代理服务器,位于机房的一侧,代理用户的请求。可以通过在反向代理服务器端配置缓存,静态内容缓存在反向代理服务器上,加速web请求的速度,减轻web访问的压力。

1.3.2应用服务器性能优化

1.3.2.1缓存的基本原理

缓存是指将数据缓存在,相对较高速度的存储介质中,供系统处理。一方面缓存速度快,可以减少数据访问的时间。一方面缓存的数据是经过计算处理得到的,不需要再次经过计算就可以直接获得。因此缓存还起到减少计算时间的作用。缓存的本质就是一个内存中的数组,链表,或者哈希表

如上图所示,其实缓存就可以理解成为内存,计算机可以快速读取的,灵活的存储空间。缓存主要用来存放那些读写比,比较高的数据。比如商品类目,菜单模块,热门词条,等这些数据,访问的次数大于更新的次数。还有就是经过一次计算,后面经常查询的数据。这样的数据应该放置到缓存提高访问效率。

使用缓存进行工作的时候,在用户进行数据查询的时候,先去缓存中进行查询,如果缓存中没有数据,再通过数据库进行查询,把数据库中查询出来的数据备份一份到缓存中,如果缓存中有数据就直接返回给客户,避免了访问数据库的操作。如果用户更新数据库的数据,为了避免数据库与缓存的不一致性,可以同步更新缓存或者删除缓存的数据。网站数据访问,遵循二八定律,80%的访问落在20%的数据上,所以要把这20%的数据缓存起来,改善性能,提高访问速度,减少存储的压力。不要滥用缓存,徒增系统的负担,一般来说缓存中的数据至少是读写比为21的数据。如果数据访问不遵循二八定律,没有访问热点,那么缓存就没有实际的意义。

使用缓存要保证缓存的可用性,当使用缓存的地方多了,数据库已经习惯了缓存的存在,如果有一天缓存发生雪崩,将可能由于大量的访问命中数据库,造成数据库,压力过大而雪崩。所以要构造分布式缓存集群。

当部分缓存雪崩以后,只是部分缓存数据丢失,而不影响数据库,不对数据库造成压力。最好在系统启动的时候就把热点数据加载好,这叫做缓存预热,这样等系统启动以后访问的速度自然就很高了。

 

1.3.3异步操作

使用消息队列将系统异步化,改善网站的系统性能。

如上图所示是不使用消息队列的情况。(图一)

如上图所示是添加了消息队列的情况(图二)

(1) 如上图一所示,不使用消息队列的情况下,用户请求的数据要写入数据库,写入成功以后再响应客户,造成响应的延迟,高并发的情况下给数据库造成了很大的压力。图二中消息经过消息队列,到达数据库。用户请求送入消息队列之后就可以直接返回,提高用户的响应。而且高并发的情况下数据通过消息队列排队入库,不会给数据库,造成很大的负载压力。

消息队列能够很好的削峰的作用,比如12306,淘宝网站的秒杀等等的高并发的场景,就可以通过消息队列来消除峰值,进行排队等待。

如上图所示是通过消息队列进行峰值消除的一个曲线图。由于消息队列中的数据写入数据库可能失败,所示要适当修正业务流程。有些重要的事情比如结订单提交,如果放入消息队列之后不能立即提示用户,计较成功,而可以通过异步邮件通知的方式,在后面通知客户。让能晚点做的事情尽量晚点做。

1.3.4使用集群

高并发场景下负载均衡策略为一个应用构建了一个由多台服务器组成的集群。将并发访问请求分发到多台服务器上去处理。避免一台服务器因负载压力过大而响应缓慢。使用户请求具有更好的响应延迟特性。

1.3.5代码优化

   由于线程比进程更轻量,占用更少的系统资源,切换代价更小,所以目前主要的web服务器都采用多线程的方式响应用户的请求。因此网站开发天然就是多线程的。

   为什么使用多线程,原因就在于IO阻塞与多CPU.IO操作的时候会被阻塞,并释放CPU等待IO操作完成。由于IO操作通常需要较长的时间,这时可以调度其他线程进行处理。比如一个16核的CPU要提高cpu的利用率,就得使用多线程。多线程的使用要注意线程安全问题。不管有没有进行多线程编程,用户的访问都是并发的提交的,所有资源的访问都可能是并发的访问。线程安全的办法

1.3.5.1 将对象设计成无状态的对象

所谓无状态对象是本身不存储信息的,比如servlet,贫血模式等等的。我们的IXXXService以及底层实现,都是无状态的,因为它们不存储信息。而UserMap等的本来就是用来存储数据的对象都是有状态的,要考虑并发问题。

1.3.5.2 使用局部对象

线程内部对象,会被每一个线程独立创建,除非有意识的将这些对象传递给其他线程,否则不会出现对象被多线程并发访问。并发访问资源时,通过锁的方式让多线程并发操作,转化为顺序操作。避免资源被同步修改。

1.3.5.3资源复用

系统运行时要尽量减少开销很大的资源被创建与销毁。从编程的角度,资源的复用主要有两种模式:单例模式与对象池。web开发中从servicedao的对象都是无状态的,所以用单例也是自然的事了。对象池模式通过复用对象实例,减少创建和销毁资源消耗,比如频繁的打开或者关闭数据库连接是宰难性的。应用程序数据库的连接基本都使用连接池的方式,连接池对象创建好以后放到对象池当中,应用程序连接的时候就从对象池中取出一个连接来,用完以后再把连接放回去。再创建线程去处理负载业务的时候,可以才采用线程池的方式,提高资源的复用。

1.3.5.4 数据结构

在不同的场景下,合理使用不同的数据结构,可以改善程序的性能。比如我们的hash表,并发下的hash表等等的。在这个时间宝贵的年代,我们应该牺牲空间来换取时间。

1.3.5.5 垃圾回收

JVM虚拟机可以分为,堆区,栈区,方法区等等的,理解JVM的内存模型,有助于提高我们解决问题的能力与性能优化的能力。

JVM将应用程序的堆空间分为年轻代与老年代,又将年轻代分为eden,from,to区,新建对象总是在eden区被创建,eden区满了以后会触发一次yuongGC,通过复制算法复制到from区。整个eden区都是未被使用的空间,可以继续创建对象。再满,再触发一次GC,把在使用的eden中与from中的对象复制到to区。下一次GC又从to区复制到from区,这样来回的复制,达到阈值以后,对象还未释放,就复制到Old Generation区。当Old中的空间用完以后,就会触发一次Full GC,进行全量回收,全量回收的影响相对比较大,容易出现 java界所谓的stop the world的现象。

1.3.6 存储性能的优化

加索引

加物化视图

 


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

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

相关文章

高性能网站实用技巧之消息队列

什么是消息队列? 消息队列( Message Queue )是一种进程间通信或同一进程的不同线程间的通信方式。进程或者线程之间通过 消息 进行通信,消息发送后可以立即返回,由消息系统来确保信息的可靠传递,消…

现实世界的Windows Azure:专访PrivacyCentral网站创始人、CEO Zoiner Tejada

作为现实世界Windows Azure博客系列中的一部分,我联系了PrivacyCentral网站创始人、CEO Zoiner Tejada,来探寻该公司是如何利用Windows Azure平台及Ruby语言来搭建其强大的在线隐私服务。点击这里来了解PrivacyCentral的成功案例。下面我们来看看Tejada先…

后台网站制作步骤

撰写时间:2019年5月14日 星期二 作者:邱锡纶 首先我们可以看见这个后台网站我已经做好了,现在我就来总结一下这个后台网站的制作步骤,这个网站是我慢慢的一步一步慢慢的想,慢慢的改,改出来的,…

网站的设计构思

(撰写时间:2019年5月20日星期一 作者:邱锡纶)网站的好坏,除了外观,还有所实现的功能。还有安全性等。一般的企业网站要 实现的功能较少,应该价格比较低。但因为是企业,所以做网…

如何制作一个好网站

(作者:邱锡纶 撰写时间:2019年7月10日星期三)根据我在网上查到“怎么制作一个高端的好网站”的结果是高端网站建设没有那么简单,需要做市场调研、营销策划、搜索引擎优化、品牌视觉设计,还有用户体验&am…

用php写的亲亲鲜花网站_文案写的好的大佬,原来是用了这14个文案网站?

越来越多的人在自媒体文案上有一定的造诣,文案功底越来越强,当然也是他们不断的学习和利用好的平台工具让自己站的更高,借力就可以四两拨千斤,原来是他们用对了文案网站和视频软,建议你也赶紧收藏,文案写作…

增加索引会锁表吗_网站百度排名,内容增量一定要是权重指标吗?

声明:本文来自于微信公众号 蝙蝠侠IT(ID:batmanit),作者:蝙蝠侠IT,授权站长之家转载发布。如果你在长期做百度SEO一定会有这样一个明显的感觉,通过每天大量的输出相关性的内容,实际上是有利于提高网站的抓取频率与整站的权重。而对…

mongodb上一篇下一篇_一篇SEO领域的文章,直接被送上首页了

前几天写了一篇关于SEO优化的文章,今天无意间发现,这篇文章居然被放到首页了。以下是截图:那么我是怎么做到的呢?这样做有什么好处呢?这样做好处就是,可以提高你的品牌词曝光率,有一定的几率会让…

代理ip网站的ip怎么来的_代理IP的三大功能

使用代理IP来工作的人越来越多,许多用户都体验到了代理IP的便利和优势,特别是它变换IP地址的功能,对很多网络行业都有着非常大的帮助。除了变换IP地址之外,代理IP还有哪些高端大气上档次的功能呢?下面就由天启代理IP来…

educoder java答案数组进阶_十个适用于Java高级开发人员的交流网站

下面这些是我收藏的适合高级Java程序员去的网站,这些网站的内容包括了IT新闻、问题解答和职业面试等信息。好网站的核心在于其高质量的内容。在我看来,这些都属于最优秀的网站。我在介绍这些网站的同时也会分享一些自己的学习方式。你可能会认为其实任何…

如何将瀑布流里的图片加链接_如何提高网站建设效率

互联网时代,当我们在进行项目开发的时候,我们都在注重效率的提升,毕竟时间就是金钱。如何在有效的时间内进行高效率的开发建设,是我们从业者应该重视的问题。我们很多时候都注重网站建设本身,想着如何进行界面、代码优…

网站建设中 模板_使用模板建设网站有哪些弊端?

在最近一段时间内,我们曾经收到过了好几位新客户的请求,在这些请求中有很多都是来要求我们去帮助他们修改现在的已有网站。首先来说我们公司主要是定制和开发网站。在我们公司里也拥有很多非常专业的程序人员,无论是前端的设计和开发还是在后…

850是什么意思_850万人被丑拒!想加入这个交友网站咋这么难?

美国有一个交友网站,特别特别看脸。其实在交友网站上,大家注重颜值是很正常的啦。但这个网站已经把“看脸”做到了极致,域名就显示了它的核心精神:beautifulpeople.com(美人)。很多人都被它主打的会员高颜值特点吸引过来&#xff…

Linux环境下网站部署常用命令

1. 查看当前文件夹下面文件夹的大小 分析:除了常规查看,还可以通过分析文件夹,磁盘不够可以清理缓存。 du -h --max-depth1 2. 拷贝文件到指定的文件夹下面 分析:移动文件,不多说。 cp -R /data/www/public/images…

PHP结合阿里云实现网站滑块验证码的具体实例

目录滑块验证码样例关于滑块验证码开发准备系统编码附录滑块验证码样例 关于滑块验证码 滑块验证码主要的作用是方便用户进行快捷验证操作,但是同时要合理的辨别到底是机器操作还是人工操作,这一点显得难度比较大,是属于人机识别的智能开发范…

WEB网站常见受攻击方式及解决办法讲解

系统安全是一个经久不衰的话题,也是一个中大型系统必须考虑的问题,这是一门专门的学问,无数专家学者都在为之努力,今天小编就来向大家介绍一下常见的网站攻击方式以及避免攻击的方案。 跨站脚本攻击(XSS) XSS(Cross Site Scripti…

网站优化之文章

如何让所写文章被百度收录? 1、为什么自己原创高质还不收录? 提高收录量的前题两个,一是文章内容独特,二是网站本身权重高。谁说原创百度一定收录呢,你说的高质量原创,对于搜索引擎未必(或者说…

网站优化之百度推送代码

百度推送代码: 作用: 当页面被访问时,页面链接会自动推送给百度,有利于新页面更快被百度发现。 注:放在之前

网站优化之文章收录问题

文章有无被收录 直接将网址写入百度搜索栏,对于 未收录的文章 ,进行 站长后台 链接提交 。 国内几大搜索引擎网站提交收录地址: 百度:http://ziyuan.baidu.com/linksubmit/url 搜狗:http://fankui.help.sogou.com/ 36…