首页> 中国专利> 一种数据源路由方法和装置

一种数据源路由方法和装置

摘要

本发明公开一种数据源路由方法和装置,涉及计算机技术领域。方法一具体实施方式包括接收数据库应用系统对矩阵数据源的访问请求,矩阵数据源中总体数据源对应多个业务动态数据源,每个业务动态数据源对应多个具体数据源;在数据库应用系统访问总体动态数据源情况下,获取当前上下文的租户信息和当前访问的业务方向信息,将访问请求切换到总体动态数据源下与当前上下文租户当前业务方向对应的具体数据源;在数据库应用系统访问目标业务动态数据源情况下,获取当前上下文租户信息,将访问请求切换到目标业务动态数据源下与当前上下文租户对应的具体数据源。能同时解决多租户多业务数据源自动路由切换问题,与数据库应用系统代码解耦,可复用性强。

著录项

  • 公开/公告号CN112306984A

    专利类型发明专利

  • 公开/公告日2021-02-02

    原文格式PDF

  • 申请/专利号CN201910695657.7

  • 发明设计人 刘荣华;

    申请日2019-07-30

  • 分类号G06F16/182(20190101);G06F16/23(20190101);G06F16/25(20190101);H04L29/08(20060101);

  • 代理机构11219 中原信达知识产权代理有限责任公司;

  • 代理人李阳;郭晗

  • 地址 100086 北京市海淀区知春路76号8层

  • 入库时间 2023-06-19 09:44:49

说明书

技术领域

本发明涉及计算机技术领域,尤其涉及一种数据源路由方法和装置。

背景技术

数据库应用系统中,数据源作为数据库连接管理的标准接口,承担着极其重要的责任。复杂数据库应用系统中既涉及到多业务数据源分离与路由问题,又涉及到应用多租户的数据源隔离与路由问题,因此出现了需要根据上下文租户和当前访问的业务方向,自动切换系统数据源到对应租户的对应业务的数据源中去的难题。

在实现本发明过程中,发明人发现现有技术中至少存在如下问题:

不能同时解决多租户和多业务数据源自动路由切换的问题,且与数据库应用系统紧耦合,解决方案的可复用性较差。

发明内容

有鉴于此,本发明实施例提供一种数据源路由方法和装置,能够同时解决多租户和多业务数据源自动路由切换的问题,且与数据库应用系统的代码解耦,增强解决方案的可复用性。

为实现上述目的,根据本发明实施例的一个方面,提供了一种数据源路由方法。

一种数据源路由方法,包括:接收数据库应用系统对矩阵数据源的访问请求,所述矩阵数据源包括总体动态数据源、业务动态数据源、具体数据源,其中,一个总体数据源对应多个业务动态数据源,每个业务动态数据源对应多个具体数据源;在所述数据库应用系统访问所述总体动态数据源的情况下,通过矩阵数据源路由服务获取所述数据库应用系统当前上下文的租户信息和当前访问的业务方向信息,将所述访问请求切换到所述总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的具体数据源上;在所述数据库应用系统访问所述多个业务动态数据源中的一个目标业务动态数据源的情况下,通过业务动态数据源路由服务获取所述数据库应用系统当前上下文的租户信息,将所述访问请求切换到所述目标业务动态数据源下的与当前上下文的租户对应的具体数据源上。

可选地,接收数据库应用系统对矩阵数据源的访问请求的步骤之前,包括:根据数据源配置信息初始化所述矩阵数据源,其中包括:初始化所述总体动态数据源、所述总体动态数据源对应的多个业务动态数据源、每个业务动态数据源对应的多个具体数据源,所述总体动态数据源、所述业务动态数据源、所述具体数据源分别按照所述矩阵数据源的命名规范命名;分别创建总体动态数据源实例、各业务动态数据源实例、各具体数据源实例,并为每个具体数据源初始化一个数据库连接池实例,总体动态数据源、各业务动态数据源、各具体数据源的名称分别与各自的实例存在对应关系。

可选地,初始化后的所述矩阵数据源随着所述数据源配置信息的变化动态更新,所述动态更新的内容包括:根据所述数据源配置信息的变化更新相应的的业务动态数据源实例,更新对应的具体数据源实例及其数据库连接池信息。

可选地,还包括:通过配置信息查询与监听服务获取所述数据源配置信息以及监听所述数据源配置信息的变化,其中,所述数据源配置信息的获取和监听方式为以下三者之一:方式一:从所述数据库应用系统指定的文件路径名下的配置文件中获取所述数据源配置信息,以及定时扫描所述配置文件来监听所述数据源配置信息的变化;方式二:根据所述数据库应用系统配置的配置信息查询接口从远程配置中心获取所述数据源配置信息,以及监听所述远程配置中心推送到消息队列或分布式服务的数据源配置信息变更;方式三:利用所述数据库应用系统自定义的第一接口方法和第二接口方法分别来获取和监听所述数据源配置信息,所述第一接口方法为查询数据源配置信息的接口方法,所述第二接口方法为监听数据源配置信息变更的接口方法。

