在数据库灰度方案中,可以将新版本的数据库和旧版本的数据库同时部署,然后逐步将流量引导到新版本数据库,以实现平滑升级。这可以降低因大范围数据库变更带来的风险,确保系统的稳定性和连续性。使用影子表是一种实现数据库灰度的有效方法,它可以存储灰度发布期间的数据变更记录。通过MSE提供的数据隔离方案,您无需修改任何业务代码即可实现数据库层面的全链路灰度。
背景信息
在微服务体系架构中,服务之间的依赖关系非常复杂。例如,一个功能的发布上线需要多个服务同时升级上线,这就需要对这些服务的新版本进行小流量灰度验证。这种全链路灰度场景是微服务架构中特有的,它通过构建从网关到后端服务的环境隔离来对多个不同版本的服务进行灰度验证。
在发布过程中,只需要部署服务的灰度版本。当流量在调用链路上流转时,流经的网关、中间件和微服务会识别灰度流量,并将其动态转发到对应服务的灰度版本。通过下图所示(其中不同的颜色代表不同版本的灰度流量),可以看出无论是微服务网关还是微服务本身都需要识别流量,并根据治理规则进行动态决策。当服务版本发生变化时,调用链路的转发也会实时改变。
与通过机器搭建的灰度环境相比,这种方法不仅可以节省大量的机器成本和运维人力,而且可以帮助开发者实时快速地对线上流量进行精细化的全链路控制。
支持组件
数据库连接池的组件支持版本如下:
组件 | JDK 1.7支持版本 | JDK 1.8支持版本 | JDK 11支持版本 |
Druid | 1.0.0或以上版本 | 1.2.4或以上版本 | 1.2.4或以上版本 |
HikariCP | 2.3.0或以上版本 | 2.3.13或以上版本 | 2.3.13或以上版本 |
通过影子表实现数据库灰度
影子表方案是在同一个实例的同一个数据库上建立对应的影子表。在执行SQL的过程中,对灰度流量的SQL进行解析与修改,实现不同环境流量的SQL分别访问对应的表。假设基线环境的表的名称为mse_demo_table,那么Gray环境的流量可以映射到mse_demo_table_gray的表中,从而实现灰度数据和基线环境数据表隔离的效果。
步骤一:数据库建表
登录数据管理DMS 5.0控制台创建基线环境表。数据库建表语句如下:
CREATE TABLE `mse_demo_table` ( `id` int NOT NULL AUTO_INCREMENT, `location` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ;
在数据管理DMS 5.0控制台创建影子表,因为需要创建灰度Gray环境,所以需要创建影子表mse_demo_table_gray。数据库建表语句如下:
CREATE TABLE `mse_demo_table_gray` ( `id` int NOT NULL AUTO_INCREMENT, `location` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ;
步骤二:开启全链路灰度
配置MSE的全链路发布。具体操作,请参见基于MSE Ingress的全链路灰度。
步骤三:开启数据库灰度
登录MSE治理中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择 ,然后单击目标应用的资源量卡片。
左侧导航栏,单击数据库治理,然后单击数据库灰度页签。
单击开启数据库灰度右侧的图标,然后开启数据库灰度。
单击需要灰度的数据库表的右侧下拉框,选择需要灰度的数据库表,然后单击确定。
参数
描述
开启数据库灰度
开启数据库灰度能力,此功能实时生效,无需重启应用。
需要灰度的数据库表
选择需要灰度的数据库表。如果您没有选择需要灰度的数据库表,则表示全部数据库表都需要灰度。
重要需要您提前创建对应的影子表,否则灰度SQL执行会找不到对应的数据库表。
结果验证
通过如下SQL语句查询影子表,确认灰度环境的数据都插入至影子表,同时在MSE的SQL洞察页面发现已有灰度SQL的执行情况。
SELECT * FROM `mse_demo_table_gray`
- 本页导读 (1)