CN106936931B - 分布式锁的实现方法、相关设备及系统 - Google Patents
分布式锁的实现方法、相关设备及系统 Download PDFInfo
- Publication number
- CN106936931B CN106936931B CN201710283923.6A CN201710283923A CN106936931B CN 106936931 B CN106936931 B CN 106936931B CN 201710283923 A CN201710283923 A CN 201710283923A CN 106936931 B CN106936931 B CN 106936931B
- Authority
- CN
- China
- Prior art keywords
- lock
- network node
- message
- processing
- log information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请实施例提供了一种分布式锁的实现方法、相关设备及系统。方法包括:主网络节点接收锁处理消息,对所述锁处理消息进行缓存,然后获取当前缓存的至少两个锁处理消息,并根据当前缓存的所述至少两个锁处理消息生成一条日志信息,向从属于该主网络节点的至少两个从网络节点同步所述日志信息,当确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理。采用本申请,主网络节点可以对锁处理消息进行批量处理,避免主网络节点频繁地同步锁处理消息和接收确认消息所造成的分布式锁性能的急剧下降。
Description
技术领域
本发明涉及电子技术领域,尤其涉及一种分布式锁的实现方法、相关设备及系统。
背景技术
随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,提出了分布式系统的概念。简单来说,分布式系统就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样。而在分布式系统中,不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么用户在访问这些资源的时候,往往需要互斥来防止彼此干扰,在这种情况下,便需要使用到分布式锁。
分布式锁是分布式系统的核心组件,是用来控制分布式系统之间同步访问共享资源的一种方式。具体来说,分布式锁的原理就是在操作目标资源之前先获取操作许可,然后再执行操作,如果其他用户同时尝试操作该目标资源将被阻止,直到前一个用户释放许可后,其他用户才能够操作目标资源。
可以看出,分布式锁是保证分布式系统可靠、有序地被操作和运行的重要机制。因此,保证分布式锁的可靠性对于分布式系统的实现有着重要的意义。目前,为了提供可靠的分布式锁,现有技术通常在多个网络节点中存储相同的锁信息,其中一个网络节点作为主网络节点完成分布式锁的业务,其他多个网络节点作为冗余网络节点,当主网络节点出现宕机等故障时,其他冗余网络节点可以代替主网络节点继续完成分布式锁的业务。因此,如何保证实现分布式锁的多个网络节点之间的一致性就显得尤为重要。当前业界使用的主要是基于zookeeper分布式服务框架或者chubby分布式系统构建的分布式锁,而其受限于zookeeper和chubby系统功能和实现的特点,导致分布式锁的性能较低且较难提升,成为分布式系统业务运行的瓶颈。
发明内容
本发明实施例所要解决的技术问题在于,提供一种分布式锁的实现方法、相关设备及系统,提升分布式锁的性能。
本申请第一方面提供了一种分布式锁的实现方法。主网络节点接收锁处理消息,对所述锁处理消息进行缓存,然后获取当前缓存的至少两个锁处理消息,并根据当前缓存的所述至少两个锁处理消息生成一条日志信息,向从属于该主网络节点的至少一个从网络节点同步所述日志信息,当确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理。
在该技术方案中,主网络节点可以对锁处理消息进行批量处理,避免主网络节点频繁地同步锁处理消息和接收确认消息所造成的分布式锁性能的急剧下降。
在第一方面的第一种可能的实现方式中,主网络节点接收所述至少一个从网络节点存储成功所述日志信息后发送的确认消息,根据接收到的所述确认消息的数量,确定所述日志消息是否同步成功。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,主网络节点将所述锁处理消息缓存在消息缓存队列中,所述消息缓存队列中锁处理消息的排序由各个锁处理消息的接收先后顺序确定,当主网络节点确定所述日志信息同步成功后,按照所述消息缓存队列中各锁处理消息的排序依次对所述消息缓存队列中的锁处理消息进行处理。
在该技术方案中,主网络节点可以对锁处理消息进行批量处理的同时,仍然保证对多个锁处理消息的处理顺序不变。
结合第一方面或第一方面的第一种至第二种中任一可能的实现方式,在第一方面的第三种可能的实现方式中,锁处理消息携带目标资源的资源标识;主网络节点确定本身所属的分布式锁节点集合,然后向所述分布式锁节点集合中的至少一个从网络节点同步所述日志信息,其中,所述分布式锁节点集合与所述目标资源的资源标识对应,所述分布式锁节点集合中包括所述主网络节点以及至少一个从网络节点。
在该技术方案中,锁处理消息可以分配给指定的分布式锁节点集合进行处理,并且还对锁处理消息进行批量处理,既能提升处理效率,又能避免主网络节点频繁地同步锁处理消息和接收确认消息所造成的分布式锁性能的急剧下降,从而可以更好地提升分布式锁的性能。
结合第一方面或第一方面的第一种至第三种中任一可能的实现方式,在第一方面的第四种可能的实现方式中,所述锁处理消息为锁请求消息或锁释放消息。
结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述锁处理消息为锁请求消息,所述锁请求消息携带目标资源的资源标识;主网络节点对所述日志信息中的所述至少两个锁处理消息进行处理时,获取所述日志信息中目标锁请求消息携带的目标资源的资源标识,然后检测资源占用队列中是否存在所述目标资源的资源标识,当检测到当前的资源占用队列中不存在所述目标资源的资源标识时,主网络节点获取针对所述目标资源的锁信息并发送给所述目标锁请求消息对应的客户端,将所述目标资源的资源标识加入资源占用队列中。
结合第一方面的第四种可能的实现方式,在第一方面的第六种可能的实现方式中,所述锁处理消息为锁释放消息,所述锁释放消息携带目标资源的资源标识;主网络节点对所述日志信息中的所述至少两个锁处理消息进行处理时,获取所述日志信息中目标锁释放消息携带的目标资源的资源标识,检测当前的资源占用队列中是否存在所述目标资源的资源标识,当检测到当前的资源占用队列中存在所述目标资源的资源标识时,所述主网络节点从所述资源占用队列中删除所述目标资源的资源标识。
结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式中,主网络节点在当前的资源等待队列中查询是否存在携带所述目标资源的资源标识的目标锁请求消息,当检测到存在目标锁请求消息时,获取针对所述目标资源的锁信息并发送给所述目标锁请求消息对应的客户端,将所述目标资源的资源标识加入资源占用队列中。
本申请第二方面提供了一种分布式锁的实现方法。分发节点获取锁处理消息,所述锁处理消息包括目标资源的资源标识,然后确定所述资源标识对应的分布式锁节点集合,所述分布式锁节点集合包括主网络节点和至少一个从网络节点,再向所述分布式锁节点集合中的主网络节点发送所述锁处理消息,所述锁处理消息用于指示所述分布式锁节点集合对所述锁处理消息进行同步和处理。
在该技术方案中,分发节点可以将针对不同资源的锁处理消息分配给指定的分布式锁节点集合进行处理,从而可以使分布式锁节点集合中的各个网络节点处理的业务更有针对性,提升处理效率,进而提升分布式锁的性能。
在第二方面的第一种可能的实现方式中,分发节点根据预设的资源节点映射表,获取所述资源标识对应的分布式锁节点集合,所述资源节点映射表包括至少一个资源标识以及各资源标识对应的分布式锁节点集合。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,分发节点接收客户端发送的锁处理消息。
结合第二方面或第二方面的第一种至第二种中任一可能的实现方式,在第二方面的第三种可能的实现方式中,所述锁处理消息为锁请求消息或锁释放消息。
本申请第三方面提供了一种分布式锁的实现方法。主网络节点接收锁处理消息,所述锁处理消息包括目标资源的资源标识,所述资源标识与所述主网络节点所属的分布式锁节点集合对应,所述分布式锁节点集合包括所述主网络节点以及至少一个从网络节点,主网络节点向所述分布式锁节点集合中的从网络节点同步所述锁处理消息,当确定所述锁处理消息同步成功后,对所述锁处理消息进行处理。
在该技术方案中,主网络节点将接收到的针对特定的资源的锁处理消息在特定的分布式锁节点集合进行处理,可以使分布式锁节点集合中的各个网络节点处理的业务更有针对性,提升处理效率,进而提升分布式锁的性能。
在第三方面的第一种可能的实现方式中,主网络节点接收客户端发送的锁处理消息。
结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,主网络节点向所述分布式锁节点集合中的从网络节点同步所述锁处理消息之前,主网络节点对所述锁处理消息进行缓存,获取当前缓存的至少两个锁处理消息,并根据当前缓存的所述至少两个锁处理消息生成一条日志信息,向所述分布式锁节点集合中的从网络节点同步所述日志信息,当确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理。
在该技术方案中,锁处理消息可以分配给指定的分布式锁节点集合进行处理,并且还对锁处理消息进行批量处理,既能提升处理效率,又能避免主网络节点频繁地同步锁处理消息和接收确认消息所造成的分布式锁性能的急剧下降,从而可以更好地提升分布式锁的性能。
结合第三方面的第二种可能的实现方式,在第三方面的第三种可能的实现方式中,主网络节点接收所述分布式锁节点集合中的至少一个从网络节点存储成功所述日志信息后发送的确认消息,根据接收到的所述确认消息的数量,确定所述日志消息是否同步成功。
结合第三方面的第二种至第三种中任一可能的实现方式,在第三方面的第四种可能的实现方式中,主网络节点将所述锁处理消息缓存在消息缓存队列中,所述消息缓存队列中锁处理消息的排序由各个锁处理消息的接收先后顺序确定;当确定所述日志信息同步成功后,按照在所述处理消息缓存队列中各锁处理消息的排序依次对处理消息缓存队列中的锁处理消息进行处理。
在该技术方案中,主网络节点可以对锁处理消息进行批量处理的同时,仍然保证对多个锁处理消息的处理顺序不变。
结合第三方面或第三方面的第一种至第四种中任一可能的实现方式,在第三方面的第五种可能的实现方式中,所述锁处理消息为锁请求消息或锁释放消息。
本申请第四方面提供了一种主网络节点。包括处理器、存储器以及通信接口。处理器连接到存储器和通信接口,例如处理器可以通过总线连接到存储器和通信接口。通信接口用于与客户端等设备进行通信。存储器用于存储锁处理消息等。处理器用于执行第一方面的部分或全部流程。
本申请第五方面提供了另一种主网络节点,包括发送模块、接收模块和处理模块,处理模块用于实现第四方面中的处理器,发送模块结合接收模块用于实现第四方面中的网络接口。主网络节点备通过上述模块实现第一方面的部分或全部方法。
本申请第六方面提供了一种分发节点。包括处理器、存储器以及通信接口。处理器连接到存储器和通信接口,例如处理器可以通过总线连接到存储器和通信接口。通信接口用于与其他网络设备进行通信。存储器用于存储锁处理消息等。处理器用于执行第二方面的部分或全部流程。
本申请第七方面提供了另一种分发节点,包括发送模块、处理模块或/和接收模块,处理模块用于实现第六方面中的处理器,发送模块结合接收模块用于实现第六方面中的网络接口。网络节点备通过上述模块实现第二方面的部分或全部方法。
本申请第八方面提供了一种主网络节点。包括处理器、存储器以及通信接口。处理器连接到存储器和通信接口,例如处理器可以通过总线连接到存储器和通信接口。通信接口用于与客户端等设备进行通信。存储器用于存储锁处理消息等。处理器用于执行第三方面的部分或全部流程。
本申请第九方面提供了另一种主网络节点,包括发送模块、接收模块和处理模块,处理模块用于实现第八方面中的处理器,发送模块结合接收模块用于实现第八方面中的网络接口。主网络节点备通过上述模块实现第三方面的部分或全部方法。
本申请第十方面提供了一种分布式锁系统,包括分发节点和主网络节点。分发节点用于执行第二方面或第二方面的任意一种实现方式提供的一种分布式锁的实现方法,主网络节点用于执行第三方面或第三方面的任意一种实现方式提供的一种分布式锁的实现方法。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本申请实施例提供的一种基于分布式系统的网络架构示意图;
图1b是本申请实施例提供的另一种基于分布式系统的网络架构示意图;
图2是本申请实施例提供的一种分布式锁的实现方法的流程示意图;
图3是本申请实施例提供的一种分布式锁的实现方法的流程示意图;
图4是本申请实施例提供的一种分布式锁的实现方法的流程示意图;
图5是本申请实施例提供的一种主网络节点的结构示意图;
图6是本申请实施例提供的另一种主网络节点的结构示意图;
图7是本申请实施例提供的一种分发节点的结构示意图;
图8是本申请实施例提供的另一种分发节点的结构示意图;
图9是本申请实施例提供的另一种主网络节点的结构示意图;
图10是本申请实施例提供的另一种主网络节点的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
本申请实施例的技术方案适用于各种分布式系统中,比如,图1a所示的一种基于分布式系统的网络架构示意图,包括至少一个网络设备101(图1a示出了网络设备101a、网络设备101b和网络设备101c)以及与网络设备101连接的至少一个客户端102(图1a示出了客户端102a、客户端102b和客户端102c),其中,至少一个客户端102整体可以作为一个分布式系统共同提供服务;至少一个网络设备101则是用于实现分布式锁的网络设备,至少一个网络设备101中有一个网络设备作为一个主网络节点,其余的网络设备均作为从网络节点。图1a以网络设备101a为主网络节点,网络设备101b和101c为从网络节点为例。
进一步地,一个网络设备中还可以存在多个网络节点,每个网络设备中的多个网络节点可能是主网络节点和从网络节点的任意组合。如图1b所示的一种基于分布式系统的网络架构示意图,包括至少一个网络设备103(图1b示出了网络设备103a、网络设备103b和网络设备103c),网络设备103a包括3个网络节点,其中一个主网络节点1031a,两个从网络节点1032a和1033a;网络设备103b包括3个网络节点,其中两个主网络节点1032b和1033b,一个从网络节点1031b;网络设备103b包括3个网络节点1031c、1032c和1033c,均为从网络节点。这里,从网络节点1031b和1031c是从属于主网络节点1031a的,从网络节点1032a和1032c是从属于主网络节点1032b的,从网络节点1033a和1033c是从属于主网络节点1033b的。图1b的架构中还包括与网络设备103中的各网络节点连接的至少一个客户端104(图1b示出了客户端104a、客户端104b和客户端104c)。
在图1a和图1b所示的架构中,网络设备可以为多种具有计算和存储能力的设备,例如,服务器、主机、PC(personal computer,个人计算机)等计算机设备;又如,网络设备也可以为SDN(Software Defined Network,软件定义网络)控制器。主网络节点和从网络节点可以是物理网络设备(例如,物理服务器等),也可以是部署于物理网络设备(例如,物理服务器)上、基于软件虚拟化技术实现的虚拟网络设备或功能实体。本申请实施例中涉及的主网络节点可以指raft一致性算法中作为领导者(英文:leader)的节点,相应的从网络节点指的是raft一致性算法中作为跟随者(英文:follower)的节点;本申请实施例中涉及的主网络节点也可以指paxos一致性算法中作为最终决策学习者(英文:learner)的节点,相应的从网络节点指的是paxos一致性算法中作为决策者(英文:acceptor)的节点。从网络节点可以认为是主网络节点的冗余网络节点,用于存储与主网络节点相同的数据,主从网络节点之间通过专用通道连接,实现主从网络节点之间的同步。当主网络节点出现故障或宕机等问题时,可以由从网络节点变为主网络节点继续处理相关业务请求。例如,图1a中的至少一个客户端102均可以向网络设备101a(即主网络节点)发送锁处理消息,网络设备101a则可以将接收到的锁处理消息同步给网络设备101b和网络设备101c,并且对锁处理消息进行处理。当网络设备101a出现故障时,网络设备101b或者网络设备101c可以作为新的主网络节点继续对锁处理消息进行处理。
请参阅图2,图2是本申请实施例提供的一种分布式锁的实现方法的流程示意图,所述方法包括:
步骤S101,主网络节点接收锁处理消息。
在本申请实施例中,锁处理消息可以携带资源标识,具体可以包括锁请求消息或锁释放消息两种消息类型,其中,锁请求消息用于客户端申请访问资源标识对应的目标资源,请求主网络节点分配目标资源对应的锁信息给客户端;锁释放消息用于客户端声明释放资源标识对应的目标资源,指示主网络节点可以向其他客户端分配目标资源对应的锁信息。
需要说明的是,锁处理消息可以是客户端直接发送给主网络节点的,也可以是客户端转发给锁分发节点,由锁分发节点分发给主网络节点,其中锁分发节点是分配各锁处理请求给某个主网络节点处理的一个分配节点,可以部署在客户端或服务器内部,也可以部署在其他的独立的网络设备内。
步骤S102,主网络节点对锁处理消息进行缓存。
主网络节点可以将锁处理消息缓存在消息缓存队列中,该消息缓存队列可以是预先分配的一个堆栈存储空间。进一步的,主网络节点每接到一个锁处理消息时都会缓存在消息缓存队列中,消息缓存队列中的多个缓存的锁处理消息的排序由各个锁处理消息的接收先后顺序确定。
步骤S103,主网络节点获取当前缓存的至少两个锁处理消息,并根据当前缓存的所述至少两个锁处理消息生成一条日志信息。
在一种可能的实施场景中,主网络节点可以通过对上述消息缓存队列进行轮询,当消息缓存队列非空时,获取当前消息缓存队列中缓存的至少两个锁处理消息,并根据当前缓存的至少两个锁处理消息生成一条日志信息。
在另一种可能的实施场景中,主网络节点可以实时监测消息缓存队列中的锁处理消息数量,当锁处理消息数量达到预设阈值时,获取当前消息缓存队列中缓存的至少两个锁处理消息,并根据当前缓存的至少两个锁处理消息生成一条日志信息。
需要说明的是,日志信息中包括当前缓存的至少两个锁处理消息。
步骤S104,主网络节点向从属于该主网络节点的至少一个从网络节点同步日志信息。
在一种基于raft一致性算法实施场景中,主网络节点为leader,从网络节点为follower,那么leader则向从属于自己的每一个follower发送生成的日志信息,使得每个follower都能够同步的存储leader接收到的至少两个锁处理消息。
在一种基于paxos一致性算法实施场景中,主网络节点为learner,从网络节点为acceptor,那么learner则向从属于自己的每一个acceptor发送生成的日志信息,使得每个acceptor都能够同步的存储learner接收到的至少两个锁处理消息。
步骤S105,当主网络节点确定日志信息同步成功后,对日志信息中的至少两个锁处理消息进行处理。
从网络节点接收到主网络节点发送的日志信息后,对该日志信息进行存储,当存储成功后,可以向主网络节点发送确认消息。主网络节点根据接收到的确认消息的数量,可以确定日志消息是否同步成功。
具体来说,主网络节点可以预设确认消息数量阈值,当接收到的确认消息的数量达到确认消息数量阈值时,确定日志消息同步成功,否则确定日志信息同步失败;主网络节点还可以预设确认消息比例阈值,当接收到的确认消息的数量与从属于主网络节点的从网络节点的数量的比值达到确认消息比例阈值时,确定日志消息同步成功,否则确定日志信息同步失败。
主网络节点在确定日志信息同步成功后,就可以对日志信息中的至少两个锁处理消息进行处理。具体实施中,主网络节点可以按照上述消息缓存队列中各锁处理消息的排序依次对消息缓存队列中的锁处理消息进行处理。也就是说,先收到的锁处理消息先处理,后收到的锁处理消息后处理。
在一种可能的实施场景中,锁处理消息为锁请求消息,锁请求消息携带目标资源的资源标识,即请求主网络节点分配目标资源对应的锁信息给客户端。则以日志信息中的一个锁请求消息作为目标锁请求消息为例,主网络节点可以先获取日志信息中目标锁请求消息携带的目标资源的资源标识,检测资源占用队列中是否存在目标资源的资源标识,这里的资源占用队列包括了被占用资源的资源标识,如果主网络节点检测到当前的资源占用队列中不存在目标资源的资源标识,则说明目标资源没有被占用,那么主网络节点可以获取针对目标资源的锁信息并发送给目标锁请求消息对应的客户端。此时可以认为目标资源已经被目标锁请求消息对应的客户端占用,那么主网络节点可以将目标资源的资源标识加入资源占用队列中。锁处理消息为锁请求消息时,主网络节点就按照对目标锁请求消息的处理方式,依次对日志信息中的锁请求消息进行处理。
在另一种可能的实施场景中,锁处理消息为锁释放消息,锁释放消息携带目标资源的资源标识,即客户端向主网络节点声明释放资源标识对应的目标资源。则以日志信息中的一个锁释放消息作为目标锁释放消息为例,主网络节点可以先获取日志信息中目标锁释放消息携带的目标资源的资源标识,检测当前的资源占用队列中是否存在目标资源的资源标识,这里的资源占用队列包括了被占用资源的资源标识,当检测到当前的资源占用队列中存在目标资源的资源标识时,则主网络节点可以从资源占用队列中删除目标资源的资源标识。进一步的,主网络节点从资源占用队列中删除目标资源的资源标识之后,还可以在当前的资源等待队列中查询是否存在携带目标资源的资源标识的目标锁请求消息,这里的资源等待队列包括请求了被占用资源的至少一个锁请求消息。当主网络节点检测到存在携带目标资源的资源标识的目标锁请求消息时,则可以获取针对目标资源的锁信息并发送给目标锁请求消息对应的客户端。也就是说,将当前释放了的目标资源对应的锁信息再分配给等待获取目标资源对应的锁信息的客户端。此时,主网络节点可以将目标资源的资源标识加入资源占用队列中。锁处理消息为锁释放消息时,主网络节点就按照对目标锁释放消息的处理方式,依次对日志信息中的锁释放消息进行处理。
在图2所示的实施例中,主网络节点将接收到的锁处理消息先缓存,根据缓存的至少两个锁处理消息生成一条日志信息,然后向从属于该主网络节点的从网络节点同步该日志信息,当主网络节点确定日志信息同步成功后,对日志信息中的至少两个锁处理消息进行处理。该方法可以对锁处理消息进行批量处理,避免主网络节点频繁地同步锁处理消息和接收确认消息所造成的分布式锁性能的急剧下降。
请参阅图3,图3是本申请实施例提供的另一种分布式锁的实现方法的流程示意图,本实施例中涉及的锁分发节点是分配各锁处理请求给某个主网络节点处理的一个分配节点,可以部署在客户端或服务器内部,也可以部署在其他的独立的网络设备内。所述方法具体包括:
步骤S201,锁分发节点获取锁处理消息,所述锁处理消息包括目标资源的资源标识。
在本申请实施例中,锁处理消息携带目标资源的资源标识,具体可以包括锁请求消息或锁释放消息两种消息类型,其中,锁请求消息用于客户端申请访问目标资源,请求主网络节点分配目标资源对应的锁信息给客户端;锁释放消息用于客户端声明释放目标资源,指示主网络节点可以向其他客户端分配目标资源对应的锁信息。
在一种可能的实施场景中,锁分发节点可以部署在客户端内部,那么锁分发节点可以直接从客户端的消息收发接口获取到锁处理消息。在另一种可能的实施场景中,锁分发节点可以部署在客户端外,例如部署在独立的网络设备中或者部署在网络节点所在的服务器中,那么客户端在接收到锁处理消息后,需要先向锁分发节点转发该锁处理消息,锁分发节点则通过接收客户端发送的锁处理消息来进行获取。
步骤S202,锁分发节点确定资源标识对应的分布式锁节点集合,所述分布式锁节点集合包括主网络节点和至少一个从网络节点。
在图3所示的实施例中,预先将多个分布式锁节点划分成了多个分布式锁节点集合,每个分布式锁节点集合中包括一个主网络节点和至少一个从网络节点。如图1b所示圈出的三组网络节点,就可以认为是三个分布式锁节点集合。在本实施例中,每一个分布式锁节点集合可以对应处理针对一种或者几种特定资源的锁处理请求。需要说明的是,在预先划分分布式锁节点集合时,可以根据各个锁分布式节点的特征,将最有可能成为主网络节点的多个网络节点平均的分布在服务器中,以减少主网络节点的聚集可能性,避免一个服务器中存在过多的主网络节点而导致该服务器的资源消耗过高。
具体的对应关系,可以通过预先建立的资源标识与分布式锁节点集合的对应关系表或对应关系算法来确定。在一种可能的实施场景中,锁分发节点可以根据预设的资源节点映射表,获取资源标识对应的分布式锁节点集合,所述资源节点映射表包括至少一个资源标识以及各资源标识对应的分布式锁节点集合。在另一种可能的实施场景中,资源标识和分布式锁节点集合的标识可以通过预设算法建立对应关系,例如哈希算法,即分布式锁节点集合的标识是该分布式锁节点集合需要处理的资源的资源标识通过哈希运算后得到的key值,也就是说,锁分发节点在接收到锁处理消息后,可以将该消息携带的资源标识进行哈希运算得到key值,确定该计算得到的key值所指示的分布式锁节点集即为锁处理消息中的资源标识对应的分布式锁节点集合。
基于上述对应关系,锁分发节点在获取到锁处理消息后,可以根据锁处理消息中的资源标识确定应该将该锁处理消息分配给哪一个分布式锁节点集合去处理。
步骤S203,锁分发节点向分布式锁节点集合中的主网络节点发送锁处理消息。
锁分发节点在确定了锁处理消息对应的分布式锁节点集合后,可以指示分布式锁节点集合对锁处理消息进行同步和处理,相当于指示分布式锁节点集合中的主网络节点向从网络节点同步该锁处理消息。
在一种可能的实施场景中,锁分发节点可以部署在客户端内部或者部署在独立的网络设备中,那么锁分发节点可以向分布式锁节点集合中的主网络节点发送锁处理消息,以指示分布式锁节点集合对锁处理消息进行同步和处理。具体来说,锁分发节点可以预先存储并动态更新各个分布式锁节点集合中的主网络节点的地址,根据主网络节点的地址向分布式锁节点集合中的主网络节点发送锁处理消息。
在另一种可能的实施场景中,锁分发节点可以部署在主网络节点所在的服务器中,那么锁分发节点可以直接在内部传递锁处理消息,以指示分布式锁节点集合中的主网络节点对锁处理消息进行同步和处理。
步骤S204,分布式锁节点集合中的主网络节点向分布式锁节点集合中的从网络节点同步锁处理消息。
分布式锁节点集合中的主网络节点向分布式锁节点集合中的每一个从网络节点发送锁处理消息,使得每个从网络节点都能够同步的存储主网络节点接收到的锁处理消息。
与步骤S104相似的,当主网络节点是leader时,对应的从网络节点则为follower,当主网络节点是learner时,对应的从网络节点则为acceptor。
步骤S205,当分布式锁节点集合中的主网络节点确定锁处理消息同步成功后,处理锁处理消息。
分布式锁节点集合中的从网络节点接收到分布式锁节点集合中的主网络节点发送的锁处理消息后,对该锁处理消息进行存储,当存储成功后,可以向主网络节点发送确认消息。主网络节点根据接收到的确认消息的数量,可以确定锁处理消息是否同步成功。
具体来说,主网络节点可以预设确认消息数量阈值,当接收到的确认消息的数量达到确认消息数量阈值时,确定锁处理消息同步成功,否则确定锁处理消息同步失败;主网络节点还可以预设确认消息比例阈值,当接收到的确认消息的数量与从属于主网络节点的从网络节点的数量的比值达到确认消息比例阈值时,确定锁处理消息同步成功,否则确定锁处理消息同步失败。
在图3所示的实施例中,锁分发节点先获取锁处理消息,所述锁处理消息包括目标资源的资源标识,然后确定所述资源标识对应的分布式锁节点集合,进而指示所述分布式锁节点集合对所述锁处理消息进行同步和处理,所述分布式锁节点集合包括主网络节点和至少一个从网络节点。该方法可以将针对不同资源的锁处理请求分配给指定的分布式锁节点集合进行处理,从而可以使分布式锁节点集合中的各个网络节点处理的业务更有针对性,提升处理效率,进而提升分布式锁的性能。
请参阅图4,图4是本申请实施例提供的另一种分布式锁的实现方法的流程示意图,该实施例中的具体处理方法可以结合图2和图3所示的实施例。所述方法具体包括:
步骤S301,锁分发节点获取锁处理消息,所述锁处理消息包括目标资源的资源标识。
步骤S302,锁分发节点确定资源标识对应的分布式锁节点集合,所述分布式锁节点集合包括主网络节点和至少一个从网络节点。
步骤S303,锁分发节点向分布式锁节点集合中的主网络节点发送锁处理消息。
步骤S304,分布式锁节点集合中的主网络节点对锁处理消息进行缓存。
步骤S305,分布式锁节点集合中的主网络节点获取当前缓存的至少两个锁处理消息,并根据当前缓存的至少两个锁处理消息生成一条日志信息。
步骤S306,分布式锁节点集合中的主网络节点向分布式锁节点集合中的至少一个从网络节点同步日志信息。
步骤S307,当分布式锁节点集合中的主网络节点确定日志信息同步成功后,对日志信息中的至少两个锁处理消息进行处理。
在图4所示的实施例中,锁分发节点先获取锁处理消息,所述锁处理消息包括目标资源的资源标识,然后确定所述资源标识对应的分布式锁节点集合,进而指示所述分布式锁节点集合对所述锁处理消息进行同步和处理,所述分布式锁节点集合包括主网络节点和至少一个从网络节点。在处理过程中,主网络节点将接收到的锁处理消息先缓存,根据缓存的至少两个锁处理消息生成一条日志信息,然后向分布式锁节点集合中的从网络节点同步该日志信息,当主网络节点确定日志信息同步成功后,对日志信息中的至少两个锁处理消息进行处理。该方法可以将针对不同资源的锁处理消息分配给指定的分布式锁节点集合进行处理,并且还对锁处理消息进行批量处理,既能提升处理效率,又能避免主网络节点频繁地同步锁处理消息和接收确认消息所造成的分布式锁性能的急剧下降,从而可以更好地提升分布式锁的性能。
请参阅图5,图5是本发明实施例提供的一种主网络节点的结构示意图。如图5所示,该主网络节点包括:
接收模块510,用于接收锁处理消息;
处理模块520,用于对所述锁处理消息进行缓存;
所述处理模块520还用于:获取当前缓存的至少两个锁处理消息,并根据当前缓存的所述至少两个锁处理消息生成一条日志信息;
发送模块530,用于向从属于该主网络节点的至少一个从网络节点同步所述日志信息;
所述处理模块520还用于:当确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理。
可选的,所述接收模块510还用于:接收所述至少一个从网络节点存储成功所述日志信息后发送的确认消息;
所述处理模块520具体用于:根据接收到的所述确认消息的数量,确定所述日志消息是否同步成功。
可选的,所述处理模块520具体用于:
将所述锁处理消息缓存在消息缓存队列中,所述消息缓存队列中锁处理消息的排序由各个锁处理消息的接收先后顺序确定;
确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理包括:
当确定所述日志信息同步成功后,按照所述消息缓存队列中各锁处理消息的排序依次对所述消息缓存队列中的锁处理消息进行处理。
可选的,所述锁处理消息携带目标资源的资源标识;
所述处理模块520还用于:
确定本身所属的分布式锁节点集合,所述分布式锁节点集合与所述目标资源的资源标识对应,所述分布式锁节点集合中包括所述主网络节点以及至少一个从网络节点;
所述发送模块530具体用于:
向所述分布式锁节点集合中的至少一个从网络节点同步所述日志信息。
可选的,所述锁处理消息为锁请求消息或锁释放消息。
可选的,所述锁处理消息为锁请求消息,所述锁请求消息携带目标资源的资源标识;
所述处理模块520具体用于:
获取所述日志信息中目标锁请求消息携带的目标资源的资源标识;
检测资源占用队列中是否存在所述目标资源的资源标识;
当检测到当前的资源占用队列中不存在所述目标资源的资源标识时,获取针对所述目标资源的锁信息并发送给所述目标锁请求消息对应的客户端;
将所述目标资源的资源标识加入资源占用队列中。
可选的,所述锁处理消息为锁释放消息,所述锁释放消息携带目标资源的资源标识;
所述处理模块520具体用于:
获取所述日志信息中目标锁释放消息携带的目标资源的资源标识;
检测当前的资源占用队列中是否存在所述目标资源的资源标识;
当检测到当前的资源占用队列中存在所述目标资源的资源标识时,从所述资源占用队列中删除所述目标资源的资源标识。
可选的,所述处理模块520还用于:
在当前的资源等待队列中查询是否存在携带所述目标资源的资源标识的目标锁请求消息;
当检测到存在目标锁请求消息时,获取针对所述目标资源的锁信息并发送给所述目标锁请求消息对应的客户端;
将所述目标资源的资源标识加入资源占用队列中。
本申请实施例涉及的主网络节点所包括的模块可以用于软件实现也可以用于硬件实现。在软件实现时,处理模块520用于对主网络节点的动作进行控制管理。发送模块530和接收模块510用于支持主网络节点与其它网络节点的通信,例如,与客户端之间的通信。各模块分别用于存储实现各模块相应功能的程序代码,各模块的程序代码可以是部分或全部集成在一起的,也可以是可独立实现的程序代码。
在硬件实现时,处理模块520可以是处理器或控制器,例如可以是中央处理器(英文:Central Processing Unit,CPU),通用处理器,数字信号处理器(英文:Digital SignalProcessor,DSP),专用集成电路(英文:Application-Specific Integrated Circuit,ASIC),现场可编程门阵列(英文:Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。发送模块530和接收模块510可以是通信接口、收发器、收发电路等,其中,通信接口是统称,可以包括一个或多个接口。
当处理模块520为处理器,发送模块530和接收模块510为通信接口时,本申请实施例所涉及的主网络节点可以为图6所示的主网络节点。主网络节点对分布式锁的实现方法的详细过程请参照前面方法实施例中的描述,在这里不再赘述。
请参阅图6,图6是本申请实施例提供的另一种主网络节点的结构示意图。如图6所示,该主网络节点包括处理器61、存储器62以及通信接口63。处理器61连接到存储器62和通信接口63,例如处理器61可以通过总线连接到存储器62和通信接口63。
处理器61被配置为支持所述主网络节点执行图2或图4所述方法中相应的功能。该处理器61可以是中央处理器(英文:central processing unit,CPU),网络处理器(英文:network processor,NP),硬件芯片或者其任意组合。上述硬件芯片可以是专用集成电路(英文:application-specific integrated circuit,ASIC),可编程逻辑器件(英文:programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(英文:complex programmable logic device,CPLD),现场可编程逻辑门阵列(英文:field-programmable gate array,FPGA),通用阵列逻辑(英文:generic array logic,GAL)或其任意组合。
存储器62存储器用于存储程序代码及锁处理消息等。存储器62可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random access memory,RAM);存储器62也可以包括非易失性存储器(英文:non-volatile memory),例如只读存储器(英文:read-only memory,ROM),快闪存储器(英文:flash memory),硬盘(英文:hard diskdrive,HDD)或固态硬盘(英文:solid-state drive,SSD);存储器62还可以包括上述种类的存储器的组合。
通信接口63用于与本申请实施例中的与客户端等设备进行通信。
处理器61可以调用所述程序代码以执行以下操作:
通过通信接口63接收锁处理消息;对所述锁处理消息进行缓存;获取当前缓存的至少两个锁处理消息,并根据当前缓存的所述至少两个锁处理消息生成一条日志信息;通过通信接口63向从属于该主网络节点的至少一个从网络节点同步所述日志信息;当确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理。
可选的,处理器61当确定所述日志信息同步成功时具体用于:
通过通信接口63接收所述至少一个从网络节点存储成功所述日志信息后发送的确认消息;根据接收到的所述确认消息的数量,确定所述日志消息是否同步成功。
可选的,处理器61对所述锁处理消息进行缓存时具体用于:
将所述锁处理消息缓存在消息缓存队列中,所述消息缓存队列中锁处理消息的排序由各个锁处理消息的接收先后顺序确定;确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理包括:当确定所述日志信息同步成功后,按照所述消息缓存队列中各锁处理消息的排序依次对所述消息缓存队列中的锁处理消息进行处理。
可选的,所述锁处理消息携带目标资源的资源标识;处理器61向从属于该主网络节点的至少一个从网络节点同步所述日志信息时具体用于:
确定本身所属的分布式锁节点集合,所述分布式锁节点集合与所述目标资源的资源标识对应,所述分布式锁节点集合中包括所述主网络节点以及至少一个从网络节点;通过通信接口63向所述分布式锁节点集合中的至少一个从网络节点同步所述日志信息。
可选的,所述锁处理消息为锁请求消息或锁释放消息。
可选的,所述锁处理消息为锁请求消息,所述锁请求消息携带目标资源的资源标识;处理器61对所述日志信息中的所述至少两个锁处理消息进行处理时具体用于:
获取所述日志信息中目标锁请求消息携带的目标资源的资源标识;检测资源占用队列中是否存在所述目标资源的资源标识;当检测到当前的资源占用队列中不存在所述目标资源的资源标识时,获取针对所述目标资源的锁信息并发送给所述目标锁请求消息对应的客户端;将所述目标资源的资源标识加入资源占用队列中。
可选的,所述锁处理消息为锁释放消息,所述锁释放消息携带目标资源的资源标识;处理器61对所述日志信息中的所述至少两个锁处理消息进行处理时具体用于:
获取所述日志信息中目标锁释放消息携带的目标资源的资源标识;检测当前的资源占用队列中是否存在所述目标资源的资源标识;当检测到当前的资源占用队列中存在所述目标资源的资源标识时,从所述资源占用队列中删除所述目标资源的资源标识。
可选的,处理器61从所述资源占用队列中删除所述目标资源的资源标识之后,还用于:
在当前的资源等待队列中查询是否存在携带所述目标资源的资源标识的目标锁请求消息;当检测到存在目标锁请求消息时,获取针对所述目标资源的锁信息并发送给所述目标锁请求消息对应的客户端;将所述目标资源的资源标识加入资源占用队列中。
需要说明的是,本实施例也可以基于通用的物理服务器结合网络功能虚拟化(英文:Network Function Virtualization,NFV)技术实现的虚拟主网络节点,所述虚拟主网络节点可以是运行有用于分布式锁功能的程序的虚拟机(英文:Virtual Machine,VM),所述虚拟机部署在硬件设备上(例如,物理服务器)。虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
请参阅图7,图7是本发明实施例提供的一种分发节点的结构示意图。如图7所示,该分发节点包括:
处理模块710,用于获取锁处理消息,所述锁处理消息包括目标资源的资源标识;
所述处理模块710还用于:确定所述资源标识对应的分布式锁节点集合,所述分布式锁节点集合包括主网络节点和至少一个从网络节点;
发送模块720,用于向所述分布式锁节点集合中的主网络节点发送所述锁处理消息,所述锁处理消息用于指示所述分布式锁节点集合对所述锁处理消息进行同步和处理。
可选的,所述处理模块710具体用于:
根据预设的资源节点映射表,获取所述资源标识对应的分布式锁节点集合,所述资源节点映射表包括至少一个资源标识以及各资源标识对应的分布式锁节点集合。
可选的,所述网络节点还包括:
接收模块720,用于接收客户端发送的锁处理消息。
可选的,所述锁处理消息为锁请求消息或锁释放消息。
本申请实施例涉及的分发节点所包括的模块可以用于软件实现也可以用于硬件实现。在软件实现时,处理模块710用于对分发节点的动作进行控制管理。发送模块720和接收模块730用于支持分发节点与其它网络节点的通信。各模块分别用于存储实现各模块相应功能的程序代码,各模块的程序代码可以是部分或全部集成在一起的,也可以是可独立实现的程序代码。
在硬件实现时,处理模块710可以是处理器或控制器,例如可以是中央处理器(英文:Central Processing Unit,CPU),通用处理器,数字信号处理器(英文:Digital SignalProcessor,DSP),专用集成电路(英文:Application-Specific Integrated Circuit,ASIC),现场可编程门阵列(英文:Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。发送模块720和接收模块730可以是通信接口、收发器、收发电路等,其中,通信接口是统称,可以包括一个或多个接口。
当处理模块710为处理器,发送模块720和接收模块730为通信接口时,本申请实施例所涉及的分发节点可以为图8所示的分发节点。分发节点对分布式锁的实现方法的详细过程请参照前面方法实施例中的描述,在这里不再赘述。
请参阅图8,图8是本申请实施例提供的另一种分发节点的结构示意图。如图8所示,该分发节点包括处理器81、存储器82以及通信接口83。处理器81连接到存储器82和通信接口83,例如处理器81可以通过总线连接到存储器82和通信接口83。
处理器81被配置为支持所述分发节点执行图3或图4所述方法中相应的功能。该处理器81可以是中央处理器(英文:central processing unit,CPU),网络处理器(英文:network processor,NP),硬件芯片或者其任意组合。上述硬件芯片可以是专用集成电路(英文:application-specific integrated circuit,ASIC),可编程逻辑器件(英文:programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(英文:complex programmable logic device,CPLD),现场可编程逻辑门阵列(英文:field-programmable gate array,FPGA),通用阵列逻辑(英文:generic array logic,GAL)或其任意组合。
存储器82存储器用于存储程序代码及锁处理消息等。存储器82可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random access memory,RAM);存储器82也可以包括非易失性存储器(英文:non-volatile memory),例如只读存储器(英文:read-only memory,ROM),快闪存储器(英文:flash memory),硬盘(英文:hard diskdrive,HDD)或固态硬盘(英文:solid-state drive,SSD);存储器82还可以包括上述种类的存储器的组合。
通信接口83用于与本申请实施例中的与其他网络设备进行通信。
处理器81可以调用所述程序代码以执行以下操作:
获取锁处理消息,所述锁处理消息包括目标资源的资源标识;确定所述资源标识对应的分布式锁节点集合,所述分布式锁节点集合包括主网络节点和至少一个从网络节点;通过通信接口83向所述分布式锁节点集合中的主网络节点发送所述锁处理消息,所述锁处理消息用于指示所述分布式锁节点集合对所述锁处理消息进行同步和处理。
可选的,处理器81确定所述资源标识对应的分布式锁节点集合时具体用于:
根据预设的资源节点映射表,获取所述资源标识对应的分布式锁节点集合,所述资源节点映射表包括至少一个资源标识以及各资源标识对应的分布式锁节点集合。
可选的,处理器81获取锁处理消息时具体用于:
通信接口83接收客户端发送的锁处理消息。
可选的,所述锁处理消息为锁请求消息或锁释放消息。
需要说明的是,本实施例也可以基于通用的物理服务器结合网络功能虚拟化(英文:Network Function Virtualization,NFV)技术实现的虚拟分发节点,所述虚拟分发节点可以是运行有用于锁处理消息分发功能的程序的虚拟机(英文:Virtual Machine,VM),所述虚拟机部署在硬件设备上(例如,物理服务器)。虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
请参阅图9,图9是本发明实施例提供的另一种主网络节点的结构示意图。如图9所示,该主网络节点包括:
接收模块910,用于接收锁处理消息,所述锁处理消息包括目标资源的资源标识,所述资源标识与所述主网络节点所属的分布式锁节点集合对应,所述分布式锁节点集合包括所述主网络节点以及至少一个从网络节点;
发送模块920,用于向所述分布式锁节点集合中的从网络节点同步所述锁处理消息;
处理模块930,用于当确定所述锁处理消息同步成功后,对所述锁处理消息进行处理。
可选的,所述接收模块910具体用于:接收客户端发送的锁处理消息。
可选的,所述处理模块930还用于:
对所述锁处理消息进行缓存;
获取当前缓存的至少两个锁处理消息,并根据当前缓存的所述至少两个锁处理消息生成一条日志信息;
所述发送模块920具体用于:
向所述分布式锁节点集合中的从网络节点同步所述日志信息;
所述处理模块930具体用于:
当确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理。
可选的,所述接收模块910还用于:
接收所述分布式锁节点集合中的至少一个从网络节点存储成功所述日志信息后发送的确认消息;
所述处理模块930具体用于:
根据接收到的所述确认消息的数量,确定所述日志消息是否同步成功。
可选的,所述处理模块930具体用于:
将所述锁处理消息缓存在消息缓存队列中,所述消息缓存队列中锁处理消息的排序由各个锁处理消息的接收先后顺序确定;
确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理包括:
当确定所述日志信息同步成功后,按照在所述处理消息缓存队列中各锁处理消息的排序依次对处理消息缓存队列中的锁处理消息进行处理。
可选的,所述锁处理消息为锁请求消息或锁释放消息。
本申请实施例涉及的主网络节点所包括的模块可以用于软件实现也可以用于硬件实现。在软件实现时,处理模块930用于对主网络节点的动作进行控制管理。发送模块920和接收模块910用于支持主网络节点与其它网络节点的通信,例如,与客户端之间的通信。各模块分别用于存储实现各模块相应功能的程序代码,各模块的程序代码可以是部分或全部集成在一起的,也可以是可独立实现的程序代码。
在硬件实现时,处理模块930可以是处理器或控制器,例如可以是中央处理器(英文:Central Processing Unit,CPU),通用处理器,数字信号处理器(英文:Digital SignalProcessor,DSP),专用集成电路(英文:Application-Specific Integrated Circuit,ASIC),现场可编程门阵列(英文:Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。发送模块920和接收模块910可以是通信接口、收发器、收发电路等,其中,通信接口是统称,可以包括一个或多个接口。
当处理模块930为处理器,发送模块920和接收模块910为通信接口时,本申请实施例所涉及的主网络节点可以为图10所示的主网络节点。主网络节点对分布式锁的实现方法的详细过程请参照前面方法实施例中的描述,在这里不再赘述。
请参阅图10,图10是本申请实施例提供的另一种主网络节点的结构示意图。如图10所示,该主网络节点包括处理器101、存储器102以及通信接口103。处理器101连接到存储器102和通信接口103,例如处理器101可以通过总线连接到存储器102和通信接口103。
处理器101被配置为支持所述主网络节点执行图3或图4所述方法中相应的功能。该处理器101可以是中央处理器(英文:central processing unit,CPU),网络处理器(英文:network processor,NP),硬件芯片或者其任意组合。上述硬件芯片可以是专用集成电路(英文:application-specific integrated circuit,ASIC),可编程逻辑器件(英文:programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(英文:complex programmable logic device,CPLD),现场可编程逻辑门阵列(英文:field-programmable gate array,FPGA),通用阵列逻辑(英文:generic array logic,GAL)或其任意组合。
存储器102存储器用于存储程序代码及锁处理消息等。存储器102可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random access memory,RAM);存储器102也可以包括非易失性存储器(英文:non-volatile memory),例如只读存储器(英文:read-only memory,ROM),快闪存储器(英文:flash memory),硬盘(英文:harddisk drive,HDD)或固态硬盘(英文:solid-state drive,SSD);存储器102还可以包括上述种类的存储器的组合。
通信接口103用于与本申请实施例中的与客户端等设备进行通信。
处理器101可以调用所述程序代码以执行以下操作:
通过通信接口103接收锁处理消息,所述锁处理消息包括目标资源的资源标识,所述资源标识与所述主网络节点所属的分布式锁节点集合对应,所述分布式锁节点集合包括所述主网络节点以及至少一个从网络节点;通过通信接口103向所述分布式锁节点集合中的从网络节点同步所述锁处理消息;当确定所述锁处理消息同步成功后,对所述锁处理消息进行处理。
可选的,处理器101接收锁处理消息时具体用于括:
通过通信接口103接收客户端发送的锁处理消息。
可选的,处理器101向所述分布式锁节点集合中的从网络节点同步所述锁处理消息之前,还用于:
对所述锁处理消息进行缓存;获取当前缓存的至少两个锁处理消息,并根据当前缓存的所述至少两个锁处理消息生成一条日志信息;
处理器101向所述分布式锁节点集合中的从网络节点同步所述锁处理消息时具体用于:
通过通信接口103向所述分布式锁节点集合中的从网络节点同步所述日志信息;
处理器101确定所述锁处理消息同步成功后,对所述锁处理消息进行处理时具体用于:
当确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理。
可选的,处理器101当确定所述日志信息同步成功时具体用于:
通过通信接口103接收所述分布式锁节点集合中的至少一个从网络节点存储成功所述日志信息后发送的确认消息;根据接收到的所述确认消息的数量,确定所述日志消息是否同步成功。
可选的,处理器101对所述锁处理消息进行缓存时具体用于:
将所述锁处理消息缓存在消息缓存队列中,所述消息缓存队列中锁处理消息的排序由各个锁处理消息的接收先后顺序确定;
处理器101当确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理时具体用于:
当确定所述日志信息同步成功后,按照在所述处理消息缓存队列中各锁处理消息的排序依次对处理消息缓存队列中的锁处理消息进行处理。
可选的,所述锁处理消息为锁请求消息或锁释放消息。
需要说明的是,本实施例也可以基于通用的物理服务器结合网络功能虚拟化(英文:Network Function Virtualization,NFV)技术实现的虚拟主网络节点,所述虚拟主网络节点可以是运行有用于分布式锁功能的程序的虚拟机(英文:Virtual Machine,VM),所述虚拟机部署在硬件设备上(例如,物理服务器)。虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (12)
1.一种分布式锁的实现方法,其特征在于,所述方法包括:
主网络节点接收锁处理消息;
所述主网络节点对所述锁处理消息进行缓存;
所述主网络节点获取当前缓存的至少两个锁处理消息,并根据当前缓存的所述至少两个锁处理消息生成一条日志信息;
所述主网络节点向从属于该主网络节点的至少一个从网络节点同步所述日志信息;
当所述主网络节点确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理。
2.如权利要求1所述的方法,其特征在于,所述当所述主网络节点确定所述日志信息同步成功包括:
所述主网络节点接收所述至少一个从网络节点存储成功所述日志信息后发送的确认消息;
所述主网络节点根据接收到的所述确认消息的数量,确定所述日志信息是否同步成功。
3.如权利要求1或2所述的方法,其特征在于,所述主网络节点对所述锁处理消息进行缓存包括:
所述主网络节点将所述锁处理消息缓存在消息缓存队列中,所述消息缓存队列中锁处理消息的排序由各个锁处理消息的接收先后顺序确定;
所述当所述主网络节点确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理包括:
当所述主网络节点确定所述日志信息同步成功后,按照所述消息缓存队列中各锁处理消息的排序依次对所述消息缓存队列中的锁处理消息进行处理。
4.如权利要求1-2任一项所述的方法,其特征在于,所述锁处理消息携带目标资源的资源标识;
所述主网络节点向从属于该主网络节点的至少一个从网络节点同步所述日志信息包括:
所述主网络节点确定本身所属的分布式锁节点集合,所述分布式锁节点集合与所述目标资源的资源标识对应,所述分布式锁节点集合中包括所述主网络节点以及至少一个从网络节点;
所述主网络节点向所述分布式锁节点集合中的至少一个从网络节点同步所述日志信息。
5.如权利要求1-2任一项所述的方法,其特征在于,所述锁处理消息为锁请求消息或锁释放消息。
6.一种主网络节点,其特征在于,所述主网络节点包括:
接收模块,用于接收锁处理消息;
处理模块,用于对所述锁处理消息进行缓存;
所述处理模块还用于:获取当前缓存的至少两个锁处理消息,并根据当前缓存的所述至少两个锁处理消息生成一条日志信息;
发送模块,用于向从属于该主网络节点的至少一个从网络节点同步所述日志信息;
所述处理模块还用于:当确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理。
7.如权利要求6所述的主网络节点,其特征在于,
所述接收模块还用于:接收所述至少一个从网络节点存储成功所述日志信息后发送的确认消息;
所述处理模块具体用于:根据接收到的所述确认消息的数量,确定所述日志信息是否同步成功。
8.如权利要求6或7所述的主网络节点,其特征在于,所述处理模块具体用于:
将所述锁处理消息缓存在消息缓存队列中,所述消息缓存队列中锁处理消息的排序由各个锁处理消息的接收先后顺序确定;
确定所述日志信息同步成功后,对所述日志信息中的所述至少两个锁处理消息进行处理包括:
当确定所述日志信息同步成功后,按照所述消息缓存队列中各锁处理消息的排序依次对所述消息缓存队列中的锁处理消息进行处理。
9.如权利要求6-7任一项所述的主网络节点,其特征在于,所述锁处理消息携带目标资源的资源标识;
所述处理模块还用于:
确定本身所属的分布式锁节点集合,所述分布式锁节点集合与所述目标资源的资源标识对应,所述分布式锁节点集合中包括所述主网络节点以及至少一个从网络节点;
所述发送模块具体用于:
向所述分布式锁节点集合中的至少一个从网络节点同步所述日志信息。
10.如权利要求6-7任一项所述的主网络节点,其特征在于,所述锁处理消息为锁请求消息或锁释放消息。
11.一种分布式锁系统,其特征在于,所述系统包括分发节点和主网络节点,所述主网络节点用于执行权利要求1至权利要求5所述的方法。
12.一种计算机可读取存储介质,其特征在于,所述计算机可读取存储介质存储有计算机程序,其中,所述计算机程序被硬件执行之时,能够实现权利要求1至5任意一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710283923.6A CN106936931B (zh) | 2017-04-26 | 2017-04-26 | 分布式锁的实现方法、相关设备及系统 |
CN202010733601.9A CN112073456B (zh) | 2017-04-26 | 2017-04-26 | 分布式锁的实现方法、相关设备及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710283923.6A CN106936931B (zh) | 2017-04-26 | 2017-04-26 | 分布式锁的实现方法、相关设备及系统 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010733601.9A Division CN112073456B (zh) | 2017-04-26 | 2017-04-26 | 分布式锁的实现方法、相关设备及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106936931A CN106936931A (zh) | 2017-07-07 |
CN106936931B true CN106936931B (zh) | 2020-09-04 |
Family
ID=59437181
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710283923.6A Active CN106936931B (zh) | 2017-04-26 | 2017-04-26 | 分布式锁的实现方法、相关设备及系统 |
CN202010733601.9A Active CN112073456B (zh) | 2017-04-26 | 2017-04-26 | 分布式锁的实现方法、相关设备及系统 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010733601.9A Active CN112073456B (zh) | 2017-04-26 | 2017-04-26 | 分布式锁的实现方法、相关设备及系统 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN106936931B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112073456A (zh) * | 2017-04-26 | 2020-12-11 | 华为技术有限公司 | 分布式锁的实现方法、相关设备及系统 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108540324B (zh) * | 2018-04-12 | 2021-05-25 | 网易(杭州)网络有限公司 | 登录游戏系统的方法、装置和系统 |
CN108768698B (zh) * | 2018-05-02 | 2021-04-20 | 长沙学院 | 一种基于sdn的多控制器动态部署方法和系统 |
CN109376014B (zh) * | 2018-10-19 | 2021-07-02 | 郑州云海信息技术有限公司 | 一种分布式锁管理器实现方法和系统 |
CN111083192B (zh) * | 2019-11-05 | 2023-02-17 | 北京字节跳动网络技术有限公司 | 数据共识方法、装置及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103997498A (zh) * | 2014-05-27 | 2014-08-20 | 北京京东尚科信息技术有限公司 | 一种分布式锁服务的实现方法及组件 |
CN104065636A (zh) * | 2013-07-02 | 2014-09-24 | 腾讯科技(深圳)有限公司 | 数据处理方法和系统 |
CN104239418A (zh) * | 2014-08-19 | 2014-12-24 | 天津南大通用数据技术股份有限公司 | 支持分布式数据库的分布锁方法以及分布式数据库系统 |
CN104520845A (zh) * | 2012-09-06 | 2015-04-15 | 惠普发展公司,有限责任合伙企业 | 可伸缩文件系统 |
CN105208124A (zh) * | 2015-09-29 | 2015-12-30 | 华为技术有限公司 | 管理锁的方法及装置、确定锁管理服务器的方法及装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050086384A1 (en) * | 2003-09-04 | 2005-04-21 | Johannes Ernst | System and method for replicating, integrating and synchronizing distributed information |
US7403945B2 (en) * | 2004-11-01 | 2008-07-22 | Sybase, Inc. | Distributed database system providing data and space management methodology |
US9575985B2 (en) * | 2009-12-07 | 2017-02-21 | Novell, Inc. | Distributed lock administration |
CN103297268B (zh) * | 2013-05-13 | 2016-04-06 | 北京邮电大学 | 基于p2p技术的分布式数据一致性维护系统和方法 |
CN103559319B (zh) * | 2013-11-21 | 2017-07-07 | 华为技术有限公司 | 分布式集群文件系统的缓存同步方法和设备 |
WO2015134679A2 (en) * | 2014-03-05 | 2015-09-11 | Scality, S.A. | Locking and i/o improvements of systems built with distributed consistent database implementations within an object store |
CN105426271B (zh) * | 2015-12-22 | 2018-09-21 | 华为技术有限公司 | 对分布式存储系统的锁管理的方法和装置 |
CN106936931B (zh) * | 2017-04-26 | 2020-09-04 | 华为技术有限公司 | 分布式锁的实现方法、相关设备及系统 |
-
2017
- 2017-04-26 CN CN201710283923.6A patent/CN106936931B/zh active Active
- 2017-04-26 CN CN202010733601.9A patent/CN112073456B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104520845A (zh) * | 2012-09-06 | 2015-04-15 | 惠普发展公司,有限责任合伙企业 | 可伸缩文件系统 |
CN104065636A (zh) * | 2013-07-02 | 2014-09-24 | 腾讯科技(深圳)有限公司 | 数据处理方法和系统 |
CN103997498A (zh) * | 2014-05-27 | 2014-08-20 | 北京京东尚科信息技术有限公司 | 一种分布式锁服务的实现方法及组件 |
CN104239418A (zh) * | 2014-08-19 | 2014-12-24 | 天津南大通用数据技术股份有限公司 | 支持分布式数据库的分布锁方法以及分布式数据库系统 |
CN105208124A (zh) * | 2015-09-29 | 2015-12-30 | 华为技术有限公司 | 管理锁的方法及装置、确定锁管理服务器的方法及装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112073456A (zh) * | 2017-04-26 | 2020-12-11 | 华为技术有限公司 | 分布式锁的实现方法、相关设备及系统 |
CN112073456B (zh) * | 2017-04-26 | 2022-01-07 | 华为技术有限公司 | 分布式锁的实现方法、相关设备及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106936931A (zh) | 2017-07-07 |
CN112073456A (zh) | 2020-12-11 |
CN112073456B (zh) | 2022-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106936931B (zh) | 分布式锁的实现方法、相关设备及系统 | |
CN109688235B (zh) | 虚拟网络业务处理方法、装置和系统,控制器,存储介质 | |
US10698772B2 (en) | Storage system with multiple write journals supporting synchronous replication failure recovery | |
CN110402568B (zh) | 一种通信的方法及装置 | |
US8935560B2 (en) | System and method of file locking in a network file system federated namespace | |
US9875259B2 (en) | Distribution of an object in volatile memory across a multi-node cluster | |
US9917884B2 (en) | File transmission method, apparatus, and distributed cluster file system | |
US20100138540A1 (en) | Method of managing organization of a computer system, computer system, and program for managing organization | |
JP2006338666A (ja) | 分散カーネルオペレーティングシステム | |
EP3739440A1 (en) | Distributed storage system, data processing method and storage node | |
US11231964B2 (en) | Computing device shared resource lock allocation | |
JP2006340354A (ja) | 分散カーネルオペレーティングシステム | |
US11079961B1 (en) | Storage system with write-via-hash functionality for synchronous replication of logical storage volumes | |
CN113360077B (zh) | 数据存储方法、计算节点及存储系统 | |
CN113282564B (zh) | 数据存储方法、系统、节点和存储介质 | |
WO2020253407A1 (zh) | 一种执行写操作、读操作的方法及装置 | |
US8230086B2 (en) | Hidden group membership in clustered computer system | |
US20210117235A1 (en) | Storage system with efficient release of address lock waiters during synchronous replication | |
CN109783002B (zh) | 数据读写方法、管理设备、客户端和存储系统 | |
EP3355181B1 (en) | Method and apparatus for responding to request based on node controller | |
CN110046138B (zh) | 一种iSCSI目标器多实例处理方法及分布式存储系统 | |
CN109710183B (zh) | 一种数据同步方法及装置 | |
CN109992447B (zh) | 数据复制方法、装置及存储介质 | |
WO2022267909A1 (zh) | 一种数据读写方法以及相关装置 | |
EP3346671B1 (en) | Service processing method and equipment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |