基于Nacos的分布式无锁化方法及相关设备与流程

未命名 10-19 阅读:177 评论:0

基于nacos的分布式无锁化方法及相关设备
技术领域
1.本发明涉及分布式技术领域,尤其涉及一种基于nacos的分布式无锁化方法、装置、设备及可读存储介质。


背景技术:

2.目前,在分布式系统中使用无锁化设计来保证数据的原子性和一致性,常见的方案例如disruptor、消息队列等等。但是这些方案存在以下问题:
3.1、架构过重:系统需要依赖第三方组件来完成数据的传递和消费,需要在原有系统架构中接入比较重的第三方组件。
4.2、不易维护:使用各类组件需要一定的技术成本,同时发生异常的情况问题不好定位。
5.因此,在分布式系统中使用无锁化设计的同时如何保持轻系统架构以及低维护成本是亟待解决的技术问题。


技术实现要素:

6.本发明的主要目的在于提供一种基于nacos的分布式无锁化方法、装置、设备及可读存储介质,旨在解决现有技术中在分布式系统中使用无锁化设计的同时无法保持轻系统架构以及低维护成本的技术问题。
7.第一方面,本发明提供一种基于nacos的分布式无锁化方法,所述基于nacos的分布式无锁化方法包括:
8.从nacos中获取处于正常状态的服务器的服务器信息;
9.将获取的服务器信息存储到监控列表中;
10.根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存;
11.根据自增键值以及缓存中的服务器信息个数确定目标下标;
12.将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器。
13.可选的,所述根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存的步骤包括:
14.检测监控列表中的服务器信息在缓存中是否存在;
15.若监控列表中的服务器信息在缓存中不存在,则将服务器信息以及服务器信息在监控列表中的下标存储至缓存中;
16.若监控列表中的服务器信息在缓存中存在,则以服务器信息在监控列表中的下标更新缓存中所述服务器信息的下标;
17.检测缓存中的服务器信息在监控列表中是否存在;
18.缓存中的服务器信息在监控列表中不存在,则将服务器信息从缓存中删除。
19.可选的,所述根据自增键值以及缓存中的服务器信息个数确定目标下标的步骤包括:
20.根据自增键值以及缓存中的服务器信息个数进行取模运算;
21.以取模运算结果作为目标下标。
22.可选的,在所述将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器的步骤之前,还包括:
23.在nacos中查询得到处于正常状态的服务器的个数;
24.根据自增键值以及处于正常状态的服务器的个数进行取模运算,得到新的取模运算结果;
25.检测所述新的取模运算结果与所述取模运算结果是否一致;
26.若一致,则执行所述将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器的步骤。
27.第二方面,本发明还提供一种基于nacos的分布式无锁化装置,所述基于nacos的分布式无锁化装置包括:
28.获取模块,用于从nacos中获取处于正常状态的服务器的服务器信息;
29.存储模块,用于将获取的服务器信息存储到监控列表中;
30.更新模块,用于根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存;
31.确定模块,用于根据自增键值以及缓存中的服务器信息个数确定目标下标;
32.分发模块,用于将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器。
33.可选的,所述更新模块,用于:
34.检测监控列表中的服务器信息在缓存中是否存在;
35.若监控列表中的服务器信息在缓存中不存在,则将服务器信息以及服务器信息在监控列表中的下标存储至缓存中;
36.若监控列表中的服务器信息在缓存中存在,则以服务器信息在监控列表中的下标更新缓存中所述服务器信息的下标;
37.检测缓存中的服务器信息在监控列表中是否存在;
38.缓存中的服务器信息在监控列表中不存在,则将服务器信息从缓存中删除。
39.可选的,所述确定模块,用于:
40.根据自增键值以及缓存中的服务器信息个数进行取模运算;
41.以取模运算结果作为目标下标。
42.可选的,基于nacos的分布式无锁化装置还包括校验模块,用于:
43.在nacos中查询得到处于正常状态的服务器的个数;
44.根据自增键值以及处于正常状态的服务器的个数进行取模运算,得到新的取模运算结果;
45.检测所述新的取模运算结果与所述取模运算结果是否一致;
46.若一致,则分发模块执行所述将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器的步骤。
47.第三方面,本发明还提供一种基于nacos的分布式无锁化设备,所述基于nacos的分布式无锁化设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行
的基于nacos的分布式无锁化程序,其中所述基于nacos的分布式无锁化程序被所述处理器执行时,实现如上所述的基于nacos的分布式无锁化方法的步骤。
48.第四方面,本发明还提供一种可读存储介质,所述可读存储介质上存储有基于nacos的分布式无锁化程序,其中所述基于nacos的分布式无锁化程序被处理器执行时,实现如上所述的基于nacos的分布式无锁化方法的步骤。
49.本发明中,从nacos中获取处于正常状态的服务器的服务器信息;将获取的服务器信息存储到监控列表中;根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存;根据自增键值以及缓存中的服务器信息个数确定目标下标;将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器。通过本发明,通过下标消除锁的使用,实现了在分布式系统中使用无锁化设计,同时本发明对应用服务的架构几乎没有改动,只依赖数据库表的自增键值与注册在nacos上的服务器的服务器信息进行计算,不存在过高的计算门槛,维护成本低。
附图说明
50.图1为本发明基于nacos的分布式无锁化方法一实施例的流程示意图;
51.图2为本发明基于nacos的分布式无锁化装置一实施例的功能模块示意图;
52.图3为本发明实施例方案中涉及的基于nacos的分布式无锁化设备的硬件结构示意图。
53.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
54.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
55.第一方面,本发明实施例提供了一种基于nacos的分布式无锁化方法。
56.一实施例中,参照图1,图1为本发明基于nacos的分布式无锁化方法一实施例的流程示意图。如图1所示,基于nacos的分布式无锁化方法包括:
57.步骤s10,从nacos中获取处于正常状态的服务器的服务器信息;
58.本实施例中,nacos是一个开源的动态服务发现、配置管理和服务管理平台,由阿里巴巴集团开发并维护。nacos可以让开发人员更方便地管理微服务架构中的服务实例和配置信息,从而实现更高效的服务治理。nacos支持多种注册中心和配置管理的方式,可以与主流的云原生应用框架无缝集成。
59.本实施例的执行主体为应用服务节点,在应用服务节点启动的时候,读取写在配置文件的nacos配置信息,并根据加载到的nacos配置信息初始化一个nacos的namingservice,以供从nacos上拉取对应服务组和命名空间下面的处于正常状态的服务器的服务器信息。
60.步骤s20,将获取的服务器信息存储到监控列表中;
61.本实施例中,服务器信息包括ip端口、服务名称以及服务分类等,需要说明的是,此处仅为对服务器信息的示意性说明,不构成对服务器信息的限定。
62.步骤s30,根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存;
63.本实施例中,将监控列表中的服务器信息、服务器信息在监控列表中的下标以及监控列表大小(即包含的服务器信息的个数)封装成一个对象,缓存在map中。其中,若服务器信息在map中存在,则更新对应的缓存;若不存在,则创建新的服务器信息对象并缓存。若map中的服务器信息在监控列表中不存在,则删除对应的缓存信息。
64.进一步地,一实施例中,步骤s30包括:
65.检测监控列表中的服务器信息在缓存中是否存在;若监控列表中的服务器信息在缓存中不存在,则将服务器信息以及服务器信息在监控列表中的下标存储至缓存中;若监控列表中的服务器信息在缓存中存在,则以服务器信息在监控列表中的下标更新缓存中所述服务器信息的下标;检测缓存中的服务器信息在监控列表中是否存在;缓存中的服务器信息在监控列表中不存在,则将服务器信息从缓存中删除。
66.本实施例中,假设监控列表中的服务器信息为服务器信息1~服务器信息5。例如,若检测到服务器信息1在缓存中不存在,则将服务器信息1以及服务器信息1在监控列表中的下标存储至缓存中;若检测到服务器信息2在缓存中存在,则以服务器信息2在监控列表中的下标更新缓存中服务器信息2的下标(即仅更新下标);若缓存中存在服务器信息7而监控列表中不存在,则将服务器信息7从缓存中删除。
67.步骤s40,根据自增键值以及缓存中的服务器信息个数确定目标下标;
68.本实施例中,该步骤由应用服务节点中的下标使用模块执行,下标使用模块是一个与应用服务节点生命周期同步的线程,随着应用服务节点的启动而启动,随着应用服务节点的停止而消亡。它依赖缓存中的下标信息(slot)、监控列表大小信息(alive_server_size)和业务库表的自增键值(incre_id)来进行数据拆分(即确定目标下标)。
69.进一步地,一实施例中,步骤s40包括:
70.根据自增键值以及缓存中的服务器信息个数进行取模运算;以取模运算结果作为目标下标。
71.步骤s50,将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器。
72.本实施例中,确定目标下标后,便将待分发数据分发至下标为目标下标的服务器信息对应的服务器。
73.进一步地,一实施例中,在步骤s50之前,还包括:
74.在nacos中查询得到处于正常状态的服务器的个数;根据自增键值以及处于正常状态的服务器的个数进行取模运算,得到新的取模运算结果;检测所述新的取模运算结果与所述取模运算结果是否一致;若一致,则执行所述将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器的步骤。
75.本实施例中,在线程启动后,会去循环执行以下动作:查询需要被分布式处理的业务库表数据。因为每个应用服务节点的下标不同,所以每个应用服务节点所查询出来的数据不同,按照这段逻辑,业务库表数据会按照监控列表的大小等分。这样每个应用服务节点各自处理一部分数据,且集群越大处理数据能力越强。每个应用服务节点获取到各自数据后,会循环处理每一条数据。
76.在执行数据对应的业务代码之前会进行校验,只有校验通过,才调用实际业务执行模块的代码;如果校验不通过,认为注册在nacos上面的应用服务节点与缓存中的数据不一致,则跳过当前数据,待下次循环的时候再重新分发处理。
77.因为最新下标信息与缓存中的下标信息存在一定的时间差,在这个过程中,集群节点有可能发生上下线的情况,通过分发前的校验能够实时感知集群节点状态的变化,以此来实现集群承载能力的弹性伸缩。
78.本实施例中,从nacos中获取处于正常状态的服务器的服务器信息;将获取的服务器信息存储到监控列表中;根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存;根据自增键值以及缓存中的服务器信息个数确定目标下标;将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器。通过本实施例,通过下标消除锁的使用,实现了在分布式系统中使用无锁化设计,同时本发明对应用服务的架构几乎没有改动,只依赖数据库表的自增键值与注册在nacos上的服务器的服务器信息进行计算,不存在过高的计算门槛,维护成本低。
79.第二方面,本发明实施例还提供一种基于nacos的分布式无锁化装置。
80.一实施例中,参照图2,图2为本发明基于nacos的分布式无锁化装置一实施例的功能模块示意图。如图2所示,基于nacos的分布式无锁化装置包括:
81.获取模块10,用于从nacos中获取处于正常状态的服务器的服务器信息;
82.存储模块20,用于将获取的服务器信息存储到监控列表中;
83.更新模块30,用于根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存;
84.确定模块40,用于根据自增键值以及缓存中的服务器信息个数确定目标下标;
85.分发模块50,用于将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器。
86.进一步地,一实施例中,所述更新模块30,用于:
87.检测监控列表中的服务器信息在缓存中是否存在;
88.若监控列表中的服务器信息在缓存中不存在,则将服务器信息以及服务器信息在监控列表中的下标存储至缓存中;
89.若监控列表中的服务器信息在缓存中存在,则以服务器信息在监控列表中的下标更新缓存中所述服务器信息的下标;
90.检测缓存中的服务器信息在监控列表中是否存在;
91.缓存中的服务器信息在监控列表中不存在,则将服务器信息从缓存中删除。
92.进一步地,一实施例中,所述确定模块40,用于:
93.根据自增键值以及缓存中的服务器信息个数进行取模运算;
94.以取模运算结果作为目标下标。
95.进一步地,一实施例中,基于nacos的分布式无锁化装置还包括校验模块,用于:
96.在nacos中查询得到处于正常状态的服务器的个数;
97.根据自增键值以及处于正常状态的服务器的个数进行取模运算,得到新的取模运算结果;
98.检测所述新的取模运算结果与所述取模运算结果是否一致;
99.若一致,则分发模块50执行所述将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器的步骤。
100.其中,上述基于nacos的分布式无锁化装置中各个模块的功能实现与上述基于
nacos的分布式无锁化方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。
101.第三方面,本发明实施例提供一种基于nacos的分布式无锁化设备,该基于nacos的分布式无锁化设备可以是个人计算机(personal computer,pc)、笔记本电脑、服务器等具有数据处理功能的设备。
102.参照图3,图3为本发明实施例方案中涉及的基于nacos的分布式无锁化设备的硬件结构示意图。本发明实施例中,基于nacos的分布式无锁化设备可以包括处理器1001(例如中央处理器central processing unit,cpu),通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信;用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard);网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真wireless-fidelity,wi-fi接口);存储器1005可以是高速随机存取存储器(random access memory,ram),也可以是稳定的存储器(non-volatile memory),例如磁盘存储器,存储器1005可选的还可以是独立于前述处理器1001的存储装置。本领域技术人员可以理解,图3中示出的硬件结构并不构成对本发明的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
103.继续参照图3,图3中作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及基于nacos的分布式无锁化程序。其中,处理器1001可以调用存储器1005中存储的基于nacos的分布式无锁化程序,并执行本发明实施例提供的基于nacos的分布式无锁化方法。
104.第四方面,本发明实施例还提供一种可读存储介质。
105.本发明可读存储介质上存储有基于nacos的分布式无锁化程序,其中所述基于nacos的分布式无锁化程序被处理器执行时,实现如上述的基于nacos的分布式无锁化方法的步骤。
106.其中,基于nacos的分布式无锁化程序被执行时所实现的方法可参照本发明基于nacos的分布式无锁化方法的各个实施例,此处不再赘述。
107.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
108.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
109.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备执行本发明各个实施例所述的方法。
110.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技
术领域,均同理包括在本发明的专利保护范围内。

