灰度发布简介

〇、前言

灰度发布是一种将软件的新版本或新功能逐步推广给用户的一种技术,它包含了诸多实施策略,本文将分别简单介绍下,并就使用场景进行对比。

一、灰度发布的实施策略列举

灰度发布可以通过多种策略和方法来实施,以确保新版本的软件能够安全、平稳地过渡到所有用户。

大概有以下几种策略:

策略 核心特点 典型使用场景
金丝雀发布 极小范围测试,逐步放量 高风险系统升级、核心服务验证
A/B 测试 多版本对比,数据驱动决策 功能优化、用户体验测试
滚动更新 分批替换实例,留有观察期 微服务架构、后台服务升级
蓝绿部署 双环境切换,快速回滚 高可用性需求、金融系统
用户属性灰度 定向推送,精准控制 VIP用户测试、地域差异化策略
流量比例控制 简单权重分配,快速实施 大规模用户平滑过渡、静态资源更新
全链路灰度 全流程覆盖,验证复杂依赖 多组件系统、订单链路验证
服务网格灰度 动态路由,细粒度控制 微服务架构、复杂路由规则
时间窗口发布 依据用户活跃时间和流量模式 全球分布服务、企业内部系统升级

选择侧重点:

  • 优先考虑风险控制:选择金丝雀发布或蓝绿部署。
  • 需要数据验证:采用A/B 测试。
  • 资源充足且需快速切换:使用蓝绿部署。
  • 复杂系统依赖:推荐全链路灰度或服务网格灰度。
  • 用户习惯明显有聚集性:推荐使用时间窗口发布。

二、各个策略的详细介绍

2.1 金丝雀发布(Canary Release)

金丝雀发布(Canary Release)是一种软件部署技术,旨在减少新版本发布时的风险。

此方法的名字来源于煤矿工人使用金丝雀检测矿井中的有毒气体的做法------如果金丝雀无法生存,则表明矿井环境对人类也是危险的。

类似地,在软件开发中,金丝雀发布通过首先将新版本部署到少量用户来"测试水温",确保新版本稳定且没有重大问题,然后再逐步推广到更大的用户群体。

即将新版本部署到少量服务器上或仅推送给一小部分用户,并密切监控这些服务器或用户的反馈情况。如果新版本运行良好,则逐渐增加其覆盖范围;如果出现问题,则快速回滚以避免影响更多的用户。

简单的不中:随机选择一部分用户 --> 仅面向此部分用户开放新版本 --> 监控一段时间的服务运行参数并进行合理的评估 --> 根据评估结果进行决策

使用场景:

  1. 大规模用户基数的应用:对于拥有大量用户的在线服务或应用,直接更新到所有用户可能会导致严重的后果,如果新版本存在问题的话。
  2. 高风险变更:当需要对关键系统进行重大修改或升级时,如核心算法的更改、架构的重大调整等。
  3. 探索性功能发布:在推出新的实验性功能时,开发者可能希望通过实际用户反馈来评估该功能的价值和用户体验。
  4. 持续集成/持续交付(CI/CD)流程中的质量保证:在CI/CD环境中,频繁地进行软件更新是常态。
  5. 提高系统稳定性:通过缓慢增加接受新版本的用户比例,团队能够更有效地监控系统性能,及时发现潜在的问题,并采取相应的措施,从而提高系统的整体稳定性。
  6. 市场测试与用户行为分析:金丝雀发布还被用于市场营销目的,例如测试不同版本的设计或功能以了解用户的偏好,以及分析用户如何与新特性互动,以便做出数据驱动的产品决策。

2.2 A/B 测试

在同一时间维度上,让一部分用户继续使用 A 版本,另一部分用户开始使用 B 版本,用户的选择需要是随机的。通过对比两组用户的反馈和性能指标,来评估哪个版本更优。

A、B 两个版本,可以是同一个功能的两种实现方式,也可以是新旧两个版本的对照。

  • A版本:通常是现有的版本或控制组,作为基准进行比较。
  • B版本:包含更改的新版本,可以是新的功能、界面设计或其他任何改动。

在开始 A/B 测试之前:

  1. 需要明确想要达成的目标是什么。例如,提高转化率、增加用户停留时间或减少跳出率等。
  2. 需要基于业务需求提出假设。例如,"如果我们将按钮的颜色从蓝色改为红色,点击率将会提升"。
  3. 确定如何实施变化以及如何测量其影响。包括选择合适的指标来衡量成功与否,如点击次数、购买完成率等。
  4. 确定将流量随机分成两部分分别指向 A 版和 B 版的方式。这可以通过负载均衡器、内容分发网络(CDN)或者其他方式实现。

