《大型网站技术架构》——第四章 瞬时响应:网站的高性能架构,


网站性能是客观的指标,可以具体体现到响应时间、吞吐量等技术指标,同时也是主观的感受。

用户视角的网站性能

在实践中,使用一些前端架构优化手段,使浏览器尽快地显示用户感兴趣的内容、尽可能近地获取页面内容。

  • 优化页面HTML式样
  • 利用浏览器端的并发和异步特性
  • 调整浏览器缓存策略
  • 使用CDN服务
  • 反向代理等手段

开发视角的网站性能

响应延迟、系统吞吐量、并发处理能力、系统稳定性等技术指标

  • 使用缓存加速数据读取
  • 使用集群提高吞吐能力
  • 使用异步消息加快请求响应及实现削峰
  • 使用代码优化手段改善程序性能

运维视角的网站性能

基础设施性能和资源利用率

性能测试指标

1响应时间

测试方法:重复请求取平均

2并发数

系统能够同时处理请求的数目,反映了系统的负载
网站系统用户数>>网站在线用户>>网站并发用户数
在网站产品设计初期,产品经理和运营人员就需要规划不同发展阶段的网站系统用户数,并以此为基础,根据产品特性和运营手段,推算在线用户数和并发用户数。
测试方法:多线程模拟并发用户。思考时间。

3吞吐量

单位时间内系统处理的请求数量,体现系统的整体处理能力。TPS/QPS
网站性能优化的目的,除了改善用户体验的响应时间,还要尽量提高系统吞吐量,最大限度利用服务器资源。

4性能计数器

描述服务器或操作系统性能的一些数据指标。
System Load:当前正在被CPU执行和等待被CPU执行的进程数目总和,是反映系统忙闲程度的重要指标。top命令查看

性能测试方法

  • 性能测试
  • 负载测试:临界值
  • 压力测试:系统最大压力承受能力
  • 稳定性测试:
  • 性能测试曲线

性能优化策略

对请求经历的各个环节进行分析,排查可能出现性能瓶颈的地方,定位问题。
代码问题/架构设计不合理/系统资源不足

Web 前端性能优化

一般说来Web 前端指网站业务逻辑之前的部分,包括浏览器加载、网站视图模型、图片服务、CDN服务等,主要优化手段有:

1优化浏览器访问

2CDN加速

将数据缓存在离用户最近的地方——网络访问第一跳
CDN部署在网络运营商的机房
一般是静态资源

3反向代理

传统代理服务器位于浏览器一侧,代理浏览器将HTTP请求发送到互联网上
反向代理服务器位于网站机房一侧,代理网站Web服务器接收HTTP请求

  • 安全功能
  • 配置缓存加速Web请求
  • 负载均衡

应用服务器性能优化

应用服务器就是处理网站业务的服务器,优化手段主要有缓存、集群、异步等。

1分布式缓存

网站性能优化第一定律:优先考虑使用缓存优化性能
缓存指将数据存储在相对较高访问速度的存储介质中,以供系统处理。

  • 访问速度快
  • 缓存被计算的数据,减少重复计算

缓存主要用来存放读写比很高、很少变化的数据
网站数据访问通常遵循二八定律,即80%的访问落在20%的数据上。缓存这20%的数据,可以很好地改善系统性能,提高数据读取速度,降低存储访问压力。

缓存滥用

  • 频繁修改的数据:一般数据的读写比在2:1以上,即写入一次,至少读取两次,缓存才有意义
  • 没有热点的访问:不遵循二八定律,可能还没有被再次访问就被挤出缓存
  • 数据不一致与脏读:容忍一定时间的数据不一致
  • 缓存可用性:缓存雪崩,缓存服务器崩溃时,数据库因为完全不能承受如此大的压力而宕机,进而导致整个网站不可用。
  • 缓存预热:新启动的缓存系统,在重建缓存数据的过程中,系统的性能和数据库负载都不太好,那么最好在缓存系统启动时就把热点数据加载好。
  • 缓存穿透:因为不恰当的业务、或者恶意攻击持续高并发地请求某个不存在的数据,由于缓存没有保存该数据,所有的请求都会落到数据库上,对数据库造成很大压力,甚至崩溃。将不存在的数据也缓存起来。

产品在设计之初就需要一个明确的定位:什么是产品要实现的功能,什么不是产品提供的特性。在产品漫长的生命周期中,会有形形色色的困难和诱惑来改变产品的发展方向,左右摇摆、什么都想做的产品,最后有可能成为一个失去生命力的四不像。

分布式缓存架构

缓存部署在多个服务器组成的集群中。

2异步操作

使用消息队列将调用异步化,可改善网站的扩展性和系统性能。
削峰作用:通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。

3使用集群

负载均衡

4代码优化

多线程

从资源利用的角度看,使用多线程的原因主要有两个:IO阻塞与多CPU。
启动线程数=[任务执行时间/(任务执行时间-IO等待时间)]*CPU核数
线程安全的主要手段:

  • 将对象设计为无状态对象——不过从面向对象设计角度看,无状态对象是一种不良设计。贫血模型对象?
  • 使用局部对象:在方法内部创建对象
  • 并发访问资源时使用锁:将并发操作转化为顺序操作

资源复用

尽量减少那些开销很大的系统资源的创建和销毁,比如数据库连接、网络通信连接、线程、复杂对象等。
两种模式:

  • 单例:目前从Service到Dao都是些无状态对象,无需重复创建
  • 对象池:复用对象实例,减少对象创建和资源消耗。如数据库连接池、线程池等。

数据结构

垃圾回收

如JVM垃圾回收机制

存储性能优化

传统的机械磁盘具有快速顺序读写、慢速随机读写的访问特性
固态硬盘
B+树——传统关系数据库
LSM树——NoSQL
RAID——传统关系数据库及文件系统
HDFS配合MapReduce——NoSQL及分布式文件系统

网站性能优化的主要工作是改善并发用户访问情况下的网站响应速度。

相关内容

    暂无相关文章