总览图:

1、蓝绿部署
1.1、概念介绍
蓝绿部署(Blue-Green Deployment)是一种软件发布技术,旨在最大限度地减少应用程序的停机时间,并减少在部署新版本时对用户的影响。这个方法通过运行两个独立的环境(通常称为“蓝色环境”和“绿色环境”)来实现。
1.2、基本概念
蓝色环境(Blue Environment):这是当前正在生产环境中运行的版本,用户所有的请求都被路由到这个环境中。
绿色环境(Green Environment):这是一个与蓝色环境完全相同的环境,用于部署和测试新版本的应用程序。
1.3、发布流程
初始部署: 蓝色环境是运行应用程序稳定版本的初始生产环境。用户通过该环境访问应用程序,并作为与更新版本进行比较的基线。

更新部署: 应用程序的更新版本部署到绿色环境,该环境在基础设施、配置和数据方面镜像蓝色环境。绿色环境最初与用户流量保持隔离。

测试和验证: 绿色环境经过彻底测试,以确保更新版本功能正确并满足所需的质量标准。这包括运行自动化测试、执行集成测试以及可能进行用户验收测试或金丝雀发布。
流量切换: 一旦绿色环境通过了所有必要的测试和验证,流量路由机制就会调整为开始将用户流量从蓝色环境引导到绿色环境。此切换可以使用各种技术来完成,例如 DNS 更改、负载平衡器配置更新或反向代理设置。

监控和验证: 在整个部署过程中,蓝色和绿色环境都会受到监控,以检测任何问题或异常情况。监控工具和可观察性实践有助于实时识别性能问题、错误或不一致。验证无误后可删除老版本资源。

回滚和清理: 当出现意外问题或结果不理想时,可以采用回滚策略将流量切换回蓝色环境,恢复到稳定版本。此外,在部署过程中在绿色环境中进行的任何资源或更改可能需要清理或恢复。
2、金丝雀部署
2.1、概念介绍
金丝雀发布(Canary Release)是一种软件发布策略,旨在逐步推出新版本的应用程序,以便在实际生产环境中小规模测试新版本的功能和性能,减少发布风险。这个名字来源于矿工在矿井中使用金丝雀作为早期预警系统的做法,金丝雀发布也是为了在早期阶段发现潜在问题。
2.2、基本概念
逐步发布:新版本的应用程序不会立即替换旧版本,而是逐步地、小规模地发布给一小部分用户。
实时监控:在金丝雀发布过程中,实时监控新版本的性能和行为,以便及时发现和处理问题。
快速回滚:如果新版本出现问题,可以迅速回滚到旧版本,确保服务稳定。
分流流量:将一部分用户流量导向新版本,剩余流量继续使用旧版本。随着新版本被验证稳定,可以逐步增加导向新版本的流量比例,直到完全替换旧版本。
2.3、发布流程
准备环境:
确保当前的生产环境运行稳定,并且具有良好的监控和日志记录机制。
配置必要的工具和平台(以支持金丝雀发布策略。
部署金丝雀版本:
将新版本部署到生产环境中,但仅运行少量实例(如一个或少数几个 Pod)。
这些实例通常会有专门的标记(label)或服务(service)用于识别和流量路由。
流量分配:
通过负载均衡器,将一小部分用户流量导向新版本。
大部分用户流量仍然导向旧版本,以保证整体服务的稳定性。
监控和验证:
实时监控新版本的关键性能指标(如响应时间、错误率、资源使用等)。
收集用户反馈和日志信息,检查是否存在错误或性能问题。
逐步扩展:
如果新版本表现良好,逐步增加导向新版本的流量比例。
每次增加流量后,重复监控和验证步骤,确保新版本继续表现稳定。
全面发布或回滚:
如果新版本在所有流量下均表现稳定,最终完全替换旧版本。
如果发现问题,立即回滚到旧版本,停止导向新版本的流量。

3、灰度发布
本质上和金丝雀发布同理
假设你有一个100台服务器的集群,现在要发布一个新版本。
如果采用“金丝雀”的思路:你会先升级其中1台服务器到新版本,让这1台服务器先接收部分流量。如果这1台服务器运行稳定,再逐步升级剩下的99台。
如果采用“灰度”的思路:你可能同时准备好了新、旧两个版本的集群,但只让 1% 的流量(而非具体的1台服务器)访问新版本。如果没问题,再逐步调高流量的比例,比如到10%、50%,直到100%
总结:
理论区别:金丝雀发布是以“部署节点”为单位(先升级少量机器),灰度发布是以“流量比例”为单位(先分配少量流量)。
实践现状:在实际工作中,尤其是在微服务和云原生架构下,这两个术语常常被混用。大家提到它们时,指的都是“逐步放量”这个操作本身。
简单来说:金丝雀是“先换上一小部分试试”,灰度是“先放一小撮人过去用用”。所以,不必过于纠结字面差异。
评论区