性能之巅:洞悉系统、企业与云计算
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

推荐序4

性能调优是每一个系统工程师最重要的技能,也是衡量其水平高低的不二法门。Linux 是开源的操作系统,这也意味着本身可调整范围比较大。近十几年来,硬件设备日益复杂,互联网应用场景及Web 2.0 蓬勃发展的同时,也带来了各种高并发的业务应用,有些复杂的分布式数据分析系统,单集群的物理服务器数量甚至超过1 万台。这使得对系统运行环境的一点点优化,带来的收益都可能非常可观。

性能调优这个事情,大家往往都有话想说,技术专家们也都有些秘而不宣、甚至奉为压箱底儿的“活儿”。但这些“活儿”,往往来自Case By Case 所获得的经验。例如解决了某大型电商网站的Nginix 服务器问题、某MySQL 数据库集群性能问题等。这些特定的大型案例,促使参与其中的技术人员,在某个或某些系统性能优化方面,具有较高水平、甚至一定造诣。

但即使这些技术专家,也难以解决所有性能问题。这有两方面原因,一方面自身缺乏对整个系统运行环境的全局把控能力。技术专家们能力的获得,是基于某些问题点扩散开来的,并非基于事先构建好的系统优化的全局观(这也和国内环境有关,大家往往大学毕业后就直接开始从事相关工作,缺少底层、结构性的学习,即使参与了某些培训课程)。

这种系统优化的全局观之所以难以形成,一个原因在于“未知的未知”,也就是说我们不知道自己不知道。比如,我们可能不知道设备中断其实会消耗大量CPU 资源,因而忽略了解决问题的关键线索。再比如,作为初中级DBA 并不知道应用程序连接Oracle 时,每一个数据库连接(Session)实际上都非常消耗物理内存,成百上千个数据库连接长期驻留(看上去状态还是非活动的),PGA 被消耗殆尽,引起各种异常,成为性能问题的罪魁祸首。

另一方面在于性能问题的根源太过复杂。诚如作者所说,一来性能是主观的,连是否有性能问题,都因人而异。例如,磁盘平均读写相应时间为1ms,这是好还是不好?是否需要调优?实际上取决于开发人员和最终用户(有时还包括领导)的性能预期。二来系统是复杂的。例如,本来CPU/磁盘/内存各司其责,有了内存缓存(SWAP)机制,内存不够时可以使用部分硬盘空间来顶替。这看上去很好,但对于数据库系统而言,SWAP 是否启用,本身就是一个问题。再比如,对于云计算而言,多虚拟机共享物理机,这进一步增加了问题的复杂度。资源隔离是个技术活,现有技术很难做到磁盘I/O 完全隔离。另外,最近非常流行的容器技术,如Docker 等,让问题变得尤为复杂。容器即进程,不像KVM 等虚拟机(KVM 至少还进行资源隔离)自带操作系统。容器并不是为IaaS 而生,仅靠cgroup 等隔离技术能做的非常有限。三是有可能有多个问题并存。有时终端用户抱怨系统慢,很可能不仅是由单个原因引起,例如,业务负载猛增,内网1000Mps 其实已经不够,但没引起注意;或是整体对外交付能力貌似还正常,但数据库磁盘I/O 非常繁忙;还可能正偷偷地进行大量SWAP 交换。

这两方面原因,使得大部分技术专家,即使对系统优化的某些领域确有独到见解,但说到能否解决所有系统性能问题,其实会有些底气不足。但本书作者看起来是个例外。纵观全书,作者建立了系统性能优化的体系框架,并且骨肉丰满,很明显,他不仅擅长某方面的性能优化,而且是全方位的专家,加之作为DTrace(一种可动态检测进程等状态的工具)主要开发者,使得本书的说服力和含金量大增。

本书首先提及性能优化的方法论和常见性能检测工具的使用,具体内容更是涉及可能影响Linux 系统性能的方方面面,从操作系统、应用程序、CPU、内存、文件系统、磁盘到网络,无所不包。在以上这些话题的探讨中,作者的表述方法值得称道——每个章节都程式化地介绍术语、模型、概念、架构、方法、分析工具和调优建议,这对于由于长期工作形成一定强迫症的某些技术人员,如我自己,阅读起来赏心悦目,也从侧面体现了作者的深厚功底和驾驭能力。

本书提供的性能优化方法论也令人印象深刻,包括几种常见的错误思考,如街灯法、随意猜测法和责怪他人法。街灯法来自一个著名的醉汉的故事——醉汉丢了东西,就只会在灯光最亮的地方着手。这种头疼医头脚痛医脚、错把结果当原因的事情,相信很多人都过类似经验。大型业务系统上线,大家都围着DBA 责问数据库为什么崩溃了。但数据库出问题是结果,数据库本身一定是问题根源么?是否更应该从业务负载、程序代码性能、网络等方面联合排查?在列举各种不正确的方法后,作者建议采用科学法,科学法的套路是:描述问题→假设→预测→试验→分析。这种办法的好处是,可以逐一排除问题,也可以降低对技术专家个人能力和主观判断的依赖。

本书用单独的章节系统性介绍了操作系统、性能检测方法和各种基准测试,特别是作者主导开发的DTrace(本书例子中用DTrace 监控SSH 客户端当前执行的每个命令并实时输出)。这使得本书作为工具书的价值更得以彰显。云计算的出现,对系统优化带来新的挑战。作者作为某云计算提供商的首席性能工程师,带来一个真实的云客户案例分析,包括如何利用本书提及的技术、方法和工具,一步一步分析和解决问题。

很多时候,受限于语言障碍,系统工程师往往通过国内BBS、论坛等获得知识,只是在性能问题确实棘手时,被迫找些英文资料,寻找技术解决思路。

博文视点推出的本书中文版,对于国内广大运维同仁而言,实属幸事。这让我们有机会系统学习和掌握性能优化的各个方面,有机会建立一种高屋建瓴的全局观。这样,在面对复杂系统问题时,不至于手足无措,或只能盲人摸象般试探。另外,虽然面对日益复杂的硬件设备和高并发的业务应用,问题不是变得简化而是更为复杂,但Linux 系统演化至今,其最基础的体系架构和关键组件并未发生多大改变,这使得这本好书即使历经多年,价值毫无衰减,反而历久弥新。

总的来说一句话:如果早些接触到本书,该有多好!

——萧田国 触控科技运维总监 高效运维社区创始人