掌桥专利:专业的专利平台
掌桥专利
首页

一种轻量级解决java分布式应用配置动态刷新的方法及系统

文献发布时间:2023-06-19 18:29:06


一种轻量级解决java分布式应用配置动态刷新的方法及系统

技术领域

本发明属于java微服务的技术领域,具体涉及一种轻量级解决java分布式应用配置动态刷新的方法及系统。

背景技术

在互联网服务体系架构中,很多服务都需要动态的缓存配置支撑,例如,数据字典和更新调用其他系统地址、系统配置缓存等,快速读取数据对提升整个服务的性能起到至关重要的作用。

目前市面上有许多优秀的配置中心组件、如果Spring Cloud Config、Apollo、Spring Cloud Alibaba-Nacos Config等,在目前的微服务体系中应用广发,但是如果需要使用该服务组件就必须使用基于它生态的一系列框架的其他组件,大量的JAR包这相对于小型项目或者是传统的老项目来说相对不友好,另外一种就是在各大应用系统中,各系统所依赖的配置可能存储于不同类型的数据库上,如果需要获取这些数据需要通过网络来访问。频繁的IO操作命中数据库,对于系统出现数据库出现并发的场景并不友好。

目前主流解决方法,基于SpringCloud生态圈使用,组件使用关联性较强,不适合传统SSM架构项目的使用。同时传统解决方法会产生大量的spring-cloud组件依赖,维护难度大。对比发现,对于一些小型的轻量化应用或者老旧应用如果要进行以上所述几种配置中心的改造,会导致技术风险大,改造周期长,应用代码越发臃肿,功能复杂、较难维护等问题。

有鉴于此,提出一种轻量级解决java分布式应用配置动态刷新的方法及系统是非常具有意义的。

发明内容

为了解决现有一些小型的轻量化应用或者老旧应用如果要进行上面所述主流的配置中心的改造,会导致技术风险大,改造周期长,应用代码越发臃肿,功能复杂较难维护等问题,本发明提供一种轻量级解决java分布式应用配置动态刷新的方法及系统,以解决上述存在的技术缺陷问题。

第一方面,本发明提出了一种轻量级解决java分布式应用配置动态刷新的方法,该方法包括:

配置步骤,用于推送实时更新的系统配置,每次先从本地数据库最新的配置数据及字典信息拉取到配置中心,更新后分别将数据推送至本地数据库以及内存缓存中,以使所述本地数据库与所述内存缓存中的数据一致;

存储步骤,用于持久的存储所述配置的数据信息;

缓存步骤,采用以K-V键值对的方式进行存储,使所述内存缓存在采取时间淘汰策略时,根据键的名称,对数据进行删除。

优选的,所述存储步骤还包括:

在所述配置中心宕机或使用到该缓存的系统重启后,提供初始化数,同时将修改前的数据备份,便于根据时间节点回滚数据。

优选的,所述配置步骤具体包括:

S11、在所述配置中心创建配置中心容器;

S12、检查所述本地数据库是否存在数据,如果存在将本地所述内存缓存中的数据依次填写至所述配置中心容器;

S13、通过消息队列发布订阅的机制,通过所述配置中心更新后,将消息实时推送至队列中,相关子系统直接订阅,将数据拉取至所述内存缓存中;

S14、将最新数据更新至内存硬盘中,并根据时间节点,生成节点备份前的数据,以便于配置信息的回滚。

进一步优选的,还包括:若S14出现失败,则S13取消消息推送。

进一步优选的,还包括:

S21、若当所述配置中心的数据将更新后的数据持久化失败,则直接返回失败状态,并且结束流程,否则执行下一步骤;

S22、将更新后的配置以及字段信息,以键值对的方式存入所述内存缓存中,并覆盖之前的配置信息。

进一步优选的,还包括:

S31、通过S11-S13获取到最新的配置数据,通过guava cache的分段锁机制保证缓存数据的读写安全;

S32、通过所述内存缓存的时间淘汰机制,对长时间没有使用并占用内存的数据进行回收。

