网站架构5要素--性能

网站架构5要素–性能

  1. 性能
  2. 可用性
  3. 伸缩性
  4. 扩展性
  5. 安全性

评价一个网站性能的最直观标准是:1个人访问时快不快??2个人访问时快不快??1万个人同时访问快不快??。但技术人员,需要关注更细致的指标:响应时间、并发数、吞吐量;内存、CPU、IO、带宽等等。

只有一两个用户访问网站时,页面很快就打开了,一两百个用户并发访问,速度虽然有所下降,但还是能够被用户接受,这时网站的吞吐量也上去了。一两万个用户时系统负载增高,资源逐渐耗尽,吞吐量反而下降,响应时间也更慢了。此时系统慢在哪里,瓶颈在哪?内存不够?CPU繁忙?IO负荷高?带宽不够等等?

响应时间

用户从点击一个URL到页面成功显现,可能会经历很多环节,每个环节都有自己的处理响应时间,如:

  • DNS解析域名时间
  • 网络节点各跳数转输时间
  • 反向代理、负载均衡等前端服务器处理时间
  • 分布式缓存数据传输时间
  • CPU调度等待及处理时间
  • 内存数据交换时间
  • 数据库查找与传输时间
  • 磁盘寻址、IO时间
  • 页面渲染时间
  • 等等……

有些环节的处理时间貌视小,而不加注视,但此时需要考虑如果单次处理的数据量很大呢?是不是也有可能导致这些环节的响应时间加大呢?

并发数

一个真实用户打开一个网站,可能给网站带来2个以上的并发用户数压力,因为浏览器采用多线程并发下载方式,但同时也对同一个域名下的并发连接有做控制(可修改),依据各个浏览器的不同,这并发连接数默认值介于(2-8)。

吞吐量

吞吐量的衡量标准有:QPS(请求数/s)、TPS(业务数/s)。

计数器

包括内存、CPU、IO、网络流量、OS负载。这些都是很有必要的系统监控信息。一旦某项指标超过预设阈值时自动报警。

性能测试

性能测试是在网站上线前用于检测网站性能是否达到预期目标的有效方法。测试过程中收集各项性能指标值,分析瓶颈所在。

  1. 性能测试:网站日常运行期间内的性能情况。
  2. 负载测试:持续加压以获取网站最佳运行点。
  3. 压力测试:加压于系统崩溃以获取系统最大承受压力值。
  4. 稳定性测试:特定软、硬件、网络下,在不同时间点对业务功能不均匀加压。

性能优化

  1. Web前端性能优化。
  2. 应用服务器性能优化。
  3. 存储服务器性能优化。
  4. 代码优化。

前端优化

  • 减少http请求数
    合并CSS、JS、背景图片,减少请求数。

  • 使用浏览器缓存
    静态资源文件可以在多个环节被缓存:浏览器、CDN、反向代理服务器等等。 对于过期时间的控制, 可以在http响应头中看到如下三项信息:
    最后修改时间:Last-Modified:Mon, 23 Mar 2015 18:32:41 GMT
    过期绝对时间:Expires:Thu, 17 Apr 2025 02:55:56 GMT
    过期相对时间:Cache-Control:max-age=315360000
    其中相对时间是为了解决服务端时间与客户端时间不一至的问题。

  • 启用GZIP压缩
    启用GZIP压缩可以减少网络传输的数据量,文本文件的压缩率可达80%以上。也就是100kb的文件,压缩后在网络中传输的数据量只有20kb。

  • 减少Cookie
    浏览器对单个域名下的Cookie大小(4k)、个数(20-50)都是有限制的。每一次HTTP请求都包含域名下的Cookie在头信息中。Cookie太大无疑增加了数据传输量。

  • 使用不同域名切分资源
    浏览器对单个域名下并发连接数是有限制的(2-8),通过二级域名的方法将图片等静态文件进行划分访问,增大浏览器的并发请求处理能力。一定程度上加快浏览器渲染速度的,但也不要太多,一般维系在2-4个域名就可以了。

  • CDN
    内容分发网络,本质也是一个缓存,它可以将图片、文件、CSS、JS、静态html等缓存在离用户最近的网络运营商的机房,用户在访问该资源时,DNS将域名CName(别名)到CDN,从而减少请求路由跳数,以最短路径返回响应。减少响应时间的同时也减轻了后端服务器压力。

  • 反向代理
    在这个七层负载的前置服务器中同样是可以进行缓存的设置。所有请求都需要经过它,从而在用户与RS间建立起了安全屏障。

后端优化

  • 分布式缓存
    网站性能优化第一定律:优先考虑使用缓存优化性能。二八定律:80%的访问落在20%的数据上,缓存可以是:部分或整体页面html,复杂计算结果、数据集合,单条行数据等。 需要注意的是缓存的数据必需是:热点数据,是读取次数大于 修改次数的。

  • 异步操作
    使用消息队列将调用异步化,就是说能够晚点做的事情就晚点再做,比如:成功下单后发邮件,这个发邮件的操作就可以异步化。异步操作是有效的 削峰 方法,将数据写入消息队列后立即响应用户。

  • 集群
    一匹马力气再大也敌不过两匹马、三匹马,而且单匹马死掉了,你的车也就走不了了(单点),所在网站高并发场景下,使用负载均衡构建一个由多台服务器共同支撑的集群是很有必要的。可以分摊并发请求的压力。

存储优化

  • 机械硬盘与 SSD
    最大速度也就100M上下。所在可以在某些对速度有要求的场景中,适当使用SSD代替机械硬盘。也可采用RAID磁盘阵列提高磁盘并发读写能力。
    RAID0:并发快,一份数据分N份,同时写入N块磁盘,坏一块磁盘,数据全部坏。
    RAID1:一份数据同时写和两块磁盘,写一块,备份一块,冗余。
    RAID10:磁盘分两份,数据同时写到在两份磁盘上

  • 分布式文件系统

代码优化

应用软件配置优化

你可能感兴趣的:(架构设计)