如何发布新版本
线上系统发布新版本需要注意什么?
首先,对于线上应用,发布时一定需要注意,停机时间不能太长,最好不影响正常应用。
新版本可能有问题,尽可能降低新版本问题导致的风险。
三种发布新版本的方法
首先分别全量发布与增量发布
全量发布主要讲述蓝绿发布与红黑发布
增量发布主要讲述灰度发布
蓝绿发布
首先将正在运行的服务器组分为两部分,一部分为蓝色,一部分为绿色。
此时改动网关,断开绿色组。
此时修改绿色部分,升级为新版本。
改动网关,连接绿色组,断开蓝色组。
升级蓝色组,连接蓝色组。
就可以实现无限接近于不停机的服务了。
全量发布
红黑发布
旧版本运行的服务器为红色组。
将新版本程序部署到一组同样的服务器上,为黑色组。
改动网关,把红色组断开,黑色组连接。
废弃掉红色组。
蓝绿发布与红黑发布的对比
相比来说,红黑发布操作更简单。蓝绿发布时,有一段时间只有一半服务器在运行,这时候如果来了大量流量,可能会冲垮服务器。(据说使用蓝绿发布,都得趁半夜大家都睡了的时候发布)
但是红黑分布需要一台额外的服务器。所以红黑分布更适合于云计算,可以充分发挥云计算的弹性资源优势。不然额外准备一台服务器就太逆天了。
增量发布
顾名思义,增量发布就是一点一点发布,不一下子全发完
灰度发布
灰度发布(又名金丝雀发布,因为据说金丝雀对毒气更加敏感,挖矿的时候都是用金丝雀去查看矿井中是否有毒气)是指在黑与白之间,能够平滑过渡的一种发布方式
可以这么理解,先发布一小部分,看看情况,再逐渐扩大(参考小米手机操作系统更新)。非常明显的一个好处就是,如果新版本有问题,不会波及太多人,不会造成太大的损失。
灰度发布遇到的挑战
灰度发布听起来很好,但是也有巨大的麻烦。
- 首先是兼容性问题,如果新版本更新太大,跟旧版本完全不兼容了,那完蛋了。假如说QQ突然更新了,然后最新版本跟旧版本区别太大,没法互发消息了。你看用户骂不骂大街。
- 用户的请求可能不固定,第一次访问进入的旧版本,第二次进入的新版本,可能会出现异常。可以使nginx进行基于IP的负载均衡。
- 什么时候应该提高发布度。可以使用假如监控,如果一段时间内满足要求就加大发布量。
综上所述,灰度发布有一定的理想化,并没有大规模使用。