点击上方“蓝字”带你去看小星星

菜菜哥,请你看电影呀,但是得帮我一个忙

好呀,看什么?

哥斯拉2:怪兽之王

看过了~

X战警:黑凤凰

看过了

追龙2和黑衣人呢?

都看过了,你说帮什么忙吧

我一个网站响应特别慢,你帮我优化一下呗,很简单

你以为真的很简单吗?

你以为真的很简单吗?

定义

网站响应时间是指系统对请求作出响应的时间。通俗来讲就是我们把网址输入进浏览器然后敲回车键开始一直到浏览器把网站的内容呈现给用户的这段时间。网站响应时间是越短越好,因为网站页面打开速度越快,就意味着我们的用户可以更快的访问站点或者我们的服务器。一般我们网站的响应时间保持在100~1000ms即可。1m=1000ms,打开速度越快对用户体验度越好。据说响应时间还会影响到网站SEO效果(请行业专家留言告诉我)。

响应时间并不能直接反映网站性能的高低,但是在一定程度上反应了网站系统的处理能力,也是给用户最直观上的感受。如果网站的响应时间过长,比如10秒以上,用户的流失率会大大增加,所以把响应时间控制在一定范围内是提高用户体验度的第一要素。

解决方案

当用户请求一个网站数据的时候,实际上是发送了一个http请求,在宏观上可以分为两个部分:

1. http请求到达目标网站服务器之前

2. http请求到达目标网站服务器之后

如果忽略其中硬件部分和部分细节,请求一个网站数据的大体过程如下图所示(其中CDN和缓存部分可以省略):

我们要想缩短一个网站的响应时间,本质上是提高数据的返回速度,说的直白一点就是要把请求数据过程中的各个步骤提高速度,这样整体下来响应时间就会缩短。

把数据放在离用户越近的地方响应时间越快

客户端

客户端是发起一个网站请求的源头,其实这个源头可以施加一定的策略来大大缩短某些数据的获取时间。其中最为常用的就是缓存,一些常用的,很少变动的资源缓存在客户端,不但能缩短获取资源的时间,而且在很大程度上能减轻服务端的压力。比如一些图片,css,js文件,甚至一些接口的数据或者整个网页内容都可以在客户端做缓存。另外http请求的合并也可以减少对服务端的请求次数,在一定程度上可以缩短请求的响应时间。

DNS

一般网站的访问方式都采用域名的方式(很少见IP方式),既然是域名就涉及到DNS解析速度的问题,如果DNS服务解析的速度比较慢,整体过程的响应时间也会加长,不过这个过程其实很少出现慢的问题(不是说没有)。DNS的解析过程可以查看这篇文章

网络

客户端获取到网站IP之后通过网卡把Http请求发送出去,目标地址为相应的网站服务器。在这个过程当中如果客户端和服务器端有一方带宽比较小的话,就会加大响应时间。我司曾经就因为服务器带宽过小导致客户端响应时间很长的情况,当时排查了很长时间才发现。

当然网络是不可靠的,这个过程的响应时间其实取决于很多因素,比如路由器的路由策略是否最优,整个过程通过的网关数据量等。所以有很多网站其实是多地区多机房部署的,目的就是为了让用户通过很短的网络路径就能到达网站(其实这个过程运营商的选择也有影响)。

网站

当一个请求到达网站服务器,服务器便开始处理请求,一般会有专门处理业务请求的一个业务层,有的体现为rpc协议的微服务,有的体现为简单的一个代码分层。最终请求的数据会通过查询数据库来返回。其实这个过程和车站购票流程一样,每个窗口的处理能力是有限的,对应到服务器处理能力。由于这个原因,所以诞生了负载均衡的策略,核心思想就是:分。一台服务器不够,那就两台,三台,四台..... 直到并发的所有请求的响应时间都在可控范围之内。

数据库的情况类似,一个数据库扛不住压力,就加到N个数据库分散压力。一个表扛不住压力,就把这个表拆分开,拆分成多个表,甚至拆分到多个不同服务器数据库,这就是我们常用的拆表策略。有的时候在同一个数据库中进行表拆分,性能的提升并非最大化,因为一台服务器的磁盘IO是有上限的,就算拆成100个表,还是在同一个物理磁盘上,当然这样可缓解锁单表的情况。

现在有很多的场景采用NOsql代替关系型数据库来缩短响应时间,在正常情况下,由于关系型数据库的本身因素在特定场景下的读写速度比Nosql要慢很多,所以系统设计初期,可以考虑采用关系型数据库和Nosql混用的方案。

缓存

当并发的请求到达一定程度,瓶颈大部分情况下发生在DB层面,甚至DB无论怎么优化总有上限。为了避免频繁查询数据库产生瓶颈,诞生了缓存。在访问数据库之前加入了缓存层,当然这里的缓存采用的方案在数据的响应时间上要比数据库小很多,比如常用的redis,Memcache,但是这些第三方的缓存组件还是要走网络,比起进程内的缓存还是要慢的多。详情请参考以前文章

现在一般流行的设计在网站层和服务层都有缓存策略,只不过缓存的数据和策略有所不同,但是最终目的都是为了加快请求的响应。当然加了缓存之后,数据的一致性需要仔细设计才可以,如果发生数据不一致的情况,程序员可能要背锅了。