执行测试后,收集并分析数据,判断是否有足够的证据支持之前的假设。需要注意的是,要考虑到统计显著性和置信区间等因素。

统计显著性是统计学中的一个概念,用来判断研究结果是否具有实际意义,即观察到的效果是否不太可能是由于随机变异或偶然因素造成的。在实验设计、数据分析以及A/B测试等领域中,统计显著性是非常重要的评估标准之一。

**置信区间(Confidence Interval)**是统计学中的一个重要概念,它提供了一种方法来估计总体参数的不确定性。置信区间通常由两个数值界定,即下限和上限,这两个数值围绕着样本统计量(如样本均值)。例如,如果我们说某总体均值的 95% 置信区间是[40, 60],这意味着如果我们重复取样并计算置信区间很多次,大约 95% 的这些区间将包含真实的总体均值。

最终,根据测试结果决定是否全面部署B版本,还是需要进一步调整后再测试。

其他需要注意的点:

  • 样本大小与持续时间:确保有足够的样本量和适当的测试周期,以便获得可靠的结果。
  • 单一变量原则:尽量只改变一个变量,这样更容易确定导致不同结果的原因。
  • 避免偏差:保证参与测试的所有用户都是随机分配的,以避免引入偏见影响测试准确性。
  • 伦理考量:在进行A/B测试时也要考虑用户体验和隐私保护问题,确保所有操作都符合相关法律法规。

应用场景:

  • 产品迭代:尝试不同的功能布局或交互流程,寻找最佳用户体验。
  • 营销活动:对比不同广告文案或促销策略的效果,优化营销方案。
  • 界面设计:测试不同的视觉元素如颜色、字体大小对用户行为的影响。

2.3 滚动更新(Rolling Update)

滚动更新是一种在不影响服务可用性的前提下,逐步更新应用实例的部署策略。

这种方法允许新的软件版本或配置更新被逐步应用到运行的应用程序中,而不会导致整个服务中断。

在滚动更新过程中,集群中的实例(例如容器、虚拟机或服务器)会按批次进行更新。每一批次中的一部分实例会被停止,并使用新版本的应用进行替换,同时其他实例继续处理请求。一旦某批次的更新完成并验证无误后,再对下一批次进行同样的操作,直到所有实例都被更新为新版本。

三个特点:

  1. 持续的服务可用性:由于不是所有实例同时下线,因此可以保证服务在整个更新过程中的连续性和高可用性。
  2. 渐进式风险降低:通过分批更新,可以在早期发现潜在的问题,从而减少大规模故障的风险。
  3. 灵活性和可控性:可以根据实际情况调整更新的速度和规模,如根据流量模式选择合适的更新时间窗口。

主要的应用场景:

  • Web 应用程序和服务:对于需要保持高度可用性的在线服务和网站来说,滚动更新是一个理想的选择。
  • 微服务架构:在微服务环境中,每个服务都可以独立地进行滚动更新,这有助于减少跨服务依赖的影响,并支持更细粒度的变更管理。
  • 容器化应用:特别是在使用 Kubernetes 等容器编排工具时,滚动更新功能可以直接集成到 CI/CD 管道中,实现自动化部署和回滚机制。
  • 企业级应用和数据库迁移:在企业环境中,当需要升级关键业务系统或执行数据库迁移时,滚动更新可以帮助确保业务连续性,最小化停机时间。
  • 边缘计算和物联网(IoT):在这些领域,设备分布广泛且数量庞大,滚动更新能够有效管理和协调大量设备的软件更新,同时保持系统的稳定性和安全性。

2.4 蓝绿部署(Blue-Green Deployment)

蓝绿部署(Blue-Green Deployment)是一种用于软件发布的技术,旨在最小化停机时间并提供快速回滚的能力

这种方法通过维护两个几乎完全相同的生产环境来实现:一个是当前正在运行的"蓝色"环境,另一个是准备接收新版本的"绿色"环境。

**蓝色环境:**这是当前的生产环境,正在为用户提供服务。

**绿色环境:**这是一个预备环境,在这里部署新的应用版本或更新。

在进行新版本部署时,首先会在绿色环境中完成所有必要的配置和测试。一旦确认绿色环境中的新版本一切正常,流量会被切换到绿色环境,从而使得新版本上线而无需停机。如果新版本出现问题,可以迅速切换回蓝色环境,以确保服务的连续性。