可选地,将所述访问请求切换到所述总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的具体数据源上的步骤,包括:根据获取到的当前上下文的租户信息、当前访问的业务方向信息,按照所述矩阵数据源的命名规范,计算出所述总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的第一目标具体数据源名称;根据具体数据源名称与具体数据源实例之间的对应关系,将访问请求切换到与所述第一目标具体数据源名称对应的具体数据源上;将所述访问请求切换到所述目标业务动态数据源下的与当前上下文的租户对应的具体数据源上的步骤,包括:根据获取到的当前上下文的租户信息,按照矩阵数据源的命名规范计算出所述目标业务动态数据源下的与当前上下文的租户对应的第二目标具体数据源名称;根据具体数据源名称与具体数据源实例之间的对应关系,将访问请求切换到与所述第二目标具体数据源名称对应的具体数据源上。

可选地,每个业务动态数据源对应一个业务方向,且每个具体数据源对应一个租户和一个业务方向;所述矩阵数据源的命名规范为:以第一字符串、第二字符串、第三字符串分别表示所述总体动态数据源、所述业务动态数据源、所述具体数据源,所述总体动态数据源的名称为所述第一字符串,每个所述业务动态数据源的名称为各自对应的业务方向关键字与所述第二字符串的组合,每个所述具体数据源的名称为各自对应的租户标识、业务方向关键字与所述第三字符串的组合。

可选地,所述目标业务动态数据源是所述数据库应用系统通过其本地配置文件中指定的业务方向定位到的一个业务动态数据源;根据所述数据库应用系统声明的业务方向或所述数据库应用系统传递过来的业务方向值,获取到所述当前访问的业务方向,其中,所述数据库应用系统通过注解标识声明所述业务方向或通过第一线程级静态方法传递所述业务方向值。

可选地,通过读取所述数据库应用系统在系统属性中设置的上下文租户标识值,或读取所述数据库应用系统通过调用第二线程级静态方法传递过来的上下文租户标识值,获取到所述当前上下文的租户信息。

根据本发明实施例的另一方面,提供了一种数据源路由装置。

一种数据源路由装置,包括:访问请求接收模块,用于接收数据库应用系统对矩阵数据源的访问请求,所述矩阵数据源包括总体动态数据源、业务动态数据源、具体数据源,其中,一个总体数据源对应多个业务动态数据源,每个业务动态数据源对应多个具体数据源;数据源路由模块,用于在所述数据库应用系统访问所述总体动态数据源的情况下,通过矩阵数据源路由服务获取所述数据库应用系统当前上下文的租户信息和当前访问的业务方向信息,将所述访问请求切换到所述总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的具体数据源上;在所述数据库应用系统访问所述多个业务动态数据源中的一个目标业务动态数据源的情况下,通过业务动态数据源路由服务获取所述数据库应用系统当前上下文的租户信息,将所述访问请求切换到所述目标业务动态数据源下的与当前上下文的租户对应的具体数据源上。

可选地,还包括数据源初始化模块,用于:根据数据源配置信息初始化所述矩阵数据源,其中包括:初始化所述总体动态数据源、所述总体动态数据源对应的多个业务动态数据源、每个业务动态数据源对应的多个具体数据源,所述总体动态数据源、所述业务动态数据源、所述具体数据源分别按照所述矩阵数据源的命名规范命名;分别创建总体动态数据源实例、各业务动态数据源实例、各具体数据源实例,并为每个具体数据源初始化一个数据库连接池实例,总体动态数据源、各业务动态数据源、各具体数据源的名称分别与各自的实例存在对应关系。

可选地,还包括数据源更新模块,用于对初始化后的所述矩阵数据源随着所述数据源配置信息的变化动态更新,所述动态更新的内容包括:根据所述数据源配置信息的变化更新相应的的业务动态数据源实例,更新对应的具体数据源实例及其数据库连接池信息。

可选地,还包括配置信息查询与监听模块:用于通过配置信息查询与监听服务获取所述数据源配置信息以及监听所述数据源配置信息的变化,其中,所述数据源配置信息的获取和监听方式为以下三者之一:方式一:从所述数据库应用系统指定的文件路径名下的配置文件中获取所述数据源配置信息,以及定时扫描所述配置文件来监听所述数据源配置信息的变化;方式二:根据所述数据库应用系统配置的配置信息查询接口从远程配置中心获取所述数据源配置信息,以及监听所述远程配置中心推送到消息队列或分布式服务的数据源配置信息变更;方式三:利用所述数据库应用系统自定义的第一接口方法和第二接口方法分别来获取和监听所述数据源配置信息,所述第一接口方法为查询数据源配置信息的接口方法,所述第二接口方法为监听数据源配置信息变更的接口方法。

可选地,所述数据源路由模块包括具体数据源路由子模块,用于:根据获取到的当前上下文的租户信息、当前访问的业务方向信息,按照所述矩阵数据源的命名规范,计算出所述总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的第一目标具体数据源名称;根据具体数据源名称与具体数据源实例之间的对应关系,将访问请求切换到与所述第一目标具体数据源名称对应的具体数据源上;或者,根据获取到的当前上下文的租户信息,按照矩阵数据源的命名规范计算出所述目标业务动态数据源下的与当前上下文的租户对应的第二目标具体数据源名称;根据具体数据源名称与具体数据源实例之间的对应关系,将访问请求切换到与所述第二目标具体数据源名称对应的具体数据源上。

