共计 3116 个字符,预计需要花费 8 分钟才能阅读完成。
Netflix 应用了灰度部署进行混沌试验,但仍会有小局部用户可能会受到影响。灰度黑洞,为混沌工程测试的安全性提供了现实的环境,对用户的影响则齐全为零。
一、又快又稳的新挑战
人总有完美主义偏向,而事实是:写的代码不会没有 Bug,所有的测试不可能齐备,生产的构建部署不会没有缺点,用户永远都会遇到问题。不过,咱们变革和扭转的能源,往往来自惨痛的生产事件:
- 2019 年 7 月 CloudFlare 的大宕机,是由谬误配置的 Web 利用防火墙造成的。
- Facebook 的反垃圾邮件零碎,意外地折叠了指向非法起源的链接。
- 因为临床记录管理系统的软件更新,谬误地为超过 10,000 名的患者开了药。
采纳 DevOps 实际曾经成为共识,公布周期的缩短,新性能推向生产的速度比以往更快。同时,微服务和云原生架构正在减少利用的复杂性。当速度和复杂性减少时,软件缺陷进入生产的机会也在减少。
为了解决这一危险,咱们须要增强在生产中的测试实际,这一过程经常称为“测试右移”。
测试右移,从前期生产阶段开始测试工作。这些测试是为了确保稳定性、性能和可用性规范。这样,就能够从指标用户那里收集反馈和评论,以理解在事实世界中的利用行为。这有助于进一步提高品质。
二、生产中测试的迫切性
在新产品投产之前,单元测试、功能测试、集成测试和非功能性测试等多种测试类型,对品质保障至关重要。上面这个图十分有意思,从测试对象的范畴(从单个组件到零碎层面)以及是否取得新常识这两个维度,对上述测试类型进行分类。
(“混沌工程”在图的右上角)
一般而言,测试都在隔离的环境中进行。这些环境尽可能复制生产,以便为测试人员提供相当的测试环境,而不在生产环境间接测试,防止用户因为测试面临危险。
然而,仅进入生产之前的测试不足以解决所有问题,起因有以下几种:
2.1 生产是一个独特环境
生产不可代替。咱们能够构建测试环境,应用与生产雷同的基础设施和数据(基础设施即代码的办法等等),然而永远无奈齐全复制生产。环境具备其独特的配置,这会影响利用的行为形式,而且难以重现。当咱们须要投入大量的工夫和金钱,来达到环境之间的均等性。随着生产的一直变动,这种希图简直是痴心妄想。
2.2 生产是用户在的中央
生产之前的测试受到工夫、资金和人员技能的影响,无奈做到齐备测试。生产中的测试为测试人员提供了额定的机会来发现缺点,免得对用户体验产生负面影响。
三、生产中测试的危险
在测试环境中进行测试的一个益处是,测试人员能够平安地运行侵入性测试,例如压力测试、压力测试和劫难复原测试。
在生产中运行这些测试存在以下危险:
- 影响性能或稳定性,侵害用户体验;
- 产生用户数据透露、批改或失落;
- 影响营销剖析和经营指标,例如用户流量或错误率;
- 引起违反法规或规范的事件(遵循 GDPR、PCI、HIPAA 等规范的个人身份信息 PII 的应用)。
因而,与在测试环境中进行测试相比,在生产中进行测试须要一种更加受控的办法。
四、生产中平安的部署策略
许多利用部署策略非常适合生产测试:
- 测试在生产的基础设施上上运行;
- 将危险管制在绝对较少的用户中;
- 在重大缺点或故障的状况下回滚。
4.1 蓝绿部署
蓝绿部署 (Blue/Green Deployment) 是一种公布策略,实质上就是并排运行两个雷同的生产环境。一个环境(蓝色)托管利用的以后版本,而另一个环境(绿色)托管新版本。绿色环境开始放弃闲置状态,不提供任何用户访问量,逐渐将用户流量从蓝色环境切换到绿色环境中,不会产生停机工夫。
蓝绿部署的次要益处是,可助力 DevOps 团队验证生产中的更改,不会给用户带来危险。通过将用户路由到以前的版本来回滚任何有问题的变更,DevOps 团队始终领有牢靠平安的生产环境。
最大的问题是,在切换流量之前,绿色环境没有用户流量,很难测试利用刚上线时的行为。此外,保护两个独立的生产环境会减少老本和经营开销。
4.2 灰度部署
在灰度部署 (Canary Deployment) 中,新的更改最后会部署到一小部分用户,而后逐步推广到所有用户。蓝绿部署由两个独自的生产环境组成,灰度部署则是一个生产环境,托管着利用的两个不同版本。稳定版会持续解决大部分用户流量,而灰度所占的用户流量比例要小得多。
灰度部署的次要益处是:
- 在理论的生产零碎上运行;
- 面向大量用户,缩小缺点带来的潜在影响;
- 便捷地向所有用户推出经灰度验证的新版本。
例如,Netflix 应用灰度部署来进行混沌试验、负载测试和回归测试。其中一个试验可能波及部署一个 API 生效的服务版本,将一小部分用户路由到该服务,随着失败申请的减少,察看零碎行为。测试实现后,能够删除灰度部署,并将这小局部用户从新路由到该服务的稳固版本。
不过,灰度部署仍可能存在有问题的服务,有影响小局部用户的危险,然而这种危险绝对较小。
4.3 黑洞启用
在黑洞启用 (Dark Launch) 中,实时用户流量将被复制并发送到利用的稳固版本和新版本中。稳固版本将持续响应用户申请,而新版本将没收其所有响应,不让用户可见,相似只进不出,俗称“黑洞启用”。
黑洞启用,可全面测试新版本的端到端性能,以及在理论负载下的性能。和灰度部署相似,黑洞部署能够逐步扩充规模,以解决随着时间推移一直增长的流量,所以有时候也称之为“灰度黑洞(Dark Canary)”。
上图中,服务 A 领有多个实例来接管用户申请,并调用服务 B 检索必要的信息。这是一个典型的分层零碎,其中服务 A 是中间层服务,服务 B 是后端服务。而服务 A 是咱们要验证的服务,则须要启用服务 A 的灰度黑洞群集。
LinkedIn 应用 Rest.li 中的动静发现 (D2) 服务发现机制,D2 库装置在每个服务实例中,向 Zookeeper 查问领有该服务的集群,负责将服务 A 中的申请转发。灰度黑洞群集的流量就是这么来的。(https://linkedin.github.io/re…)
灰度黑洞集群的响应会疏忽,不会返回给用户。
一旦对新版本进行了残缺的测试并进行了审核,如果要公布该新版本,只需启用新版本的返回响应,并禁用原始版本的响应即可。
当然,这须要一次运行两个版本的利用,会有老本的开销,但这比蓝绿部署要低得多。
灰度黑洞,为混沌工程测试的可靠性提供了现实的环境。Netflix 应用了灰度部署进行混沌试验,但依然会有小局部用户可能会受到影响。如果是灰度黑洞的办法,咱们能够在与生产雷同规模上运行这些试验,而对用户的影响则齐全为零。
咱们能够在基础架构的不同点引入故障,掂量对理论用户申请的影响,并解决间接影响用户的危险点。同时还能够发现,测试环境中的功能测试或端到端测试无奈发现的问题。
灰度黑洞,能够做到这一点而不会影响任何用户。
五、论断
白璧无瑕的利用是一种奢望,咱们不得不面对现实,在任何可能呈现问题的中央查看利用行为。
在生产中测试,助力 DevOps 团队更好地理解利用行为及其基础设施,升高故障危险,改善用户体验,这是有微小价值的。
蓝绿部署、灰度部署和黑洞启用,能够从只在测试环境中的查看,扩大到生产中的测试,应用受控的办法,管制用户危险。我置信,它们会使你的零碎变得更加牢靠,生产缺陷率将继续降落,用户体验将变得更好。
起源:混沌工程实际
作者:码六贾
申明:文章取得作者受权在 IDCF 社区公众号(devopshub)转发。优质内容共享给思否平台的技术伙伴,如原作者有其余思考请分割小编删除,致谢。
6 月每周四晚 8 点,【冬哥有话说】开心一“夏”。公众号留言“开心”可获取地址
- 0603 无敌哥《IDCF 人才成长地图与 5P》(《端到端 DevOps 继续交付 (5P) 精品课》第 1 课)
- 0610 冬哥《带你玩转翻新设计思维》
- 0617 无敌哥《麻利项目管理到底是个啥》
- 0624 冬哥《VUCA 时代的麻利领导力》