金丝雀发布(单服务器组)
单服务器组下的金丝雀发布的简化步骤如下图所示:Canary10Percent10Minutes Alarms:
发布前
先发一台金丝雀
全部发完
实践要点
-
金丝雀发布一般先发 1 台,或者一个小比例,例如 2% 的服务器,主要做流量验证用,也称为金丝雀 (Canary) 测试(国内常称灰度测试)。以前旷工开矿下矿洞前,先会放一只金丝雀进去探是否有有毒气体,看金丝雀能否活下来,金丝雀发布由此得名。简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依据。
-
如果金丝测试通过,则把剩余的 V1 版本全部升级为 V2 版本。如果金丝雀测试失败,则直接回退金丝雀,发布失败。
优势和适用场合
优势:
-
用户体验影响小,金丝雀发布过程出现问题只影响少量用户
不足:
-
发布自动化程度不够,发布期间可引发服务中断
适用场合:
-
对新版本功能或性能缺乏足够信心
-
用户体验要求较高的网站业务场景
-
缺乏足够的自动化发布工具研发能力
蓝绿发布仅适用于双服务器组发布,可以认为是对蛮力发布的一种简单优化发布方式。简化过程如下图所示:
实践要点
-
V1 版本称为蓝组,V2 版本称为绿组,发布时通过 LB 一次性将流量从蓝组直接切换到绿组,不经过金丝雀和滚动发布,蓝绿发布由此得名;
-
出现问题回退也很直接,通过 LB 直接将流量切回蓝组。
-
发布初步成功后,蓝组机器一般不直接回收,而是留一个待观察期,视具体情况观察期的时间可长可短,观察期过后确认发布无问题,则可以回收蓝组机器。
优势和适用场合
优势:
-
升级切换和回退速度非常快
不足:
-
切换是全量的,如果 V2 版本有问题,则对用户体验有直接影响;
-
需要两倍机器资源;
适用场合:
-
对用户体验有一定容忍度的场景
-
机器资源有富余或者可以按需分配(AWS 云,或自建容器云)
-
暂不具备复杂滚动发布工具研发能力;
Code Deployment
-
Canary: Traffic is shifted in two increments. You can choose from predefined canary options. The options specify the percentage of traffic that's shifted to your updated Lambda function version in the first increment, and the interval, in minutes, before the remaining traffic is shifted in the second increment.
-
Linear: Traffic is shifted in equal increments with an equal number of minutes between each increment. You can choose from predefined linear options that specify the percentage of traffic that's shifted in each increment and the number of minutes between each increment.
-
All-at-once: All traffic is shifted from the original Lambda function to the updated Lambda function version at once.
Deployment Preference Type |
---|
Canary10Percent30Minutes 10% 30分钟后,全部切换到新版本 |
Canary10Percent5Minutes 10% 5分钟后,全部切换到新版本 |
Canary10Percent10Minutes 10% 10分钟后,全部切换到新版本 |
Canary10Percent15Minutes 10% 15分钟后,全部切换到新版本 |
Linear10PercentEvery10Minutes 每次10分钟,增量10%,100分钟后全部切换到新版本 |
Linear10PercentEvery1Minute 每次1分钟,增量10%,10分钟后全部切换到新版本 |
Linear10PercentEvery2Minutes 每次2分钟,增量10%,20分钟后全部切换到新版本 |
Linear10PercentEvery3Minutes 每次3分钟,增量10%,30分钟后全部切换到新版本 |
AllAtOnce 一次性全部切换到新版本 |