缓解数据库压力并不是引入缓存的唯一因素。

CDN加速

一些小厂可能用不到cdn,但是cdn带来的加速还是很客观的。cdn依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN就是把离用户最近的数据返回给用户。

写在最后

程序异步化其实并不能缩短响应时间,但是对提高吞吐量有很大作用。

开头的那些电影我真的都看过了

- To Be Continued -

关注「测试开发社区」

把握前沿Python测试开发技术脉搏

好文章,我在看❤️

vmware响应时间过长_性能调优高并发下如何缩短响应时间相关推荐

  1. java 性能 火焰图_性能调优工具-火焰图

    性能调优工具-火焰图 发布时间:2019-07-17 19:29, 浏览次数:402 前言 工具的进化一直是人类生产力进步的标志,合理使用工具能大大提高我们的工作效率,遇到问题时,合理使用工具更能加快 ...

  2. python 断点重传_性能调优-python SDK 调优

    python SDK python 和 java 或者和 GO ,在性能上来说都不是最好的,而且 python 无法支持多核的并发,只能跑在单核上的多线程.但是 oss 也提供了相应的方法提高多线程的 ...

  3. 服务器内存一般多大_性能调优第一步,搞定服务器硬件选型

    服务器选型是Linux性能调优的第一步. 无论你是自行购买服务器进行托管,还是租用服务器,购买云主机,都要面临的一个问题:选择服务器的硬件配置. 我们需要从不同角度.多个方面来决定选择一台什么样的服务 ...

  4. mysql性能调优 高可用_MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案...

    第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...

  5. 程序员修神之路--高并发下如何缩短响应时间

    点击上方"蓝字"带你去看小星星 菜菜哥,请你看电影呀,但是得帮我一个忙 好呀,看什么? 哥斯拉2:怪兽之王 看过了~ X战警:黑凤凰 看过了 追龙2和黑衣人呢? 都看过了,你说帮什 ...

  6. 高并发下如何缩短响应时间?

    YY妹:菜菜哥,请你看电影呀,但是得帮我一个忙. 菜菜哥:好呀,看什么? YY妹:哥斯拉2:怪兽之王. 菜菜哥:看过了~ YY妹:X战警:黑凤凰. 菜菜哥:看过了. YY妹:追龙2和黑衣人呢? 菜菜哥 ...

  7. 高并发下如何缩短响应时间

    定义 网站响应时间是指系统对请求作出响应的时间.通俗来讲就是我们把网址输入进浏览器然后敲回车键开始一直到浏览器把网站的内容呈现给用户的这段时间.网站响应时间是越短越好,因为网站页面打开速度越快,就意味 ...

  8. sql 执行计划 嵌套循环_性能调优–嵌套和合并SQL循环与执行计划

    sql 执行计划 嵌套循环 In this article, we will explore Nested and Merge SQL Loops in the SQL Execution plan ...

  9. linux限制pptp连接数_性能调优,让你的服务器更强大!增加TCP连接最大限制

    原创文章首发微信公众号「后端技术学堂」转载请先与我联系,点文末链接「了解更多」 Linux系统中tcp连接数是有最大限制的,即是进程可打开的最大文件描述个数,通过命令ulimit -n查看 TCP连接 ...

最新文章

  1. Android开发--FileInputStream/OutStream/Sdcard写入
  2. hdu2059:龟兔赛跑
  3. jsp servlet示例_Servlet和JSP中的文件上传示例
  4. termcap-1.3.1的configure.in文件逐行分析
  5. 最新系统之家系统win11 32位官方版v2021.07
  6. Python老司机总结新手常见10大错误
  7. 吴恩达机器学习作业5.偏差和方差
  8. 面试题,谈谈一款APP的优缺点,并提出改进建议
  9. php怎么改成npk,【原创】 npk 文件解包工具+源代码
  10. 高瓴张磊:从学渣到投资大佬,也曾多次犯错
  11. Steven N.S.Cheung之婚姻合约文章简评
  12. 聚类算法及其模型评估指标【Tsai Tsai】
  13. 第三十四篇 源极跟随器
  14. php图片点击查看大图,jQuery点击小图看大图,大图查看内容详情所有图片
  15. linux打开xml文件,xml文件扩展名,xml文件怎么打开?
  16. 读书笔记:汇编语言 第三版 王爽 清华出版社 前言 章一 章二 章三 章四 章五
  17. 原生php开发多管理员留言板系统源码
  18. 快速搭建个人博客——保姆级教程
  19. html流程svg动画,html – SVG圈动画
  20. 2022最新二开游戏支付通道系统源码+紫水晶带云端/功能强大

热门文章

  1. 吴恩达神经网络和深度学习——第二周笔记
  2. jquery判断方法是否存在_判断图中是否有环的三种方法
  3. 2020考研 管理类联考数学 【题型分析及解题思路】
  4. Blender全流程制作真实感3D产品学习教程
  5. windows form窗体应用程序,建一个记事本参考代码,重点是打开,保存,另存为...
  6. IE和火狐都支持的方法(输入用户名和密码后按下 enter 键)
  7. 两个有序单链表的并交差运算
  8. Marty Cagan:怎样寻找出色的产品经理
  9. 转_前端开发技术概要
  10. 更好的Java虚拟机Zing: 更好的性能,无停顿,更快的启动