主要特点:零停机部署、快速回滚、简化部署过程

常见的应用场景:

  • 关键业务应用:对于那些需要高可用性和严格的服务水平协议(SLA)的应用程序。
  • 频繁迭代的产品:适用于那些需要频繁发布新功能或改进的互联网产品,如社交媒体平台、电子商务网站等。
  • 企业级应用:大型企业在升级其关键业务系统时也会采用蓝绿部署策略,以减少对日常运营的影响。
  • 微服务架构:在微服务架构中,每个服务都可以独立地执行蓝绿部署,这有助于隔离不同服务间的依赖关系,并加速整体系统的演进。
  • 云原生应用:随着云计算的发展,越来越多的企业倾向于使用容器化技术(如 Docker)和编排工具(如 Kubernetes),这些技术天然适合蓝绿部署模式,便于自动化管理。

2.5 基于用户属性的发布

基于用户属性的发布,允许根据用户的特定属性来选择性地向部分用户推送新功能或更新版本

这种方法使得团队能够更加精准地控制哪些用户可以访问新特性,从而更有效地评估新功能的表现和用户体验

此策略主要依赖于对用户数据的分析和分类。这些用户属性可以包括但不限于地理位置、设备类型、操作系统版本、使用频率、注册时间、用户分层(如VIP用户与普通用户)等。通过定义具体的规则集,开发团队可以选择符合特定条件的用户群体作为灰度发布的对象。

比较突出的应用场景:

  • **地理区域测试:**当需要根据不同地区的市场反应来调整产品策略时,可以根据用户的地理位置进行灰度发布。比如,在某个国家或地区先推出新的功能,观察其效果后再决定是否在全球范围内推广。
  • **设备兼容性验证:**对于某些特定于硬件的功能或优化,可以通过用户使用的设备类型来进行灰度发布。例如,针对高端手机型号的图形处理优化,可以在这些设备上先行测试。
  • **用户分层体验:**有时会希望优先让忠实用户或者付费用户试用新功能,以获取他们的反馈。这种情况下,可以根据用户的会员等级或其他特征来进行发布。

2.6 流量比例控制

通过小比例流量测试新版本,逐步扩大流量比例,让用户无感知地从旧版本过渡到新版本

即使新版本出现异常,可快速回滚,减少影响范围,避免全量上线导致系统崩溃或用户体验下降。

通过监控流量比例下的关键指标(如错误率、QPS、响应时间),验证新版本的实际效果。

下面简单列举下四种实现方式。

需求 推荐方案 理由
简单快速 Nginx权重分配 配置简单,适合小型项目。
动态调整 OpenResty + Redis 支持实时修改规则,灵活性高。
微服务架构 Istio虚拟服务 适合复杂路由和多服务场景。
云原生应用 云平台灰度发布 无需自建基础设施,开箱即用。
  • 通过 nginx 进行流量配置:适合小型项目

这个是最简单的实现方式,示例代码:

复制代码
upstream backend {
    server app-v1:8080 weight=5;  # 旧版本占50%流量
    server app-v2:8080 weight=5;  # 新版本占50%流量
}

优点是配置简单,适合静态流量配置。

但是 nginx 无法动态调整,修改配置后还需要手动重启服务,导致其只适合小型项目

  • 基于 OpenResty + Lua + Redis 的动态流量控制

通过 OpenResty(Nginx 的增强版)结合 Lua 脚本和 Redis 实现动态流量控制。

大概的步骤:

  1. 流量染色:根据用户 ID、IP 等标识,在首次请求时随机分配到新/旧版本,并记录到 Redis。

  2. 动态路由:后续请求根据 Redis 中的记录转发到对应版本。

    -- access_by_lua_block
    local redis = require "resty.redis"
    local red = redis:new()
    local ok, err = red:connect("127.0.0.1", 6379)
    if not ok then
    ngx.log(ngx.ERR, "Redis连接失败: ", err)
    ngx.exit(500)
    end

    -- 获取用户ID(示例从Header获取)
    local user_id = ngx.req.get_headers()["X-User-ID"]
    local is_gray = red:get("gray_user:" .. user_id) -- 判断是否为灰度用户
    if is_gray == "1" then
    ngx.var.upstream = "gray" -- 转发到灰度版本
    else
    ngx.var.upstream = "prod" -- 转发到生产版本
    end

优点是支持动态调整比例(通过Redis更新规则),灵活性高。

