背景
对于互联网应用来说,除了在服务端开发和服务治理之外,还需要保证的有高可用运维。所以很多时候我们不能仅仅局限于,实现需求这个层面,比如软件设计,工程质量,性能,运维、可测试、可观测性等角度去看。
互联网应用一般都需要提供7*24小时都服务,但是对于大多数的应用来说,基本都是每周二/四上线,有的比较频繁的是每天都在上线。
那么在这个过程中,如何保证在不停机的情况下实现部署,让用户无感知呢。所以这里整理了常见的部署方式。
停机部署: 将应用停机部署
蓝绿部署: 部署好新版本,将流量直接切过来。
**滚动部署:**一点点升级现有服务
灰度部署: 把一部分用户切到新版上来,没有问题,直至全量。
AB测试: 同时上线两个版本,测试相关版本的功能是否可行。
停机部署
停机部署其实主要把应用直接停机,然后部署,这种一般针对的场景是不能同时在线新老版本,所以需要全量部署新的版本。不好的地方在于需要停机对于用户有一定的影响,所以需要提前挂起停服通知。
好像比较常见的就是游戏这种服务比较常见停止服务。
蓝绿部署
蓝绿部署相比于停机部署,有两套一样的生产系统,一套是staging 一套是prod。将服务部署在staging没有问题后,就全量将用户切到staging。然后prod成为新的staging。相对于停机部署,这种方式不需要停止服务。但是坏处就是比较浪费系统资源。基本就是双倍的资源。
滚动部署
滚动部署其实就是比如生产有3台服务实例,一台部署完毕,在部署另外一台。整个过程中其实就属于在一个新老交替的过程中上线的,所以需要考虑兼容问题。并且如果出现问题的话,回滚比较麻烦。所以建议就是发第一台机器的时候,多观察一会,没有问题后在全部部署。
灰度部署
灰度部署其实就是从老版本流量逐渐切到新版本,只是这个过程中可以控制流量,比如刚开始灰度%5,然后%20 %50 % 100。主要应对的是缺少足够的测试,对新版本的稳定性没有信心。也可以通过这种方式在灰度的过程中发现问题,即使出现异常,影响的也直至一部分用户,可以将影响降到最低。
AB测试
AB测试主要做的是比较,测试应用功能表现的方法,可用性,受欢迎程度,可见性等。
蓝绿部署是为了不停机,灰度部署是对软件质量没有信心。AB测试是对功能没有信息。
AB测试主要用于测试不同的流程,对于用户的是否有更好的效果。一般可以通过地理位置,UID、手机号等方式进行处理。
复盘
不同的公司采用的部署方式都不同,其实主要还受限于每个公司平台的基础架构是否完善,一般比较好的公司都有会进行灰度上线+蓝绿部署这种方式,而为了测试功能会采用AB测试,对于小型公司来说,大多数部署方式都是滚动部署。而搭建一个好的部署平台也非常重要。