跳转至

开篇词 代码不要眼前的苟且,而要效率的提升和性能的优化

你好,我是庄振运。万分高兴能有机会和你分享我的知识和经验。

最近十年,我一直在美国硅谷工作,也非常关注中国的互联网发展,经常和国内同行交流。我曾经在QCon做过两次分享。感谢参会同行的青睐,两次都被评为“明星讲师”。

2019年初,极客时间的编辑找到我,希望我能用专栏的形式作更多的分享。我确实也想总结一下这些年的知识、体验和感悟,于是就写了这个专栏。

得性能者得天下

过去的三十年,我们见证了互联网的蓬勃发展和风云变幻。虽然互联网公司潮起潮落,提供的服务也日新月异,但是互联网界一个永恒的追求就是性能和效率。

程序员所写代码的性能直接决定了互联网服务的质量,也就决定了客户的去留。同时,互联网服务终归要运行在各种服务器上,公司需要部署数据中心和网络等容量,这些容量的效率直接影响了公司的运营成本。

所以,程序性能的优化和容量效率的提升也必然是每个互联网从业人员和公司的重要工作。

回首过去的学习、研究和工作经历,蓦然发现我已经专注于性能优化和容量效率这个领域将近二十年了。所涉及的范围也很广泛,从软件到硬件,从前端到后端,从服务器到数据中心,几乎涵盖了计算机和互联网的方方面面。平时,我也经常通过发表论文和参加会议的方式来总结和分享所学的知识。

这些年的从业经历也让我有机会对这一行业有些自己的观察、体会和思考。

首先,我注意到性能优化和容量效率的工作在IT界越来越重要

当今互联网服务的特点是大规模(大数据、用户多等)和高要求(低延迟、高吞吐等)。这样的特点也就要求服务的高性能和容量的高效率。

不夸张地说,当今互联网,得性能者得天下。对IT公司而言,提高了服务性能和容量效率也就降低了公司的运营成本,增强了公司的竞争力。

第二,性能和容量效率和每个IT从业人员息息相关

每个IT从业人员,尤其是程序员和运维,都需要关心服务性能和容量效率,这些知识会为自己的职业发展锦上添花,甚至是工作中不可或缺的。 性能和容量效率的知识对于每个程序员、运维、测试人员和管理人员都会有帮助。

具备了这些知识,程序员在开发软件时会写出高性能的代码;运维人员会懂得如何监测和提高系统的性能;软件测试人员会通览软件测试的分类和方法;管理人员可以了解如何进行容量管理,提升服务效率并降低运营成本,等等。

第三,性能优化和容量效率这一领域的工作是“越老越吃香”

在互联网行业工作,很多人担心的就是年龄问题。性能和容量领域的工作特点是需要多方面的知识和技能,以及实际的经验积累。这种学习和积累需要相当长的时间,不太可能一蹴而就。

我在很多硅谷公司工作过,周围的很多同事都是年龄比较大的。他们往往是技术牛人,是挑大梁的角色。公司为什么会重用这些“大龄员工”呢?就是因为他们能够帮助公司提升业务性能和容量效率,节省运营成本。随着公司业务规模的扩展,节省下来的成本也越来越大,公司也越来越离不开他们。

第四,这方面的工作要求比较特殊——需要广泛的知识面和软技能

除了软硬件结合的知识,以及理论联系实践以外,性能和容量效率的工作还需要各种软技能,从而和其他员工、其他团队有效地进行沟通和合作。 我用一张思维导图大体表示了这些知识和能力。

最后,这一领域和职业于总体而言缺少合适的介绍和相关资料

比如性能工程这个领域,虽然各种“性能测试”和“性能调优”相关的知识有很多,比如JVM调优、操作系统调优等,但是系统地介绍“性能工程”的资料很少。“容量效率和管理”方面,更是很少见了。就连“性能和容量工程师”这个职业也很少人讲。

专栏设计

性能问题通常是复杂的,性能工程师就像“医生”一样,需要懂得多方面的知识才能为“病患”确诊“病因”。

医生遇到病人,会“望闻问切”,利用X光等手段做各种分析。根据病人的表象和分析的数据,医生会做出诊断,确定是什么病。然后会开药方或者给予治疗。病人服药或者接受治疗后,会再次进行复检,来确定治疗效果。

性能工程师对待计算机和互联网的性能问题也是如此,会观察各种参数,甚至进行主动的性能测试。根据各种参数和性能测试的结果,可以做出分析,并最终确定性能问题的根因。这之后进行性能优化来消除对应的性能问题。采取优化后,还需要重新测试来验证问题是否真正解决,亦或是另有他因,从而需要重新分析。

我用下面这张图片来类比这两种场景。