缺点是实现复杂度较高,需维护 Redis 和 Lua 逻辑。

  • 基于服务网格(如 Istio)的流量控制:适合复杂路由和多服务场景

在微服务架构中,通过服务网格(如Istio)实现细粒度的流量比例控制。

示例配置:

复制代码
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 80  # 旧版本占80%
    - destination:
        host: reviews
        subset: v2
      weight: 20  # 新版本占20%

优点是支持基于 Header、Cookie、URL 等的复杂路由规则,适合微服务场景。

缺点是依赖服务网格基础设施(如 Istio),部署成本较高。

  • 基于云平台的流量控制(如阿里云 SAE)

云平台(如阿里云 Serverless 应用引擎 SAE)提供开箱即用的流量比例控制功能

大概的步骤:

  • 在控制台选择"灰度发布"策略。
  • 配置流量比例(如20%新版本流量)。
  • 监控指标,逐步调整比例。

优点:无需自建基础设施,操作简单。但是灵活性受限于云平台的功能

场景 流量比例控制方式 示例
版本迭代 Nginx 权重分配 电商平台在大促前,逐步将流量从旧版本迁移到新版本。
A/B 测试 OpenResty 动态路由 社交平台测试两种 UI 设计,按 50% 流量分配。
微服务灰度发布 Istio 虚拟服务 金融系统的订单服务新版本先接收 10% 流量,验证无误后全量。
云原生应用 阿里云 SAE 灰度发布 企业应用通过云平台配置流量比例,快速验证新功能。

例如,某电商平台在购物节前需要更新订单系统。配置的大概流程就是:

初始配置:通过Nginx将5%的流量分配到新版本。

监控指标:观察错误率(<0.1%)、QPS(稳定增长)。

逐步放量:每24小时增加5%流量,直至100%。

回滚预案:若错误率超过1%,立即切换回旧版本。

最终实现全量上线。

全链路灰度是一种在分布式系统中实现灰度发布的高级策略,尤其适用于微服务架构

核心思想是通过统一标签透传和流量控制,确保新版本功能在整个调用链路上(从网关到数据库)的一致性验证,从而降低多服务协同变更的风险

目的是:

风险隔离:确保灰度流量仅影响指定用户或服务,避免对生产环境造成冲击。

精准验证:通过端到端的流量透传,验证新版本在真实业务场景中的表现。

快速回滚:若发现问题,可快速切换回旧版本,保障系统稳定性。

资源优化:无需为灰度版本单独搭建完整环境,节省资源成本。

全链路灰度的核心在于流量染色 (Traffic Coloring)和标签透传(Tag Propagation),具体步骤如下:

  • 流量入口染色

网关层:在网关(如Nginx、Spring Cloud Gateway)通过 Header、Cookie 或用户属性(如用户 ID、地域)对流量进行标记。示例:X-Gray-Tag:canary 或 userId % 10 == 0 的用户进入灰度。

动态规则:支持通过配置中心(如 Nacos、Consul)实时调整染色规则,无需重启服务。

  • 标签透传

服务间传递:通过分布式链路追踪(如 OpenTelemetry、SkyWalking)将灰度标签传递到下游服务。示例:在调用链中,每个服务的请求头自动携带 X-Gray-Tag,确保所有服务识别并处理灰度流量。

技术实现:服务网格(如 Istio) :通过 Envoy Sidecar 拦截请求,自动透传标签。代码侵入式:在服务调用逻辑中显式传递标签(如 Feign 拦截器)。

服务路由

负载均衡策略:根据标签选择对应版本的服务实例。示例:Ribbon 或 Nacos 的负载均衡器根据 X-Gray-Tag 路由到灰度版本。

服务网格配置(如 Istio):

复制代码
# VirtualService: 按权重分配流量
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: payment-service
spec:
  hosts:
  - payment-service
  http:
  - route:
    - destination:
        host: payment-service
        subset: v1
      weight: 90
    - destination:
        host: payment-service
        subset: v2
      weight: 10
  • 数据库隔离

读写分离:灰度流量可定向到独立的数据库实例或Schema。

事务一致性:确保灰度流量的数据操作不影响生产数据(如通过事务隔离级别)。

实现方案例举:基于服务网格(Service Mesh)

典型工具:Istio、Linkerd。

优势:非侵入式:无需修改业务代码,通过Sidecar代理实现流量控制。细粒度管理:支持基于 Header、Cookie 的动态路由。

实现步骤:

在网关层注入灰度标签(如 X-Gray-Tag)。

Istio 的 VirtualService 和 DestinationRule 配置流量分配。

