<audio id="audio" title="开篇词 | 万变不离其宗，性能优化也有章可循" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/ff/28/ff7e40ee58c5bdbcd660049c17625228.mp3"></audio>

你好，我是陶辉。欢迎你和我一起学习“系统性能优化”。

从2004年毕业到现在，无论我在华为、思科、腾讯、阿里巴巴等等哪家公司，我的工作总是与“性能”相伴，从底层、应用层到前端，我一直都很关心系统如何能够服务更多的用户，提供更快的体验。换句话说啊，**性能优化最根本的目的，还是要跟上业务的发展脚步。**

在我看来，程序员所做的工作，就是把现实世界中的问题，用数据、模型来抽象，再用计算机的计算能力把问题解决掉，虽然IT设备的运行速度日新月异，但业务要处理的数据在现实世界中近乎是无限的，而我们的计算能力相对则极为有限。所以，我们需要提升计算的效率，需要更苛刻地使用计算机和网络设备，做性价比更高的事儿。

而从十几年的性能优化工作中我发现，性能不只对产品的攻城掠地至关重要，它也是程序员价值的重要体现，特别是它在工作面试、技术等级晋升上也扮演着核心角色。

比如，在大多数拥有技术职级晋升体系的公司里，为了保障公平性，一般都是由跨部门的专家组成评委会的，而**其他部门的高级专家在不熟悉候选人业务的情况下，只能去考察底层的硬核知识，而性能问题又是最有区分度的问题。**如果你始终埋头在业务中，不关心更通用的性能优化方法论，将在技术等级晋升上非常吃亏。

再比如，你在面试互联网大厂时，面试官总会问许多超出工作范围的性能问题，为什么会这样呢？当然你可以感慨甚至抱怨，这不就是“面试造火箭，入职拧螺丝”嘛，但你也可以从面试官的角度来看这个问题，你会发现**性能就是最好的面试题，它从算法到架构，既能考察候选人的潜力，也能考察候选人的工程能力。**如果候选人具备系统的性能优化方法论，那么无论在架构设计还是应用模块开发上，他的代码可扩展性都会更好，消耗的计算力、带宽、磁盘等IT资源也更少！

这么看来，不论是为了满足业务发展的需求，还是在面试、晋升场景中有更好的表现，如果你希望成为高薪高效的10X程序员，那么，系统地学习性能优化就是一门必修课。

那具体应该从哪里入手呢？当然是看需求。当下的后端几乎都是**分布式系统**，那么对应的，我们面对的课题也就是**如何全面提升复杂集群的性能**。然而，如果你在Google上搜索如何优化分布式系统的性能，你只能找到孤零零的几篇文章，而谈到分布式系统的多数书籍也都在讨论容错、事务、流控等概念的实现，很少有文章介绍如何优化整个系统的性能。这恰恰就是我想做这门课的初衷。

我希望把自己这些年来在分布式性能领域所遇到的问题和解决方案，归纳总结、抽离萃取，梳理出一条**系统化的性能学习路径**交付给你，告诉你我眼中的性能问题本质是怎样的。在我看来啊，性能优化的本质就是最大化整个系统的综合效率，为了达到这个目标，我们需要从空间、时间维度上，不断地优化基础资源间的协作方式。

文稿中我给你总结了一份系统性能优化核心关注点的知识脑图，你可以同步看一下：

<img src="https://static001.geekbang.org/resource/image/e7/3d/e7aef5a7653c2ae6c1060e290a7a343d.jpg" alt="">

通过这份脑图，你会发现，我是从4个方面来梳理的，这其实就是我们在提升一个新系统的性能时，可以入手的4个层次。

首先，你可以从提升单机进程的性能入手，包括高效地使用主机的CPU、内存、磁盘等硬件，通过并发编程提升吞吐量，根据业务特性选择合适的算法。

其次，分布式系统是由各个组件通过网络连接在一起，所以优化传输层网络可以让所有组件同时受益。具体优化时，你可以从降低请求的时延，提升总体吞吐量两个方向入手。

再次呢，你要对业务消息采用更高效的编码方式，这既包括协议头、包体的优化，也包括TLS安全层的性能提升。具体优化时，既要深入静态编码，也要从动态的增量编码上优化。同时，调整消息的交互方式也能提升性能。

最后，我们再从集群整体上进行架构层面的优化。基于ACP、AKF、NWR等分布式理论，我们的优化方向仍然是降低时延和提升吞吐量，但实现方式则要运用分而治之的思想，调度集群中的所有结点协作配合，完成性能优化目标。

我这么介绍完吧，我猜你心里可能会有一些问题，好像这些内容都挺熟悉呀？是的，咱们这门课的知识点并不是非常新的前沿知识，而是我们每天coding时都在面对的日常问题。这里的关键是我们得**系统地**掌握这些知识点，在心中构建出性能优化树状知识图谱，然后我们才能更有底气地优化整个系统的性能。

另外，你可能也会感觉到，哎，好像性能优化也没那么复杂吧，感觉知识点不多呀！如果你是这么想的，那我要先夸夸你，我们就是要有这样的信心，先不给自己设限，不能还没开始就怕了。不过有了信心和动力后呢，也还是要再听我多说几句。

性能问题其实是计算机体系的底层问题，它涉及到的知识面非常广，我们的课程不可能覆盖全部领域。我最希望给到你的，是基于自己的经历和经验，对知识做一次筛选和过滤，把我已经构建起来的性能优化体系给到你，但同时，我能保证我们在解决性能优化中一些典型问题的同时，可以关联到绝大部分领域，对于任何一个领域，如果你需要进一步深入学习，你也能够知道自己的目标和路径。

好了，课程我就介绍到这里，你准备好了吗？那在正式开始之前，我们先来定下学习目标吧。

如果你需要从架构层面优化整个系统，那么这门课可以拓展你的知识面，告诉你如何优化架构才能让整体服务获得最大性能。那你的学习目标就要聚焦在知识体系上，你需要阶段性地做总结分享。

如果你刚开始接触性能优化，这门课则可以给你打牢基础，告诉你影响性能的底层因素，在实践中优化你的程序，看到立竿见影的效果。那我对你的要求就是每节课都要认真完成课后思考题，学习过程中有任何问题都要及时提问，不积压不懂的地方。

当然了，我的“要求”主要是供你参考的，欢迎你在留言区写写自己的学习计划。最后，我还特别希望听你说说，你目前的工作状态，是否意识到了性能问题的重要性，是否已经在解决很多性能相关的棘手问题，是否自己也总结了一些性能优化思路，分享出来，我们一起交流。

讲到最后，我都有点激动了，我一直认为性能优化并非是架构师的专属技能，只要我们有清晰的路径，积硅步成千里，我们都可以用更好的体验、更低的成本来服务更多的用户，还能轻松应对大厂面试，完成公司技术体系内的晋升，拿到更高的薪资。

那还等啥，从现在开始，我们就一起解锁分布式系统的性能优化吧！
