认清性能问题

简介: 首先专注于业务上最需要优先修正的程序,而不是从全局调优来改善性能。要重视全局的性能表现,但解决问题要从细节和业务最需要的环节入手。

640.jpg


昨晚翻看收藏的一些技术文章,看到了这篇:Thinking Clearly About Performance。


这篇文章对系统性能有很深刻和本质的认识,重温了里面提到的一些观点,有很多新的感悟。


这篇文章,分享里面提到的一些观点,以及我的一些思考总结。


原文地址:http://queue.acm.org/detail.cfm?id=1854041


友情提醒,文末有福利哦!

 

响应时间VS吞吐量


通常来说,响应时间和吞吐量承反比例(响应时间越长吞吐量越低)。


  • 性能优化是需要多维度去衡量和优化的领域;
  • 响应时间和吞吐量并没有直接的关系(但是有间接关系);
  • 一般来说,性能优化的目标是:在尽量保持和降低响应时间的情况下,不断提高吞吐量,提高流量高峰时间的系统服务可用性(大多数情况,而非全部);
  • 响应时间、吞吐量、可用性等因素有时候存在矛盾,需要综合考虑业务情况、系统模块的依赖关系、处理方式(单线程/多线程/负载均衡)等因素,做到合理取舍;


描述响应时间的方式


尽量用百分比的方式而非平均值来描述响应时间(户感知到的是差异变化,而非平均)!


这也是为什么在性能测试中,P90/P99的RT比平均值更受技术人员看重的原因。


性能需求指标


性能需求指标应该是明确描述的、可量化的指标需求。


如果没有明确可量化的技术指标,性能需求就是伪需求。


性能剖析思路


找到最慢的几个任务(消耗时间最多),分析它们是否有对应关系,每个任务的时间占比,得到一个明确的描述:每个任务运行消耗了多少时间!


现在有很多工具可以帮助快速的监控分析,比如jaeger、skywalking。


阿姆达尔定律


系统对某一部件采用更快执行方式所能获得的系统性能提升程度,取决于这种执行方式被使用的频率,或所占总执行时间的比例。


性能优化应该先考虑对性能提升最大(ROI)最高的方式。


性能优化排序


优先占用资源最多或消耗时间最多的任务,但要考虑优化的成本、收益、风险(没有最好的方案,只有最合适的方案)。


性能优化原则


首先专注于业务上最需要优先修正的程序,而不是从全局调优来改善性能。


要重视全局的性能表现,但解决问题要从细节和业务最需要的环节入手。


性能拐点


响应时间和吞吐量之间的某个最优负载平衡点的资源使用率的值,称为拐点。


计算公式:响应时间/资源利用率=所得结果最小的值

   

640.png


在完美扩展性前提下,只要系统的平均负载超过拐点,那么系统依然会面临性能瓶颈,实际生产中的拐点比上图的拐点数值更小。拐点主要有以下几个特点:


  • 系统中的每一项资源都存在拐点;
  • 系统的拐点都≤上图中给出的值,系统的扩展完美型越差,拐点越小;
  • 对于请求随机到达的系统,如果资源负载持续超过拐点,那么将遇到性能瓶颈;


容量规划


  • 如果系统中某项资源超过它的拐点,就会遇到性能瓶颈;
  • 保持资源利用率低于拐点,系统表现则基本不会低于我们的期望值;
  • 遇到容量瓶颈,解决方式是:重新配置负载分配(减少负载OR增加容量);
  • 某项资源的容量就是高峰期可以轻松运行任务而资源使用率不会超过拐点的值;


最后:过早的考虑优化系统性能,是一场灾难!!!

相关文章
|
7月前
|
SQL 运维 监控
灵魂三问之稳定性摸排
本文记录了稳定性摸排过程中的一些思考和沉淀。
39939 61
|
3月前
|
存储 缓存 前端开发
超越极限,前端性能优化的终极奥义
在当今互联网时代,前端性能优化成为了每个开发者必须面对的挑战。本文将介绍一些独特的、能够极大提升前端性能的技巧和策略。通过深入探索代码压缩、资源加载、渲染优化和缓存策略等方面,我们将揭示出前端性能优化的终极奥义。
|
3月前
|
程序员 开发者
开发者面对焦虑的缓解方式
焦虑是我们每个人在面对未来的不确定性和对自己的不满意时常常遇到的情绪,而且作为技术人员,我们往往面临着工作的挑战和高强度的压力,这可能导致焦虑情绪的出现。但是,作为一个正确的解决方式,一个正确的循环,我们可以通过一些有效方法来对抗焦虑,保持良好的心态和专注力。那么本文就来简单分享一下技术人对抗焦虑的有效方法有哪些,如何变焦虑为动力。
129 3
开发者面对焦虑的缓解方式
|
程序员
你都不知道自己有多强,衡量程序员生产力的标准是什么?
如果你用谷歌搜索“mearsuring software developer productivity”,那么你会发现出来的全都是一些废话,一点用处都没有的废话。——Nick Hodges,《Measuring Developer Productivity》 所以现在你知道了吧,原来我们并没有办法来衡量程序员的工作效率。
|
算法 区块链
区块链电力消耗问题怎么解决?攻城狮们作出了这些努力
如果说区块链技术将彻底改变我们的交易方式,那么,目前摆在许多计算机科学家面前的一大难题还在于——如何解决区块链技术带来的电力消耗问题?
1086 0
经济学之速度V与效率
经济学之速度V与效率 效率与稀缺是经济学研究的核心问题。稀缺产生了交换价值,而效率的作用就是增加产出,减少稀缺。效率有两个含义: 1)单位时间完成的工作量。
761 0
|
程序员
复盘——让你认知和学习效率提高十倍
如果能穿越回去,我会做出哪些改变? “这个讲座讲得好精彩啊,干货满满,特别棒!”我在北京看了一个大牛的线下分享会,跟同事说。
1475 0
|
程序员
优秀程序员是如何突破瓶颈的?
程序员是一群,智商极高,人品善良,思维逻辑缜密,收入挺高,交友不多,生活圈子比较小而且单纯,都是一批可爱的人,但是他们不善言谈,不善交际。到了一定的年龄和级别后,都很难突破自己的瓶颈。
1007 0