优选的,该方法还具体包括:

S1、响应于部署配置中心服务的命令,并启动配置中心客户端;

S2、从数据库拉取最新的数据同步至所述配置中心;

S3、判断数据是否已经写入本地数据库,若同步数据库失败,则进行重试,当超过预设的重试阈值后,返回失败并结束;

S4、将已更新的数据推送至消息队列,通过消息队列的订阅机制,进行广播;

S5、当子系统订阅配置失败则重新执行S3-S5,确保获取最新数据。

第二方面,本发明还提出一种轻量级解决java分布式应用配置动态刷新的系统,包括:

配置单元,用于推送实时更新的系统配置,每次先从本地数据库最新的配置数据及字典信息拉取到配置中心,更新后分别将数据推送至本地数据库以及内存缓存中,以使所述本地数据库与所述内存缓存中的数据一致;

存储单元,用于持久的存储所述配置的数据信息;

缓存单元,用于采用以K-V键值对的方式进行存储,使所述内存缓存在采取时间淘汰策略时,根据键的名称,对数据进行删除。

第三方面,本发明实施例提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如第一方面中任一实现方式描述的方法。

第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面中任一实现方式描述的方法。

与现有技术相比,本发明的有益成果在于:

本发明基于guavaCache+activeMQ+mysql实现的一种轻量级解决java分布式应用配置动态刷新的方法,相比较主流配置更通用化更轻量化,轻量级的配置中心,容易快速集成;将各应用中的配置抽离到中心服务,方便管理维护;动态的加载配置数据,提升系统的响应速度不影响业务操作;提供更好的管理力能和配置能力;便于旧项目,或者轻量级项目的扩展;解决方案原理简单易于开发和维护。

附图说明

包括附图以提供对实施例的进一步理解并且附图被并入本说明书中并且构成本说明书的一部分。附图图示了实施例并且与描述一起用于解释本发明的原理。将容易认识到其它实施例和实施例的很多预期优点,因为通过引用以下详细描述,它们变得被更好地理解。附图的元件不一定是相互按照比例的。同样的附图标记指代对应的类似部件。

图1是本发明的一个实施例可以应用于其中的示例性装置架构图;

图2为本发明的实施例的轻量级解决java分布式应用配置动态刷新的方法的流程示意图;

图3为本发明的实施例的轻量级解决java分布式应用配置动态刷新的方法中服务的具体执行流程图;

图4为本发明的实施例的轻量级解决java分布式应用配置动态刷新的方法中具体实施例的流程示意图;

图5为本发明的实施例的轻量级解决java分布式应用配置动态刷新的系统的示意图;

图6是适于用来实现本发明实施例的电子设备的计算机装置的结构示意图。

具体实施方式

在以下详细描述中,参考附图,该附图形成详细描述的一部分,并且通过其中可实践本发明的说明性具体实施例来示出。对此,参考描述的图的取向来使用方向术语,例如“顶”、“底”、“左”、“右”、“上”、“下”等。因为实施例的部件可被定位于若干不同取向中,为了图示的目的使用方向术语并且方向术语绝非限制。应当理解的是,可以利用其他实施例或可以做出逻辑改变,而不背离本发明的范围。因此以下详细描述不应当在限制的意义上被采用,并且本发明的范围由所附权利要求来限定。

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

图1示出了可以应用本发明实施例的用于处理信息的方法或用于处理信息的装置的示例性系统架构100。

如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

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

终端设备101、102、103可以是具有通信功能的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103发送的校验请求信息进行处理的后台信息处理服务器。后台信息处理服务器可以对接收到的校验请求信息进行分析等处理,并得到处理结果(例如用于表征校验请求为合法请求的校验成功信息)。

需要说明的是,本发明实施例所提供的用于处理信息的方法一般由服务器105执行,相应地,用于处理信息的装置一般设置于服务器105中。另外,本发明实施例所提供的用于发送信息的方法一般由终端设备101、102、103执行,相应地,用于发送信息的装置一般设置于终端设备101、102、103中。