Envoy Sidecar 自动透传标签到下游服务。

实现方案例举:基于微服务框架

典型工具:Spring Cloud + Nacos、Kubernetes。

实现方式:网关层:Spring Cloud Gateway通过过滤器判断灰度标识。服务层:Ribbon或Feign拦截器传递标签,Nacos注册中心区分服务版本。

实现方案例举:基于传统架构

典型工具:Nginx、Lua 脚本。

通过 Nginx 实现,示例代码:

复制代码
location /api/ {
    set $gray_flag "";
    if ($http_x_gray_tag = "canary") {
        set $gray_flag "canary";
    }
    proxy_pass http://backend_v$gray_flag;
}
场景 全链路灰度的作用
多服务协同升级 例如,订单服务、支付服务、库存服务需同时升级,通过全链路灰度验证整体流程稳定性。
数据库迁移 新数据库(如TiDB)上线前,通过灰度流量验证兼容性和性能。
高并发活动 促销期间逐步开放新支付接口,避免突增流量导致服务崩溃。
A/B测试 对比不同UI设计或算法策略的效果,通过全链路灰度精准分流用户。
优点 缺点
风险可控:小范围验证后逐步推广。 开发成本高:需改造网关、服务和数据库。
用户无感知:灰度切换对业务无影响。 运维复杂:需维护多套服务版本和路由规则。
快速回滚:异常时可立即切换回旧版本。 依赖链路追踪:需集成分布式追踪系统(如SkyWalking)。

简单案例分析:电商平台个性化推荐灰度发布。

网关层:根据用户 ID 哈希(如 userId % 100 < 5)标记灰度流量。

推荐服务:灰度版本通过 X-Gray-Tag 被网关路由到新实例。

数据库:灰度流量读取独立的推荐模型数据表(如 recommend_v2)。

监控:通过 Prometheus 和 Grafana 实时监控灰度流量的错误率、QPS,若异常则触发回滚。

2.8 服务网格灰度

服务网格是一种用于处理服务间通信的基础设施层,特别适用于微服务架构。

它旨在提供一种透明的、与应用层代码解耦的方式来管理服务间的网络通信,并解决分布式系统中常见的挑战,如服务发现、负载均衡、故障恢复、度量监控和安全传输等。

服务网格的关键特性包括:

服务发现与负载均衡: 自动识别可用的服务实例,并智能地将请求分发到健康的服务实例上,全过程无代码侵入。
流量控制: 支持复杂的流量路由规则,如金丝雀发布、蓝绿部署等。
熔断与限流: 保护服务免受异常流量的影响,确保系统的稳定性和可靠性。
监控与追踪: 收集详细的遥测数据,帮助了解服务性能和依赖关系。
安全传输: 通过 mTLS 等机制加密服务间的通信,保障数据的安全性。
快速回滚: 出现问题时,可通过控制台一键回滚至旧版本,避免大规模故障。
多环境兼容: 无需维护多套物理环境,所有版本共用同一套基础设施,节省资源成本。
**可视化与自动化:**通过控制台实时监控流量分布、性能指标,并支持策略自动下发。

服务网格通过以下核心组件实现灰度发布:

  • 代理(Sidecar):每个服务实例旁部署一个轻量级代理(如 Istio 的 Envoy),负责拦截所有进出服务的流量,并根据预设规则进行路由。
  • 控制平面(Control Plane):集中管理所有代理的配置(如路由规则、负载均衡策略),通过 API 下发策略到数据平面(Data Plane)。
  • 两个流量管理组件:VirtualService:定义流量路由规则(如按请求头、用户ID或比例分配流量)。DestinationRule:定义服务的子集(Subsets,如 v1、v2 版本)和负载均衡策略。

核心流程如下(基于 Istio 或华为云/天翼云 ASM 的典型流程):

  • 部署灰度版本

创建灰度任务:在服务网格控制台(如华为云 ASM)中,选择目标服务(如 reviews),并部署新版本(如 v3)。

配置工作负载:指定灰度版本的镜像、实例数量及集群信息。

等待部署完成:确保灰度版本的 Pod 状态为 Running,且启动进度为 100%。

  • 配置流量策略

有两种策略类型:

基于流量比例:例如将 80% 流量导向旧版本(v1),20% 导向新版本(v3)。

基于请求内容:例如仅对特定用户(如 VIP)或请求头(如 version: 200)的流量导向新版本。

  • 监控与评估

实时监控:通过服务网格控制台查看流量分布、错误率、延迟等指标。

