《大型网站技术架构:核心原理与案分析》阅读笔记03

4.顺势响应:网站的高性能架构

  什么是高性能的网站?

  网站性能是客观的指标,可以具体体现到响应时间、吞吐量等技术指标,同时也是主观的感受,而感受则是一-种 与具体参与者相关的微妙的东西,用户的感受和工程师的感受不同,不同的用户感受也不同。

网站性能测试

  性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。

  网站性能在不同的视角下分为三类,以及其优化手段如下:

    1.用户视角:网站的响应速度。在实践中,使用一些前端架构优化手段,通过优化页面HTML式样、利用浏览器端的并发和异步特性、调整浏览器缓存策略、使用CDN服务、反向代理等手段,使浏览器尽快地显示用户感兴趣的内容、尽可能近地获取页面内容,即使不优化应用程序和架构,也可以很大程度地改善用户视角下的网站性能。

    2.开发人员的视角:应用程序本身及相关子系统的性能。主要的优化手段有使用缓存加速数据读取,使用集群提高吞吐能力,使用异步消息加快请求响应及实现削峰,使用代码优化手段改善程序性能。

    3.运维人员:关注设施性能和资源利用率,如网络运营商的带宽能力、服务器硬件的配置、数据中心网络架构、服务器和网络带宽的资源利用率等。主要优化手段有建设优化骨干网、使用高性价比定制服务器、利用虚拟化技术优化资源利用等。

  不同视角下有不同的性能标准,不同的标准有不同的性能测试指标,从开发和测试人员的角度,网站性能测试的主要指标有响应时间、并发数、吞吐量、性能计数器等。

  性能测试方法:

    1.性能测试

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

    2.负载测试

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

    3.压力测试

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

    4.稳定性测试

      被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力, 使系统运行- -段较长时间,以此检测系统是否稳定。在不同生产环境、不同时间点的请求压力是不均匀的,呈波浪特性,因此为了更好地模拟生产环境,稳定性测试也应不均匀地对系统施加压力。

Web前端性能优化

  浏览器访问优化

    1.减少http请求

    2.使用浏览器缓存

    3.启用压缩

    4.CSS放在页面最上面,JavaScript放在页面最下面

    5.减少Cookie传输

   

  CDN加速

    CDN的本质仍然是一个缓存,将数据缓存在离用户最近的地方,使用户以最快的速度获取数据。

  反向代理

                                             

应用服务器性能优化

  分布式缓存

    使用缓存对提高系统性能有很多好处,但是不合理使用缓存非但不能提高系统的性能,还会成为系统的累赘,甚至风险。实践中,缓存滥用的情景屡见不鲜,过分依赖低可用的缓存系统、不恰当地使用缓存的数据访问特性等。合理使用缓存,需要避免一些问题

      1.频繁修改的数据

        如果缓存中保存的是频繁修改的数据,就会出现数据写入缓存后,应用还来不及读取缓存,数据就已失效的情形,徒增系统负担。一般说来,数据的读写比在2:1以上,即写入一次缓存,在数据更新前至少读取两次,缓存才有意义。实践中,这个读写比通常非常高,比如新浪微博的热门微博,缓存以后可能会被读取数百万次。

      2.没有热点的访问

        缓存使用内存作为存储,内存资源宝贵而有限,不可能将所有数据都缓存起来,只能将最新访问的数据缓存起来,而将历史数据清理出缓存。如果应用系统访问数据没有热点,不遵循二八定律,即大部分数据访问并没有集中在小部分数据上,那么缓存就没有意义,因为大部分数据还没有被再次访问就已经被挤出缓存了。

      3.数据不一致与脏读

        一般会对缓存的数据设置失效时间,一旦超过失效时间,就要从数据库中重新加载。因此应用要容忍一定时间的数据不一 致,如卖家已经编辑了商品属性,但是需要过一段时间才能被买家看到。在互联网应用中,这种延迟通常是可以接受的,但是具体应用仍需慎重对待。还有一种策略是数据更新时立即更新缓存,不过这也会带来更多系统开销和事务一致性的问题。

      4.缓存可用性  

        缓存是为提高数据读取性能的,缓存数据丢失或者缓存不可用不会影响到应用程序的处理它 可以从数据库直接获取数据。但是随着业务的发展,缓存会承担大部分数据访问的压力,数据库已经习惯了有缓存的日子,所以当缓存服务崩溃时,数据库会因为完全不能承受如此大的压力而宕机,进而导致整个网站不可用。这种情况被称作缓存雪崩,发生这种故障,甚至不能简单地重启缓存服务器和数据库服务器来恢复网站访问。实践中,有的网站通过缓存热备等手段提高缓存可用性:当某台缓存服务器宕机时,将缓存访问切换到热备服务器上。但是这种设计显然有违缓存的初衷,缓存根本就不应该被当做一个可靠的数据源来使用。

      通过分布式缓存服务器集群,将缓存数据分布到集群多台服务器上可在一-定程度上改善缓存的可用性。当一台缓存服务器宕机的时候,只有部分缓存数据丢失,重新从数据库加载这部分数据不会对数据库产生很大影响。

使用缓存对提高系统性能有很多好处,但是不合理使用缓存非但不能提高系统的性能,还会成为系统的累赘,甚至风险。实践中,缓存滥用的情景屡见不鲜一过 分依赖低可用的缓存系统、不恰当地使用缓存的数据访问特性等。

原文地址:https://www.cnblogs.com/ywqtro/p/14337171.html