可选地,每个业务动态数据源对应一个业务方向,且每个具体数据源对应一个租户和一个业务方向;所述矩阵数据源的命名规范为:以第一字符串、第二字符串、第三字符串分别表示所述总体动态数据源、所述业务动态数据源、所述具体数据源,所述总体动态数据源的名称为所述第一字符串,每个所述业务动态数据源的名称为各自对应的业务方向关键字与所述第二字符串的组合,每个所述具体数据源的名称为各自对应的租户标识、业务方向关键字与所述第三字符串的组合。

可选地,所述目标业务动态数据源是所述数据库应用系统通过其本地配置文件中指定的业务方向定位到的一个业务动态数据源;根据所述数据库应用系统声明的业务方向或所述数据库应用系统传递过来的业务方向值,获取到所述当前访问的业务方向,其中,所述数据库应用系统通过注解标识声明所述业务方向或通过第一线程级静态方法传递所述业务方向值。

可选地,通过读取所述数据库应用系统在系统属性中设置的上下文租户标识值,或读取所述数据库应用系统通过调用第二线程级静态方法传递过来的上下文租户标识值,获取到所述当前上下文的租户信息。

根据本发明实施例的又一方面,提供了一种电子设备。

一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现本发明提供的数据源路由方法。

根据本发明实施例的又一方面,提供了一种计算机可读介质。

一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明提供的数据源路由方法。

上述发明中的一个实施例具有如下优点或有益效果:接收数据库应用系统对矩阵数据源的访问请求,矩阵数据源包括总体动态数据源、业务动态数据源、具体数据源;在数据库应用系统访问总体动态数据源的情况下,通过矩阵数据源路由服务获取数据库应用系统当前上下文的租户信息和当前访问的业务方向信息,将访问请求切换到总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的具体数据源上;在数据库应用系统访问多个业务动态数据源中的一个目标业务动态数据源的情况下,通过业务动态数据源路由服务获取数据库应用系统当前上下文的租户信息,将访问请求切换到目标业务动态数据源下的与当前上下文的租户对应的具体数据源上。能够同时解决多租户和多业务数据源自动路由切换的问题。且通过本发明实施例可分解成配置信息查询与监听、矩阵数据源动态初始化和矩阵数据源动态路由(具体通过矩阵数据源路由服务和业务动态数据源路由服务实现)三个领域服务,每个领域服务均支持多种应用接入方式与数据库应用系统进行交互,并且本发明实施例的数据源路由装置可以实现为独立的矩阵数据源路由装置应用组件,从而实现与数据库应用系统的代码解耦,增强解决方案的可复用性。

上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。

附图说明

附图用于更好地理解本发明,不构成对本发明的不当限定。其中:

图1是根据本发明实施例的数据源路由方法的主要步骤示意图;

图2是根据本发明实施例的数据源路由的系统架构示意图;

图3是根据本发明实施例的数据源路由装置的主要模块示意图;

图4是本发明实施例可以应用于其中的示例性系统架构图;

图5是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

图1是根据本发明实施例的数据源路由方法的主要步骤示意图。

如图1所示,本发明实施例的数据源路由方法主要包括步骤S101至步骤S103。

步骤S101:接收数据库应用系统对矩阵数据源的访问请求,矩阵数据源包括总体动态数据源、业务动态数据源、具体数据源,其中,一个总体数据源对应多个业务动态数据源,每个业务动态数据源对应多个具体数据源。

每个业务动态数据源对应一个业务方向,且每个具体数据源对应一个租户和一个业务方向。业务方向指数据库应用系统中的一个业务领域、一个子领域、或一个业务分库。总体动态数据源和业务动态数据源都是不具有具体连接数据库的通道的数据源,而具体数据源是具有具体连接数据库的通道的数据源。

在数据库应用系统访问总体动态数据源的情况下执行步骤S102,在数据库应用系统访问多个业务动态数据源中的一个目标业务动态数据源的情况下,执行步骤S103。该目标业务动态数据源是数据库应用系统通过其本地配置文件中指定的业务方向定位到的一个业务动态数据源。

步骤S102:通过矩阵数据源路由服务获取数据库应用系统当前上下文的租户信息和当前访问的业务方向信息,将访问请求切换到总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的具体数据源上。

具体地,可以根据获取到的当前上下文(简称上下文)的租户信息、当前访问的业务方向信息,按照矩阵数据源的命名规范,计算出总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的第一目标具体数据源名称;根据具体数据源名称与具体数据源实例之间的对应关系,将访问请求切换到与第一目标具体数据源名称对应的具体数据源上。

其中,可以根据数据库应用系统声明的业务方向或数据库应用系统传递过来的业务方向值,获取到当前访问的业务方向,其中,数据库应用系统通过注解标识声明业务方向或通过第一线程级静态方法传递业务方向值。