需要说明的是,服务器可以是硬件,也可以是软件。当服务器为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或多个软件模块,在此不做具体限定。

在传统的分布式应用或者轻量级的分布式应用中,由于服务数量巨多,且配置属性众多,比如:请求的ip地址、限流值、系统的配置值、各种业务开关等等。且配置完成后配置不统一,管理非常复杂。修改完需要重新打war包、重新读取配置信息到jvm内存中、重新启动,对于一些小型的轻量化应用或者老旧应用如果要进行上面所述主流的配置中心的改造,会导致技术风险大,改造周期长,应用代码越发臃肿,功能复杂较难维护等问题。

本发明以Spring Colud Config为例,Spring Colud Config其原理:ConfigServer(配置中心服务端)从远端git拉取配置文件并在本地git一份,ConfigClient(微服务)从ConfigServer端获取自己对应配置文件;当远端git仓库配置文件发生改变,Spring Cloud Bus会向外提供一个http接口,将这个接口配置到远程的git的webhook上,当git上的文件内容发生变动时,就会自动调用/bus-refresh接口。Bus就会通知config-server,config-server会发布更新消息到消息总线的消息队列中,其他服务订阅到该消息就会信息刷新,从而实现整个微服务进行自动刷新。目前主流解决方法,基于SpringCloud生态圈使用,组件使用关联性较强,不适合传统SSM架构项目的使用。同时传统解决方法会产生大量的spring-cloud组件依赖,维护难度大。对比发现对于一些小型的轻量化应用或者老旧应用如果要进行以上所诉几种配置中心的改造,会导致技术风险大,改造周期长,应用代码越发臃肿,功能复杂、较难维护等问题。

为此,本发明提供了一种轻量级解决java分布式应用配置动态刷新的方法以轻量、简易、快速实现项目系统中的配置中心,其中包括系统配置、数据字典,在一定程度降低了代码的耦合性,提高了程序的可用性。

图2示出了本发明的实施例公开了一种轻量级解决java分布式应用配置动态刷新的方法,如图2所示,该方法包括:

S101、配置步骤,用于推送实时更新的系统配置,每次先从本地数据库最新的配置数据及字典信息拉取到配置中心,更新后分别将数据推送至本地数据库以及内存缓存中,以使所述本地数据库与所述内存缓存中的数据一致;

S102、存储步骤,用于持久的存储所述配置的数据信息;

S103、缓存步骤,采用以K-V键值对的方式进行存储,使所述内存缓存在采取时间淘汰策略时,根据键的名称,对数据进行删除。

具体的,作为本发明的进一步改进,初始化配置中心包括:

S11、在所述配置中心创建配置中心容器;

S12、检查所述本地数据库是否存在数据,如果存在将所述本地缓存中的数据依次填写至配置中心容器;

S13、通过消息队列发布订阅的机制,通过配置中心更新后,将消息实时推送至队列中,相关子系统直接订阅,将数据拉取至所述的内存缓存中,如果S14出现失败则S13取消消息推送;

S14、将最新数据更新至内存硬盘中,并根据时间节点,生成节点备份前的数据,以便于配置信息的回滚。

作为本发明的进一步改进,所述配置中心容器将更新后的数据保存至本地数据库,并将数据推送至内存缓存中,包括:

S21、如果当配置中心的数据将更新后的数据持久化失败,直接返回失败状态,并且结束流程,反之执行S22;

S22、将更新后的配置以及字段信息,以键值对的方式存入内存缓存中,覆盖之前的配置信息。

作为本发明的进一步改进,所述内存缓存保证系统缓存的有效实时性,包括:

S31、通过步骤S11-S13获取到最新的配置数据,通过guava cache的分段锁机制保证了缓存数据的读写安全;

S32、通过内存缓存的时间淘汰机制,进行长时间没有使用并占用内存的数据进行回收。

