nodejs 的灰度发布 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
121819756
V2EX    Node.js

nodejs 的灰度发布

  •  
  •   121819756 2021-08-27 10:54:48 +08:00 6538 次点击
    这是一个创建于 1572 天前的主题,其中的信息可能已经有所发展或是发生改变。

    求问大佬们,nodejs 的灰度发布流程,目前思路是模版语言来走不同版本的 js 。不知道 Nuxtjs 如何进行灰度发布?求大佬解答

    4 条回复    2021-08-27 15:56:33 +08:00
    libook
        1
    libook  
       2021-08-27 11:06:01 +08:00
    不知道灰度发布具体指的是什么意思。

    如果指的是整体服务的版本发布,可以让新版做好旧版的兼容,然后多实例一个一个的升级。
    如果指的是热加载一些 js 文件可以动态 require,但对打包工具不友好。
    121819756
        2
    121819756  
    OP
       2021-08-27 11:32:02 +08:00
    @libook 谢谢大佬。主要目的就是 类似 ABTest 那样,先分配小流量用户体验新功能,如果反馈比较好,就会全量发布的。就是不明白 nuxt 如何根据流量占比来使用户走不同的 version,会有那种多版本共存的概念。
    libook
        3
    libook  
       2021-08-27 11:48:16 +08:00
    @121819756 #2
    灰度发布和 ABTest 有时候需求会有些区别。

    你们应该是分布式方案吧,如果是分布式无状态方案的话(如 REST API ),ABTest 通常需要确保一个用户不会被重复分配 AB 组,需要用户户第一次访问的时候分配 A 组或 B 组,然后用户每一次访问都走被分定的组,这个有两种方案:
    1. 在所有服务节点都部署 AB 两种逻辑,然后用户第一次访问给用户分组并记录到数据库(或 Redis )中,用户再次访问的时候从数据库中读取用户的分组,然后走对应逻辑。
    2. 服务前面加一个 API 网关层,API 网关用户给用户分组、记录分组信息、转发用户请求到特定分组的服务器集群。

    然后单纯的灰度发布的话可能不需要固定用户的分组信息,所以通常的做法是从负载均衡上,给一台实例的权重设为 0 (停止分配流量),等没流量了就给这台实例升级为新版本,然后负载均衡慢慢提权重,一点一点放流量进来,同时监控服务状态,出现异常就掐断流量回滚,正常就逐渐把流量放到平均水准,然后再更新第二个实例,重复上述操作,知道把所有实例更新完毕。这个有些持续部署工具可以做到自动化的。

    你会发现,这些基本都是通过运维方案来解决的,服务程序本身通常不需要考虑,顶多做好老版本的兼容,确保无缝升级的时候不会有兼容问题。
    121819756
        4
    121819756  
    OP
       2021-08-27 15:56:33 +08:00
    @libook 是的,之前有想过用 nginx+lua 的方案处理,也用了服务做跳转到类似 index@+ version.html 的方式。因为我的用户群体没那么大,所以说就没有集群,目前已知的线上也就两台服务器吧。所以不是很好用网关做灰度,nuxt 是启 node 服务的,不知道怎么修改他的代码来进行版本的切换
    div class="sep20">
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     891 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 21:49 PVG 05:49 LAX 13:49 JFK 16:49
    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