系统思考:谈谈你对性能优化的理解

在软件工程中,性能优化一直是一个经久不衰的话题,如果有人问你,比如在面试的时候,请你谈谈对性能优化的理解,你会如何回答这个问题,展现自己知识的深度,让人印象深刻呢。
这篇文章以此为例,来谈谈如何用系统思考来思考这类问题,去找到一个更深度,更系统的答案。

正文

当有人问,请你谈谈对性能优化的理解时,如果没经过刻意训练,往往给出的是单一纬度的回答。
比如你可能会说缓存如何优化,数据库如何优化,代码如何优化等等,这些看似角度很多,但都停留在具体的操作层次,并没有一个深入的关系。
而系统思考的方式是怎么做的呢?
系统思考要求我们不能只看到事物本身,而是把事物放在系统中,看到它是一个什么样的系统,以及它所在什么样的系统,然后从系统的角度来思考。

想找到事物所在的系统,有一个简单话术,就是问这个概念是什么的一部分?
比如性能优化,用业内的术语,这是技术的部分。
然后我们再稍微往上推一个纬度,技术又是什么的一部分?技术是产品的一部分。
另外,对于这类与工作相关的话题,往往也可以从组织架构上思考。
性能优化是开发团队的工作,而开发团队又是项目团队的一部分。
往上推两层后,我们再往下展开,那问题就变成了:

  1. 从产品体系的角度怎么看性能优化?
  2. 从项目体系的角度怎么看性能优化?

下面用产品体系这个角度来举例子。
我们把性能优化往上推到了产品体系这个系统,然后就可以反过来往下对这个系统做分析了,打开产品这个系统,最基础的两个部分可以说是业务需求和技术实现。

那么我们可以从这两部分来思考它们与性能优化的关系了,因此,首先可以回答第一点,要结合业务场景来做性能优化。
比如说一段程序要执行十分钟才出结果,看起来很慢,但如果是针对大量数据,一年才执行一次,这就不一样了。
接下来,我们再展开技术这个系统,我们可以分为开发,测试和运维。

所以,从运维和测试角度看性能优化,你可以谈到性能优化要根据运维的监控和测试的压测数据来下判断,而不是想当然的优化。
再从技术的角度,如果是Web应用这个系统,用三层架构来看,它包含前端,后端,数据库等几个层次,你可以谈到先要找到性能的瓶颈在哪个层次,先优化调用链路上的瓶颈。

再接下来,就可以分别谈前端、后端、数据库的优化了,比如说前面谈到的缓存如何优化,代码如何优化等等。
这样一圈下来,就能对性能优化形成一个比较系统的思考。
当你真正要面对性能优化的任务时,自然就会去从这么些角度来做分析了:

  1. 我们业务场景是什么,有没有必要优化?
  2. 监控和压测数据给出的证据是什么,优化哪里?
  3. 瓶颈是代码、缓存、SQL还是其他,整体来看怎么优化?
  4. 优化完成后,再看看监控和测试,效率如何?

....
以上。

Comments
Write a Comment