并且,通过读取数据库应用系统在系统属性中设置的上下文租户标识值,或读取数据库应用系统通过调用第二线程级静态方法传递过来的上下文租户标识值,获取到当前上下文的租户信息。

下面详细介绍矩阵数据源的命名规范。以第一字符串、第二字符串、第三字符串分别表示总体动态数据源、业务动态数据源、具体数据源,例如,第一字符串为matrixDatasource,第二字符串为DynamicDatasource,第三字符串为Datasource。在对总体动态数据源、业务动态数据源、具体数据源命名时,利用第一字符串、第二字符串、第三字符串将总体动态数据源、业务动态数据源、具体数据源三类数据源区分开。具体地,总体动态数据源的名称为第一字符串,例如命名为matrixDatasource;每个业务动态数据源的名称为各自对应的业务方向关键字与第二字符串的组合,例如业务动态数据源的命名规则为:业务方向关键字后接DynamicDatasource;每个具体数据源的名称为各自对应的租户标识、业务方向关键字与第三字符串的组合,例如具体数据源的命名规则为:{租户标识}#{业务方向关键字}#Datasource。

步骤S103:通过业务动态数据源路由服务获取数据库应用系统当前上下文的租户信息,将访问请求切换到目标业务动态数据源下的与当前上下文的租户对应的具体数据源上。

具体地,可以根据获取到的当前上下文的租户信息,按照矩阵数据源的命名规范计算出目标业务动态数据源下的与当前上下文的租户对应的第二目标具体数据源名称;根据具体数据源名称与具体数据源实例之间的对应关系,将访问请求切换到与第二目标具体数据源名称对应的具体数据源上。

其中,获取到的当前上下文的租户信息的方法在上文已经介绍,不再赘述。

步骤S101之前包括:根据数据源配置信息初始化矩阵数据源,其中包括:初始化总体动态数据源、总体动态数据源对应的多个业务动态数据源、每个业务动态数据源对应的多个具体数据源,总体动态数据源、业务动态数据源、具体数据源分别按照矩阵数据源的命名规范命名;分别创建总体动态数据源实例、各业务动态数据源实例、各具体数据源实例,并为每个具体数据源初始化一个数据库连接池实例,总体动态数据源、各业务动态数据源、各具体数据源的名称分别与各自的实例存在对应关系,即实例的名称即为数据源的名称,例如总体动态数据源实例的名称即为总体动态数据源的名称,业务动态数据源、具体数据源的名称与实例的对应关系同理。

初始化后的矩阵数据源随着数据源配置信息的变化动态更新,动态更新的内容包括:根据数据源配置信息的变化更新相应的的业务动态数据源实例,更新对应的具体数据源实例及其数据库连接池信息。

可以通过配置信息查询与监听服务获取数据源配置信息以及监听数据源配置信息的变化,其中,数据源配置信息的获取和监听方式为以下三者之一:

方式一:从数据库应用系统指定的文件路径名下的配置文件中获取所述数据源配置信息,以及定时扫描所述配置文件来监听数据源配置信息的变化;

方式二:根据数据库应用系统配置的配置信息查询接口从远程配置中心获取数据源配置信息,以及监听远程配置中心推送到消息队列或分布式服务的数据源配置信息变更,分布式服务例如ZooKeeper;

方式三:利用数据库应用系统自定义的第一接口方法和第二接口方法分别来获取和监听数据源配置信息,第一接口方法为查询数据源配置信息的接口方法,第二接口方法为监听数据源配置信息变更的接口方法。

本发明实施例将数据源配置信息格式设计为业界常用的JSON(JavaScriptObject Notation,JS对象简谱)格式,其跨平台、易扩展的特性能够很好的适应配置文件、外部配置中心和数据库应用系统自定义等多种应用场景。具体内容格式设计如下:

图2是根据本发明实施例的数据源路由的系统架构示意图。

如图2所示,本发明实施例的架构总体包括配置信息查询与监听、矩阵数据源动态初始化、矩阵数据源动态路由三个服务。

配置信息查询与监听服务支持本地的多业务多租户数据源配置信息(简称数据源配置信息),也支持从远程统一配置中心(即图2中的外部的统一配置与管理中心)查询与监听多业务多租户数据源配置信息,同时支持数据库应用系统自定义数据源(例如应用实现从Git(一个开源的分布式版本控制系统)仓库获取数据源配置信息)。

本发明实施例提供三种配置信息查询与监听方式如下:供数据库应用系统选用:1、配置文件方式;2、远程配置中心方式;3、应用自定义方式。设计由数据库应用系统的本地配置属性queryConfigType来指定local(即配置文件方式)/remote(即远程配置中心方式)/customize(即应用自定义方式)三种方式之一。

针对配置文件方式,通过数据库应用系统的一本地配置属性来指定文件路径名,且支持本地文件、网络系统文件和分布式系统文件,该本地配置属性为:dbConfigFilePath:/usr/config/db.json,配置文件的内容完全符合上文设计的数据源配置信息的JSON格式。本发明实施例的配置信息查询与监听服务定时扫描配置文件内容变更,来实现数据源配置信息的监听。

