项目越作越大,用户量和请数量可能随时发生井喷,若是等到系统崩溃时再补救,损失可就大了,因此得想个办法提早预防。前端
想要预防,就得知道系统的哪一个环比较节薄弱,顶不住压力,还要对系统的承受能力有个全面的评估,内心有底,好提早预防,这种评估分析预防优化等一系列手段全被性能测试涵盖在内。数据库
不一样角色对性能的理解不尽相同,对于用户来讲,操做流不流畅就是性能,对于研发人员来讲,接口慢不慢和顶不顶得住并发就是性能,对于运维人员来讲,网络带宽大小和资源占用高低就是性能。后端
那就必要统一性能指标了,首先,用户与研发人员都关注速度,其实是接口的处理速度,再细一些是客户端发起请求到收到服务端返回的时间,那就把这个指标定为响应时间吧。浏览器
咱们作一款产品最须要的就是用户,用户越多越好,但随着用户量地增长,同时发起操做的用户也愈来愈多,一时之间服务器可能要处理上万的请求,在这同一时刻处理的请求数就叫作并发数,不知什么时候起,处理太高并发的人成为了你们眼中的瑰宝,而并发数也成为了产品作大作强的标志,因此并发数也要列入性能的指标。缓存
并发数只能表明同时请求的数量不少,但并无赋予太多含义,与他人谈论时也没法让人总体把握系统的概况,因此须要将并发数进行变种以应对不一样业务不一样场景的描述,好比一天有多少人访问,一个小时能处理多少业务,每秒处理的事务数(TPS),每秒HTTP的请求数(HPS),每秒查询数(QPS)等等,这个指标咱们为其命名为吞吐量。安全
除此以外,还要知足运维人员的要求,他们须要根据系统负载、内存占用、CPU占用、网络磁盘I/O等各项指标进行分析,以便于为扩容作准备,这种一系列的硬件指标咱们统称为性能计数器。性能优化
简单说明一下系统负载,它是指CPU当前正在执行的与等待执行的进程数总和,该数量能够体现出系统是否繁忙,咱们最但愿看到的是没有进程排队等候,因此最理想的负载数量就是CPU的数量。服务器
咱们在开发时会对系统的性能有个初步的预期,而后经过模拟请求程序逐步加大请求压力,直到你认为服务器资源的消耗已经没法接受了,此时再观察系统性能是否达到了预期,这种方式就是性能测试。注意,名称虽与上述重复但不是一个概念。网络
咱们继续加大请求压力,直到服务器的某个资源已经达到饱和了,或者性能计数器中的某个指标达到了安全临界值,简单地说,再请求下去,系统的处理能力不但不能提升,反而会降低了。这种测试方式叫作负载测试。并发
还能够继续加大压力,不去管资源和性能指标如何,就疯狂请求,不停地请求,直到服务器崩溃,不能再继续工做了,这个时候就测出了系统最大承受能力测试。
没办法再继续施压了,由于服务器已经没有响应,那就模拟一些比较真实的场景吧,由于真实场景下的请求压力是不均匀的,咱们能够在特定环境、硬件和时间下给系统必定压力,看看业务是否能稳定性测试。
由于一个完整的WEB请求包含前端和后端两个部分,优化手段也从这两部分出发。
减小请求。如今大部分请求使用的是HTTP1,每一个图片、脚本以及样式等资源的获取都要客户端单独跑线程创建链接,资源过多时消耗会很大,能够将不一样类型的资源各整合至一个文件,这样少许的请求就能拿到须要的数据。
浏览器缓存。由于图片、脚本、样式等资源使用频率很低,没有必要每次请求都从新下载,能够经过设置HTTP的头部信息将资源缓存起来,这样能够有效下降加载速度,被缓存的资源须要更新时,能够经过修改资源文件名称的方式让浏览器从新下载。
压缩。图片、脚本、样式等静态资源通常都比较大,服务端能够将资源文件进行压缩,压缩后的文件较小,下载速度也会变快,可是先后解压缩文件会形成必定的压力,因此压缩手段要视业务状况而定。
CSS与JS顺序。由于浏览器会加载完全部的CSS后才去渲染页面,因此应该将样式文件放在上面加载。而JS恰好相反,浏览器刚加载完JS就会执行,若是放在前面会出现页面卡顿的现象,因此脚本文件应该放到页面最后加载。
CDN加速。原理与浏览器缓存相似,能够经过运营商将样式、脚本、图片等资源文件缓存到离用户最近的节点上,这样用户在发起请求时就能直接在最近的节点上找到须要的静态资源。
反向代理。在客户端与要交互的那台真实服务器中间再加一台服务器,全部的请求都由这台机器转发,当客户端第一次请求资源时将资源缓存到反向代理服务器,其余客户端就能够直接在反向代理服务器拿到资源,节省了转发的时间。
缓存。与前端同样,缓存是性能优化考虑的第一要素,目前流行的NoSQL数据库都是在内存读取的,速度会快,能够将读写频率很高但不多发生变化的数据放入缓存,能够有效提高系统吞吐量。
异步。像日志记录这种必定要去作但不须要等它作完的逻辑,应该把它放到消息队列当中,再由消费者进程逐条读取消息队列中的数据,慢慢执行,就像医院的排队取号,能够有效解决瞬时并发较大的业务场景。
集群。由于单台机器的处理能力有限,若是并发请求量过大,可能没法承受,能够加一些机器分担其压力,使得请求平均分配到每台机器上,这些由相同功能组成的机器群就是集群。
优化代码。不能秉着技术不够机器来凑的原则,回到实际代码当中来,多数性能问题仍是代码写的不够优秀,好比三条语句能搞定的数据,查了十多条,几十行代码算出的变量,却没有地方使用,用不到的数据表联了又联等。
本文主要从概念和方法方面着手,意在科普知识,并无实践案例,若是本文对你有帮助欢迎关注咱们后续的文章。