第一个场景是医生诊断病情和治疗病人。第二个场景是性能工程师分析问题并且优化性能。你可以直观地看出两种场景中的每一步的相似之处。在专栏中,我也是根据这样现实中解决问题的思路(问题→测试→分析→优化→实践)来为你讲解的。

为了帮助你循序渐进地了解并掌握性能和容量工程相关知识,我将这个专栏的内容设置为八个模块,共36讲核心内容。

从今天开始,让我用36讲的课程,帮助你在性能和容量效率领域迈出坚实的36大步。学习完这个专栏之后,我相信你一定能对这一领域有更多、更广和更深的了解。

书山有路,勤劳为径;学海无涯,辛苦作舟。希望这个专栏可以成为这样的一条捷径和一叶轻舟,我们一起整装出发,扬帆起航。

有道是“知音难觅”。王勃在《滕王阁序》里也说过:“杨意不逢,抚凌云而自惜;钟期既遇,奏流水以何惭?”很荣幸能够和你在此相遇相知,一起学习交流,也欢迎你给我留言,说说你对性能优化和容量效率的看法和疑问。

精选留言(15)
  • 业余草 👍(23) 💬(4)

    书,买了等于读过;健身,办了卡等于练过;网络公开课,付了费等于学过;唯有吃的,买了才会吃完。只有在吃上,我们不自欺

    2019-12-04

  • Simple 👍(9) 💬(1)

    老师一定饱读诗书

    2019-12-03

  • 陈硕 👍(1) 💬(1)

    老师出本书吧。工作中肯定要常常翻阅

    2019-12-26

  • Q 👍(1) 💬(1)

    性能工程是一门综合学科,糅合了很多门技术学科的知识,比如:操作系统、数据库原理、数据结构和算法、数学理论、运筹学等等。

    2019-12-04

  • 吾心亦有光明月 👍(0) 💬(1)

    老师您好,大致看了一下专栏的内容,感觉有点偏向服务器程序的性能优化,请问老师,对于前端,例如游戏软件,有没有一些系统性资料可以推荐?谢谢!

    2020-06-12

  • vodaka 👍(0) 💬(1)

    请问老师,国外的软件公司或互联网公司有性能工程师这个职位吗?如果有,性能工程师的英文是什么啊?谢谢

    2019-12-19

  • Sports 👍(0) 💬(1)

    这个领域很感兴趣,是以后重点钻研的方向!

    2019-12-03

  • 西西弗与卡夫卡 👍(20) 💬(0)

    性能功力也是工程师水平的分水岭之一

    2019-12-02

  • 👍(8) 💬(0)

    之前有幸做过性能压测、性能分析、性能优化的事情,极客专栏也有另外一门有关性能的课程也跟着学习了一下,现在开始跟着老师再次的学习一下。 首先,说一下自己的认识: 1:性能这个东西几乎所有的行业、公司、国家都在追求,之所以,追求她是因为速度上来了,许多利益能够获取的到,快能占领先机能够节省时间,时间对于生命尤其是有限的生命是非常宝贵的 2:怎么样能快?之前总结过一次,一是少做,尽可能的少做,做的每一步都是必不可少的;二是让做的快的做,是在不行因为特性的缘故才让做的慢的做;三是每个环节最优化,每个环节都尽可能的快;四是并行单线最优还不行,那只能并行来了。 我认为基本就是这些套路,只是具体到每个环节,可能会有具体的处理措施,比如:数据结构与算法、硬件压榨、多线程、多进行、异步化、缓存这些都是围绕这些事情来做的。 3:很认同一个观点,没有输出的学习是低效的,输出的形式多种多样。写评论我觉得挺方便的,所以,凡是我学过的有任何想法我都会记下了,只有极客时间不倒闭,我相信这些数据他们都会记录下来的,未来希望他们出一个功能就是自己可以导出自己的评论或其他自创作的信息,这样自己认真写的评论也许是有价值的。 4:看老师的目录,猜测会围绕怎么定位性能瓶颈?怎么打破性能瓶颈?怎么通过加资源来提高性能?加资源后成本又上去了怎么平衡性能和成本来讲解?希望有理有据,道出一下可操作的干货。

    2020-03-03

  • 阿德 👍(3) 💬(0)

    非常期待,很多文章都在谈如何优化性能,但对如何进行性能测试及性能分析却说的很少

    2019-12-02

  • Geek 👍(1) 💬(0)

    诗词用的很美!

    2022-03-23

  • NEVER SETTLE 👍(1) 💬(0)

    我对性能有着执着的追求

    2019-12-17

  • 追风筝的人 👍(0) 💬(0)

    性能问题→测试→分析→优化→实践

    2022-06-14

  • 风翱 👍(0) 💬(0)

    越老越香,是一个方向

    2021-06-06

  • 闪闪红星 👍(0) 💬(0)

    性能决定成败!

    2020-03-14