发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种动态网关路由配置方法、平台、计算机设备及存储介质,能够解决网关路由更新必须要重启应用的问题,且保证了更新的实时性又增加了中间件服务故障、网络通信异常时的容错率。
本发明的目的可以通过以下技术方案来实现:
一种动态网关路由配置方法,该方法基于spring cloud gateway架构体系实现,具体包括如下步骤:
配置信息加载步骤:
当网关应用启动时,从数据库读取网关配置信息,并将其加载至内存中;具体步骤包括:
1)网关应用集群读取数据库中初始的路由配置信息;
2)网关应用集群将步骤1)中的路由配置信息的数据结构转换成spring cloudgateway网关路由配置对象数据结构;
3)调用spring cloud gateway提供的路由刷新方法生效路由配置。
进一步地,配置信息加载步骤中,采用LRU缓存算法将数据库读取的网关配置信息放在内存中进行计算。
广播同步更新步骤:
网关应用集群通过mq客户端创建FANOUT模式交换机,每个网关集群应用实例动态创建一个队列,并将其绑定到创建的FANOUT模式交换机上,利用rabbitmq的广播交换机模式实现集群同时监听网关路由刷新消息,等待更新路由。所述rabbitmq集群接收网关刷新信息后,路由管理应用端发送刷新网关消息至rabbitmq集群的FANOUT模式交换机上,rabbitmq集群广播消息到每个网关应用实例上,网关应用收到网关刷新消息时,根据接收的需要刷新的路由对内存中路由配置进行局部或全量更新。
定时主动更新步骤:当广播同步更新步骤中出现广播失败时,所述网关应用集群定时从数据库中更新最新的网关路由配置信息。
进一步地,作为优选条件,所述网关应用集群每一个小时从数据库中更新最新的网关路由配置信息。
配置信息读取步骤:完成广播同步更新步骤或定时主动更新步骤后,所述路由管理应用端根据实际应用需求,从数据库中读取最新的网关路由配置信息。
作为其他实施方式,所述网关应用集群从数据库读取的信息还包括初始限流配置信息、客户端资源信息和黑白名单信息。相应地,按照上述流程完成广播同步更新步骤或定时主动更新步骤后,所述路由管理应用端根据实际应用需求,从数据库中读取的信息还可包括最新的限流配置信息、客户端资源信息和黑白名单信息。
本发明另一方面还提供一种动态网关路由配置平台,该平台基于spring cloud架构体系实现,包括:
数据库,用于存储实时更新的路由配置信息;
网关应用集群,用于从数据库读取实时网关配置信息,并创建rabbitmq的广播交换机模式,利用rabbitmq的广播交换机模式实现rabbitmq集群同时监听多个网关路由刷新消息,同时在广播失败时,定时从数据库获取最新的网关路由配置信息;
内存,用于存储从数据库读取的网关配置信息;
路由管理应用端,用于根据实际应用,发送刷新网关消息至rabbitmq集群,并在利用rabbitmq的广播交换机模式实现rabbitmq集群同时监听多个网关路由刷新消息,或定时从数据库刷新最新的网关路由配置信息后,根据实际应用获取最新的网关路由配置信息;
rabbitmq集群,用于提供刷新网关消息的接受和发送,实现各路由配置任务之间的消息异步;
代理负载,用于配置多个用于实现rabbitmq集群广播的网关实例;
客户端,用于通过互联网进入代理负载服务器,通过代理负载访问网关实例中的getway网关服务,由网关服务进行转发,分发至内网中对应的应用服务,进而实现从网关动态的调用路由服务。
本发明还公开了一种计算机设备,包括存储器和处理器,所述存储器上存储有计算机程序,所述计算机程序被所述处理器执行时实现如上所述的动态网关路由配置方法的步骤。
本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以实现如上所述的动态网关路由配置方法的步骤。
本发明提供的动态网关路由配置方法、平台、计算机设备及存储介质,相较于现有技术至少包括如下有益效果:
1)相比于现有配置被动的更新情况,即每次路由配置文件的新增与更新需要删除、修改甚至重启网关服务,本发明基于spring cloud gateway架构体系,实现了一种动态的网关路由刷新,解决了网关路由更新必须要重启应用的问题。
2)本发明采取推送+拉取两种更新模式,推送模式是指网关集群监听rabbitmq更新网关消息后进行路由更新,拉取模式是指网关定时主动从数据库获取最新网关配置并更新路由信息,在出现mq广播失败时,可定时从数据库获取最新路由配置信息,两种模式的设计利用rabbitmq低延迟的特性保证了更新的实时性又增加了中间件服务故障,网络通信异常时的容错率,有利于扩大spring cloud gateway的使用场景。
3)采用LRU缓存算法,即路由配置操作都要放在内存中进行,可减少缓存浪费,提高缓存的利用率。
4)利用rabbitmq的广播交换机模式实现集群同时监听网关路由刷新消息等待更新路由,通过同时解耦,无需一个一个调用,可实现实时性较高的更新配置。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
实施例
如图1所示,本发明涉及一种动态网关路由配置方法,该方法采用spring cloudgateway架构体系实现动态配置,方法的具体内容如下:
配置加载步骤:
在网关应用启动时,从数据库读取网关配置信息,并将其加载到内存中。该步骤具体包括:
(a1)网关应用集群读取数据库路由配置信息;
(a2)利用spring cloud gateway架构将配置的定义对象实现动态化,需要满足待配置的数据结构符合spring cloud gateway的架构需求,因此将网关应用集群根据路由配置信息数据结构转换成spring cloud gateway网关路由配置对象数据结构;
(a3)调用spring cloud gateway提供的路由刷新方法生效路由配置。
本实施例按照上述步骤读取数据库路由配置信息,并对路由配置信息进行数据结构转换,并调用spring cloud gateway提供的路由刷新方法生效路由配置。在其他实施例中,可同时读取数据库中的限流配置信息、客户端资源信息、黑白名单信息等,并对各配置对象进行同步spring cloud gateway网关配置对象的数据结构转换,转换后调用springcloud gateway提供的对应刷新方法进行配置信息生效。
本发明的数据库用于存储实时更新的路由配置信息或限流配置信息、客户端资源信息、黑白名单信息等。
作为优选方案,采用LRU缓存算法将数据库读取的网关配置信息放在内存中进行,可用于客户端的资源缓存、权限缓存。LRU(Least Recently Used)为常见的页面置换算法,该算法的设计原理在于:当数据在最近一段时间经常被访问,那么它在以后也会经常被访问。这就意味着,如果经常访问的数据,需要然其能够快速命中,而不常访问的数据,在容量超出限制内,要将其淘汰。在计算中,本发明利用该算法将网关配置信息放在内存中进行。每次访问的网关配置信息放在栈顶,当访问的数据不在内存中,且栈内数据存储满了,选择移除栈底的元素,因为在栈底部的数据访问的频率是比较低的,所以要将其淘汰。
广播同步更新步骤:
因网关涉及多台机器,需要同时广播到每一个机器上,若一个个调用则实时性较差,本发明将网关应用集群创建名为refresh_routes的FANOUT模式交换机,每个网关集群应用实例动态创建一个queue(队列)并绑定到创建的refresh_routes交换机上,利用rabbitmq的广播交换机模式实现集群同时监听网关路由刷新消息等待更新路由。通过同时解耦,无需一个一个调用,可实现实时性较高的更新配置。
路由管理应用端发送刷新网关消息至rabbitmq集群的refresh_routes交换机上,rabbitmq集群广播消息到每个网关应用实例上,因路由配置有成百上千条,具有需要单独更改或全局刷新的情况,因此网关应用收到网关刷新消息时,根据接收到需要刷新的路由情况对内存中路由配置进行局部或者全量更新。
定时主动更新步骤:
当出现rabbitmq的广播交换机模式广播失败时,网关应用集群定时从数据库中获取最新的网关路由配置信息。定时的频率可根据实际需要设定,作为优选方案,可设置一小时一次更新。
配置信息读取步骤:
按照上述步骤完成更新后,路由管理应用端可根据实际应用需求,从数据库中读取最新的网关路由配置信息。
在其他实施例中,可按照上述步骤完成客户端资源信息、黑白名单及限流信息的动态配置,进而路由管理应用端可根据实际应用需求,从数据库中获取最新的客户端资源信息、黑白名单及限流信息等。
上述过程中,采取了推送+拉取两种更新模式,推送模式是指通过网关集群监听rabbitmq更新网关消息后进行路由更新,拉取模式则是指网关定时主动从数据库获取最新网关配置并更新路由信息,两种模式的设计利用rabbitmq低延迟的特性保证了更新的实时性又增加了中间件服务故障,网络通信异常时的容错率。
相比于现有配置被动的更新情况,即每次路由配置文件的新增与更新需要删除、修改甚至重启网关服务,上述发明基于spring cloud gateway架构体系,实现了一种动态的网关路由刷新,解决了网关路由更新必须要重启应用的问题。
本发明还公开一种动态网关路由配置平台,该平台基于spring cloud架构体系实现,包括代理负载、路由管理应用端、rabbitmq集群、数据库、网关应用集群、内存、客户端。
数据库用于存储实时更新的路由配置信息;
网关应用集群,用于从数据库读取实时网关配置信息,并创建rabbitmq的广播交换机模式,利用rabbitmq的广播交换机模式实现rabbitmq集群同时监听多个网关路由刷新消息,此外可在广播失败时,定时从数据库获取最新的网关路由配置信息;
内存用于存储从数据库读取的网关配置信息;
路由管理应用端用于根据实际应用,发送刷新网关消息至rabbitmq集群,并在利用rabbitmq的广播交换机模式实现rabbitmq集群同时监听多个网关路由刷新消息,或定时从数据库刷新最新的网关路由配置信息后,根据实际应用获取最新的网关路由配置信息;
rabbitmq集群用于提供刷新网关消息的接受和发送,实现各路由配置任务之间的消息异步;利用rabbitmq集群的设计可增加更多节点,能线性的增加性能(CPU、内存)和容量(内存);
代理负载,该代理负载配置有多个用于实现rabbitmq集群广播的网关实例;
客户端,用于通过互联网进入代理负载服务器,通过代理负载访问网关实例中的getway网关服务,再由网关服务做转发分发到内网中对应的应用服务,进而实现从网关动态的调用路由服务。
在其他实施例中,数据库存储的信息还包括限流配置信息、客户端资源信息、黑白名单信息等,不同的对象可根据上述路由配置的更新步骤完成同步更新。
此外,本发明还提出一种计算机设备。计算机设备是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备,包括存储器和处理器,存储器上存储有计算机程序,计算机程序被处理器执行时实现如上所述的动态网关路由配置方法的步骤。例如,计算机设备可以是智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。存储器至少包括一种类型的计算机可读存储介质。在一些实施例中,存储器可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,存储器也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(FlashCard)等。当然,存储器还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,存储器通常用于存储安装于计算机设备的操作系统和各类应用软件,例如用于实现所述动态网关路由配置方法的计算机程序等。此外,存储器还可以用于暂时地存储已经输出或者将要输出的各类数据。处理器在一些实施例中可以是中央处理器(CentralProcessing Unit,CPU)、控制器、微控制器、微处理器、或其他账户体系离线处理芯片。该处理器通常用于控制计算机设备的总体操作,例如执行与所述计算机设备进行数据交互或者通信相关的控制和处理等。本实施例中,处理器用于运行所述存储器中存储的程序代码或者处理数据,例如运行用于实现所述动态网关路由配置方法的计算机程序等。
再次,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质为非易失性可读存储介质,其内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以实现上述动态网关路由配置方法或平台的操作。
其中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如前述用于实现所述动态网关路由配置方法的计算机程序等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的工作人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。