一种基于内存数据库实现微服务路由动态变更的方法、存储介质与流程

文档序号:24406051发布日期:2021-03-26 17:10阅读:82来源:国知局
一种基于内存数据库实现微服务路由动态变更的方法、存储介质与流程

1.本发明涉及一种基于内存数据库实现微服务路由动态变更的方法、存储介质,属于微服务/分布式系统中微服务路由技术领域。


背景技术:

2.分布式系统是指将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器,分布式和微服的架构很相似,只是部署的方式不一样而已。分布式系统侧重于分散整个系统的压力,微服务系统则侧重于分散整个系统的能力。
3.微服务架构从本质上就是分布式架构,应用程序被构建为多个不同的小型服务的集合而不是单个应用程序。与单个程序不同的是,微服务让你可以同时运行多个独立的应用程序,而这些独立的应用程序可以使用不同的编码或编程语言来创建。庞大而又复杂的应用程序可以由多个可自行执行的简单而又独立的服务组成。这些较小的服务组合在一起,每个服务运行于独立的进程,并且采用轻量级交互,可以提供庞大的单程序所具备的所有功能。在微服务架构中,由于系统和服务的细分,导致系统结构变得非常复杂,rest api由于其简单、高效、跨平台、易开发、易测试、易集成,成为了不二选择。微服务路由是指根据客户端请求url,按照相应的匹配规则将请求分配到相应的微服务处理程序。微服务系统需要一套完善的微服务路由机制来保证一个请求的到来能正确的找到对应的服务实例。
4.此时一个类似综合前置的系统就产生了,这就是api网关(api gateway,api即application programming interface)。api网关作为分散在各个业务系统微服务的api聚合点和统一接入点,外部请求通过访问这个接入点,即可访问内部所有的rest api服务。api网关是一个处于应用程序或服务(提供rest api接口服务)之前的系统,用来保护、增强和控制对于api服务的访问,对所有的调用者透明。api网关主要具有四大功能:一是作为所有api接口服务请求的接入点,管理所有的接入请求;二是作为所有后端业务服务的聚合点,所有的业务服务都可以在这里被调用;三是实现安全、验证、路由、过滤、流控,缓存等策略,进行一些必要的中介处理;四是对所有api服务和策略进行统一管理。
5.内存数据库,即将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级。内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,相比从磁盘上访问能够极大地提高应用的性能。常用的内存数据库有memcached,redis等。
6.目前传统的微服务路由的系统或产品没有提供对路由数据的动态管理方案,也没有提供路由数据的持久化方案,它所有的数据都来自初始化(配置文件或代码配置),甚至修改一条路由数据都需要修改配置文件或代码,重启微服务路由系统,比如重启api网关。
这就需要一套更完善的方案,把微服务路由统一管理起来,不能让它只写在配置文件或代码中,而要支持微服务路由的动态变更与生效,无需重启api网关等微服务路由系统,保证系统的持续运行,简化开发工作。


技术实现要素:

