一种多大厅租户动态扩展系统及实现方法与流程

文档序号:32893264发布日期:2023-01-12 23:43阅读:27来源:国知局
一种多大厅租户动态扩展系统及实现方法与流程

1.本发明涉及政务服务技术领域,特别涉及一种多大厅租户动态扩展系统及实现方法。


背景技术:

2.在政务服务领域,各类应用系统的基本粒度大致基于政务大厅进行划分。在这些系统的数据存储结构中,各个数据表一般会存在大厅id这个字段来进行数据区分,并且所有的数据都存在于一个数据库中。当应用系统服务的应用规模有限,管理的大厅数量层级不高时,各种类型的数据库都可以承载其不停增长的大厅数据。当某些表的数据量超过数据库的单表承载能力时,才会对其进行水平分表的优化,这在一定程度上可以缓解数据量巨大对系统承载能力的压力。
3.但是随着近几年政务服务治理范围不断延伸,特别是向街道和社区延伸时,所需要管理的大厅数量呈级数增长,大厅的层级涵盖了省、市、区/县、街道/镇、社区/村五级,尤其是最后一级包括的大厅数量超过万级。例如,某省目前的规模下五级大厅数量超过6万多。这种现状下,各类应用系统的数据规模会非常庞大,各个数据表的数据量很轻易的就超过数据库单表性能上限,迫切的需要对数据进行切分,此时一般情况下开发者会对数据库进行分库分表或者切分应用为多个区域单独部署。
4.传统的分库方式有shardingjdbc、mycat、dynamicdatasource等,但是其只规定了分库模式使用方法。简易配置后spring程序可以连接管理多个数据源,但是基于配置文件的方式非常笨重,且只有数据源的管理方式,数据的分片格式比较简易,不太适用于政务领域大厅相互隔离的情况。
5.基于上述情况,本发明提出了一种多大厅租户动态扩展系统及实现方法。


技术实现要素:

