一.定义
网站响应时间是指系统响应请求的时间。一般来说,就是我们把网站地址输入浏览器,然后打回车键,直到浏览器把网站的内容呈现给用户的时间。网站响应时间越短越好,因为网站页面打开越快,我们的用户访问网站或者我们的服务器就越快。一般网站的响应时间要保持在100~1000ms,1s=1000ms,打开速度越快,用户体验越好。
响应时间并不能直接反映网站的性能,但在一定程度上反映了网站系统的处理能力,也给用户最直观的感受。如果网站的响应时间过长,比如超过10秒,用户的流失率就会大大增加,所以将响应时间控制在一定范围内是提升用户体验的第一要素。
第二,解决方案
当用户请求一个网站数据时,实际上是发送一个Http请求,这个请求在宏观上可以分为两部分:
在Http请求到达目标网站服务器之前;
Http请求到达目标网站服务器后。
如果忽略硬件部分和一些细节,请求一个网站数据的一般流程如下图所示(cdn和缓存部分可以省略):
如果我们想缩短一个网站的响应时间,本质上就是加快数据的返回速度。说白了就是要加快请求数据过程中的所有步骤,这样整体的响应时间就会缩短。
数据离用户越近,响应时间越快。
客户
客户端是网站请求的来源。事实上,这个源可以应用某些策略来大大缩短某些数据的获取时间。其中,缓存是最常用的一种。将一些常用且很少变化的资源缓存在客户端,不仅可以缩短获取资源的时间,还可以大大减轻服务器的压力。比如一些图片、css、Js文件,甚至一些界面数据或者整个网页内容都可以缓存在客户端。此外,Http请求的合并还可以减少对服务器的请求数量,在一定程度上可以缩短请求的响应时间。
十进位计数制
一般通过域名(很少通过ip)访问网站。既然是域名,就涉及到dns解析的速度。如果dns服务解析的速度慢,整个流程的响应时间会延长,但实际上这个流程很少有慢的问题(不是说没有问题)。
网络
客户端获取网站ip后,通过网卡发送Http请求,目标地址是对应的网站服务器。在这个过程中,如果客户端和服务器的带宽比较小,那么响应时间就会增加。我以前发现客户端的响应时间很长是因为服务器的带宽太小。
当然,网络是不可靠的,这个过程的响应时间其实取决于很多因素,比如路由器的路由策略是否最优,整个过程经过的网关数据量。所以很多网站实际上是部署在多个区域、多个机房,为了让用户通过较短的网络路径到达网站(其实这个过程中运营商的选择也有影响)。
网站
当请求到达网站服务器时,服务器开始处理该请求。一般有专门处理业务请求的业务层,有些是Rpc协议的微服务,有些只是简单的一个代码分层。最终请求的数据将通过查询数据库返回。
其实这个过程和车站的购票过程是一样的。每个窗口的处理能力是有限的,对应的是服务器的处理能力。为此,负载均衡的策略诞生了,核心思想是:划分。一台服务器不够,那么两台、三台、四台...直到所有并发请求的响应时间都在可控范围内。
数据库的情况类似。如果一个数据库承受不了压力,就会加入N个数据库来分散压力。如果一个表承受不了压力,就会被拆分,拆分成多个表,甚至拆分成多个不同的服务器数据库。这是我们常见的分表策略。有时,在同一个数据库中拆分表并不能最大限度地提高性能,因为服务器的磁盘io有一个上限。即使拆分成100个表,也还是在同一个物理磁盘上。当然,这样可以缓解锁单表的情况。
目前有很多使用nosQL代替关系数据库来缩短响应时间的场景。一般情况下,由于在特定场景下关系型数据库的读写速度比nosQL慢很多,所以在系统设计的前期可以考虑关系型数据库和nosQL的混合解决方案。
躲藏
当并发请求达到一定程度时,瓶颈大多出现在db层面,即使db再怎么优化也总是有上限的。为了避免频繁的数据库查询带来的瓶颈,缓存诞生了。在访问数据库之前,会添加缓存层。当然这里的缓存的响应时间要比数据库短很多,比如常用的Redis和memcache。但是这些第三方缓存组件还是要经过网络,比进程内缓存慢很多。
现在流行的设计在网站层和服务层都有缓存策略,只是缓存的数据和策略不同,但最终目的都是为了加快请求的响应。当然,加入缓存后,数据的一致性需要精心设计。如果数据不一致,程序员可能要背黑锅。
减轻数据库压力并不是引入缓存的唯一因素。
Cdn加速
有些小厂可能不会用cdn,但是cdn带来的加速还是很客观的。Cdn依托部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,让用户就近获取所需内容,减少网络拥塞,提高用户的访问响应速度和命中率。Cdn就是把最接近的数据还给用户。
第三,写在最后。
实际上,程序异步并不能缩短响应时间,但可以大大提高吞吐量。
Copyright © 2019-2025 but6.com. All Rights Reserved. 八特科技 版权所有 深圳市八特科技有限公司 粤ICP备2022103497号-1