停机部署
单体应用或者单点部署的微服务停机部署意味着服务暂停。
滚动部署
应用微服务化后,通常一个领域的功能服务会多节点部署,那么新版发布时无法保证每个节点同时更新,只能滚动逐个更新,需要考虑多版本服务短暂共存的风险。
蓝绿部署
有别于滚动部署,蓝绿部署是指两个版本的服务同时部署运行,但是负载均衡层控制只把请求路由到其中一个服务版本。
灰度部署/金丝雀部署
金丝雀部署是指逐渐将生产环境流量从版本A切换到版本B。通常流量是按比例分配的。例如90%的请求流向版本A,10%的流向版本B。
A/B测试
A/B测试是指在特定条件下将一部分用户路由到新功能上。它通常用于根据统计来制定商业决策,而不是部署策略
影子部署
影子部署是指在版本A旁边发布版本B,将版本A进来的请求同时分发到版本B,同时对生产环境流量无影响。这是测试新特征在产品负载上表现的很好用的方式。当满足上线要求后,则触发发布新应用。
总结
部署应用有很多种方法,实际采用哪种方式取决于需求和预算。当发布到开发或者模拟环境时,重建或者滚动部署是一个好选择。当发布到生产环境时,滚动部署或者蓝绿部署通常是一个好选择,但是新平台的主流程测试是必须的。
蓝绿部署和影子部署对预算有更高的要求,因为需要双倍资源。如果应用缺乏测试或者对软件的功能和稳定性影响缺乏信心,那么可以使用金丝雀部署或者AB测试或者影子发布。如果业务需要根据地理位置、语言、操作系统或者浏览器特征等这样参数来给一些特定的用户测试,那么可以采用AB测试技术。
最后但并不是最不重要的,影子发布很复杂,且需要额外工作来模拟响应分支流量请求,当可变操作(邮件、银行等)调用外部依赖时这是必须的,这个技术在升级新数据库是非常有用,使用影子流量来监控负载下的系统性能。