技术特征:
1.一种基于nacos的分布式无锁化方法,其特征在于,所述基于nacos的分布式无锁化方法包括:从nacos中获取处于正常状态的服务器的服务器信息;将获取的服务器信息存储到监控列表中;根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存;根据自增键值以及缓存中的服务器信息个数确定目标下标;将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器。2.如权利要求1所述的基于nacos的分布式无锁化方法,其特征在于,所述根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存的步骤包括:检测监控列表中的服务器信息在缓存中是否存在;若监控列表中的服务器信息在缓存中不存在,则将服务器信息以及服务器信息在监控列表中的下标存储至缓存中;若监控列表中的服务器信息在缓存中存在,则以服务器信息在监控列表中的下标更新缓存中所述服务器信息的下标;检测缓存中的服务器信息在监控列表中是否存在;缓存中的服务器信息在监控列表中不存在,则将服务器信息从缓存中删除。3.如权利要求1所述的基于nacos的分布式无锁化方法,其特征在于,所述根据自增键值以及缓存中的服务器信息个数确定目标下标的步骤包括:根据自增键值以及缓存中的服务器信息个数进行取模运算;以取模运算结果作为目标下标。4.如权利要求3所述的基于nacos的分布式无锁化方法,其特征在于,在所述将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器的步骤之前,还包括:在nacos中查询得到处于正常状态的服务器的个数;根据自增键值以及处于正常状态的服务器的个数进行取模运算,得到新的取模运算结果;检测所述新的取模运算结果与所述取模运算结果是否一致;若一致,则执行所述将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器的步骤。5.一种基于nacos的分布式无锁化装置,其特征在于,所述基于nacos的分布式无锁化装置包括:获取模块,用于从nacos中获取处于正常状态的服务器的服务器信息;存储模块,用于将获取的服务器信息存储到监控列表中;更新模块,用于根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存;确定模块,用于根据自增键值以及缓存中的服务器信息个数确定目标下标;分发模块,用于将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器。6.如权利要求5所述的基于nacos的分布式无锁化装置,其特征在于,所述更新模块,用于:
检测监控列表中的服务器信息在缓存中是否存在;若监控列表中的服务器信息在缓存中不存在,则将服务器信息以及服务器信息在监控列表中的下标存储至缓存中;若监控列表中的服务器信息在缓存中存在,则以服务器信息在监控列表中的下标更新缓存中所述服务器信息的下标;检测缓存中的服务器信息在监控列表中是否存在;缓存中的服务器信息在监控列表中不存在,则将服务器信息从缓存中删除。7.如权利要求5所述的基于nacos的分布式无锁化装置,其特征在于,所述确定模块,用于:根据自增键值以及缓存中的服务器信息个数进行取模运算;以取模运算结果作为目标下标。8.如权利要求7所述的基于nacos的分布式无锁化装置,其特征在于,基于nacos的分布式无锁化装置还包括校验模块,用于:在nacos中查询得到处于正常状态的服务器的个数;根据自增键值以及处于正常状态的服务器的个数进行取模运算,得到新的取模运算结果;检测所述新的取模运算结果与所述取模运算结果是否一致;若一致,则分发模块执行所述将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器的步骤。9.一种基于nacos的分布式无锁化设备,其特征在于,所述基于nacos的分布式无锁化设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行的基于nacos的分布式无锁化程序,其中所述基于nacos的分布式无锁化程序被所述处理器执行时,实现如权利要求1至4中任一项所述的基于nacos的分布式无锁化方法的步骤。10.一种可读存储介质,其特征在于,所述可读存储介质上存储有基于nacos的分布式无锁化程序,其中所述基于nacos的分布式无锁化程序被处理器执行时,实现如权利要求1至4中任一项所述的基于nacos的分布式无锁化方法的步骤。

技术总结
本发明提供一种基于Nacos的分布式无锁化方法、装置、设备及可读存储介质。该方法包括:从Nacos中获取处于正常状态的服务器的服务器信息;将获取的服务器信息存储到监控列表中;根据监控列表中的服务器信息以及服务器信息在监控列表中的下标更新缓存;根据自增键值以及缓存中的服务器信息个数确定目标下标;将待分发数据分发至下标为所述目标下标的服务器信息对应的服务器。通过本发明,通过下标消除锁的使用,实现了在分布式系统中使用无锁化设计,同时本发明对应用服务的架构几乎没有改动,只依赖数据库表的自增键值与注册在Nacos上的服务器的服务器信息进行计算,不存在过高的计算门槛,维护成本低。维护成本低。维护成本低。


技术研发人员:周旺
受保护的技术使用者:中电云数智科技有限公司
技术研发日:2023.06.06
技术公布日:2023/9/23
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