【Nacos】 多数据源

Metadata

title: 【Nacos】 多数据源
date: 2023-01-03 21:39
tags:
  - 行动阶段/完成
  - 主题场景/组件
  - 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
  - 细化主题/Module/Nacos/插件
categories:
  - Nacos
keywords:
  - Nacos
description: 【Nacos】 多数据源

【Nacos】 多数据源

Nacos 从 2.2.0 版本开始, 可通过 SPI 机制注入多数据源实现插件, 并在引入对应数据源实现后, 便可在 Nacos 启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应多数据源插件. 本文档详细介绍一个多数据源插件如何实现以及如何使其生效。

注意: 目前多数据源插件处于 Beta 测试阶段, 其 API 及接口方法定义可能会在后续版本升级而有较大修改,请注意您的插件适用版本。

在原来的 Config 模块中,所有的 SQL 操作的执行是通过直接使用 JdbcTemplate 执行固定 SQL 语句的形式,使得 SQL 语句与业务逻辑高度耦合,并且只支持 Derby 与 MySQL 两种数据源,原有 Config 模块架构如下。

现在的多数据源插件通过 SPI 机制,将 SQL 操作按照数据表进行抽象出多个 Mapper 接口,Mapper 接口的实现类需要按照不同的数据源编写对应的 SQL 方言实现; 现在插件默认提供 Derby 以及 MySQL 的 Mapper 实现,可直接使用;而其他的数据源则需要用户使用数据源插件进行加载,其改造后架构图如下。

  1. 用户查询当前 Nacos 是否支持所需数据源,Nacos 默认提供 Derby 以及 MySQL 的实现,若暂未支持可参考下面插件编写者如何开发步骤开发插件自己使用或贡献;

  2. application.properties配置文件中将spring.datasource.platform修改为对应的数据源名称,并配置数据源相关参数;

  3. 然后编译运行则可支持此数据源;

插件编写者如何开发

  1. 引入nacos-datasource-plugin依赖
  2. 实现com.alibaba.nacos.plugin.datasource.mapper包下数据表对应 Mapper 接口中的特殊 SQL 方法,主要是涉及分页等方言差别,可参考com.alibaba.nacos.plugin.datasource.impl下 Derby 以及 MySQL 的实现,只需实现对应接口即可。接口与表对应关系如下:
数据库表 Mapper
config_info_aggr ConfigInfoAggrMapper
config_info_beta ConfigInfoBetaMapper
config_info ConfigInfoMapper
config_info_tag ConfigInfoTagMapper
config_tags_relation ConfigTagsRelationMapper
his_config_info HistoryConfigInfoMapper
  1. 编写 SPI 配置文件,其名字为com.alibaba.nacos.plugin.datasource.mapper.Mapper,写入实现 Mapper 接口的类,可参考 config 模块中 Derby 与 MySQL 配置文件。
  2. 插件使用者则可以通过依赖此插件,达到实现对应数据源操作的效果
  3. 编译运行

如何编译

编译插件之前需要先编译nacos并安装至本地仓库.

  1. git clone git@github.com:alibaba/nacos.git
  2. cd nacos && mvn -B clean package install -Dmaven.test.skip=true

若出现revision变量无法解析, 请更新maven至最新版本

  1. git clone #{对应数据源插件实现 Git 地址}
  2. mvn install

未来版本

未来的版本更新如下:

  • 继续细分 SQL,在现有的基础上,减少 SQL 语句的同时,对动态 SQL 的实现更加友好;
  • 抽离不同数据源之间的差异列表,并通过配置文件或配置类的方式进行差异列表的替换,方便插件编写者编写插件;