Skip to content

Commit 2ea88b3

Browse files
authored
Add files via upload
1 parent 559430c commit 2ea88b3

2 files changed

+5
-5
lines changed

source/_posts/20240510-发布管理:如何实现低风险发布(一).md

+4-4
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ date: 2024-05-15
4040

4141
首先,我们介绍下滚动发布,滚动发布是指在服务发布过程中,并不一下子启动所有新版本,而是先启动一台新版本,再停止一台老版本,然后再启动一台新版本,再停止一台老版本,直到服务实例全部更新完成,具体如下图所示。
4242

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)
4444

4545
滚动发布采用的是逐步部署新版本并替代旧版本,新版本部署后,负载均衡器会把流量直接指向新版本。这时候就会存在一个问题,如果新版本有问题,是不可用的,那么必须对已部署新版本的服务器进行回滚,不能快速把流量从新版本中摘除。如果服务部署的实例数过多,滚动发布到后面才发现故障,恢复往往较慢,因为服务也需要逐步回滚。如果每台或每组服务器回滚都需要几分钟,从开始到最终回滚完成,因服务实例较多,也往往需要耗费几十分钟甚至数小时不等,可能给用户带来长时间不好的体验。
4646

@@ -50,13 +50,13 @@ date: 2024-05-15
5050

5151
下面介绍下蓝绿部署。蓝绿部署是指同时运行两个版本的应用,即蓝绿部署的时候,并不停止掉老版本,而是直接部署一套新版本,等新版本运行起来后,再将流量切换到新版本上。旧版本可以称为蓝色环境,而新版本则可称为绿色环境,两套环境可以使用各自单独的数据库,如下图所示。一旦生产流量从蓝色完全转移到绿色,蓝色就可以在回滚或退出生产的情况下保持待机,也可以更新成为下次部署的模板。
5252

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)
5454

5555
蓝绿部署的优点非常明显,在新版本刚部署到绿环境时,不会实际承接生产环境的流量,测试人员可以在绿环境充分测试验证新版本后,再把流量切换到新版本,这样就降低了服务发布到生产环境出故障的风险。还有一点,新版本在发布后出问题,也可以通过调整负载均衡器快速把流量切回蓝环境,这样能把问题影响降低到最小。
5656

5757
当前这是比较理想的情况,这里面有几个问题需要考虑,包括数据库的复制、切换过程中用户的事务操作如何保证等,这并不容易解决。幸运的是,我们可以采用同一套数据库也实施蓝绿部署,这样就能解决因数据复制、数据不一致等导致的问题,具体如下图所示。
5858

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)
6060

6161
使用一套数据库相比各自使用各自的数据库,就需要考虑数据库字段和数据更新时的兼容性了,这对于滚动发布也是必须要考虑的,因为一套数据库要同时支持两个版本的服务。
6262

@@ -70,7 +70,7 @@ date: 2024-05-15
7070

7171
灰度发布将发布分成不同的阶段,每个阶段验证通过后,进入下一阶段,每个阶段逐步增加使用新版本的用户比例,再部署更多的节点,依次循环,最终完成所有节点的部署,将所有应用都升级到新版本,具体如下图所示。增加用户比例的方式也有很多,可以按照流量比例进行灰度,也可以针对不同类型的用户、地域、设备类型进行灰度。
7272

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)
7474

7575
灰度发布期间,在其上也可以进行A/B测试,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
7676

source/_posts/20240515-发布管理:如何实现低风险发布(二).md

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ date: 2024-05-15
4848

4949
基于以上的分析,核心架构如下:
5050

51-
![请至钉钉文档查看「白板」](https://alidocs.dingtalk.com/i/nodes/Amq4vjg890ZK7QqghkQG65KKJ3kdP0wQ?doc_type=wiki_doc&iframeQuery=anchorId%3DX02lojk2dc78crh8c37q8m)
51+
![image](https://alidocs.dingtalk.com/i/nodes/Amq4vjg890ZK7QqghkQG65KKJ3kdP0wQ?doc_type=wiki_doc&iframeQuery=anchorId%3DX02lojk2dc78crh8c37q8m)
5252

5353
其中路由管理控制面负责路由规则的存储,接收路由规则上报,并推送路由规则给数据面。而数据面就由Sidecar或者服务的SDK承担,负责响应路由规则变化,按照路由规则实现访问下游服务的流量调度。如灰度发布服务B的时候,B服务会根据用户指定的发布策略生成路由规则,并把规则上报给路由管理控制面,控制器检测到服务A需要访问B服务,就把服务B的路由变化推送给服务A,服务A的Sidecar或SDK及时调整流量策略,控制一定比例的流量访问服务B的灰度实例即可完成这一阶段的流量访问控制。
5454

0 commit comments

Comments
 (0)