【读书笔记】网站的高性能架构

前言

本菜鸡之前有过一篇读书笔记,整理了李智慧老师所著的《大型网站技术架构》一书中叙述的五个架构要素。这五个要素分别为 性能、可用性、伸缩性、扩展性、安全性本文针对性能这一要素进行展开讨论,内容也主要参考自《大型网站技术架构》这本书(一万分推荐这本书,个人认为这本书可以说是技术架构导论一样的存在了)。

性能指标

一、响应时间

指某个请求从发出到接收到响应消耗的时间。

在对响应时间进行测试时,通常采用重复请求的方式,然后计算平均响应时间。

二、吞吐量

指系统在单位时间内可以处理的请求数量,通常使用每秒的请求数来衡量。

吞吐量的几个常用量化指标:

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

三、并发数

指系统能同时处理的并发用户请求数量。

在没有并发存在的系统中,请求被顺序执行,此时响应时间为吞吐量的倒数。例如系统支持的吞吐量为 100 req/s,那么平均响应时间应该为 0.01s。

目前的大型系统都支持多线程来处理并发请求,多线程能够提高吞吐量以及缩短响应时间,主要有两个原因:

扫描二维码关注公众号,回复: 6680689 查看本文章
  • 多 CPU
  • IO 等待时间

使用 IO 多路复用等方式,系统在等待一个 IO 操作完成的这段时间内不需要被阻塞,可以去处理其它请求。通过将这个等待时间利用起来,使得 CPU 利用率大大提高。

并发用户数不是越高越好,因为如果并发用户数太高,系统来不及处理这么多的请求,会使得过多的请求需要等待,那么响应时间就会大大提高。

性能优化

根据网站分层架构,可分为:

  • Web前端性能优化
  • 应用服务器性能优化
  • 存储服务器性能优化

接下来将对前两种优化手段进行介绍。

Web前端性能优化

一、减少 HTTP 请求

减少 HTTP 请求可有效提高访问性能,手段主要有合并 CSS、合并 JavaScript、合并图片。

二、使用浏览器缓存

CSS、JavaScript、Logo、图标等这些静态文件不需要每次都去执行 HTTP 请求来获得。我们可以将这些文件缓存在浏览器中。通过设置 HTTP 头中 Cache-Contro l和 Expires 的属性,可设定浏览器缓存,缓存时间可以是数天,甚至是几个月。

三、启用压缩

在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效减少通信传输的数据量。

四、CSS 放在页面最上面,JavaScript 放在页面最下面

五、减少Cookie传输

因为 Cookie 包含在每次的请求和响应中,太大的 Cookie 会严重影响数据传输,因此要慎重考虑需要写入的 Cookie

六、使用 CDN、反向代理

CDN(Content DIstribute Network),内容分发网络,本质是一个缓存,它将数据缓存在离用户最近的地方(部署在离终端用户最近的网络运营商的机房),使用户以最快速度获取数据,即所谓网络访问第一跳。
在这里插入图片描述

反向代理,除了用作负载均衡、保证应用服务器安全性以外,同CDN一样,可以将数据缓存在反向代理服务器上。

在这里插入图片描述
无论是使用 CDN 还是反向代理,核心思想都是将常用的请求资源缓存起来,使得 HTTP请求不用到达应用服务器就能得到响应。

应用服务器性能优化

一、使用缓存

网站性能优化第一定律:优先考虑使用缓存优化性能。

缓存能够提高性能的原因如下:

  • 缓存数据通常位于内存等介质中,这种介质对于读操作特别快;
  • 缓存数据可以位于靠近用户的地理位置上;
  • 可以将计算结果进行缓存,从而避免重复计算

二、使用集群

将多台服务器组成集群,使用负载均衡将请求转发到集群中,避免单一服务器的负载压力过大导致性能降低。

在这里插入图片描述

三、使用异步操作

使用消息队列将调用异步化,可改善网站的扩展性,事实上使用消息队列还可以改善网站系统的性能。
在这里插入图片描述
某些流程可以将操作转换为消息,将消息发送到消息队列之后立即返回,之后这个操作会被异步处理。用户的响应延迟可以得到有效的改善。

而且消息队列具有很好的削峰作用它可以将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。在电子商务网站促销活动中,合理的使用消息队列,可有效抵御促销活动刚开始大量涌入的订单对系统造成的影响。

猜你喜欢

转载自blog.csdn.net/u013568373/article/details/91357120