gitbook/系统性能调优必知必会/docs/230187.md
2022-09-03 22:05:03 +08:00

52 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开篇词 | 万变不离其宗,性能优化也有章可循
你好,我是陶辉。欢迎你和我一起学习“系统性能优化”。
从2004年毕业到现在无论我在华为、思科、腾讯、阿里巴巴等等哪家公司我的工作总是与“性能”相伴从底层、应用层到前端我一直都很关心系统如何能够服务更多的用户提供更快的体验。换句话说啊**性能优化最根本的目的,还是要跟上业务的发展脚步。**
在我看来程序员所做的工作就是把现实世界中的问题用数据、模型来抽象再用计算机的计算能力把问题解决掉虽然IT设备的运行速度日新月异但业务要处理的数据在现实世界中近乎是无限的而我们的计算能力相对则极为有限。所以我们需要提升计算的效率需要更苛刻地使用计算机和网络设备做性价比更高的事儿。
而从十几年的性能优化工作中我发现,性能不只对产品的攻城掠地至关重要,它也是程序员价值的重要体现,特别是它在工作面试、技术等级晋升上也扮演着核心角色。
比如,在大多数拥有技术职级晋升体系的公司里,为了保障公平性,一般都是由跨部门的专家组成评委会的,而**其他部门的高级专家在不熟悉候选人业务的情况下,只能去考察底层的硬核知识,而性能问题又是最有区分度的问题。**如果你始终埋头在业务中,不关心更通用的性能优化方法论,将在技术等级晋升上非常吃亏。
再比如,你在面试互联网大厂时,面试官总会问许多超出工作范围的性能问题,为什么会这样呢?当然你可以感慨甚至抱怨,这不就是“面试造火箭,入职拧螺丝”嘛,但你也可以从面试官的角度来看这个问题,你会发现**性能就是最好的面试题,它从算法到架构,既能考察候选人的潜力,也能考察候选人的工程能力。**如果候选人具备系统的性能优化方法论那么无论在架构设计还是应用模块开发上他的代码可扩展性都会更好消耗的计算力、带宽、磁盘等IT资源也更少
这么看来不论是为了满足业务发展的需求还是在面试、晋升场景中有更好的表现如果你希望成为高薪高效的10X程序员那么系统地学习性能优化就是一门必修课。
那具体应该从哪里入手呢?当然是看需求。当下的后端几乎都是**分布式系统**,那么对应的,我们面对的课题也就是**如何全面提升复杂集群的性能**。然而如果你在Google上搜索如何优化分布式系统的性能你只能找到孤零零的几篇文章而谈到分布式系统的多数书籍也都在讨论容错、事务、流控等概念的实现很少有文章介绍如何优化整个系统的性能。这恰恰就是我想做这门课的初衷。
我希望把自己这些年来在分布式性能领域所遇到的问题和解决方案,归纳总结、抽离萃取,梳理出一条**系统化的性能学习路径**交付给你,告诉你我眼中的性能问题本质是怎样的。在我看来啊,性能优化的本质就是最大化整个系统的综合效率,为了达到这个目标,我们需要从空间、时间维度上,不断地优化基础资源间的协作方式。
文稿中我给你总结了一份系统性能优化核心关注点的知识脑图,你可以同步看一下:
![](https://static001.geekbang.org/resource/image/e7/3d/e7aef5a7653c2ae6c1060e290a7a343d.jpg)
通过这份脑图你会发现我是从4个方面来梳理的这其实就是我们在提升一个新系统的性能时可以入手的4个层次。
首先你可以从提升单机进程的性能入手包括高效地使用主机的CPU、内存、磁盘等硬件通过并发编程提升吞吐量根据业务特性选择合适的算法。
其次,分布式系统是由各个组件通过网络连接在一起,所以优化传输层网络可以让所有组件同时受益。具体优化时,你可以从降低请求的时延,提升总体吞吐量两个方向入手。
再次呢你要对业务消息采用更高效的编码方式这既包括协议头、包体的优化也包括TLS安全层的性能提升。具体优化时既要深入静态编码也要从动态的增量编码上优化。同时调整消息的交互方式也能提升性能。
最后我们再从集群整体上进行架构层面的优化。基于ACP、AKF、NWR等分布式理论我们的优化方向仍然是降低时延和提升吞吐量但实现方式则要运用分而治之的思想调度集群中的所有结点协作配合完成性能优化目标。
我这么介绍完吧我猜你心里可能会有一些问题好像这些内容都挺熟悉呀是的咱们这门课的知识点并不是非常新的前沿知识而是我们每天coding时都在面对的日常问题。这里的关键是我们得**系统地**掌握这些知识点,在心中构建出性能优化树状知识图谱,然后我们才能更有底气地优化整个系统的性能。
另外,你可能也会感觉到,哎,好像性能优化也没那么复杂吧,感觉知识点不多呀!如果你是这么想的,那我要先夸夸你,我们就是要有这样的信心,先不给自己设限,不能还没开始就怕了。不过有了信心和动力后呢,也还是要再听我多说几句。
性能问题其实是计算机体系的底层问题,它涉及到的知识面非常广,我们的课程不可能覆盖全部领域。我最希望给到你的,是基于自己的经历和经验,对知识做一次筛选和过滤,把我已经构建起来的性能优化体系给到你,但同时,我能保证我们在解决性能优化中一些典型问题的同时,可以关联到绝大部分领域,对于任何一个领域,如果你需要进一步深入学习,你也能够知道自己的目标和路径。
好了,课程我就介绍到这里,你准备好了吗?那在正式开始之前,我们先来定下学习目标吧。
如果你需要从架构层面优化整个系统,那么这门课可以拓展你的知识面,告诉你如何优化架构才能让整体服务获得最大性能。那你的学习目标就要聚焦在知识体系上,你需要阶段性地做总结分享。
如果你刚开始接触性能优化,这门课则可以给你打牢基础,告诉你影响性能的底层因素,在实践中优化你的程序,看到立竿见影的效果。那我对你的要求就是每节课都要认真完成课后思考题,学习过程中有任何问题都要及时提问,不积压不懂的地方。
当然了,我的“要求”主要是供你参考的,欢迎你在留言区写写自己的学习计划。最后,我还特别希望听你说说,你目前的工作状态,是否意识到了性能问题的重要性,是否已经在解决很多性能相关的棘手问题,是否自己也总结了一些性能优化思路,分享出来,我们一起交流。
讲到最后,我都有点激动了,我一直认为性能优化并非是架构师的专属技能,只要我们有清晰的路径,积硅步成千里,我们都可以用更好的体验、更低的成本来服务更多的用户,还能轻松应对大厂面试,完成公司技术体系内的晋升,拿到更高的薪资。
那还等啥,从现在开始,我们就一起解锁分布式系统的性能优化吧!