技术单元的黑白名单,切流量上线,通过单元化已经做得很好了。但是有个问题没有很好的解决,就是数据库层面的黑白名单,
数据库的灰度发布。
这个可以通过数据库弹性发布来解决。
假设外部流水号为SN,通过外部流水号生成一个内部流水号SN'.有唯一的映射关系:
SN~SN'.SN‘的设计如下:SN'=SN + xx
xx表示两位弹性扩展位。
业务侧系统第一步,做幂等性校验。也就是insert数据库表。此时注意,该数据库表写入时候必须写道唯一的一个固定表中,
不能双写入不同的数据库表。因为存在数据表的强一致性等问题。
后面做业务逻辑的时候,就可以根据xx的弹性扩展位,确定到底向哪个数据库表写入。因为xx确定的弹性扩展数据库,都是
相同的逻辑优先级,因此可以做流量切换,黑白名单等操作。
问题:
这里为何需要加入弹性扩展位,如果不加入,直接在shardingphere中做路由选择不行么?
当前端业务侧根据SN查询到底落到哪个数据库的时候,要先查第一个幂等表,确认sn’。根据sn‘确认到底落到哪个库。
否则要到全部的数据库中全量查询。