推荐序一
两年前,我做过一次公开分享,主题是“软件质量的深奥与简洁——从混沌工程到幂定律”,开头说道:“四百多年前,法国哲学家、数学家笛卡儿认为世界是有序的、统一的、精确的及可预见的,到了19世纪末,德国哲学家、思想家尼采则认为这个世界是无序的、随机的、模糊的。”如今,我们更能体会到确定性离我们越来越远,而越来越多地面对着不确定性,如变化多端的气候和不可解释的深度学习算法等。
如今系统越来越复杂,即使有良好架构设计的系统,刚上线时还好,但经过几年、十几年的迭代演化之后,系统不断膨胀,其复杂性也必然大幅增加,系统行为变得越来越不可预测,容易产生故障,导致面向用户的服务不正常。想彻底解决复杂系统的稳定性问题,传统的测试方法已无能为力,混沌工程应运而生。
混沌工程是一门新兴的、面向分布式系统的实验学科,旨在提高系统的稳定性以及自我恢复的弹性能力,提升抵御生产环境中突发事件的能力。我们也可以通俗地将“混沌工程实验”比喻为“以毒攻毒”,即有目的地将有害物质(故障、非法操作或极限操作)注入IT系统内,发现系统潜在的问题,以防止IT系统未来的“疾病”。
本书作者Mikolaj在混沌工程领域耕耘多年,功底深厚,经验丰富,并开发了(开源的)混沌工程测试工具PowerfulSeal,所以本书很有深度,非常接地气。从Linux、JVM、Docker、数据库到应用级,本书不厌其烦地重复“具备可观测性、建立稳态、给出假设、运行实验”四个步骤,覆盖从磁盘、内存、CPU、网络、容器、Pod、虚拟机到Kubernetes集群上的不同故障,手把手教读者完成不同层次、不同类型或不同场景下的十几个混沌实验,帮助读者彻底理解混沌工程原理和实验原则。借助本书的学习,读者也能够独立自主地完成各种复杂的混沌工程实验。
无独有偶,本书译者王相来自PingCAP公司,也参与了一个混沌工程平台(Chaos Mesh)的开发,这确保了本书的翻译质量。更巧的是,王相是我的学生,十多年前我给他上过“软件测试”这门课,但那时讲软件测试还侧重功能、性能和安全性等测试,虽然也提过可靠性测试,但没有详细讲解故障注入测试方法,更没有混沌工程。混沌工程完全是靠他自己学习的,我真的为他感到高兴和骄傲,我也相信他青出于蓝而胜于蓝,未来不可限量。
朱少民,同济大学特聘教授,《全程软件测试》《敏捷测试》作者