运维发布的方式
1.蓝绿部署
蓝绿部署,是采用两个分开的集群对软件版本进行升级的一种方式。它的部署模型中包括一个蓝色集群Goup1和一个绿色集群Group2,在没有新版本上线的情况下,两个集群上运行的版本是一致的,同时对外提供服务。
系统升级时,蓝绿部署的流程是:
- 从负载均衡器列表中删除集群Group1,让集群Group2单独提供服务。
- 在集群Group1上部署新版本。
- 集群Group1升级完毕后,把负载均衡列表全部指向Group1,并删除集群Group2,由Group1单独提供服务。
- 在集群Group2上部署完新版本后,再把它添加回负戟均衡列表中。这样,就完成了两个集群上所有机器的版本升级。
蓝绿部署的忧点:升级和回退速度非常快
缺点:是全量升级的时候,如果V2版本有问题,对用户影响大再者由于升级过程中会服务器资源会减少一半,有可能产生服务器过载问题,因此这种发布方式也不适用于在业务高峰期使用。这样,就完不成两个集群上所有机器的版本升级。
2.灰度发布/金丝雀发布
灰度发布/金丝雀发布由以下几个步骤组成:
金丝雀发布是灰度发布的一种。灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。即在发布过程中一部分用户继续使用老版本,一部分用户使用新版本,不断地扩太大新版本的访问流量。最终实现老版本到新版本的过度。由于金丝雀对瓦斯极其敏感,因此以前旷工开矿下矿洞前,先会放一只金丝雀进去探是否有有毒气体,看金丝雀能否活下来,金丝雀发布由此得名。
发布过程中,先发一台或者一小部分比例的机器作为金丝雀,用于流量验证,如果金丝雀验证通过如把剩余机器全部发掉,如果金丝雀验证关败,则直接回退金丝雀。
优点:金丝雀发布的优势在于可以用少量用户来验证新版本功能,这样即使有问题所影响的也是很小的一部分客户。如果对新版本功能或性能缺乏足够信心那么就可以采用这种方式。
缺点:这种方式也有其缺点,金丝雀发布本质上仍然是一次性的全量发布,发布过程中用户体验并不平滑,有些隐藏深处的bug少量用户可能并不能验证出来问题,需要逐步扩大流量才可以。
3.滚动发布(Rolling Update Deployment)
滚动发布是在金丝雀发布基础上进行改进的一种发布方式。相比于金丝雀发布,先发金丝雀,然后全发的方式,滚动发布机是整个发布过程中按批次进行发布。每个批次拉入后都可作为金丝雀进行验证,这样流量逐步放大直至结束。
优点:这种方式的优点就是对用户的影响小,体验平滑。
缺点:首抗就是发布和回退时间慢,其次发布工具复杂,负载均衡设备需要具有平滑的拉入拉出能力,一般公司并没有资源投入研发这种复杂的发布工具。再者发布过程中新老版本同时运行,需要注意兼容性问题。
4.红黑部署(Red-Black Deployment)
与蓝绿部署类似,红黑部署也是通过两个集群完成软件版本的升级。当前提供服务的所有机器都运行在红色集群Group1中,当需要发布新版本的时候,具体流程是这样的:
- 先申请一个黑色集群Group2,在Group2上部署新版本的服务; 等到Group2升级完成后,我们一次性地把负载均衡全部指向Group2
- 把 Group1集群从负载均衡列表中删除,并释放集群Group1中所有机器。 这样就完成了一个版本的升级。可以看到。与蓝绿印署相比
优点:红黑部署获得了两个收益:一是,简化了流程;二是,避免了在升级的过程中,由于只有一半的服务器提供服务,而可能导致的系统过载问题。
缺点:但同样也存在全量升级对用户的影响问题,也带来了一个新的问题,就是发布过程中需要两倍的服务器资源。