性能之道:分布式系统全栈性能优化
于君泽 曹洪伟 李伟山 等
Preface 前言
性能是软件非功能特性的基本面
性能是软件系统的一种质量属性,可以定义为“软件系统与其环境交互以获得价值和避免损失的程度”。性能就是在空间资源和时间资源有限的条件下,衡量软件系统正常工作的概率或程度。
狭义上讲,软件系统的性能优化指的是在尽可能少地占用系统资源的前提下,尽可能提高运行速度。
本书首先从性能优化的认知和方法论开始介绍,然后介绍如何建立性能测试与评估的体系。巴斯、克莱门茨和凯兹曼在《软件架构实践》一书中提到,性能是指软件系统满足时间需求的能力。相较国外性能方面的经典著作,本书的重点放在软件系统层面,如对网络、通信、客户端、单服务实体、数据库等方面的性能约束特点进行阐述,提出具体的优化方法与策略,并深入剖析缓存系统、消息队列在性能优化中的应用。
本书还通过具体的实践案例(如智能音箱、商城、营销红包、交易系统等)介绍各种性能设计与优化方法的应用,并解读全链路观测和压测的具体实现方法与应用场景,最后介绍云原生技术对性能的影响。
本书提出性能优化的点、线、面、体方法。其中,“点”指的是代码中的单个语句或函数,可以通过代码级别的优化来提升性能;“线”指的是代码中的执行路径,可以通过对算法和数据结构的优化来提升性能;“面”则上升到模块、子系统级别;“体”则指的是整个系统,可以通过整体性优化来提升性能。
笔者认为,性能是软件非功能特性的基本面。软件性能与稳定性、容量、可用性、扩展性、成本都存在一定的关系。性能低下,系统会被拖慢,服务会堵塞,此时稳定性是一个问题。同时还容易出现级联故障,可用性本身也会受影响。另外,性能与成本、扩展性的关系尤其大。我们知道,对于无状态服务,可以通过添加服务节点的方式来实现持续扩展以满足业务需求。但是,每一个节点都会有成本。通过对设计方案和代码的优化,需要扩展的节点数量可能大大减少,从而降低成本。单节点的容量会大幅度提升。
回…