在开篇的第一课,我想先向你提一个问题:“性能重要吗?” 不出意外,我想,几乎所有的计算机从业者都会不假思索给我一个统一的答案:“重要”。为什么我们都觉得性能重要呢?
从我们迈入软件行业开始,性能的重要性就一再被强调。
在读书时,我们学习了大量的计算机专业课程,花了大量的时间去讨论怎么让我们计算机系统获得比较好的性能。
我们可以回忆一下大学四年中那些专业课,数据结构、离散数学、算法、计算机组成原理、数据库、网络、C/C++、Java等等,关于性能的讨论无处不在,就连软件工程都有讨论性能的章节(我能想到的唯一的例外是知识产权法)。这些性能方面的专业知识为计算机和软件专业的学生在从事编程工作时提供了核心竞争力。
而当我们去找工作时,大部分的公司在笔试和面试时都会考一考算法,问一问算法复杂度。能写出比别的竞争者时间复杂度更低、性能更好的程序是应征者获得一份工作的关键。
等到工作后,公司的领导和同事又会怎么评估你作为一个程序员的编程水平,怎么评估你的作品呢?
当然,我们需要考虑很多方面,比如代码的质量、可维护性等。这些都很重要,但是这些很多都是背后的功夫,不好衡量。唯有性能方面的成就是直接可以量化的。
代码性能好不好,不用吹,跑一跑,领导和客户都能看到。“隔壁组的王同学重构了消息队列代码,解决了系统宕机问题,交易的平均延时减少了50%,吞吐率增加了100%”。
这样的功绩一目了然,表扬信会从客户经过各级领导一级一级转发到CTO。每次对内对外的各种报告会讲座,王同学都会把这件事情拿来讲一讲。解决关键性能瓶颈就和世界杯最后1分钟打进决胜球一样痛快,充满了职业成就感。这样的成绩你是不是很羡慕呢?
上面我说的都是一些感性的认识。我们能不能通过量化的方式来看一看性能到底有多重要呢?答案是可以的。性能对于企业来说即是钱,也是命。性能是钱,应用的性能越好,使用应用的企业和个人用户就能在硬件和电费上少花钱。性能是命,商用软件的性能达不到合同的要求,客户不会接受;手机应用性能不达标,用户会流失,会卸载。
从钱的角度去量化性能的重要性非常容易,打个比方,隔壁组王同学通过代码调优让应用少用了10%的处理器资源。对于不同的应用,这10%的价值是不一样的。
- 如果这是一款Mac OSX上跑的畅销游戏,王同学可能为每个用户省了1000多块。为什么这么说呢?我查了下苹果官网,MacBook Pro 15寸2019版提供了两款不同处理器主频供用户选择,2.4GHz高配版比2.3GHz低配版贵了1468人民币,但是在GeekBench Browser上公布的处理器跑分高配版却只强了5.3%。
苹果官网上15寸MacBook Pro的处理器可选包:(https://www.apple.com/cn/shop/buy-mac/macbook-pro/MV912CH/A#)
GeekBench的跑分:(https://browser.geekbench.com/macs/446)
- 如果这是一款跑在云计算上的商业应用,这10%的性能优化每个小时都在点点滴滴地为企业节约着运营成本。我查了下亚马逊EC2云服务的报价,计算密集型的c5实例每小时每颗处理器报价是0.054美元,假设企业原来用1000颗c5虚拟处理器,应用10%的处理器开销减少大约减少了100颗处理器,每小时省5.4美元,每年省47304美元,大约是32万人民币。企业的业务越多,规模越大,10%的性能优化带来的每年的成本节约也越大。
AWS上按需计费的计算优化实例c5d:(https://aws.amazon.com/cn/ec2/pricing/on-demand/)
看到这里,你可能会拍拍钱包轻蔑地一笑,“我们公司不差钱, 有钱。花钱上新机器,一台不够买两台”。
不过,你忽略了一点。在过去的几十年里,是投资硬件还是投资性能调优,一直是一道困难的选择题。但是在摩尔定律趋近于失效的今天,通过投资更快更好的硬件来实现硬件提升,正变得越来越难,也越来越贵。
Linus大神在2019年上海的kubenetes和Cloud Native大会上就表示:软件开发正变得越来越困难。"在过去,摩尔定律保证了硬件性能每18个月增加一倍。但是因为处理器供应商已经逼近了摩尔定律的极限,众多开发者将来必须通过调优软件来获得更高的性能。“
“Torvalds said. Moore's Law has guaranteed a doubling of hardware performance every 18 months for decades. But as processor vendors approach the limits of Moore's Law, many developers will need to reoptimize their code to continue achieving increased performance. In many cases, that requirement will be a shock to many development teams that have counted on those performance improvements to make up for inefficient coding processes, he said.“
这也意味着,在未来的十年里,软件性能分析的技能将变得越来越重要,越来越吃香。
与学习一门具体的编程语言,学习某个正在流行的框架不同的是,这些方法和原理在过去十年和未来十年都会一直有效,不会轻易被快速发展的技术潮流所轻易淘汰,保值性非常好。
它是计算机领域稀有的一门越老越值钱的技能,它能帮助你保持职业生涯中的技术竞争力。
TODO加上一些“我”的工作经历。
(我的同事中不乏60岁,65岁的软件性能分析师)。你还犹豫什么,赶快点亮性能分析这个技能吧。
我将会在这门性能课程中带你学习怎么分析应用程序的性能。在本课,我希望通过实例带着你学会解决这三个性能分析的问题: 1. 怎么描述一个性能问题?性能问题出在哪个方面? 2. 知道了性能问题的大致方向,怎么找到合适的工具去分析性能问题? 3. 怎么使用这些工具去采集性能数据?怎么解读数据寻找性能瓶颈?
更进一步的是,我们会解释这些工具背后的性能分析原理。哪怕不断有新的工具出现,领悟了原理的你也可以在短时间内上手。
在本篇的结尾,我留下一个思考题:“应用的性能调优除了能为企业省钱,能满足软件的性能需求外,对于企业,对于用户,对于开发者,还有什么额外的意义呢?”
我的答案:“我觉得这还是一份情怀。性能优化除了减少处理器开销外,另外一个副作用就是省电减排。这也算是作为程序员为蓝天白云永驻做得一点微薄的贡献吧。”