@@ -40,7 +40,7 @@ date: 2024-05-15
40
40
41
41
首先,我们介绍下滚动发布,滚动发布是指在服务发布过程中,并不一下子启动所有新版本,而是先启动一台新版本,再停止一台老版本,然后再启动一台新版本,再停止一台老版本,直到服务实例全部更新完成,具体如下图所示。
42
42
43
- [ 请至钉钉文档查看「白板」 ] ( https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vRwE1nlvtPjXmYO585daZ90D?doc_type=wiki_doc&iframeQuery=anchorId%3DX02lobjot1qhiu892gs74h )
43
+ ![ image ] ( https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vRwE1nlvtPjXmYO585daZ90D?doc_type=wiki_doc&iframeQuery=anchorId%3DX02lobjot1qhiu892gs74h )
44
44
45
45
滚动发布采用的是逐步部署新版本并替代旧版本,新版本部署后,负载均衡器会把流量直接指向新版本。这时候就会存在一个问题,如果新版本有问题,是不可用的,那么必须对已部署新版本的服务器进行回滚,不能快速把流量从新版本中摘除。如果服务部署的实例数过多,滚动发布到后面才发现故障,恢复往往较慢,因为服务也需要逐步回滚。如果每台或每组服务器回滚都需要几分钟,从开始到最终回滚完成,因服务实例较多,也往往需要耗费几十分钟甚至数小时不等,可能给用户带来长时间不好的体验。
46
46
@@ -50,13 +50,13 @@ date: 2024-05-15
50
50
51
51
下面介绍下蓝绿部署。蓝绿部署是指同时运行两个版本的应用,即蓝绿部署的时候,并不停止掉老版本,而是直接部署一套新版本,等新版本运行起来后,再将流量切换到新版本上。旧版本可以称为蓝色环境,而新版本则可称为绿色环境,两套环境可以使用各自单独的数据库,如下图所示。一旦生产流量从蓝色完全转移到绿色,蓝色就可以在回滚或退出生产的情况下保持待机,也可以更新成为下次部署的模板。
52
52
53
- [ 请至钉钉文档查看「白板」 ] ( https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vRwE1nlvtPjXmYO585daZ90D?doc_type=wiki_doc&iframeQuery=anchorId%3DX02lobl940c5g5by857r1u )
53
+ ![ image ] ( https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vRwE1nlvtPjXmYO585daZ90D?doc_type=wiki_doc&iframeQuery=anchorId%3DX02lobl940c5g5by857r1u )
54
54
55
55
蓝绿部署的优点非常明显,在新版本刚部署到绿环境时,不会实际承接生产环境的流量,测试人员可以在绿环境充分测试验证新版本后,再把流量切换到新版本,这样就降低了服务发布到生产环境出故障的风险。还有一点,新版本在发布后出问题,也可以通过调整负载均衡器快速把流量切回蓝环境,这样能把问题影响降低到最小。
56
56
57
57
当前这是比较理想的情况,这里面有几个问题需要考虑,包括数据库的复制、切换过程中用户的事务操作如何保证等,这并不容易解决。幸运的是,我们可以采用同一套数据库也实施蓝绿部署,这样就能解决因数据复制、数据不一致等导致的问题,具体如下图所示。
58
58
59
- [ 请至钉钉文档查看「白板」 ] ( https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vRwE1nlvtPjXmYO585daZ90D?doc_type=wiki_doc&iframeQuery=anchorId%3DX02lobm4bgmvta1ug4o1lq )
59
+ ![ image ] ( https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vRwE1nlvtPjXmYO585daZ90D?doc_type=wiki_doc&iframeQuery=anchorId%3DX02lobm4bgmvta1ug4o1lq )
60
60
61
61
使用一套数据库相比各自使用各自的数据库,就需要考虑数据库字段和数据更新时的兼容性了,这对于滚动发布也是必须要考虑的,因为一套数据库要同时支持两个版本的服务。
62
62
@@ -70,7 +70,7 @@ date: 2024-05-15
70
70
71
71
灰度发布将发布分成不同的阶段,每个阶段验证通过后,进入下一阶段,每个阶段逐步增加使用新版本的用户比例,再部署更多的节点,依次循环,最终完成所有节点的部署,将所有应用都升级到新版本,具体如下图所示。增加用户比例的方式也有很多,可以按照流量比例进行灰度,也可以针对不同类型的用户、地域、设备类型进行灰度。
72
72
73
- [ 请至钉钉文档查看「白板」 ] ( https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vRwE1nlvtPjXmYO585daZ90D?doc_type=wiki_doc&iframeQuery=anchorId%3DX02lobmzo4jdloxuxf975 )
73
+ ![ image ] ( https://alidocs.dingtalk.com/i/nodes/4lgGw3P8vRwE1nlvtPjXmYO585daZ90D?doc_type=wiki_doc&iframeQuery=anchorId%3DX02lobmzo4jdloxuxf975 )
74
74
75
75
灰度发布期间,在其上也可以进行A/B测试,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
76
76
0 commit comments