含笑收获眼泪

性能优化的原则和方法

2020-06-29  本文已影响0人  陌若尘_c167

        作为一个程序员,经常需要做系统的性能优化,这主要是由系统的熵决定的。系统在一步步演进,功能越来越多的条件下,熵的问题也会进一步暴露。不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应用还是分布式系统。本文主要从性能优化的一般性原则和性能优化的通用方法来思考这个问题。

1. 性能优化的一般性原则

依据数据而不是凭空猜测:

  这是性能优化的第一原则,当我们怀疑性能有问题的时候,应该通过测试、日志、profillig来分析出哪里有问题,有的放矢,而不是凭感觉、撞运气。一个系统有了性能问题,瓶颈有可能是CPU,有可能是内存,有可能是IO(磁盘IO,网络IO)。需要根据实际测量出来的数据来进一步分析。

忌过早优化:

       当前产品的发展大都追求的是快速迭代与试错,过早的优化往往是无用功。而且过早的优化很容易拍脑袋,优化的点往往不是真正的性能瓶颈。

忌过度优化:

  性能优化的目标是追求合适的性价比。在不同的阶段,我们对系统的性能会有一定的要求,比如吞吐量要达到多少多少。如果达不到这个指标,就需要去优化。如果能满足预期,那么就无需花费时间精力去优化,比如只有几十个人使用的内部系统,就不用按照十万在线的目标去优化。

深入理解业务:

  代码是服务于业务的,也许是服务于最终用户,也许是服务于其他程序员。不了解业务,很难理解系统的流程,很难找出系统设计的不足之处。

性能优化是持久战:

  现在的互联网产品,不再是一锤子买卖,在上线之后还需要持续的开发,用户的涌入也会带来性能问题。因此需要自动化的检测性能问题,保持稳定的测试环境,持续的发现并解决性能问题。

选择合适的衡量指标:

  正因为性能优化是一个长期的行为,所以需要固定衡量指标、测试用例、测试环境,这样才能客观反映性能的实际情况,也能展现出优化的效果。衡量性能有很多指标,比如系统响应时间、系统吞吐量、系统并发量。不同的系统核心指标是不一样的,首先要明确本系统的核心性能诉求,固定测试用例。

2. 性能优化的通用方法

缓存:

  没有什么性能问题是缓存解决不了的,如果有,那就再加一级缓存。缓存的本质是加速访问,需要用空间换时间,在缓存空间有限的情况下,需要优秀的置换换算来保证缓存有较高的命中率。

并发:

  一个人干不完的活,那就找两个人干。并发既增加了系统的吞吐,又减少了用户的平均等待时间。这里的并发是指广义的并发,粒度包括多机器(集群)、多进程、多线程。

惰性:

  将计算推迟到必需的时刻,这样很可能避免了多余的计算,甚至根本不用计算。

批量:

  在有IO(网络IO,磁盘IO)的时候,合并操作、批量操作往往能提升吞吐,提高性能。

更高效的实现:

  同一个算法,肯定会有不同的实现,那么就会有不同的性能;有的实现可能是时间换空间,有的实现可能是空间换时间,那么就需要根据自己的实际情况权衡。

缩小解空间:

  缩小解空间的意思是说,在一个更小的数据范围内进行计算,而不是遍历全部数据。索引就是其中一种,通过索引,能够很快定位数据,对数据库的优化绝大多数时候都是对索引的优化。其他如权限校验,排除超过权限范围的数据也是常用的方法。


欢迎关注本公众号【技术型项目经理】。可获取软件行业动态、技术积累和项目管理理念文章分享。

上一篇下一篇

猜你喜欢

热点阅读