EB更新有一次性立即更新,滚动更新,带批次的滚动更新,不可变更新,蓝绿部署和流量拆分.
All at once:
一次性立即更新,这个是最快的更新部署,其实就是把当前正在运行的应用程序停掉,然后再启动一个新版本的应用,所以这个方法有停机时间,适合快速的迭代开发,而且不会产生额外的费用.
滚动更新:
滚动更新会先对部分的节点做立即更新,然后重复剩下的节点.可以设定滚动更新一次更新多少节点,更新过程中,新版本和旧版本会同时存在,这个部署时间会比较长.由于是集群内部理解更新没有启动新的节点,所以这个方法也没有额外的开销.
带批次的滚动更新:
和滚动更新类似,带批次的的更新能够保证足够数量的节点提供服务.先启动一个批次的新版本,然后再对原来的版本进行滚动更新,最后全部更新完步之后再删除最早更新的那个批次.由于启动了新的节点,所以也会有额外的开销(很少)这个部署时间也会很长,没有停机时间也适合生产环境
不可变更新:
不可变更新会在一个临时的自动扩缩组中启动新的版本,然后用把这个新的后端迁移到原来的负载均衡组中.这个不可变是对负载均衡器而言的.实际上是更换了后端的Auto Scaling 组.然后把旧环境Auto Scaling 组删除,如果新的版本启动失败的话还会会滚的到原来的版本由于新启动了一个新的 Auto Scaling 组,所以这个实际上使用了两套环境,所以这个方案 部署时间会长,费用上会多些.在可用性上讲,对生产环境十分友好.
蓝绿部署:
蓝绿部署不是EB的一个自己性的功能,相反,如果需要这个功能的话甚至可以在控制台上手动切换环境.(SWAP URL)
所以从这个角度来看,蓝绿部署是启动了另外一套完整的环境,与不可变更新比,蓝绿部署也是没有停机时间的.
一般来说,旧的环境叫做蓝环境,新的环境叫做绿环境,那么当绿环境正常运行的时候,他再次经过蓝绿部署的时候还是被称为蓝环境.所以蓝或者绿不是针对某一个环境,而是对部署过程中新旧环境的统称.
如果使用了该部署方法吗,那么也可以在route53处控制DNS的解析来规定流量的大小.
流量拆分:
使用金丝雀部署来测试新应用,同时保留旧版本应用的流量,之后再完成完整部署.这个方法失败也会回滚也没有停机时间.然后新的实例会从临时的ASG移动到老的ASG并且终止旧版本的应用程序,关于流量拆分的介绍如下:
https://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html