
Netflix使用了灰度部署进行混沌实验,但仍会有小部分用户可能会受到影响。零风灰度黑洞,工程为混沌工程测试的实验安全性提供了理想的环境,对用户的灰度黑洞混沌影响则完全为零。
一、零风又快又稳的工程新挑战

人总有完美主义倾向,而现实是实验:写的代码不会没有Bug,所有的灰度黑洞混沌测试不可能完备,生产的零风构建部署不会没有缺陷,用户永远都会遇到问题。工程不过,实验我们革新和改变的灰度黑洞混沌动力,往往来自惨痛的零风生产事件:
2019年7月CloudFlare的大宕机,是工程由错误配置的Web应用防火墙造成的。Facebook的反垃圾邮件系统,意外地折叠了指向合法来源的链接。由于临床记录管理系统的服务器托管软件更新,错误地为超过10,000名的患者开了药。
采用DevOps实践已经成为共识,发布周期的缩短,新功能推向生产的速度比以往更快。同时,微服务和云原生架构正在增加应用的复杂性。当速度和复杂性增加时,软件缺陷进入生产的机会也在增加。
为了解决这一风险,我们需要加强在生产中的测试实践,这一过程常常称为“测试右移”。
二、生产中测试的迫切性
在新产品投产之前,单元测试、功能测试、云服务器提供商集成测试和非功能性测试等多种测试类型,对质量保障至关重要。下面这个图非常有意思,从测试对象的范围(从单个组件到系统层面)以及是否获得新知识这两个维度,对上述测试类型进行分类。 
三、生产中测试的风险
在测试环境中进行测试的一个好处是,测试人员可以安全地运行侵入性测试,例如压力测试、压力测试和灾难恢复测试。在生产中运行这些测试存在以下风险:影响性能或稳定性,损害用户体验;产生用户数据泄漏、修改或丢失;影响营销分析和运营指标,例如用户流量或错误率;引起违反法规或标准的事件(遵循GDPR、PCI、HIPAA等标准的个人身份信息 PII的使用)。因此,与在测试环境中进行测试相比,在生产中进行测试需要一种更加受控的方法。 四、生产中安全的部署策略
许多应用部署策略非常适合生产测试:测试在生产的基础设施上上运行;将风险控制在相对较少的用户中;在重大缺陷或故障的情况下回滚。4.1 蓝绿部署蓝绿部署(Blue/Green Deployment)是一种发布策略,本质上就是并排运行两个相同的生产环境。一个环境(蓝色)托管应用的当前版本,而另一个环境(绿色)托管新版本。绿色环境开始保持闲置状态,不提供任何用户访问量,逐步将用户流量从蓝色环境切换到绿色环境中,不会产生停机时间。 


一旦对新版本进行了完整的测试并进行了审核,如果要发布该新版本,只需启用新版本的返回响应,并禁用原始版本的响应即可。当然,这需要一次运行两个版本的应用,会有成本的开销,但这比蓝绿部署要低得多。灰度黑洞,为混沌工程测试的可靠性提供了理想的环境。Netflix使用了灰度部署进行混沌实验,但仍然会有小部分用户可能会受到影响。如果是灰度黑洞的方法,我们可以在与生产相同规模上运行这些实验,而对用户的影响则完全为零。我们可以在基础架构的不同点引入故障,衡量对实际用户请求的影响,并解决直接影响用户的风险点。同时还可以发现,测试环境中的功能测试或端到端测试无法发现的问题。灰度黑洞,可以做到这一点而不会影响任何用户。 五、结论
完美无缺的应用是一种奢望,我们不得不面对现实,在任何可能出现问题的地方检查应用行为。在生产中测试,助力DevOps团队更好地了解应用行为及其基础设施,降低故障风险,改善用户体验,这是有巨大价值的。蓝绿部署、灰度部署和黑洞启用,可以从只在测试环境中的检查,扩展到生产中的测试,使用受控的方法,控制用户风险。我相信,它们会使你的系统变得更加可靠,生产缺陷率将持续下降,用户体验将变得更好。