今天学习了网站的性能测试一个网站的性能,在不同的视角下,它的表现是不一样的,如果处在用户的视角,那么访问网站的速度无疑是关键的指标,如果是从开发人员的视角,那么就会有一些参数,包括响应延时系统的吞吐量并发的处理能力和系统的稳定性,这些指标如果是从运维的视角来看,那么硬件资源的利用率,硬件的配置是否足够的高,都成为衡量一个网站性能的主要指标。
那么对于网站开发人员,实际上性能测试指标是他最需要关注的性能测试指标有哪些呢?首先是响应时间是指应用执行一个操作所需要的时间。第二是并发数,是系统能够同时处理请求的数目,第三是吞吐量,是指单位时间内能够处理请求的数目,第四,是性能计数器性能的计数器,包含系统负载对象与线程的数目,内存使用CPU的使用磁盘和网络的i/o。
接下来介绍了性能测试的方法,首先总的概括了一下性能测试,其次是复杂的测试压力测试以及稳定性测试,这几种测试有什么区别和不同?那么性能测试是在正常情况下系统的表现,负载测试是到达一个临界值以后系统的性能就会变差,在这个临界值以后继续增加并发数,系统就会变得不可用而不可用的临界点就是压力测试主要测试的结果。根据性能测试的数据,可以编制性能测试报告,首先随着并发素的增加在性能测试中正常情况下,它的响应时间会逐步的增大,吞吐量也会逐步的增大,正常情况下它的错误率会保持正常的状态,负载也是逐步的增大内存的,占用率也是逐步的增大。当用户的并发数达到一个值以后,吞吐量还是在增大,但是错误率也同时上升负载真大内存占有量也同时增大。这个时候有可能就达到了负载的临界值。进一步增加访问请求的并发数,此时通吐量开始下降错误率成倍增加,负载增加内存消耗的数量不变,这个时候已经达到了负荷最大值。继续增加并发数,结果系统变得不可用。这是系统不可用的阈值这叫做压力测试。对于性能测试报告我们可以影响系统性能的因素进行分析,这个分析是分析影响网站性能的各个环节。问题是出在内存硬盘网络还是CPU或者是代码问题?找到了问题的原因,就可以对性能进行优化了。根据网站的层次结构,可以把网站分成前端应用服务以及数据才四层那么优化也是可以分别对前端应用服务和数据层进行分别的优化,具体的优化,每一个层次都有相应的措施。
首先看一下前端包含什么,首先是浏览器,其次是cdn加速,然后是反向代理,那反向代理服务器实际上也叫做前端缓存。凡是通过集群可以优化的通常都需要有一台负载均衡服务器,对于应用的优化,主要也是通过集群的方式进行的。缓存的基本原理是通过键值的方式,通过哈希算法对键值进行哈希运算算出在缓存中的具体的为之所影响,然后根据该索引来找到数据存储的具体的位置。既然是缓存,肯定是要从缓存中读取经常使用的数据,这个数据是遵循二八规律的,也就是80%的访问会落在20%的数据上,所以如何鉴别这20%的数据是需要通过筛选进行的。
对缓存的合理使用需要注意几个方面,首先对于频繁修改的数据,不要放在缓存当中,因为可能造成缓存还未来得及去读取,就已经失效的结果,第二对于比较冷门的数据,不要放在缓存当中。因为数据存放在缓存中,缓存有一个更新时间,所以有可能会出现服务端数据已经更新,但是在缓存中还数据还未被更新的情况,这导致数据的不一致性,在互联网应用中有时候这种不一致性是可以接受的,但是在其他的情况,比如实施交易,这种更新是不能被接受。一种解决办法是,如果数据更新了,代码立即触发在缓存中的更新,不过这会给系统带来更多的开销。现在的数据存储越来越依赖于缓存,一旦缓存失效那么数据库的压力就会变大,从而可能导致数据库无法访问。通常可以把缓存的数据放在分布式缓存服务器集群中,当某一台缓存服务器宕机后,其他的服务器可以接受宕机服务器的负载,从而增强缓存的可用性。
缓存预热是指当缓存启动的时候,缓存服务器里面是没有任何数据的,我们可以根据一定的策略将现有的数据提前加载到缓存中,这叫做缓存预热。如果缓存中没有数据,那么应用会直接到数据库中读取数据,从而导致数据库压力增大这叫做缓存穿透,为了避免缓存传统,我们可以把不存在的数据也放在缓存中,以null表示。
分布式缓存是指在多个服务器组成的集群中,以集群的方式来提供缓存服务。主要有两种比较常见的分布式缓存架构,一种呢是在应用服务器上部署缓存,但是或应用服务器上的缓存,服务之间需要进行同步数据如果集群中的服务器数量太多那么每台服务器之间都会进行这种同步的过程,从而导致服务器与服务器之间的连接数量太多而无法保证集群规模的不断扩大,所以这种方式通常应用在企业应用系统中,因为企业应用系统应用规模和缓存需求相对来说比较小。另一种分布式缓存服务器集群,服务器与服务器之间并不进行信息同步,而每台应用服务器和不同的缓存服务器之间建立连接,从而能够实现缓存服务器的可伸缩性,在高并发流量的情况下,缓存服务器可以不断的添加服务器来增强缓存的能力。
异步操作就是队列机制如果一个请求被发送后无法立即响应可以把该请求放在队列中进行排队,不需要马上处理的服务就叫做异步服务。异步服务对于消剪互联网流量的高峰以及并发处理有很好的效果。可将短时间高并发产生的任务存储在消息队列中,由各服务的消费者从队列中取任务进行处理从而避免消息的拥塞。
对于集群服务,是在高并发的场景下,通过负载均衡技术像集群中增加或者是减少服务器的数量,从而实现系统的可伸缩性的一种方式。这不仅避免了单一服务器处理多并发请求而导致的服务器性能不足的问题,而且还可以实现系统的可靠性当一台服务器宕机了以后,其他的服务器可以结果任务保证系统业务的持续进行。
在网站应用中,海量的数据,也就是大数据对磁盘访问会造成巨大的压力,虽然他可以通过缓存来分担一部分压力,但是很多时候磁盘仍然是系统中最主要的瓶颈。磁盘通常包括机械硬盘以及固态硬盘,机械硬盘对于顺序读取的数据效果比较好,但是对于随机访问的数据读取效果比较差。而固态硬盘恰好相反。由于网站应用中大部分访问的数据都是随机的,所以固态硬盘作为存储具有很大的优势。
对于数据存储来说,要把数据存入数据存储系统,必须对数据进行排序然后按顺序大数据存入数据存储系统,以便加快数据的检索速度,并且能够在数据不断更新插入删除后,依然保持顺序。b+树是一种专门针对磁盘存储而优化的n叉排序树。lsm是另外一种树结构。可以看作是n阶合并数。无论是对象存储还是nosql存储都可以使用b+树或lsm树。
raid0就是以次存储,raid1是镜像,raid10分两份,分别做raid1后再做raid0。raid5和raid6是做了螺旋式的校验,分别可以容许换一块磁盘和两块磁盘。
hdfs可以看成是在存储集群的多台服务器上,实现类似raid的功能。当他要写入数据的时候,会把数据分割成若干个块,当服务器写入一个块后,hdfs会将其自动复制到另外两台机器上,以保证该快有三个副本。当对文件进行处理的时候通过mapreduce并发计算任务框架可以启动多个子任务同时读取文件的多个块儿做并发处理相当于raid0的并发访问功能。
网友评论