![null 056875e5427d62c8fe9700ece2956f71.png](https://i-blog.csdnimg.cn/blog_migrate/342e5d1240971e4fecc9bf49167f2247.png)
部署与发布
在决定发布策略之前,我们必须区分两个重要概念:部署和发布。部署涉及将功能完全推进生产环境,因为您现在在系统中运行了一个进程。尽管已经部署,但新功能并未通过与生产系统的交互活跃或执行。
有各种方法可以实现此分离。发布涉及以受控的方式激活新功能,从而允许您控制引入新功能的风险。Thoughtworks Technology Radar 对部署和发布之间的区别有很好的解释:
对于许多组织来说,实施持续交付仍然是一个挑战,突出使用诸如将部署与发布分离等有用技术仍然很重要。我们建议在指涉将应用程序组件或基础架构的更改部署时严格使用术语“部署”。应该在功能更改对最终用户产生业务影响时使用术语“发布”。通过使用功能切换和静默发布等技术,我们可以在不发布功能的情况下更频繁地部署更改到生产系统。更频繁的部署减少了与更改相关的风险,同时业务利益相关者保留了对何时向最终用户发布功能的控制。
发布策略
一旦您充分区分了部署和发布,现在可以考虑控制功能逐步发布的机制。选择发布策略时,重要的是要选择一种允许您在生产环境中降低风险的策略。通过对小部分流量进行测试或实验,并验证结果来降低风险。当结果成功时,就会触发对所有流量的发布。某些策略更适合特定情况,并需要不同程度的额外服务和基础架构。让我们探讨一些在基于 API 的基础架构中受欢迎的选项。
金丝雀发布
![null 9c8989c70f6700b6d11a72dbc6e5e177.png](https://i-blog.csdnimg.cn/blog_migrate/96c96fa35826756e64e92c4ed8912129.png)
金丝雀发布引入了软件的新版本,并将少量流量引导到金丝雀。流量在旧服务和新服务之间的分配概念已经建立,这将取决于目标平台。
在服务网格和 API 网关中,流量转移使得可以逐渐将流量从目标服务的一个版本转移到另一个版本。例如,可以将新版本 v1.1 的服务部署在原始版本 v1.0 的旁边。流量转移使您可以通过首先只将一小部分用户流量(例如 1%)路由到 v1.1,然后随着时间的推移将所有流量转移到新服务,对新服务进行金丝雀测试或发布。
这使您可以监视新服务,并查找技术问题,例如增加的延迟或错误率,还可以查找期望的业务影响,例如关键性能指标(如客户转化率或平均购物结账价值)的增加。流量分割使您能够通过在多个服务版本之间分配流向目标服务的流量来运行 A/B 测试或多变量测试。
流量镜像
![null 6b1be68fab215fdffb3feb262c7b7517.png](https://i-blog.csdnimg.cn/blog_migrate/3fcce0a7426e134d040341c69d953b41.png)
除了使用流量分割来运行实验之外,您还可以使用流量镜像来复制或复制流量,并将其发送到一个或一系列附加位置。通常情况下,使用流量镜像时,复制的请求的结果不会返回给调用服务或最终用户。相反,将对生成的结果进行越带评估,例如比较重构和现有服务生成的结果,或者观察一系列操作属性,以观察新服务版本处理请求时的响应延迟或所需 CPU。
使用流量镜像使您能够进行“暗发布”或“暗发行”服务,其中用户对新发布保持不知情,但您可以在内部观察所需的效果。
蓝绿部署
![null 6e12740b395d1782248fd67503ec4c3b.png](https://i-blog.csdnimg.cn/blog_migrate/362a900fce15f63c7815deb9f60bb99a.png)
蓝绿部署通常在使用路由器、网关或负载均衡器的架构中实现,在这些架构的后面有一个完整的蓝环境和一个绿环境。当前的蓝环境表示当前的生产环境,绿环境表示堆栈的下一个版本。在切换到实时流量之前,会对绿环境进行检查,并在上线时将流量从蓝环境切换到绿环境。蓝环境现在处于“关闭”状态,但如果发现问题,回滚会很快。下一个更改将从绿色转到蓝色,从第一个发布开始进行交替。
由于其简单性,蓝绿部署效果很好,并且对于耦合的服务来说是更好的部署选项之一。对于持续存在的服务,管理起来也更容易,尽管在回滚事件中仍需要谨慎。它还需要双倍数量的资源来能够并行运行当前活动环境的冷备份。