针对远程配置中心方式,配置信息查询接口设计选用Restful WebService协议,返回值即为上文中设计的JSON格式。远程配置中心配置信息查询接口URL(统一资源定位符)可由数据库应用系统通过本地配置属性remoteConfigURL进行配置,例如remoteConfigURL:http://host:port/queryConfig?appCode=指定应用。数据源配置信息变更监听支持两种方式:一是基于MQ(消息队列)的数据源配置信息变更通知与监听;二是基于ZooKeeper(一个分布式的,开放源码的分布式应用程序协调服务)协调服务的数据源配置信息变更通知与监听。具体可以采用数据库应用系统的本地配置属性remoteConfigListeningMode:MQ/ZooKeeper来指定。远程配置中心负责将数据源配置信息变更推送到MQ/ZooKeeper,配置信息查询与监听服务负责监听MQ/ZooKeeper中指定数据库应用系统的数据源配置信息变更,并进行相应的矩阵数据源初始化和动态更新处理。

针对应用自定义方式,设计两个接口程序方法:接口方法一(即上文的第一接口方法)为查询配置信息,返回值为上文设计的JSON格式;接口方法二(即上文的第二接口方法)为配置变更监听。数据库应用系统需实现这个接口的两个接口方法,指明多业务多租户数据源配置信息如何获取、如何监听变更。

数据库应用系统在启动时调用本发明实施例的初始化方法initializeMatrixDatasource(),进行初始的配置信息查询与监听服务的启动。同时通过本地配置属性systemApplicationCode来指明在统一配置与管理中心中本数据库应用系统的唯一标识符。

无论数据库应用系统选用哪种配置信息查询与监听方式,配置信息查询与监听服务在查询到初始的多业务多租户数据源配置信息,以及监听接收到数据源配置信息变更时,直接调用矩阵数据源动态初始化服务,将数据源配置信息推送过去,统一进行数据库应用系统多业务多租户矩阵数据源的初始化处理。

矩阵数据源动态初始化服务包括数据源初始化服务(initializeDatasource())和数据源更新服务(updateDatasource())。其中数据源初始化服务用于根据数据源配置信息初始化矩阵数据源,包括初始化一个总体动态数据源、多个业务动态数据源和若干具体数据源,且为每一具体数据源初始化一个数据库连接池。数据源更新服务用于根据监听到的数据源配置变化信息动态更新整个矩阵数据源。下面对矩阵数据源动态初始化服务进行详细介绍。

本发明实施例设计一个矩阵数据源逻辑结构,实现上述initializeDatasource()和updateDatasource()两个服务。矩阵数据源指从业务和租户两个维度来描述的动态数据源,其逻辑结构包括:一个总体动态数据源、多个业务级动态数据源(例如图2中业务A动态数据源~业务M动态数据源)和若干具体数据源(例如图2中业务A租户1数据源、业务A租户2数据源等等)。总体动态数据源命名为matrixDatasource;多个业务动态数据源对应多业务数据源配置信息,即为每一个业务数据源配置信息都初始化一个业务动态数据源,命名规则为业务方向关键字后接DynamicDatasource;若干具体数据源系指为每一个租户的每一个业务数据源配置均初始化一个具体数据源,如果有M个业务方向和N个租户,则需要初始化M*N个具体数据源,具体数据源命名规则为:{租户标识}#{业务方向关键字}#Datasource。每个具体数据源根据为其配置的数据库类型、数据源类型、连接参数、连接池配置参数信息分别进行初始化。

数据源初始化服务接收符合数据源配置信息格式的JSON结构数据,按照上文设计的矩阵数据源逻辑结构及其命名规范,分别创建一个总体动态数据源实例、多个业务级动态数据源实例和若干具体数据源实例,并为每一个具体数据源初始化一个数据库连接池实例(例如图2中业务A租户1数据库连接池等)。同时将总体动态数据源设置为系统默认数据源,并将这些数据源的名称与其初始化好的数据源实例的对应关系传递给矩阵数据源动态路由服务。

数据源更新服务接收符合数据源配置信息格式的JSON结构数据,其代表变更的数据源配置信息(含新增、修改和删除数据源的完整配置信息,不含未变更数据源的配置信息),按照上文设计的矩阵数据源逻辑结构及其命名规范,新增、修改和删除对应的业务动态数据源实例,新增、修改和删除对应的具体数据源实例及其数据库连接池信息,并将这些被更新数据源的名称与其初始化好的数据源实例的对应关系传递给矩阵数据源动态路由服务。需要说明的是,数据源更新服务更新(新增、修改和删除)上述实例的过程即销毁原有的旧实例、再创建新的实例(即再初始化)的过程。

