0%

这16年来我是如何做系统性能优化的

2019年下半年,极客时间总编辑郭蕾从北京飞来杭州,问我有什么特别想分享给大家的技术。我回顾了下自己这16年来的工作经历,发现无论在华为、腾讯、思科、阿里,我都在与海量数据打交道,这个过程中对性能优化有许多思考,但一直没有系统的写下来。于是我就跟郭蕾说,那就针对分布式系统,讲讲我心中的性能优化方法论吧。这就是《系统性能调优必知必会》这门课的诞生过程。

我做过两门视频课,《Nginx 核心知识 100 讲》和《Web 协议详解与抓包实战》,这次和你聊聊程序员日常工作中那些绕不开的系统性能优化问题。只要技术厉害一点的工程师都知道,性能不只对产品的攻城掠地至关重要,它也是程序员价值的重要体现,特别是它在工作面试、技术等级晋升上总会扮演重要角色。

  • 比如,在包括阿里在内的大多数拥有技术职级晋升体系的公司里,为了保障公平性,一般会由跨部门的专家组成评委会。那么其他部门的高级专家在不熟悉候选人业务的情况下,要怎么去考察候选人的水平呢?他们只能去考察底层的硬核知识,而这当中性能问题又是最有区分度的问题。因此,掌握性能问题将对你的晋升之路有很大助益。如果你始终埋头在业务中,不关心更通用的性能优化方法论,将在技术等级晋升上非常吃亏。
  • 再比如,你在面试互联网大厂时,面试官总会问许多超出工作范围的性能问题,为什么会这样呢?当然你可以感慨甚至抱怨,这不就是“面试造火箭,入职拧螺丝”嘛?但从面试官的角度来看,你会发现性能就是最好的面试题,它从算法到架构,既考察了候选人的潜力,也能考察工程能力。如果候选人具备系统的性能优化方法论,那么无论在架构设计还是应用模块开发上,他的代码可扩展性都会更好,消耗的计算力、带宽和磁盘等 IT 资源也更少,也自然更容易被面试官青睐。

因此,不论是为了满足业务发展的需求,还是在面试、晋升场景中有更好的表现,如果你希望成为高薪高效的 10X 程序员,那么,系统地学习性能优化就是一门必修课。我先把课程海报分享在这,再跟你说说这门课解决的具体问题。

那么,系统性能优化该怎么学呢?

当然是看需求。当下的后端几乎都是分布式系统,那么对应的,我们面对的课题也就是如何全面提升复杂集群的性能。但当你想要学习分布式系统优化的时候,你却会发现,能找到的资料实在是太少了。

如果你在 Google 上搜索如何优化分布式系统的性能,大概只能找到孤零零的几篇文章,相关的多数书籍也都在讨论容错、事务、流控等概念的实现,却很少有文章介绍如何优化整个分布式系统的性能。

这恰恰就是我推出 《系统性能调优必知必会》这个专栏的初衷。我希望通过这个专栏,把自己这些年来在分布式性能领域所遇到的问题和解决方案,归纳总结,梳理出一条交付给你,告诉你我眼中的性能问题本质是怎样的。

我是谁?

我是陶辉,杭州智链达数据有限公司 CTO 兼联合创始人,前阿里云高级技术专家、腾讯云 TVP,著有《深入理解 Nginx:模块开发与架构解析》一书。

我 2004 年毕业于西安交通大学,有近 20 年的互联网一线工作经验:曾在华为中央软件部参与 iMAP 网管系统的研发,熟悉网络设备的工作流程;在腾讯 QQ 空间部门使用自定义的 Qzone 协议传递巨量数据,对如何设计出高性能、可扩展的应用协议有丰富的实践经验;在思科从事 Nginx 服务的研发,对 Web 服务器如何高效地处理 HTTP 协议有全面的认识;在阿里云担任 VPC 网络、ECS 管理与存储系统重构的架构师,对公有云及 IDC 内部网络系统有深刻了解。

工作数年,我始终与性能相伴,目前致力于 Linux 下高性能服务器的开发,以及分布式环境下海量数据存储的设计与开发。

我是如何讲解性能优化的

如果你需要从架构层面优化整个系统,那么这门课可以拓展你的知识面,告诉你如何优化架构才能让整体服务获得最大性能;如果你刚开始接触性能优化,这门课可以给你打牢基础,告诉你影响性能的底层因素,在实践中优化你的程序,看到立竿见影的效果。

我先给你总结了一份「系统性能优化核心知识图谱」

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

  1. 首先,你可以从提升单机进程的性能入手,包括高效地使用主机的 CPU、内存、磁盘等硬件,通过并发编程提升吞吐量,根据业务特性选择合适的算法。
  2. 其次,分布式系统是由各个组件通过网络连接在一起,所以优化传输层网络可以让所有组件同时受益。具体优化时,你可以从降低请求的时延,提升总体吞吐量两个方向入手。
  3. 再次,要对业务消息采用更高效的编码方式,这既包括协议头、包体的优化,也包括 TLS 安全层的性能提升。具体优化时,既要深入静态编码,也要从动态的增量编码上优化。同时,调整消息的交互方式也能提升性能。
  4. 最后,我们再从集群整体上进行架构层面的优化。基于 ACP、AKF、NWR 等分布式理论,我们的优化方向仍然是降低时延和提升吞吐量,但实现方式则要运用分而治之的思想,调度集群中的所有结节协作配合,完成性能优化目标。