作者
伍杏玲
故障发生时的沟通协调是顺畅的?增加重试就能解决问题?应用重启后能自动投产?非关键应用的故障不会影响业务?单分片的故障不会影响全局?这仅是一个部门的调用关系,简直是“不可描述”!有人说“我们对生产环境有敬畏之心”,但一般有敬畏之心是源于不了解,所以我们不仅有敬畏之心还要有探索之心。有个开发说我这个接口坏了,是不是你们弄的?我调接口查服务,终于发现——他这个接口就从来没有好过。要十分悲观大胆地猜测这些问题在线上会发生,然后小心谨慎地去求证。你以为最新一期程序员吐槽大会来了?不,这是11月9日在上海举办的携程技术峰会现场,来自携程网站运维总监方菊真实的工作总结。
俗话说,程序员每个段子的背后绝对有一条泪的教训。
为什么方菊过于真实地说出程序员“不能说的秘密”?
源于她在携程内部推行“混沌工程”。
混沌工程等于线上制造故障?
混沌工程(ChaosEngineering)是在分布式系统上进行实验的学科,目的是建立对系统抵御生产环境中失控条件的能力以及信心。混沌工程适合揭露生产系统中未知的弱点。
混沌工程最重要的一点是:通过不断失败避免失败。因为通常我们对故障何时会发生一无所知,但故障无可避免地一定会发生。
“凡不能毁灭我的,必使我强大”。用尼采的话来诠释混沌工程的思想是最适合不过。
为什么需要混沌工程呢?
随着企业业务的发展和技术架构的演进,我们需要保持稳定的用户体验,避免发生重大故障。以前往往是在大故障发生后,开发人员才去补救,才总结和实施改进的措施,但这终究已造成损失。
而混沌工程是将这些“痛苦”放在事前,用“以*攻*”的方式来使风险在可控的范围内及早暴露。这就像人打疫苗一样,先将一部分疫苗注入人的身体,产生抗体。通过这样才能做到“不破不立”,持续地验证系统的容灾能力。
对于开发团队来说,还能“常练常新”,因为在一个大型的故障排查过程中,考验的不仅是技术人员的技术,还会考验其临场的决策判断力,但肯定不会拿一个真实的故障来锻炼新人,所以在实施混沌工程中,能锻炼团队成员,增强团队抵御风险的能力和信心。
混沌工程的五大原则
那么如何开始做混沌工程呢?方菊列举以下五大原则:
1、假设稳定的状态
做混沌实验时,是将预期会发生的结果和实际会发生的结果做一个对比。所以我们需要假设一个稳定的状态,然后引入实验变量,例如服务器崩溃、网络中断等,再观察实验结果的稳态差异,最后发现问题。
另外,混沌工程