矩阵数据源动态路由服务根据上下文租户和当前访问的业务方向自动切换系统数据源到对应租户的对应业务数据源中去。矩阵数据源动态路由服务具体包括矩阵数据源路由服务和业务动态数据源路由服务。矩阵数据源路由服务可以实现根据上下文租户信息和当前访问的业务方向信息,将访问请求自动切换到对应租户、对应业务的具体数据源中去,业务动态数据源路由服务可以实现根据上下文租户信息,将访问请求自动切换到数据库应用系统所定位到的业务动态数据源下的、对应租户的具体数据源中去。

矩阵数据源动态路由服务还提供两个子服务,分别用于:获取上下文租户和当前访问的业务方向。可以从数据库应用系统运行时进程环境中获取到上下文租户信息和当前访问的业务方向信息。根据矩阵数据源逻辑结构及其命名规范,计算出上下文租户和当前访问的业务方向对应的具体数据源名称,再根据矩阵数据源动态初始化服务传递来的数据源名称及其实例的对应关系确定当前应使用的具体数据源实例,并返回对应的数据库连接池,即可实现到对应租户对应业务方向数据源的自动路由服务。下面分别对获取上下文租户和获取当前访问的业务方向进行详细介绍。

本发明实施例设计两种方式来获取上下文租户信息(上下文租户标识值):一是通过系统属性_ContextTenantId来传递,数据库应用系统使用数据源之前将上下文租户标识值设置到该系统属性中去,矩阵数据源动态路由服务负责从该系统属性中动态读取该值;二是通过本发明实施例提供的线程级静态方法setContextTenantId()来传递,具体地,数据库应用系统负责调用该方法传递上下文租户标识值,矩阵数据源动态路由服务负责读取该值并在当前线程中使用后立即清理掉。数据库应用系统可根据需要选择上述两种方式之一来传递上下文租户信息。作为优选实施方式,可以优先使用第二种方式,即通过线程级静态方法setContextTenantId()(即上文的第二线程级静态方法)传递来的上下文租户标识值,如果通过第二种方式没有获取到,则通过第一种方式,即读取系统属性_ContextTenantId来获取上下文租户标识值。

本发明实施例设计三种方式来获取当前访问的业务方向,数据库应用系统根据自身业务场景可自由选择其中的一种或多种方式。三种方式中,方式一:通过数据库应用系统在本地配置文件来指定某一组服务类或某一个程序包中所有服务统一使用某一业务动态数据源,指定的业务动态数据源遵守矩阵数据源命名规范。例如,财务系统的固定资产(业务方向为fixedAssets)程序包中所有服务统一配置使用fixedAssetsDynamicDatasource这个业务动态数据源。方式二:本发明实施例提供一个注解标记@Datasource,数据库应用系统在其持久化服务类上通过该注解标识@Datasource("业务方向A")来声明该服务对应的业务方向(A(仅为示例)),矩阵数据源动态路由服务运行时尝试读取数据库应用系统当前访问的持久化服务类上的注解标识来决定当前访问的业务方向。方式三:本发明实施例提供一个线程级静态方法setCurrentBusinessKey()(即上文的第一线程级静态方法)来供数据库应用系统传递当前访问的业务方向,数据库应用系统负责调用该方法来传递当前访问的业务方向值,矩阵数据源动态路由服务负责读取该值并在当前线程中使用后立即清理掉。

获取当前访问的业务方向的三种方式中,方式一和方式二常用于业务方向数量和名称相对固定的数据库应用系统;而方式三常用于业务方向可变的数据库应用系统中,数据库应用系统根据其业务逻辑计算出当前的业务方向后再传递给矩阵数据源动态路由服务进行数据源的动态路由,例如,按照业务主键取余运算结果值作为业务方向进行业务分库路由。本发明实施例优先采用方式三获取当前访问的业务方向,如果没有获取到,则按照方式二进行获取,如果仍未获取到,则采用方式一进行获取。

从功能划分,矩阵数据源动态路由服务包括矩阵数据源路由服务和业务动态数据源路由服务。其中,矩阵数据源路由服务将总体动态数据源设置为系统默认数据源,当数据库应用系统访问该矩阵数据源时,矩阵数据源路由服务实现根据获取到的上下文租户信息和当前访问的业务方向信息,按照矩阵数据源命名规范,计算出对应的具体数据源名称,再根据矩阵数据源动态初始化服务传递来的数据源名称及其实例的对应关系,确定当前应使用的具体数据源实例,并返回对应的数据库连接池,实现具体数据源自动路由。业务动态数据源路由服务用于数据库应用系统为某程序包配置了指定的业务动态数据源的场景,在数据库应用系统为某程序包配置了指定的业务动态数据源(当前访问的业务方向即为该指定的业务动态数据源对应的业务方向)之后,当数据库应用系统运行时访问该业务动态数据源时,业务动态数据源路由服务根据获取到的上下文租户信息,按照矩阵数据源命名规范,计算出该业务动态数据源下的对应该租户的具体数据源名称,再根据数据源名称及其实例的对应关系,确定当前应使用的具体数据源实例,并返回对应的数据库连接池,实现本业务中具体数据源自动路由。

