本文讲述的是一种灰度策略,在讲灰度策略之前,先说一下线上数据库的delete,update操作。
程序员删除线上数据时运行以下示例语句:
delete from table where id=xxx and name=’xxx’;
如果忘记加where条件或者where条件少了一个and或者or,将会删除很多数据。
稍微有经验的程序员,会分两步操作:
1. select * from table where id=xxx andname=’xxx’; 观察满足删除条件的数据情况
2.用“delete”替换第一点语句的“select*”
第一点可以理解为“灰度发布观察”,第二点可以理解为“全量发布”。
那么接下来讲的就是在微服务中实现上面思路的灰度发布。
举个例子:
某个微服务系统中,要对A表添加一个uid字段,插入数据时填写上uid数据,update数据时where再加上“uid=xxx”的条件。系统的服务杂性,无法预料到插入的uid和update的uid是否一致,如果存在大量不一致,将导致大量数据无法被update更新,引起大面积报障。
该改造要上线,就是要先摸清不一致的情况有多少。
按以下步骤上线:
1. 线上数据表增加uid字段
2. 上线程序,上线的程序有insert uid的功能,update逻辑先不加上uid=xxx的过滤条件。再加多几行程序,程序执行”select * from table where condition=yyy and uid=xxx”,当返回的结果集为0时,打印日志并且上报到统计系统中,通过日志或者统计系统监控将要update的影响记录条数。
3. 第二点灰度观察一天,正常无误后把”select * from table where condition=yyy and uid=xxx”的执行语句去掉,再到原来的update语句加上uid=xxx,再上线灰度一台服务器
4. 第三点的一台服务器灰度一天无误后,再继续灰度其他机器。
本文介绍了一种灰度发布的策略,并通过实例演示了如何在微服务系统中实施此策略以减少因代码更新导致的问题。
1019

被折叠的 条评论
为什么被折叠?