用户行为分析:结合业务指标(如转化率、点击率)评估新版本表现。

日志与追踪:利用分布式追踪工具(如Jaeger)分析服务调用链路。

  • 全流量接管

切换流量:当灰度版本(v3)验证通过后,通过控制台将流量100%导向新版本。

示例操作(华为云ASM):进入灰度任务页面,单击新版本后的"全流量接管"。确认后,旧版本(v1)流量将被完全切换至新版本。

  • 结束或回滚灰度任务

结束任务:删除旧版本及 Istio 相关配置资源,完成灰度发布。

回滚操作:若新版本出现问题,可快速将流量切回旧版本,甚至通过"取消灰度任务"恢复原始状态。

以 Istio 官方示例 Bookinfo 应用为例,展示服务网格灰度发布流程:

服务结构:

productpage:调用details和reviews服务生成页面。

reviews 服务有三个版本:

v1:不显示评分。

v2:显示黑色星形评分。

v3:显示红色星形评分。

灰度发布步骤:

部署 reviews 的 v3 版本。

配置 VirtualService,将 30% 流量导向 v3,其余 70% 保留 v1。

用户刷新页面时,部分用户看到红色星形(v3),其余用户仍看到默认版本(v1)。

验证无误后,逐步将流量比例调整至 100%,完成全量上线。

|-------------|-----------------------------|
| 典型应用场景 | 举例 |
| 微服务架构下的版本迭代 | 电商系统的新购物流程灰度发布,逐步验证支付成功率 |
| A/B 测试 | 对比不同UI设计或算法策略的效果(如推荐系统改版) |
| 国际化差异适配 | 针对特定地区用户推送本地化功能(如语言、支付方式) |
| 高风险系统升级 | 如金融交易系统的风控策略灰度验证,避免全量上线引发风险 |

2.9 时间窗口发布

通过选择特定的时间段来逐步向用户群体推出新功能或更新。

这种方法允许团队根据用户的活跃时间和流量模式,选择最佳时机进行发布,以最小化潜在负面影响并最大化系统的稳定性

时间窗口,是指选定的一个或多个时间段,在这些时间段内执行软件的部署或更新操作。

用户分组与流量控制,是根据用户的行为习惯、地理位置等因素将用户划分为不同的组,并结合时间窗口策略,控制不同组用户接触到新版本的时间和比例。

监控与反馈,是在选定的时间窗口内对新版本的表现进行实时监控,收集性能数据及用户体验反馈,以便及时调整策略。

大致的实施步骤:分析用户行为 --> 制定时间计划 --> 逐步推进 --> 持续监控与优化

主要的应用场景:

  • 高流量网站和服务: 对于那些每天有大量用户访问的在线平台(如电商平台、社交媒体),利用非高峰时段进行更新可以减少对用户体验的影响。
  • 全球分布式服务: 如果服务面向全球市场,考虑到不同时区用户的活跃时间差异,可以选择在当地时间的低峰期分别针对各个区域实施灰度发布。
  • 金融和交易类应用: 这类应用通常要求极高的可靠性和安全性,因此会选择在市场关闭后的夜间进行重要更新,以避免影响日常交易活动。
  • 企业内部系统升级: 企业级软件可能需要在不影响员工正常工作的前提下完成更新 ,此时可以根据工作日程安排合适的时间窗口
  • 节假日前后: 为了避免在重大节假日期间出现问题,可能会提前规划好时间窗口,在假期前完成所有必要的更新工作
相关推荐
草莓熊Lotso18 小时前
【数据结构初阶】--算法复杂度的深度解析
c语言·开发语言·数据结构·经验分享·笔记·其他·算法
数字体验运营官1 天前
Baklib内容中台AI重构智能服务
其他·用户体验
Toby_0092 天前
tpc udp http
其他·golang
fishwheel2 天前
Life:Internship finding
其他
草莓熊Lotso5 天前
【C语言预处理详解(下)】--#和##运算符,命名约定,命令行定义 ,#undef,条件编译,头文件的包含,嵌套文件包含,其他预处理指令
c语言·开发语言·经验分享·笔记·其他
职坐标在线6 天前
职坐标AI算法实战:TensorFlow/PyTorch深度模型
其他
JiNan.YouQuan.Soft7 天前
FreeCAD源码分析: 串行化工具
其他
深圳衡益科技7 天前
粽叶飘香时 山水有相逢
其他
职坐标在线8 天前
职坐标精选嵌入式AI物联网开源项目
其他