进一步的,下面结合附图对本发明系统集成的结构进行说明。该流程如图3所示,该服务的具体执行流程如下:

1.部署配置中心服务;

2.启动配置中心客户端;

3.从数据库拉取最新的数据同步至配置中心;

4.判断数据是否已经写入本地数据库,如同步数据库失败,则进行重试,在超过一定重试阈值之后,返回失败的并执行流程7;

5.将已更新的数据推送至消息队列,通过消息队列的订阅机制,进行广播;

6.当子系统订阅配置失败重新执行流程3-5,确保获取最新数据;

7.流程结束。

在此过程中,将需要缓存中数据信息已加载至内存数据,当业务系统请求的时候,可以直接将最新的配置数据返回,当服务器正在运行的时候,如果配置信息发生改变,可以实现不需要重启服务器,可以实时去调整相关对应的业务。

根据java封装的特性,以SDK封装的形式,集成在各子系统当中,该流程如图4所示,子系统只需要调用相应的服务接口,即可完成服务端的集成,包括多个子节点,例如serviceA、serviceB、serviceC……,节点的数量不做具体限制,每个节点中存储的keyhash值都是相同的数据。同时支持在集群环境下的数据同步,提高系统的相应速度,缩短因网络原因延时而额外产生的处理时间,避免传统关系型数据库因IO瓶颈带来的性能问题,同时保证了数据的唯一性、一致性。

本发明技术方案带来的有益效果如下:

1.轻量级的配置中心,快速容易集成;

2.将各应用中的的配置抽离到中心服务,方便管理维护;

3.动态的加载配置数据,提升系统的响应速度不影响业务操作;

4.提供更好的管理力能和配置能力;

5.便于旧项目,或者轻量级项目的扩展;

6.解决方案原理简单易于开发和维护。

第二方面,本发明还提出一种轻量级解决java分布式应用配置动态刷新的系统,如图5所示,包括:配置单元51、存储单元52以及缓存单元53。配置单元51,用于推送实时更新的系统配置,每次先从本地数据库最新的配置数据及字典信息拉取到配置中心,更新后分别将数据推送至本地数据库以及内存缓存中,以使所述本地数据库与所述内存缓存中的数据一致;存储单元52,用于持久的存储所述配置的数据信息;缓存单元53,用于采用以K-V键值对的方式进行存储,使所述内存缓存在采取时间淘汰策略时,根据键的名称,对数据进行删除。

下面参考图6,其示出了适于用来实现本发明实施例的电子设备(例如图1所示的服务器或终端设备)的计算机装置600的结构示意图。图6示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图6所示,计算机装置600包括中央处理单元(CPU)601和图形处理器(GPU)602,其可以根据存储在只读存储器(ROM)603中的程序或者从存储部分609加载到随机访问存储器(RAM)606中的程序而执行各种适当的动作和处理。在RAM 604中,还存储有装置600操作所需的各种程序和数据。CPU 601、GPU602、ROM 603以及RAM 604通过总线605彼此相连。输入/输出(I/O)接口606也连接至总线605。

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

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

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

可以以一种或多种程序设计语言或其组合来编写用于执行本发明的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

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

描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中。

作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:配置步骤,用于推送实时更新的系统配置,每次先从本地数据库最新的配置数据及字典信息拉取到配置中心,更新后分别将数据推送至本地数据库以及内存缓存中,以使所述本地数据库与所述内存缓存中的数据一致;存储步骤,用于持久的存储所述配置的数据信息;缓存步骤,采用以K-V键值对的方式进行存储,使所述内存缓存在采取时间淘汰策略时,根据键的名称,对数据进行删除。

以上描述仅为本发明的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本发明中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本发明中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

相关技术
  • 一种通用化的FPGA配置系统及方法与重配置系统及方法
  • 一种通信设备中轻量级文件系统管理方法
  • 一种基于JAVA链表生成分布式序列号的轻量级方法及系统
  • 一种基于JAVA链表生成分布式序列号的轻量级方法及系统
技术分类

06120115586666