其中,在使用矩阵数据源路由服务或业务动态数据源路由服务进行数据源路由的情况下,可以通过上文的获取上下文租户信息的两种方式之中的任一种来获取上下文租户信息(优选第二种方式)。在通过矩阵数据源路由服务进行数据源路由的情况下,使用上述获取当前访问的业务方向的三种方式之中的方式二或方式三来获取当前访问的业务方向(优选方式三),在业务动态数据源路由服务进行数据源路由的情况下,根据获取当前访问的业务方向中的方式一所述,数据库应用系统在本地配置文件来指定某一业务动态数据源,即定位到该业务动态数据源上,从而该业务动态数据源对应的业务方向即为当前访问的业务方向,换言之,业务动态数据源路由服务无需再另外获取当前访问的业务方向。

本发明实施例支持从租户和业务两个维度来配置、初始化和自动路由数据源,形成矩阵式数据源路由服务,并且支持以注解标识的方式在数据库应用系统持久化服务类上声明其业务方向,形成声明式数据源路由服务,此外,通过本发明实施例的服务可以分解成配置信息查询与监听、矩阵数据源动态初始化和矩阵数据源动态路由三个领域服务,每个领域服务均支持多种应用接入方式与数据库应用系统进行交互,并提供独立的矩阵数据源路由装置应用组件,从而实现与数据库应用系统的代码解耦。

图3是根据本发明实施例的数据源路由装置的主要模块示意图。

如图3所示,本发明一个实施例的数据源路由装置300主要包括:数据源初始化模块301、访问请求接收模块302、数据源路由模块303。

数据源初始化模块301,用于:根据数据源配置信息初始化矩阵数据源,其中包括:初始化总体动态数据源、总体动态数据源对应的多个业务动态数据源、每个业务动态数据源对应的多个具体数据源,总体动态数据源、业务动态数据源、具体数据源分别按照矩阵数据源的命名规范命名;分别创建总体动态数据源实例、各业务动态数据源实例、各具体数据源实例,并为每个具体数据源初始化一个数据库连接池实例,总体动态数据源、各业务动态数据源、各具体数据源的名称分别与各自的实例存在对应关系。

访问请求接收模块302,用于接收数据库应用系统对矩阵数据源的访问请求,矩阵数据源包括总体动态数据源、业务动态数据源、具体数据源,其中,一个总体数据源对应多个业务动态数据源,每个业务动态数据源对应多个具体数据源。每个业务动态数据源对应一个业务方向,且每个具体数据源对应一个租户和一个业务方向。

数据源路由模块303,用于在数据库应用系统访问总体动态数据源的情况下,通过矩阵数据源路由服务获取数据库应用系统当前上下文的租户信息和当前访问的业务方向信息,将访问请求切换到总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的具体数据源上;在数据库应用系统访问多个业务动态数据源中的一个目标业务动态数据源的情况下,通过业务动态数据源路由服务获取数据库应用系统当前上下文的租户信息,将访问请求切换到目标业务动态数据源下的与当前上下文的租户对应的具体数据源上。

数据源路由装置300还可以包括数据源更新模块,用于对初始化后的矩阵数据源随着数据源配置信息的变化动态更新,动态更新的内容包括:根据数据源配置信息的变化更新相应的的业务动态数据源实例,更新对应的具体数据源实例及其数据库连接池信息。

数据源路由装置300还可以包括配置信息查询与监听模块:用于通过配置信息查询与监听服务获取数据源配置信息以及监听数据源配置信息的变化,其中,数据源配置信息的获取和监听方式为以下三者之一:方式一:从数据库应用系统指定的文件路径名下的配置文件中获取数据源配置信息,以及定时扫描配置文件来监听数据源配置信息的变化;方式二:根据数据库应用系统配置的配置信息查询接口从远程配置中心获取数据源配置信息,以及监听远程配置中心推送到消息队列或分布式服务的数据源配置信息变更;方式三:利用数据库应用系统自定义的第一接口方法和第二接口方法分别来获取和监听数据源配置信息,第一接口方法为查询数据源配置信息的接口方法,第二接口方法为监听数据源配置信息变更的接口方法。

数据源路由模块303具体可以包括具体数据源路由子模块,用于:根据获取到的当前上下文的租户信息、当前访问的业务方向信息,按照矩阵数据源的命名规范,计算出总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的第一目标具体数据源名称;根据具体数据源名称与具体数据源实例之间的对应关系,将访问请求切换到与第一目标具体数据源名称对应的具体数据源上;或者,根据获取到的当前上下文的租户信息,按照矩阵数据源的命名规范计算出目标业务动态数据源下的与当前上下文的租户对应的第二目标具体数据源名称;根据具体数据源名称与具体数据源实例之间的对应关系,将访问请求切换到与第二目标具体数据源名称对应的具体数据源上。

矩阵数据源的命名规范可以为:以第一字符串、第二字符串、第三字符串分别表示总体动态数据源、业务动态数据源、具体数据源,总体动态数据源的名称为第一字符串,每个业务动态数据源的名称为各自对应的业务方向关键字与第二字符串的组合,每个具体数据源的名称为各自对应的租户标识、业务方向关键字与第三字符串的组合。

