应用常见的部署方式
停机部署
停机部署应该是一个已经基本被历史淘汰的部署方式,它非常简单粗暴,直接把现有服务直接停机,然后部署新的版本,停机部署现在基本只会用在一些新老版本强制切换且互不兼容的情况下。
它的优势在于不会存在新老版本兼容的问题,缺点是显而易见的,停机的时候所有的用户都将处于无法使用的状态。
蓝绿部署
蓝绿部署也比较好理解。会在生成环境同时部署两个一模一样的集群,一个是老的服务,一个即将发布的新服务,也就是常说的预发环境。等待预发环境发布完成和功能验证之后,就直接将流量切到预发环境来。这样的好处是可以在保证用户不受影响的情况下完成发布工作。但是这种部署方式有点浪费资源,因为要用到双倍的资源,但是在云时代这种浪费是是非常小的,用完直接释放掉资源就可以了。
滚动发布
滚动部署策略是过逐个替换应用的所有实例,来缓慢发布应用的一个新版本。可以减少资源的浪费。譬如 activity 服务发布,生产版本有A B两个服务,当发布时,会先起一个 C 服务,待 C 服务通过系列健康检查后开始接受流量,然后把 A 切掉,等待 A 服务没有流量后停机掉。然后相同流程继续起 D 后停机 B 。
滚动部署的好处是可以有效的减少资源的浪费,不需要起双倍的集群,但是同时也会带来很多问题。
- 发布的过程中会有新老版本兼容的问题。
- 新的服务没有蓝绿部署那样的功能测试就上线了。
- 在整个发布过程中服务处于一个新老交替的过程中,如果需要回滚会比较麻烦。
- 如果在发布过程中区分新老版本是比较麻烦的。
- 流量没法控制在新老版本切换。
灰度部署(金丝雀)
灰度部署又叫金丝雀部署。其得名来源于矿井中的金丝雀。17世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离。
灰度部署是指逐渐将生产环境流量从老版本切换到新版本。通常流量是按比例分配的。例如 90% 的请求流向老版本,10% 的请求流向新版本。然后没有发现问题,就逐步扩大新版本上的流量,减少老版本上的流量。
灰度发布是一种比较平滑的发布方式。常用到一些重大版本发布中,对功能可靠性并没有足够的信心,把一部分用户切到新版上来,然后看一下有没有问题。如果没有问题就继续扩大升级,直到全部升级完成。这个过程就是灰度期。
A/B测试
AB 测试是同时上线两个版本,然后做相关的比较。它是用来测试应用功能表现的方法,例如可用性、受欢迎程度、可见性等。AB 测试旨在通过科学的实验设计、采样样本代表性、流量分割与小流量测试等方式来获得具有代表性的实验结论,并确信该结论在推广到全部流量时可信。
影子部署
用于在生产环境中测试新版本的应用程序或系统组件,而不会对实际用户产生任何影响。在影子部署中,新版本的应用程序或组件会与现有版本并行运行,但不会接收真实的用户流量。相反,它会接收来自生产环境的复制数据,以便进行测试和评估。
影子部署的主要目的是评估新版本的性能、稳定性和功能,以确保它可以在生产环境中正常运行,并且不会对用户产生任何负面影响。通过与实际用户流量分离,影子部署可以提供更安全的测试环境,并减少潜在的风险。
总结
用的最多的部署方式应该就是滚动发布了。可以给滚动发布前增加一个预发环境,功能在预发环境验证通过后在进行滚动发布。