大家好 ,服务我是器部猿java 。
作为一名 Java程序员,该知部署生产环境的种策服务器是一项基本能力要求 ,那么 ,服务如何部署才能做到业务无感 ?器部选择什么样的部署策略 ,才能将生产事故降到最低?该知今天我们就来一起聊聊五种常用的部署策略。

Big Bang Deployment ,服务中文翻译为:大爆炸部署,器部也就是该知我们通常说的模板下载全量部署 。它是种策指在一个较短的时间内将新系统或新版本全部部署并替换旧系统 ,使其立即对所有用户生效 。服务
原理Big Bang Deployment的器部原理很简单 ,如下图 ,该知只需要把服务器全量部署,部署前为服务V1.0,服务部署后就全量变成了V2.0。

只有一台服务器:有些使用量比较小的业务 ,为了成本 ,只需要部署一台服务器,香港云服务器因此,当需要部署新功能时 ,就可以采用该策略。
复杂的数据库升级 :如果数据库需要进行复杂的业务升级,已经到了不得不使用全量部署策略 。
总体而言,Big Bang Deployment是一种迅速推出新系统的方法,适用于紧急的业务需求,但风险较高 。在实施前需要充分的计划 、建站模板测试和备份策略 ,以减轻潜在的风险 。对于一些重要业务功能,采用渐进式的部署策略可能更为保守和安全 。
Rolling Deployment,中文翻译为 :滚动部署。与 Big Bang Deployment 相对,它指的是在部署新系统或新版本时 ,逐步将新版本部署到一部分用户或服务器上 ,然后再逐步扩大范围,直至所有用户或服务器都更新到新版本。
原理准备新版本 :在进行滚动部署之前,团队需要准备好新版本的应用程序代码 、配置和资源 。划分批次:团队将服务器分成多个批次(通常是一组服务器),每个批次都将逐步进行更新。停止旧版本 :从第一个批次开始 ,停止旧版本的服务器 ,使其不再提供服务。部署新版本:在停止的旧版本服务器上部署新版本的应用程序代码,并启动新版本 。验证新版本:确保新版本的服务器正常运行,并在没有问题的情况下继续进行下一批次的部署 。逐步推进:逐步重复步骤 3~5 ,依次更新下一个批次的服务器,直到所有服务器都部署了新版本 。完成部署 :一旦所有服务器都成功部署了新版本,滚动部署就完成了。如下图:在所有的服务器中,我们将 2台部署成新服务V2.0,当用户的请求到达新服务上得不到响应时 ,可以快速回滚到V1.0,快速止损。当用户请求到达新服务V2.0能收到预期响应,则可以继续下一批服务的发布。

Rolling deploy是一种较为稳健和逐步的部署策略,适用于对风险敏感且需要更好控制部署过程的情况 。它可以减少系统故障的风险,但需要更多的时间和资源来确保顺利完成部署,并在整个过程中维持系统的稳定性和用户体验。
Blue-Green Deployment ,中文翻译为 :蓝绿部署 ,它允许在生产环境中同时维护两个相同的系统版本:一个为当前生产版本(蓝色),另一个为新版本(绿色)。
原理初始状态 :在初始状态下,蓝色环境是活动的 ,承载着当前的生产版本应用程序 ,而绿色环境是非活动的 ,不对用户提供服务。部署新版本:在进行新版本的部署前 ,将新的应用程序部署到绿色环境中,但并不启动它 。测试和验证:在部署新版本之后 ,在绿色环境中进行全面测试和验证,以确保新版本的功能和性能正常 。切换流量 :一旦新版本经过验证没有问题,可以将流量从蓝色环境逐渐切换到绿色环境。这样,一部分用户或请求将被导向绿色环境,而其他用户仍然继续使用蓝色环境。监控和回滚:持续监控绿色环境的性能和稳定性 。如果出现问题,可以迅速回滚到蓝色环境,保证服务连续性 。完成切换 :一旦绿色环境被验证为正常运行 ,并且满足预期的要求 ,可以继续将所有流量切换到绿色环境 ,从而完成蓝绿部署。如下图 :Blue为老环境,提供正常服务;Green为新环境,部署新的服务 ,不对实际用户提供服务,因此 ,QA 团队可以在 Green环境中测试新版本 ,如果发现任何错误或问题都可以快速修复它们。

如果 Green环境验证OK,达到上线条件 ,就可以把 Blue环境的流量慢慢切到 Green环境,假如 Green环境出现任何异常 ,又可以快速回滚到 Blue环境,如下图 :