6.本发明为了弥补现有技术的缺陷,提供了一种简单高效的多大厅租户动态扩展系统及实现方法。
7.本发明是通过如下技术方案实现的:
8.一种多大厅租户动态扩展系统,其特征在于:系统平台采用分布式架构,存储数据的数据层不限制数据源类型,同时系统维持一个公共数据源,采用dynamicdatasource分库方式为基础分库原理,实现数据库加载所有数据源,以便于扩容数据源;
9.所有的微服务极其负载均在配置文件中读取公共数据源中的数据源信息和大厅路由信息,大厅和数据源之间保持多对一的映射,使请求能够最终到达对应的节点数据源;
10.采用消息订阅机制,实现各个微服务及其各负载之间数据源增删改信息时的实时同步;
11.采用aop(aspect oriented programming,面向切面编程)切面和代码块,实现请求进入时数据源的切换,采用aop技术实现多数据源时本地事务的管理和回滚。
12.该多大厅租户动态扩展系统,在整体结构上,采用1个公共库管理n个节点库,公共库中的数据源表持久化n个节点库的连接信息,支持节点库实现动态扩展,根据部署规模计算数据表的承载能力决定使用数据源的个数;
13.路由表持久化大厅和数据源的映射关系,支持大厅租户实现动态扩展,新入驻的大厅自行按照规则或者采用完全随机模式被分配到数据源中;
14.系统平台采用分布式架构,支持实现任意规模大小的部署模式。
15.该多大厅租户动态扩展系统,数据源管理上,抽象datasourceprovider类作为数据源信息和路由信息的提供方,系统启动阶段初始化datasourceholder类时读取全部已入驻数据,放入map集合中进行管理,后续数据源新增、移除以及修改均使用datasourceholder类对map集合进行操作,后台管理平台提供数据源的基础维护功能。
16.使用hikari作为数据源的连接池,信息维护包括连接池和驱动程序类。
17.路由策略上,采用大厅id和数据源id关联关系作为路由信息,初始化入驻大厅租户时将路由信息提交至平台管理员进行审核,并分配数据所属节点库;数据结构上,采用大厅id作为路由主键,因而支持乱序分配大厅。
18.路由切换时,使用spring框架的aop技术对使用@dsr注解的方法体和类编织入切面处理方法;在编织入切面处理方法执行之前,解析读取路由请求携带的大厅id信息,提供abstractroutingparamresolve接口作为参数解析器。
19.获取到大厅id信息后,执行以下步骤:
20.步骤s1、根据大厅id信息先从分布式缓存redis中读取是否存在该大厅的路由信息,若不存在,则读取数据库中的路由信息表,若数据库中存在该大厅的路由信息,则缓存入redis,并得到对应的数据源节点库编码;
21.步骤s2、根据得到的数据源节点库编码查询当前jvm虚拟机中是否已存在对应的数据源,如果不存在,则继续从分布式缓存redis中读取数据源配置信息,如果分布式缓存redis中也不存在对应的数据源配置信息,则读取数据库中的数据并缓存入redis;
22.如果存在数据源配置,但本地没有管理,则先初始化数据源,切换至对应数据源并执行方法体,方法体执行结束后或者出现异常时,切回至原数据源;切换和切出对应的方法分别为push和poll方法,底层逻辑是dqueue双端队列的出栈和入栈操作。
23.如果程序的执行过程中没有请求,或者定时任务执行时需要切换数据源,则使用java中resource接口实现,使用try包裹执行体,执行开始阶段new dsresource(string routerid)切换至目标数据源,在try-resource的自动完成阶段完成数据源的切出功能。
24.一种多大厅租户动态扩展系统的实现方法,其特征在于:包括以下步骤:
25.步骤s1、根据项目实际部署规模选择建设n个数据库,分布在不同的服务器上以减轻单一服务器上数据库的负载压力;
26.步骤s2、在运维阶段,梳理大厅信息进行入驻,入驻大厅信息存储在公共库中等待分配其所属的数据源;
27.步骤s3、分配未处理大厅的数据源支持数据正常流转进入,当需要变更存储的数据源时,重新配置所属数据源,对应的各个表中的数据将自动迁移至新数据源中,此事对应的大厅处于停止运行阶段;
28.步骤s4、应用平台建设完成后,用户触发的请求根据各个应用平台实际使用情况
以及携带的大厅id,查询路由信息,根据路由信息切换至对应数据源处理数据。
29.该多大厅租户动态扩展系统的实现方法,使用开源的dynamicdatasource作为动态数据源的管理底层框架,其原理上依赖于spring框架的abstractroutingdatasource类;作为实现动态数据源的核心类,dynamicroutingdatasource类中使用map集合模式维持所有数据源的连接信息,切换数据源就是在获取连接之前从map集合中选择对应的数据源使用;
30.为了保证线程安全,使用线程安全互相隔离的threadlocal维持一个dqueue双端队列,来保证当前数据源在切换过程中的数据源切换的先后顺序。
31.本发明的有益效果是:该多大厅租户动态扩展系统及实现方法,实现了多租户的快速扩展,能够适配更大的部署规模,为运维工作提供了便利,提高了系统的整体承载能力,不仅适用于政务领域的大厅租户,还适用于其他需要多租户的应用模式。
附图说明
32.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
33.附图1为本发明多大厅租户动态扩展方法示意图。
34.附图2为本发明多大厅租户动态扩展系统分库部署模式示意图。
35.附图3为本发明路由策略示意图。
具体实施方式
36.为了使本技术领域的人员更好的理解本发明中的技术方案,下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚,完整的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
37.该多大厅租户动态扩展系统,系统平台采用分布式架构,存储数据的数据层不限制数据源类型,同时系统维持一个公共数据源,采用dynamicdatasource分库方式为基础分库原理,实现数据库加载所有数据源,以便于扩容数据源;
38.所有的微服务极其负载均在配置文件中读取公共数据源中的数据源信息和大厅路由信息,大厅和数据源之间保持多对一的映射,使请求能够最终到达对应的节点数据源;
39.采用消息订阅机制,实现各个微服务及其各负载之间数据源增删改信息时的实时同步;
40.采用aop(aspect oriented programming,面向切面编程)切面和代码块,实现请求进入时数据源的切换,采用aop技术实现多数据源时本地事务的管理和回滚。
41.该多大厅租户动态扩展系统,在整体结构上,采用1个公共库管理n个节点库,公共库中的数据源表持久化n个节点库的连接信息,支持节点库实现动态扩展,根据部署规模计算数据表的承载能力决定使用数据源的个数;
42.路由表持久化大厅和数据源的映射关系,支持大厅租户实现动态扩展,新入驻的
大厅自行按照规则或者采用完全随机模式被分配到数据源中;
43.系统平台采用分布式架构,支持实现任意规模大小的部署模式。
44.该多大厅租户动态扩展系统,数据源管理上,抽象datasourceprovider类作为数据源信息和路由信息的提供方,系统启动阶段初始化datasourceholder类时读取全部已入驻数据,放入map集合中进行管理,后续数据源新增、移除以及修改均使用datasourceholder类对map集合进行操作,后台管理平台提供数据源的基础维护功能。
45.使用hikari作为数据源的连接池,信息维护包括连接池和驱动程序类。
46.路由策略上,采用大厅id和数据源id关联关系作为路由信息,初始化入驻大厅租户时将路由信息提交至平台管理员进行审核,并分配数据所属节点库;数据结构上,采用大厅id作为路由主键,因而支持乱序分配大厅。
47.路由切换时,使用spring框架的aop技术对使用@dsr注解的方法体和类编织入切面处理方法;在编织入切面处理方法执行之前,解析读取路由请求携带的大厅id信息,提供abstractroutingparamresolve接口作为参数解析器。
48.获取到大厅id信息后,执行以下步骤:
49.步骤s1、根据大厅id信息先从分布式缓存redis中读取是否存在该大厅的路由信息,若不存在,则读取数据库中的路由信息表,若数据库中存在该大厅的路由信息,则缓存入redis,并得到对应的数据源节点库编码;
50.步骤s2、根据得到的数据源节点库编码查询当前jvm虚拟机中是否已存在对应的数据源,如果不存在,则继续从分布式缓存redis中读取数据源配置信息,如果分布式缓存redis中也不存在对应的数据源配置信息,则读取数据库中的数据并缓存入redis;
51.如果存在数据源配置,但本地没有管理,则先初始化数据源,切换至对应数据源并执行方法体,方法体执行结束后或者出现异常时,切回至原数据源;切换和切出对应的方法分别为push和poll方法,底层逻辑是dqueue双端队列的出栈和入栈操作。
52.如果程序的执行过程中没有请求,或者定时任务执行时需要切换数据源,则使用java中resource接口实现,使用try包裹执行体,执行开始阶段new dsresource(string routerid)切换至目标数据源,在try-resource的自动完成阶段完成数据源的切出功能。
53.该多大厅租户动态扩展系统的实现方法,包括以下步骤:
54.步骤s1、根据项目实际部署规模选择建设n个数据库,分布在不同的服务器上以减轻单一服务器上数据库的负载压力;
55.步骤s2、在运维阶段,梳理大厅信息进行入驻,入驻大厅信息存储在公共库中等待分配其所属的数据源;
56.步骤s3、分配未处理大厅的数据源支持数据正常流转进入,当需要变更存储的数据源时,重新配置所属数据源,对应的各个表中的数据将自动迁移至新数据源中,此事对应的大厅处于停止运行阶段;
57.步骤s4、应用平台建设完成后,用户触发的请求根据各个应用平台实际使用情况以及携带的大厅id,查询路由信息,根据路由信息切换至对应数据源处理数据。
58.该多大厅租户动态扩展系统的实现方法,使用开源的dynamicdatasource作为动态数据源的管理底层框架,其原理上依赖于spring框架的abstractroutingdatasource类,它是实现动态数据源的核心类,dynamicdatasource框架在此基础上复写实现的abstract
dynamicroutingdatasource类,扩展了getconnection方法的功能,增加了对于connection的代理包装,即connectionproxy为connection的实现类,扩展实现了本地事务的提交和回滚的通知机制。然后在原理上基于jdbc连结数据库执行sql语句之前需要每次都获取数据库连接,所以dynamicroutingdatasource中使用map集合模式维持所有数据源的连接信息,切换数据源就是在获取连接之前从map集合中选择对应的数据源使用;
59.为了保证线程安全,使用线程安全互相隔离的threadlocal维持一个dqueue双端队列,来保证当前数据源在切换过程中的数据源切换的先后顺序。
60.以上所述的实施例,只是本发明具体实施方式的一种,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1