7.针对现有技术的不足,本发明提供一种基于内存数据库实现微服务路由动态变更的方法。
8.本发明还提供了一种实现上述方法的计算机可读存储介质。
9.本发明将分布式/微服务系统中的微服务路由系统作为本地路由端,根据本地路由端所使用的api网关开源组件,创建相应的路由数据模型,使用内存数据库来提供缓存路由信息的功能,内存数据库中维护路由数据和对应的路由版本号,作为远程路由端,同时创建一个路由信息管理服务,对外提供更新路由数据的接口和路由信息发布功能,并将路由信息持久化到本地数据库或文件系统中,路由信息发布后会把路由信息和版本号更新到远程路由端,本地路由端定时拉取远程路由信息,与本地路由版本号对比,不一致则通过事件发布与监听机制更新本地路由端内的数据并使路由配置生效,从而实现微服务路由的动态变更。
10.术语解释:
11.路由数据模型:即api网关开源组件中用来描述或组织路由信息的结构,通常情况下由路由id、路由谓词集合、路由过滤器集合、路由优先级以及路由转发的目标uri这几部分内容组成。
12.本发明的技术方案如下:
13.一种基于内存数据库实现微服务路由动态变更的方法,该方法的实现架构包括本地路由端、远程路由端、路由信息管理服务单元、本地数据库或文件系统,本地路由端、远程路由端、路由信息管理服务单元依次循环连接,所述路由信息管理服务单元连接所述本地数据库或文件系统;
14.所述远程路由端用于缓存路由信息;所述路由信息管理服务单元用于对外提供更新路由信息的接口、发布路由信息,并将发布后的路由信息持久化到本地数据库或文件系统中;
15.是指:将发布的路由信息实时更新到所述远程路由端,路由信息包括路由数据及其对应的版本号,版本号大小代表路由数据的新旧程度,版本号越大,数据越新。所述本地路由端定时从所述远程路由端拉取路由信息,与本地路由端中的路由信息中的版本号对比,如果不一致,则通过事件发布与监听机制更新本地路由端的路由信息并使路由配置生效,实现微服务路由的动态变更,否则,继续定时从所述所述远程路由端拉取路由信息。
16.根据本发明优选的,所述本地路由端为api网关,即分布式/微服务系统中的微服务路由系统;
17.进一步优选的,所述本地路由端为以spring cloud gateway 2.2.3.release为基础的api网关。
18.根据本发明优选的,所述远程路由端为内存数据库。使用内存数据库来缓存路由信息,内存数据库中维护已发布的路由数据及其对应的版本号;远程路由端的路由信息是
最新的,本地路由端需要以远程路由端的路由信息为准;
19.根据本发明优选的,所述路由信息管理服务单元对外提供对本地路由端的路由信息的查找、增加、修改和删除接口。
20.根据本发明优选的,根据api网关创建相应的路由数据模型,对本地路由端的路由数据的增加、修改操作通过创建的路由数据模型进行封装。目的是与微服务路由系统中所使用的api网关开源组件中的路由数据模型一致,方便接下来在微服务路由系统中进行路由数据的动态变更。
21.进一步优选的,根据spring cloud gateway 2.2.3.release版本中的路由数据模型,在路由信息管理服务中创建相应的路由数据模型。具体实现步骤如下:(1)查看spring cloud gateway 2.2.3.release版本中路由数据模型的定义,分别有路由模型、过滤器模型和谓词模型;(2)对照此数据模型的定义在路由信息管理服务中创建相同的路由数据模型。
22.根据本发明优选的,当通过所述路由信息管理服务单元更新路由信息时,本地数据库或文件系统中的路由数据就已发生了变化,路由数据对应的版本号也相应的进行了加一操作,但并未在本地路由端中生效,通过所述路由信息管理服务单元将更新后的路由信息发布到所述远程路由端。
23.根据本发明优选的,所述本地路由端定时从所述远程路由端拉取路由信息,与本地路由端中的路由信息中的版本号对比,如果不一致,则通过事件发布与监听机制更新本地路由端内的路由信息并使路由配置生效,实现微服务路由的动态变更,否则,继续定时从所述所述远程路由端拉取路由信息,包括步骤如下:
24.(1)在所述本地路由端新建一个定时任务,定时拉取所述远程路由端中最新的路由信息;
25.(2)将拉取到的最新的路由信息中路由数据对应的版本号对比本地路由端中的路由数据对应的版本号,如果不一致,则更新路由信息;来保证本地路由端中的路由信息是最新的。即:将最新的路由信息按照创建的路由数据模型的结构保存到所述本地路由端(即微服务路由系统)中,动态更新所述本地路由端中的路由数据,让最新的路由配置在所述本地路由端生效;
26.(3)所述本地路由端的路由配置生效后,将所述远程路由端的路由数据的版本号赋给本地路由端中的路由数据的版本号。表示本地路由端中的路由数据已经与远程路由端数据保持一致,是最新的路由数据。
27.进一步优选的,步骤(1)中,每3分钟定时拉取所述远程路由端中最新的路由信息。
28.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现基于内存数据库实现微服务路由动态变更的方法的步骤。
29.本发明的有益效果在于:
30.1、本发明所述基于内存数据库实现微服务路由动态变更的方法,改变了传统微服务路由系统中路由信息的更新需要修改配置文件或代码并重启路由系统的局面,支持微服务路由系统中路由信息的动态变更与生效,无需编写配置文件与代码,无需重启路由系统,保障了系统的持续运行,简化了开发工作。
31.2、本发明所述基于内存数据库实现微服务路由动态变更的方法,提供了对微服务路由信息的持久化方案,可以将路由信息保存到本地数据库或文件系统中,这样微服务路
由系统中更新的路由信息就算系统重启也不会消失了。即便远程路由端出现故障导致数据消失,也可以从本地数据库或文件系统中读取最新的路由信息,保证了微服务路由系统的稳定性和可靠性。
32.3、本发明所述基于内存数据库实现微服务路由动态变更的方法,采用统一管理路由数据的方式,对外提供了查看所有路由配置信息的接口,方便开发人员对微服务路由系统的维护工作。
附图说明
33.图1本发明基于内存数据库实现微服务路由动态变更的方法的整体架构示意图;
34.图2本发明中路由信息管理服务更新路由信息的流程示意图;
35.图3本发明基于内存数据库实现微服务路由动态变更的流程示意图。
具体实施方式
36.下面通过实施例并结合附图对本发明做进一步说明,但不限于此。
37.实施例1
38.一种基于内存数据库实现微服务路由动态变更的方法,该方法的实现架构包括本地路由端、远程路由端、路由信息管理服务单元、本地数据库或文件系统,本地路由端、远程路由端、路由信息管理服务单元依次循环连接,路由信息管理服务单元连接本地数据库或文件系统;远程路由端用于缓存路由信息;路由信息管理服务单元用于对外提供更新路由信息的接口、发布路由信息,并将发布后的路由信息持久化到本地数据库或文件系统中;如图1所示。
39.是指:将发布的路由信息实时更新到所述远程路由端,路由信息包括路由数据及其对应的版本号,版本号大小代表路由数据的新旧程度,版本号越大,数据越新。所述本地路由端定时从所述远程路由端拉取路由信息,与本地路由端中的路由信息中的版本号对比,如果不一致,则通过事件发布与监听机制更新本地路由端内的路由信息并使路由配置生效,实现微服务路由的动态变更,否则,继续定时从所述所述远程路由端拉取路由信息。
40.实施例2
41.根据实施例1所述的一种基于内存数据库实现微服务路由动态变更的方法,其区别在于:
42.以spring cloud gateway 2.2.3.release(一种api网关开源组件)为基础的api网关作为本地路由端,需要结合远程路由端memcached(一种内存数据库),以及路由信息管理服务来实现路由数据动态变更的功能,具体流程示意图如图2、图3所示,包括步骤如下:
43.(1)在微服务路由系统中新建一个微服务,并引入spring cloud gateway 2.2.3.release,以此为基础创建api网关服务,作为本地路由端,同时根据spring cloud gateway 2.2.3.release版本中的路由数据模型,在路由信息管理服务中创建相应的路由数据模型。
44.(2)在微服务系统中创建路由信息管理服务。路由信息包含两部分内容,一是本地api网关中的路由数据,二是路由数据对应的版本号,版本号标识路由数据的新旧程度,版本号越大,数据越新。路由信息管理服务对外提供对本地api网关路由数据的查找、增加、修
改和删除的接口,当路由数据发生一次变化时,路由数据对应的版本号就相应地进行加一操作,版本号越大代表路由数据越新,以此来维护本地api网关路由信息,并把路由信息持久化到本地数据库或文件系统中,防止路由数据的丢失。
45.(3)在服务器中安装memcached 1.5.16,利用memcached来提供缓存路由信息的功能。memcached中维护已发布的路由数据和路由数据对应的版本号,作为远程路由端,远程路由端的路由信息是最新的,本地路由端需要以远程路由端的路由信息为准。
46.(4)路由信息管理服务同时提供发布功能,对本地api网关路由数据进行更新后,路由信息的更新仅保存在了本地数据库或文件系统中,并未在本地api网关中生效。路由信息发布后会将最新的路由信息更新到memcached中,即远程路由端,远程路由端维护着最新的网关路由信息。
47.(5)在本地路由端创建一个定时任务,该任务将定时拉取远程路由端中最新的路由信息,比如间隔3分钟拉取一次,然后对比路由数据版本号,如果不一致则更新本地路由端的路由信息,来保证本地api网关中路由信息是最新的。
48.(6)本地路由端通过定时拉取拿到远程路由端的最新路由信息时,将通过spring cloud gateway 2.2.3.release中的inmemoryroutedefinitionrepository类提供的方法将最新的路由数据以步骤(6)中创建的路由数据模型的结构保存到api网关内存中。然后发起一个refreshroutesevent事件,将网关内存中的路由数据动态刷新到路由缓存中,即让加载的最新的路由配置在本地api网关中生效。
49.(7)本地api网关的路由配置生效后,将远程路由端的路由数据版本号赋给本地api网关中的路由数据版本号,表示本地api网关中的路由数据已经与远程路由端数据保持一致,是最新的路由数据。
50.微服务路由动态变更效果数据如下:
51.2020