目标业务动态数据源可以是数据库应用系统通过其本地配置文件中指定的业务方向定位到的一个业务动态数据源;根据数据库应用系统声明的业务方向或数据库应用系统传递过来的业务方向值,获取到当前访问的业务方向,其中,数据库应用系统通过注解标识声明业务方向或通过第一线程级静态方法传递业务方向值。

通过读取数据库应用系统在系统属性中设置的上下文租户标识值,或读取数据库应用系统通过调用第二线程级静态方法传递过来的上下文租户标识值,获取到当前上下文的租户信息。

本发明实施例的数据源路由装置可以实现成一个具有完善的规范和标准化接口的独立应用组件,该组件独立于数据库应用系统,且与数据库应用系统运行在同一个操作系统进程中。例如实现成Java语言中一个Jar(Java ARchive,Java归档)包,或者C#语言的一个DLL(动态链接库文件)。多业务多租户数据源配置信息支持本地文件配置,也支持与外部的统一配置与管理中心进行交互,同时支持数据库应用系统自定义配置查询与监听。并且,数据库应用系统当前上下文租户如何传递给多业务多租户矩阵数据源路由装置,数据库应用系统如何在具体业务模块开发、系统配置时指定对应的数据源,都需要数据源路由装置统一进行规范约定,并制定标准化服务接口。在相关规范约定的指导下,对数据源路由装置从上述的配置信息查询与监听、矩阵数据源动态初始化、矩阵数据源动态路由三个服务入手,分别进行落地实现。本发明实施例能够解决复杂数据库应用系统中多租户和多业务数据源动态配置和自动路由切换的问题。

另外,在本发明实施例中数据源路由装置的具体实施内容,在上面所述数据源路由方法中已经详细说明了,故在此重复内容不再说明。

图4示出了可以应用本发明实施例的数据源路由方法或数据源路由装置的示例性系统架构400。

如图4所示,系统架构400可以包括终端设备401、402、403,网络404和服务器405。网络404用以在终端设备401、402、403和服务器405之间提供通信链路的介质。网络404可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备401、402、403通过网络404与服务器405交互,以接收或发送消息等。终端设备401、402、403上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。

终端设备401、402、403可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器405可以是提供各种服务的服务器,例如对用户利用终端设备401、402、403所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。

需要说明的是,本发明实施例所提供的数据源路由方法一般由服务器405执行,相应地,数据源路由装置一般设置于服务器405中。

应该理解,图4中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

下面参考图5,其示出了适于用来实现本申请实施例的终端设备或服务器的计算机系统500的结构示意图。图5示出的终端设备或服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。

如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。

以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。

特别地,根据本发明公开的实施例,上文参考主要步骤示意图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤示意图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本申请的系统中限定的上述功能。

需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。

附图中的主要步骤示意图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,主要步骤示意图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或主要步骤示意图中的每个方框、以及框图或主要步骤示意图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括访问请求接收模块、数据源路由模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,访问请求接收模块还可以被描述为“用于接收数据库应用系统对矩阵数据源的访问请求的模块”。

作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:接收数据库应用系统对矩阵数据源的访问请求,所述矩阵数据源包括总体动态数据源、业务动态数据源、具体数据源,其中,一个总体数据源对应多个业务动态数据源,每个业务动态数据源对应多个具体数据源;在所述数据库应用系统访问所述总体动态数据源的情况下,通过矩阵数据源路由服务获取所述数据库应用系统当前上下文的租户信息和当前访问的业务方向信息,将所述访问请求切换到所述总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的具体数据源上;在所述数据库应用系统访问所述多个业务动态数据源中的一个目标业务动态数据源的情况下,通过业务动态数据源路由服务获取所述数据库应用系统当前上下文的租户信息,将所述访问请求切换到所述目标业务动态数据源下的与当前上下文的租户对应的具体数据源上。

根据本发明实施例的技术方案,接收数据库应用系统对矩阵数据源的访问请求,矩阵数据源包括总体动态数据源、业务动态数据源、具体数据源;在数据库应用系统访问总体动态数据源的情况下,通过矩阵数据源路由服务获取数据库应用系统当前上下文的租户信息和当前访问的业务方向信息,将访问请求切换到总体动态数据源下的与当前上下文的租户、当前访问的业务方向对应的具体数据源上;在数据库应用系统访问多个业务动态数据源中的一个目标业务动态数据源的情况下,通过业务动态数据源路由服务获取数据库应用系统当前上下文的租户信息,将访问请求切换到目标业务动态数据源下的与当前上下文的租户对应的具体数据源上。能够同时解决多租户和多业务数据源自动路由切换的问题。且通过本发明实施例可分解成配置信息查询与监听、矩阵数据源动态初始化和矩阵数据源动态路由(具体通过矩阵数据源路由服务和业务动态数据源路由服务实现)三个领域服务,每个领域服务均支持多种应用接入方式与数据库应用系统进行交互,并且本发明实施例的数据源路由装置可以实现为独立的矩阵数据源路由装置应用组件,从而实现与数据库应用系统的代码解耦,增强解决方案的可复用性。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号