使用 Canary 版本和早期支持来改进生产版本

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

我们都经历过朋友在社交媒体上评论(或抱怨)特定网站的新布局的那一刻。但是您仍然以几个月来的方式看待它,并且您不知道他们在说什么。这是因为运营该网站的公司可能使用 金丝雀版本。

这种类型的释放以 20 世纪初的实践命名,在该实践中,金丝雀被用作煤矿中的哨兵以检测一氧化碳。根据 维基百科 :“动物哨兵或哨兵物种是用于通过提供危险预警来检测人类风险的动物”。因此,金丝雀会在一氧化碳严重影响人类之前生病,给他们一个预警信号,让他们能够在他们也生病之前撤离矿井。 Canary Release 允许将产品发布部署到预警系统,在将其发布到所有生产环境之前,可以在其中对其进行测试。 ITIL 将这些类型的发布称为 分阶段发布。

Canary Releases 可以成为公司进行 CD 甚至 持续部署的 重要工具。通过快速推出新功能,并让实际用户对其进行测试,可以快速有效地实施反馈。在生产环境中对实际用户进行测试还可以让公司深入了解实际性能数据,而不仅仅是在模拟测试环境中。

正如 Jez Humble 所说 ,低风险发布的原则之一是增量发布。 “使用这种模式,您可以逐步将整个集群升级到最新版本,而不是一次升级。” Canary Releases 允许您 增量安装和测试新版本 ,而不会危及整个生产环境。

如何实施金丝雀发布

要实施金丝雀发布,部署必须是 a) 自动化的 ,以及 b) 生产中的配置设置为可以发布到 有限数量的生产节点 。您的部署自动化应该是可配置的,以便可以将应用程序部署到一组服务器上。使用部署自动化解决方案,如 ElectricFlow Deploy ,将允许您选择部署软件版本的环境,然后从那里扩展,如果一切看起来不错。

金丝雀发布将设置少量环境以在生产中进行测试,然后再将发布发布到所有生产节点。通过这种方式,哨兵发布环境允许团队监视发布,直到系统可以达到与生产相匹配的容量。用于测试生产版本的环境可以从生产服务器轮换中取出(将它们从负载均衡器中移除),安装新版本,然后可以以受控方式将流量路由到它们,从而可以管理测试, 并慢慢提升到生产活动水平。如果测试成功,其他环境可以从负载均衡器中移除并安装新版本,直到所有系统都与最新版本一致。

如果在 Canary 发布期间发现任何问题,由于收到新版本的环境数量有限,与涉及所有生产环境的情况相比,将这些环境恢复到以前的版本会更容易.要恢复,这些 Canary 环境可以再次从服务器轮换中取出,然后在恢复到产品的最后一个工作版本后返回。这种类型的发布可确保在新发布的版本出现问题时不会影响所有客户。

早期生活支持

改进发布过程的另一个因素是使用 早期生命支持 (ELS) 过程 。在这种情况下,部署团队是有组织的,对什么是可接受的发布具有明确定义和记录的标准。该团队会在公司确定的指定时间内监控发布,以确保它符合发布的 退出标准 。 ITIL 服务转换标准对 ELS 部署团队有很好的描述。 “部署团队的目标是尽可能快速有效地稳定目标部署组或环境的服务。”

有了 ELS 部署团队,公司可以密切监控发布,直到满足退出标准并且发布被认为是稳定的并且可以在没有监控的情况下运行。部署团队是另一种预警设备,允许快速反应团队对生产中发现的任何问题做出响应。虽然这在敏捷环境中可能不那么有效,但当一天内可能发生多个发布时,它在大型公司中可能非常有效,因为那里的资源更可用,而且大型发布的频率较低。

通过结合使用 Canary 发布和早期支持,公司可以努力找到合适的平衡点,以确保他们的产品发布稳定并为生产做好准备,从而改善用户的整体客户体验。

所以现在你可以告诉你的朋友,这就是他们可能仍然看到旧 Facebook 界面的方式,例如,而其他人可能会评论他们在新界面上的体验——因为他们的实例是由 Canary 服务器提供的。

想要更多?

金丝雀发布只是测试部署并确保成功发布到生产环境的一种方式。其他模式包括 蓝/绿部署、功能标记、暗启动、环境提升等。 要了解部署关键任务应用程序的其他常见模式、它们之间的区别以及每种模式在您的体系结构、代码库或操作方面的含义 —— 请查看下面我们最近的#c9d9 剧集之一的视频重播:

相关文章