12

02 10:00:00.003warn 2252
‑‑‑
[scheduling

1]
[0052]
c.l.i.schedul.dynamicroutescheduling:远程路由拉取时间:2020

12

02 10:00:00
[0053]
2020

12

02 10:00:00.389warn 2252
‑‑‑
[scheduling

1]
[0054]
c.l.i.schedul.dynamicroutescheduling:路由版本比对:本地路由端版本号0,远程路由端版本号52
[0055]
2020

12

02 10:00:00.389warn 2252
‑‑‑
[scheduling

1]
[0056]
c.l.i.schedul.dynamicroutescheduling:远程路由端版本号>本地路由端版本号:开始拉取远程路由信息......
[0057]
2020

12

02 10:00:00.422warn 2252
‑‑‑
[scheduling

1]
[0058]
c.l.i.schedul.dynamicroutescheduling:远程路由信息:
[0059]
[{"filters":[{"args":{"_genkey_0":"1"},"name":"stripprefix"}],"id":"gateway

consumer","order":0,"predi cates":[{"args":{"pattern":"/jk/**"},"name":"path"}],"uri":"lb://gateway

consumer"},{"filters":[{"args":{"name":"x

response

red","value":"blue"},"name":"addresponseheader"},{"args":{"_genkey_0":"1"},"name":"stripprefix"}],"id":"gateway

consumer4","order":0,"predicates":[{"args":{"pattern":"/bbb/**"},"name":"path"}],"uri":"lb://
gateway

consumer"}]
[0060]
2020

12

02 10:00:00.424warn 2252
‑‑‑
[scheduling

1]
[0061]
c.l.i.schedul.dynamicroutescheduling:开始更新本地路由端路由信息......
[0062]
2020

12

02 10:00:00.435warn 2252
‑‑‑
[scheduling

1]
[0063]
c.l.i.schedul.dynamicroutescheduling:gatewayroutedefinitionlist:
[0064]
[gatewayroutedefinition(id=gateway

consumer,predicates=[gatewaypredicatedefinition(name=path,args={pattern=/jk/**})],filters=[gatewayfilterdefinition(name=stripprefix,args={_genkey_0=1})],uri=lb://gateway

consumer,order=0),gatewayroutedefinition(id=gateway

consumer4,predicates=[gatewaypredicatedefinition(name=path,args={pattern=/bbb/**})],filters=[gatewayfilterdefinition(name=addresponseheader,args={name=x

response

red,value=blue}),gatewayfilterdefinition(name=stripprefix,args={_genkey_0=1})],uri=lb://gateway

consumer,order=0)]
[0065]
2020

12

02 10:00:00.436warn 2252
‑‑‑
[scheduling

1]
[0066]
c.l.i.schedul.dynamicroutescheduling:route1装配为routedefinition:
[0067]
gatewayroutedefinition(id=gateway

consumer,predicates=[gatewaypredicatedefinition(name=path,args={pattern=/jk/**})],filters=[gatewayfilterdefinition(name=stripprefix,args={_genkey_0=1})],uri=lb://gateway

consumer,order=0)
[0068]
2020

12

02 10:00:00.446info 2252
‑‑‑
[scheduling

1]
[0069]
c.l.i.service.dynamicrouteservice:发布事件refreshroutesevent,动态刷新网关路由表...2020

12

02 10:00:00.446warn 2252
‑‑‑
[scheduling

1]
[0070]
c.l.i.schedul.dynamicroutescheduling:route2装配为routedefinition:
[0071]
gatewayroutedefinition(id=gateway

consumer4,predicates=[gatewaypredicatedefinition(name=path,args={pattern=/bbb/**})],filters=[gatewayfilterdefinition(name=addresponseheader,args={name=x

response

red,value=blue}),gatewayfilterdefinition(name=stripprefix,args={_genkey_0=1})],uri=lb://gateway

consumer,order=0)
[0072]
2020

12

02 10:00:00.464info 2252
‑‑‑
[scheduling

1]
[0073]
c.l.i.service.dynamicrouteservice:发布事件refreshroutesevent,动态刷新网关路由表...
[0074]
2020

12

02 10:03:00.003warn 2252
‑‑‑
[scheduling

1]
[0075]
c.l.i.schedul.dynamicroutescheduling:远程路由拉取时间:2020

12

02 10:03:00
[0076]
2020

12

02 10:03:00.047warn 2252
‑‑‑
[scheduling

1]
[0077]
c.l.i.schedul.dynamicroutescheduling:路由版本比对:本地路由端版本号52,远程路由端版本号52
[0078]
2020

12

02 10:06:00.002warn 2252
‑‑‑
[scheduling

1]
[0079]
c.l.i.schedul.dynamicroutescheduling:远程路由拉取时间:2020

12

02 10:
06:00
[0080]
2020

12

02 10:06:00.038warn 2252
‑‑‑
[scheduling

1]
[0081]
c.l.i.schedul.dynamicroutescheduling:路由版本比对:本地路由端版本号52,远程路由端版本号52
[0082]
以上数据反映了基于内存数据库实现微服务路由动态变更的实现过程,本发明改变了传统微服务路由系统中路由信息的更新需要修改配置文件或代码并重启路由系统的局面,支持微服务路由系统中路由信息的动态变更与生效,无需编写配置文件与代码,无需重启路由系统,保障了系统的持续运行,简化了开发工作。
[0083]
实施例3
[0084]
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现实施例1或2基于内存数据库实现微服务路由动态变更的方法的步骤。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1