学习笔记5:《大型网站技术架构 核心原理与案例分析》之 瞬时响应:网站的高性能架构

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

不同的人员会有不同的衡量标准:用户,开发人员,运维人员。

一、性能测试指标

1、响应时间

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

2、并发数

系统能够同时处理请求的数目,这个数字反映了系统的负载特性,对于网站而言,并发数就是网站并发用户数,指同时提交请求的用户数目。

网站系统用户数》网站在线用户数》网站并发用户数

在网站设计初期,产品经理和运营人员就需要规划不同发展阶段的网站系统用户数,并以此为基础,根据产品特性和运营手段,推算在线用户数和并发用户数。

这些指标将成为系统非功能设计的重要依据。

3、吞吐量

指单位时间内系统处理的请求数目,体现系统的整体处理能力。

  • TPS:每秒事务数
  • HPS:每秒HTTP请求数
  • QPS:每秒查询数

响应时间,并发数,吞吐量,三者可以用高速公路来形容。响应时间是车速,并发量是正在行驶的汽车,吞吐量是今天通过收费站的汽车数目。

4、性能计数器

描述服务器或操作系统性能的一些指标,如系统负载,对象与线程数,内存,CPU,磁盘,网络IO等。

  • 系统负载(System Load):当前CPU正在执行和等待CPU执行的线程数目之和,是反映系统忙闲程度的重要指标。

二、性能测试方法

1、性能测试

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

2、负载测试

在性能测试的基础上,继续对系统增加并发请求,直到系统的某项或多项性能指标达到安全临界值,直到处理能力出现下降。

3、压力测试

在超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或停止服务,以获得系统最大压力承受范围。

4、稳定性测试

被测试系统在一定的硬件,网络,软件环境下,给系统加载一定的业务压力,运行一段较长时间,以此检测系统是否稳定

三、性能测试报告

并发数,响应时间,TPS,错误率,Load,内存,备注(性能测试/负载测试/压力测试)

四、性能优化策略

1、浏览器访问优化(此方法现在用的比较少)

2、CDN加速

3、反向代理

3、应用服务器性能优化

  • 分布式缓存

(1)、缓存的基本原理:对key进行hashcode得到int值,这个int值对hash表的长度取余数,余数结果就是缓存的索引值。

(2)、合理使用缓存

        频繁修改的数据不放入缓存,放入缓存的数据读写比例应该在2:1以上;

        没有热点的访问不放入缓存;

        数据不一致与脏读:缓存都有有效期,失效的缓存将被移除出内存,最新数据直接从数据库中读取。因此应用要容忍一定时间的数据不一致。

        缓存可用性:通过部署分布式缓存服务器解决缓存可用性问题。

        缓存预热:在系统启动之初就读取热点数据到缓存。

        缓存穿透:一些恶意的访问在缓存中会查无数据,就会直接与数据库交互。这些可以对这些没有查询结果的访问也缓存起来,避免频繁读取数据库。

  • 异步

使用消息队列将调用异步化,可改善网站的扩展性,同时也具有很好的削峰作用。

  • 集群

4、代码优化

  • 多线程

启动线程数=【任务执行时间/(任务执行时间-IO等待时间)】*CPU内核数。

如果是计算型任务,启动线程数最多不超过CPU内核数。反之可以加大线程数,可以增加系统吞吐量。

注意:线程安全问题。

主要解决手段:将对象设计为无状态对象;使用局部变量;并发访问资源时使用锁。

  • 资源复用:有两种主要模式:单例和对象池。
  • 数据结构:恰当的数据结构会使软件性能得到极大的提高。例如:原始字符串--->MD5--->信息指纹--->Hash计算--->HashCode。
  • 垃圾回收:如果web应用运行在JVM等具有垃圾回收功能的环境中,那么垃圾回收可能会对系统的性能产生巨大影响。全量回收对于系统性能会产生较大的影响。

因此要合理设置Young Generation和Old Generation。

5、存储优化:机械硬盘VS固态硬盘,B+树和LSM树,RAID和HDFS.

6、数据库优化