写在前面
本文看下生产环境中有哪些常用的发布策略。
1:蓝绿发布
蓝绿发布要求将线上机器分成逻辑上的AB两(蓝绿就是两种颜色)
组,升级时先将A组从负载均衡中摘除,由B组对外提供服务,如下图:
当A组升级完成后,将A组加入到负载均衡,将B从负载均衡中摘除,如下图:
B升级完毕后重新加入到负载均衡中,整个蓝绿发布的过程就结束了。这种发布方式的优点是实施简单,缺点是如果升级程序出现问题,将会影响到所有用户,影响范围过大,所以我认为这种升级策略最好不要使用,风险太大。
2:灰度发布
灰度发布也是将机器分成逻辑上的两组,但升级过程不同于蓝绿发布,其过程是,首先将一组从负载均衡中摘除,升级完毕后,加入到集群,但是只引流部分流量到升级完毕的机器,让部分用户来试错
,如果有问题便于快速回滚,减少影响范围,如下图:
这种发布方式的优点是影响范围小,便于快速发现问题,回滚操作,缺点是自动化要求高(能通过技术手段解决的问题我认为都不是问题)
,这种部署方式本质上是解决了蓝绿发布程序升级后可能影响所有用户的问题,在实际生产环境中可以考虑使用这种部署方式。
灰度发布还有一个名字是金丝雀发布,该名称来源于欧美的矿井工作,因为矿井中可能有毒气,矿工为了辨别井下是否有毒气,在下井时会携带一个金丝雀,因为金丝雀
canary [kəˈneəri]
的抗毒能力比人类要弱,所以如果有毒气的话,会比人类先挂掉,这样矿工就可以赶快离开了,避免危险,所以这里金丝雀就相当于被导入到新机器的那部分流量,都是用来试错的,小成本避免大问题。
3:滚动发布
本文k8s的升级方式就是滚动发布,首先摘除一个节点,升级完毕后加入到集群,重复这个过程,直到所有的节点都升级完毕,如下图:
这种部署方式的优点是每次摘除的机器量少,不需要额外的机器来处理流量,缺点是升级过程比较复杂,对升级算法的要求较高。这种部署方式可以考虑在生产环境中用起来,当然如果是使用k8s,自然是要用起来了,因为k8s本身提供的升级方式就是这种。
写在后面
参考文章列表
k8s之平滑升级 。
为什么灰度发布又叫金丝雀发布? 。
一文搞懂蓝绿发布、灰度发布和滚动发布 。