灰度发布 vs 金丝雀发布,什么是合适的发布策略? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hesetiema
V2EX    程序员

灰度发布 vs 金丝雀发布,什么是合适的发布策略?

  •  
  •   hesetiema 2024-05-26 16:21:33 +08:00 3409 次点击
    这是一个创建于 553 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题。前段时间参加面试,被问到前端如何实现灰度发布的方案。作为一个小作坊里的页面仔,脑海里一片空白,我只能说听过这些概念,什么 A/B 测试、渐进式发布、金丝雀发布,但寻思这些是大厂里才会有的部署流程吧。
    今天心血来潮,搜了下灰度发布,有人说是和金丝雀发布一样的概念,有人又说不是。所以有几个问题想问:
    1 、灰度发布和金丝雀发布分别是什么,它们究竟有什么区别联系;
    2 、特性标志 Feature Flags 是什么,与灰度发布的关系;
    3 、实现灰度发布是否需要大量配置,如 BFF 层、Nginx 、监控工具等;
    4 、作为普通的开发者,该如何选择合适的发布策略
    18 条回复    2024-05-28 10:07:44 +08:00
    dobelee
        1
    dobelee  
       2024-05-26 16:35:50 +08:00 via Android
    灰度和金丝雀都是灰度发布,本质是同样的灰度测试。只是策略不同,这就很主观了,不做 qa 和效能的话没必要纠结。
    mark2025
        2
    mark2025  
       2024-05-26 16:39:32 +08:00
    我的理解:
    1. 灰度发布是流量控制策略。比如某个灰度根据地域、用户、升级通道等等来决定流量是走正式还是灰度
    2. 金丝雀是应用升级部署策略。升级部署新应用时检测应用响应状态(可以走自检测或者切一点线上流量),如果监测到异常(比如 500 )就立即取消本次部署。

    灰度发布可以采用金丝雀发布的方式来发布,也可以直接上线。
    hallDrawnel
        3
    hallDrawnel  
       2024-05-26 16:41:24 +08:00
    他们都属于先尝试更新一部分负载看看表现,没问题再全量的操作,只是过程有区别而已。一般灰度发布都需要基础设施支持但是不需要大量配置,这些都是基础设施团队完成的事情,对于业务来说就是点几下的操作。
    看你业务规模,灰度并不是必要的一环。在鹅厂很多业务也是直接全量上的。
    Spoken6035
        4
    Spoken6035  
       2024-05-26 18:08:31 +08:00 via Android
    现在前端这么卷了吗?灰度发布根本轮不到前端呀
    hesetiema
        5
    hesetiema  
    OP
       2024-05-26 18:11:58 +08:00
    @dobelee 灰度测试就是 A/B 测试吗,已经有个大体的认识了,感觉就是将不同功能映射到不同用户然后监控,推陈出新。
    hesetiema
        6
    hesetiema  
    OP
       2024-05-26 18:17:01 +08:00
    @mark2025 嗯嗯,确实感觉灰度的理念好像更广义一点。
    tutu11
        7
    tutu11  
       2024-05-26 18:23:11 +08:00
    这种公司直接忽略,之前遇到过,就是初创团队,不知道招什么人,做的事情也不清晰
    hesetiema
        8
    hesetiema  
    OP
       2024-05-26 18:26:37 +08:00
    @hallDrawnel 嗯嗯,小步试错、快速迭代,然后再根据反馈,自适应控制、模型预测控制。可惜小公司一般不会有这种基础设施团队,估计底层实现还是挺复杂的。业务规模不大好像确实不用太关注这些哈,我感觉我了解的皮毛已经够了,哈哈
    sunpj
        9
    sunpj  
       2024-05-26 18:26:56 +08:00
    作为后端来说 金丝雀发布是灰度发布的测量之一 灰度发布有多种 比如金丝雀跟蓝绿等
    特征标志我理解是指定流量灰度测试 比如我现在后端发了 20% 然后需要在 header 或者哪里加标志位 全链路才能访问到我指定的那 20%机器
    监控肯定是必须的 灰度的前提是可观测 安全生产三板斧 可灰度 可观测 可回滚
    我经历过的大厂一般都是金丝雀
    hesetiema
        10
    hesetiema  
    OP
       2024-05-26 18:45:54 +08:00
    @sunpj 学习了。我看国外很多相关的问题,都是比较的金丝雀和蓝绿部署,没提到灰度的概念,可能国内通常统一说灰度。特性标志我看还有一些第三方的库或工具,比如 ConfigCat ,提供前后端 SDK 加上各种配置管理感觉很灵活的样子,不知道这种工具大厂是不是也都是自研的。监控好像还有一些什么 Prometheus 、Grafana 工具,真心感觉 学习 DevOps 的话需要懂的东西好多...
    hesetiema
        11
    hesetiema  
    OP
       2024-05-26 18:54:02 +08:00   1
    @Spoken6035 可能那个公司业务规模上来了,需要这样的基础建设吧,抑或是想让我知难而退。无所谓,涨知识就对了,哈哈。
    hesetiema
        12
    hesetiema  
    OP
       2024-05-26 18:55:58 +08:00
    @tutu11 那个公司发展其实挺不错的,可惜自己太菜...
    tutu11
        13
    tutu11  
       2024-05-26 20:17:37 +08:00
    @hesetiema 主要是让前端 hold 就很离谱,而且前端能做的很有限,他们应该在招聘的 JD 上就写清楚需要运维相关技术栈,这种是很坑的,专门问一些和岗位没关系的问题或者不给出真实的需求,而且这种问题一般可以用来搪塞面试者,不给你过也是很好的理由
    bthulu
        14
    bthulu  
       2024-05-27 10:35:13 +08:00
    我司用的国产古方金丝楠木发布
    dododada
        15
    dododada  
       2024-05-27 11:07:07 +08:00
    这个灰度系统和 AB 系统要根据公司的具体业务做开发的。

    以前公司的灰度就是用来小批量功能验证,不上量。

    灰度没问题之后开始 AB ,分为实验组和对照组,按渠道、地域、人群、或者其他不同维度慢慢放量,运行一周之后进行数据回归分析,如果 AB 测试的效果满足预期或者对留存转化有提升,就进入下一步,不同渠道滚动升级;如果 AB 效果不佳,就版本回退,继续新的开发测试流程
    hellojl
        16
    hellojl  
       2024-05-27 14:13:21 +08:00
    需要解决的问题都是如何小批量的验证新功能。

    灰度部署和金丝雀部署通常存在新旧或者 A/B 版本,通过逐渐放量到新版本上,验证上线、新功能是否 OK ,需要基础设施的支持。而在部署两个版本的情况下,通常对基础设施要求会更高一些,比如如何实现上述的按比例 CD 的功能。另外一个隐藏的问题是,对于流量的控制不在程序本身,一个请求访问新 or 旧版本,需要由上游的调用方确定,实际中上游可能是 Nginx 、网关或者另一个服务,需要适配的会比较多一些,对于一些请求链路比较长的服务不是很友好。

    后续有一些公司尝试了名为 Dark Launching 的方案,也就是 Feature Flag 功能开关。好处是可以在一个服务内实现更细粒度的请求控制,对于上下游调用、CI/CD 也很友好,因为对于外部来看这个服务只存在一个版本,实际新旧是由服务内部类似 if/else 的逻辑控制的。缺点就是对代码有入侵,功能正式上线后可能还需要去掉 Feature Flag 相关的代码,虽然一些主流的库不去掉也机会没有性能影响。

    个人使用体验来看,更倾向功能开关的方案。虽然功能开关的方案对代码有入侵,增加代码复杂度,但是整体上看增加的内容不多,而且在代码层都能控制。无论是灰度发布还是金丝雀发布,在基础设施层引入了更多的配置,实际上会增加出问题的可能性。

    面试问这个没什么问题,只要涉及到新功能上线、小批量验证的需求,其实都需要考虑类似的问题,不区分前后端。
    hesetiema
        17
    hesetiema  
    OP
       2024-05-27 17:34:48 +08:00
    @hellojl 受教了。第一次听说 Dark Launching ,可能对于用户来说就是无感知。功能开关是不是是最近才流行起来的技术呀,感觉灵活性挺高的。面试还是挺难的,哎,失业了两个多月,成都太卷了...
    hellojl
        18
    hellojl  
       2024-05-28 10:07:44 +08:00
    @hesetiema 我最早是在 17 年接触的功能开关的概念,但是国内用的确实不多,大部分还停留在灰度发布的阶段。今年面试确实难,我也挂好几家了,共勉吧......
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     854 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 19:28 PVG 03:28 LAX 11:28 JFK 14:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86