总的来说 ,Blue-Green Deployment 的原理是通过在两个相同的环境中进行部署,逐步切换流量 ,实现零宕机和无缝切换新版本应用程序的目标 。
优点零宕机部署 :蓝绿部署允许在切换到新版本时实现零宕机(Zero Downtime)部署 。新版本可以在独立的环境中进行测试 ,确保其稳定性和功能正常后 ,再切换用户流量到新版本 ,而不会中断服务 。风险控制:由于蓝绿部署可以随时回滚到蓝色版本 ,即使新版本存在问题,也可以快速切换回旧版本,降低了部署风险。灰度发布 :蓝绿部署可以实现灰度发布 ,逐步将用户流量从蓝色版本转移到绿色版本,以便逐步测试新版本并收集用户反馈,确保稳定性。迭代更新 :蓝绿部署适合频繁发布和迭代更新 ,帮助团队快速交付新功能和修复问题。缺点环境资源需求:蓝绿部署需要同时维护两个环境(蓝色和绿色),这可能会增加资源成本和管理复杂性 。配置同步:在进行版本切换时 ,确保两个环境的配置和数据同步可能需要额外的努力和策略 。需要自动化:为了实现蓝绿部署的优势 ,需要有自动化的部署和回滚机制,否则可能增加人工错误的风险。适用环境
Blue-Green 部署策略通常用于大规模应用程序或关键系统 ,以确保在部署过程中用户不会受到影响 ,同时提供快速回滚机制以应对可能出现的问题 。
Canary Deployment ,中文翻译为:金丝雀部署 ,其实就是灰度发布。它允许在生产环境中逐步将新版本应用程序推送给一小部分用户或服务器 ,然后根据实时性能和用户反馈逐步增加新版本的比例 ,直到最终将所有用户或服务器都切换到新版本 。这种部署方法得名于金丝雀鸟(Canary) ,它是用来检测气体中有毒物质的早期指示器 。
原理小规模发布:首先,只将新版本应用程序部署到生产环境中的一小部分服务器或一小部分用户。这些被选中的服务器或用户组成了“金丝雀群体”。监控和比较:通过监控金丝雀群体的性能、稳定性和用户反馈,与之前的版本进行比较。如果新版本表现良好且没有问题 ,可以逐步增加新版本的部署比例。逐步升级 :根据监控数据 ,逐渐将新版本应用程序推送给更多的服务器或用户 ,直到最终完成全部升级。在这个过程中,可以根据需要灵活地调整部署比例 。回滚机制:如果在升级过程中出现问题,可以立即回滚到旧版本 ,保证用户和系统的稳定性 。如下图 :首先会部署出一个新版本的小集群,然后将小部分真实用户切换到小集群上,如果在小集群上验证业务OK ,则可以服务全部部署成V2.0,如果小集群上出现任何问题 ,只需要把用户切换到V1集群上 ,然后对小集群进行修复 。



Canary Deployment 特别适用于大型和复杂的系统 ,它可以帮助团队在更新时最小化风险,并及时发现和解决潜在问题,提供更好的用户体验和服务质量。但它也需要较高的部署复杂性和实时监控要求。
在实际生产中,Canary Deployment 通常不是一个独立的策略,它通常与Rolling deploy相结合,以创建一种将两全其美的方法结合在一起的方法。
Feature Toggle,中文翻译为 :功能开关,它允许开发团队在运行时控制应用程序的功能可见性,即通过开关来启用或禁用特定功能 。这种技术的核心原理是将特定功能的开启状态从代码中解耦出来,使得在不修改代码的情况下 ,可以在运行时灵活地切换功能的开启状态 。
原理利用条件判断 :在代码中通过设置条件判断 ,以决定是否执行特定功能代码块 。外部配置 :将功能的开启状态配置化,通常存储在外部配置文件或数据库中。运行时开关 :通过修改配置,可以在运行时控制特定功能的开启或禁用状态 。动态刷新:为了使更改立即生效 ,通常需要支持动态刷新配置,而不必重新启动应用程序。如下图:在服务部署的代码中设置开关,控制真实的逻辑


Feature Toggle 适用于代码存在多套逻辑的场景,可以帮助团队更灵活地开发和部署功能 ,减少部署风险,支持逐步发布和A/B测试。然而,使用Feature Toggle 需要慎重考虑 ,确保在长期维护过程中不会导致过多的技术债务和复杂性增加 。
本文分别讲解了 Bing Bang deploy ,Rolling Deploy,Blue-Green Deploy,Canary Deploy ,Feature Toggle 5种策略的原理和优缺点,适用场景 。名字看起来很高深,似乎都没有听过,但仔细了解一下都是日常部署常用的方法 。下面再通过一家电商公司的发展历程来总结描述这几种部署策略:
初创时期,快速搭建产品,没有真实用户 ,只需要部署一台服务器 ,每次新功能的迭代可以采取 Bing Bang deploy 这种全量部署策略