CN112486695A - 一种高并发业务下的分布式锁实现方法 - Google Patents
一种高并发业务下的分布式锁实现方法 Download PDFInfo
- Publication number
- CN112486695A CN112486695A CN202011418044.8A CN202011418044A CN112486695A CN 112486695 A CN112486695 A CN 112486695A CN 202011418044 A CN202011418044 A CN 202011418044A CN 112486695 A CN112486695 A CN 112486695A
- Authority
- CN
- China
- Prior art keywords
- temporary ordered
- distributed lock
- ordered node
- thread
- zookeeper
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 230000003993 interaction Effects 0.000 claims abstract description 13
- 238000004891 communication Methods 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 10
- 230000004044 response Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 101100235006 Mus musculus Lctl gene Proteins 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
Abstract
本发明公开一种高并发业务下的分布式锁实现方法,涉及分布式数据通信技术领域;在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。
Description
技术领域
本发明公开一种实现方法,涉及分布式数据通信技术领域,具体地说是一种高并发业务下的分布式锁实现方法。
背景技术
随着业务的不断拓展和复杂性的不断提高,早期的DOS系统秉承的单程序单线程的设计理念逐渐不能满足业务场景的需要,因此催生了在硬件不断发展的时代下,并发执行任务的设计模式。影响并发量的因素会更多的集中于市场的推广和用户体量的增大,传统的架构和现实的生产环境会产生脱轨。
而在高并发的支撑上,数据治理和数据资产的管理也对整个系统提出了要求,关键业务数据的同步非常重要。在单独的进程中,对多线程进行Synchronized锁同步,增强业务的原子性,但是也对整体操作系统的性能造成了极大的影响,OS内核对对象Monitor进行上锁的模式,在线程数据逐渐增多的场景下,容易导致单机系统极大的负担。
发明内容
本发明针对现有技术的问题,提供一种高并发业务下的分布式锁实现方法,具有通用性强、实施简便等特点,具有广阔的应用前景。
本发明提出的具体方案是:
一种高并发业务下的分布式锁实现方法,在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,
判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,
否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,
下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。
优选地,所述的一种高并发业务下的分布式锁实现方法中当需获得分布式锁,当前线程在zookeeper创建临时有序节点,并获取所有临时有序节点的信息,判断当前线程创建的临时有序节点是否为最小临时有序节点。
优选地,所述的一种高并发业务下的分布式锁实现方法中依据临时有序节点的信息,获取临时有序节点的时间差进行最小临时有序节点的判断。
优选地,所述的一种高并发业务下的分布式锁实现方法中在跨进程的集群系统中,通过docker中配置zookeeper:
启动docker服务器,
查询docker镜像仓库中zookeeper的镜像,
拉取zookeeper官方镜像,
查询docker本地镜像,
启动zookeeper官方镜像,完成配置。
一种高并发业务下的分布式锁实现系统,包括交互模块、判断模块及释放模块,
交互模块在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,
判断模块判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,
否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,
释放模块协助下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。
优选地,所述的一种高并发业务下的分布式锁实现系统中当需获得分布式锁,交互模块协助当前线程在zookeeper创建临时有序节点,并获取所有临时有序节点的信息,判断当前线程创建的临时有序节点是否为最小临时有序节点。
优选地,所述的一种高并发业务下的分布式锁实现系统中判断模块依据临时有序节点的信息,获取临时有序节点的时间差进行最小临时有序节点的判断。
一种高并发业务下的分布式锁实现装置,包括至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行所述的一种高并发业务下的分布式锁实现方法。
本发明的有益之处是:
本发明提供一种高并发业务下的分布式锁实现方法,部署在集群中的业务系统,通过zookeeper的临时有序节点与线程进行交互,判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,避免了恶性竞争及争抢的线程数量太大,给CPU造成极大负担,造成资源的浪费,减小了OS维护Synchronized锁的性能损耗,保证了多个进程的线程操作同一业务流程数据时的数据同步,避免了脏读等问题的发生。
附图说明
图1是本发明方法流程示意图。
具体实施方式
常见的概念:
高并发(high concurrency)是指在同一个时间点,有很多用户同时的访问同一API接口或者Url地址。
高并发相关常用的一些指标有响应时间(ResponseTime),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要10ms,这个10ms就是系统的响应时间。
吞吐量:单位时间内处理的请求数量。
每秒查询率:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。
并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
而互联网系统的不断发展,催生了垂直拓展和水平扩展两种提高系统并发能力的方式。
分布式系统(Distributed System)是多个处理机通过通信线路互联而构成的松散耦合的系统,具备分布性、自治性、并行性和全局性,是针对于水平拓展提高系统并发能力提出的设计模式。
分布式锁(Distributed lock)是控制分布式系统之间同步访问共享资源的一种方式。分布式系统中,常常需要协调他们的动作,如果不同的系统或是同一个系统的不同主机之间共享一个或者一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,这个时候需要使用到分布式锁。
Zookeeper是一种分布式协调中间件,根据不同计算机上的节点,协调它们的访问顺序。zookeeper提供了多种场景包括分布式锁,分布式队列,服务注册,配置中心,全局ID等都是基于zookeeper提供的特性,但是归根结底还是分布式协调中间件。
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。
本发明提供一种高并发业务下的分布式锁实现方法,在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,
判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,
否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,
下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。
本发明主要基于高并发场景下,跨进程上锁的一种实现方式,部署在集群中的业务系统,将分布式锁交给zookeeper管理,减小了OS维护Synchronized锁的性能损耗,保证了多个进程的线程操作同一业务流程数据时的数据同步,避免了脏读等问题的发生。
具有应用中,在本发明的一些实施例中,在集群中的业务系统中,利用docker中配置zookeeper服务:
启动docker服务器:systemctl start docker,
查询docker镜像仓库中zookeeper的镜像:docker search zookeeper,
拉取官方镜像:docker pull zookeeper,
查询本地镜像:docker image,
启动zookeeper官方镜像:docker run-d-p 2181:2181–name some-zookeeper–restart always zookeeper,
查询启动的镜像容器:docker ps,
进入容器内部操作:docker exec-it***bash。
利用zookeeper对节点进行增删改查,其中当客户端试图获得锁的时候,当前线程在zookeeper创建一个临时有序节点,并且返回回来此时所有临时有序节点的信息,对所有临时有序节点排序,以此来判断当前创建的节点是否在locks下的所有节点中最小的,如果是最小的,则此线程获得锁,如果不是最小的,进行zookeeper使用Watcher进行监听Watch并阻塞线程,而进行watch的节点进行更改的时候,则notifyAll唤醒所有阻塞的线程再一次进行争抢,本发明监听当前线程的临时有序节点的邻近的上一个临时有序节点,避免争抢的线程数量太大,给CPU造成极大负担,造成资源的浪费的恶性竞争。
在上述实施的基础上,若线程准备获得分布式锁,如果拿不到则进入block阻塞状态,调用acquire方法中会调用internalLock方法,判断其返回值,而internalLock中会设置可重入锁:
获得锁之后会获得在zookeeper服务端的路径,此进程会和此锁进行绑定。
在代码模拟场景中,模拟了一千个非线程池分配的线程,与远程服务器上的zookeeper进行交互,在真实场景中,zookeeper无法分辨交互的线程是否为同一个进程中,则视为分布式的跨进程访问。
运行结果表示,多个线程中只有一个线程会优先抢到锁,只有当其释放锁,下一个线程才能拿到此锁,符合线程安全场景。通过zookeeper的分布式协调的特性,成功的建立了线程安全级别的分布式锁。
同时本发明提供一种高并发业务下的分布式锁实现系统,包括交互模块、判断模块及释放模块,
交互模块在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,
判断模块判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,
否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,
释放模块协助下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。
上述系统内的各模块之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
以及本发明提供一种高并发业务下的分布式锁实现装置,包括至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行所述的一种高并发业务下的分布式锁实现方法。
上述装置内的处理器的信息交互、执行可读程序过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
需要说明的是,上述较佳实施例中各流程和各系统装置结构中不是所有的步骤和模块都是必须的,可以根据实际的需要忽略某些步骤或模块。各步骤的执行顺序不是固定的,可以根据需要进行调整。上述各实施例中描述的系统结构可以是物理结构,也可以是逻辑结构,即,有些模块可能由同一物理实体实现,或者,有些模块可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。
Claims (8)
1.一种高并发业务下的分布式锁实现方法,其特征是在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,
判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,
否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,
下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。
2.根据权利要求1所述的一种高并发业务下的分布式锁实现方法,其特征是当需获得分布式锁,当前线程在zookeeper创建临时有序节点,并获取所有临时有序节点的信息,判断当前线程创建的临时有序节点是否为最小临时有序节点。
3.根据权利要求2所述的一种高并发业务下的分布式锁实现方法,其特征是依据临时有序节点的信息,获取临时有序节点的时间差进行最小临时有序节点的判断。
4.根据权利要求1-3任一所述的一种高并发业务下的分布式锁实现方法,其特征是在跨进程的集群系统中,通过docker中配置zookeeper:
启动docker服务器,
查询docker镜像仓库中zookeeper的镜像,
拉取zookeeper官方镜像,
查询docker本地镜像,
启动zookeeper官方镜像,完成配置。
5.一种高并发业务下的分布式锁实现系统,其特征是包括交互模块、判断模块及释放模块,
交互模块在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,
判断模块判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,
否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,
释放模块协助下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。
6.根据权利要求5所述的一种高并发业务下的分布式锁实现系统,其特征是当需获得分布式锁,交互模块协助当前线程在zookeeper创建临时有序节点,并获取所有临时有序节点的信息,判断当前线程创建的临时有序节点是否为最小临时有序节点。
7.根据权利要求6所述的一种高并发业务下的分布式锁实现系统,其特征是判断模块依据临时有序节点的信息,获取临时有序节点的时间差进行最小临时有序节点的判断。
8.一种高并发业务下的分布式锁实现装置,其特征是包括至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行权利要求1至4中任一所述的一种高并发业务下的分布式锁实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011418044.8A CN112486695A (zh) | 2020-12-07 | 2020-12-07 | 一种高并发业务下的分布式锁实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011418044.8A CN112486695A (zh) | 2020-12-07 | 2020-12-07 | 一种高并发业务下的分布式锁实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112486695A true CN112486695A (zh) | 2021-03-12 |
Family
ID=74939927
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011418044.8A Pending CN112486695A (zh) | 2020-12-07 | 2020-12-07 | 一种高并发业务下的分布式锁实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112486695A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535362A (zh) * | 2021-07-26 | 2021-10-22 | 北京计算机技术及应用研究所 | 一种分布式调度系统架构和微服务工作流调度方法 |
CN114661742A (zh) * | 2022-03-28 | 2022-06-24 | 浪潮卓数大数据产业发展有限公司 | 基于Zookeeper的分布式锁的获取方法及系统 |
CN114785640A (zh) * | 2022-06-23 | 2022-07-22 | 奇秦科技(北京)股份有限公司 | 一种物联网网关集群组件设计方法 |
CN115185673A (zh) * | 2022-05-17 | 2022-10-14 | 贝壳找房(北京)科技有限公司 | 分布式定时任务调度方法、系统、存储介质及程序产品 |
CN115878335A (zh) * | 2021-09-27 | 2023-03-31 | 华为技术有限公司 | 一种锁传递方法及相关装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106712981A (zh) * | 2015-07-23 | 2017-05-24 | 阿里巴巴集团控股有限公司 | 一种节点变更通知方法及装置 |
CN108897628A (zh) * | 2018-05-25 | 2018-11-27 | 北京奇艺世纪科技有限公司 | 一种分布式锁的实现方法、装置及电子设备 |
-
2020
- 2020-12-07 CN CN202011418044.8A patent/CN112486695A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106712981A (zh) * | 2015-07-23 | 2017-05-24 | 阿里巴巴集团控股有限公司 | 一种节点变更通知方法及装置 |
CN108897628A (zh) * | 2018-05-25 | 2018-11-27 | 北京奇艺世纪科技有限公司 | 一种分布式锁的实现方法、装置及电子设备 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535362A (zh) * | 2021-07-26 | 2021-10-22 | 北京计算机技术及应用研究所 | 一种分布式调度系统架构和微服务工作流调度方法 |
CN115878335A (zh) * | 2021-09-27 | 2023-03-31 | 华为技术有限公司 | 一种锁传递方法及相关装置 |
CN114661742A (zh) * | 2022-03-28 | 2022-06-24 | 浪潮卓数大数据产业发展有限公司 | 基于Zookeeper的分布式锁的获取方法及系统 |
CN115185673A (zh) * | 2022-05-17 | 2022-10-14 | 贝壳找房(北京)科技有限公司 | 分布式定时任务调度方法、系统、存储介质及程序产品 |
CN115185673B (zh) * | 2022-05-17 | 2023-10-31 | 贝壳找房(北京)科技有限公司 | 分布式定时任务调度方法、系统、存储介质及程序产品 |
CN114785640A (zh) * | 2022-06-23 | 2022-07-22 | 奇秦科技(北京)股份有限公司 | 一种物联网网关集群组件设计方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112486695A (zh) | 一种高并发业务下的分布式锁实现方法 | |
CN108874552B (zh) | 分布式锁执行方法、装置及系统、应用服务器和存储介质 | |
CN106790694B (zh) | 分布式系统及分布式系统中目标对象的调度方法 | |
US9274857B2 (en) | Method and system for detecting work completion in loosely coupled components | |
US7228351B2 (en) | Method and apparatus for managing resource contention in a multisystem cluster | |
EP3312723B1 (en) | Command processing method and server | |
US11675622B2 (en) | Leader election with lifetime term | |
CN111970198A (zh) | 一种服务路由方法、装置、电子设备及介质 | |
US10871918B2 (en) | Writing composite objects to a data store | |
CN110413822B (zh) | 离线图像结构化分析方法、装置、系统和存储介质 | |
WO2021107988A1 (en) | Distributed processing of transactions in a network using timestamps | |
US9110715B2 (en) | System and method for using a sequencer in a concurrent priority queue | |
CN102857537A (zh) | 一种远程调用方法、装置和系统 | |
US8380788B2 (en) | System and method for providing user context support in a native transaction platform | |
CN117056116B (zh) | 一种流程管理方法和电子设备 | |
CN113535362A (zh) | 一种分布式调度系统架构和微服务工作流调度方法 | |
CN110727507B (zh) | 一种消息的处理方法、装置、计算机设备和存储介质 | |
CN113806031A (zh) | 通过对象锁保护资源的方法和装置 | |
CN107025257A (zh) | 一种事务处理方法及装置 | |
CN112988777A (zh) | 对象处理方法、装置、计算机设备和存储介质 | |
CN112667409A (zh) | 一种可重入的分布式排它锁实现方法 | |
CN111930503A (zh) | 一种基于etcd的资源锁获取方法 | |
CN115114311A (zh) | 一种事务执行方法以及相关装置 | |
CN114327797A (zh) | 数据协同初始化方法及其装置、设备、介质 | |
CN114968529A (zh) | 定时器实现方法及相关产品 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210312 |
|
RJ01 | Rejection of invention patent application after publication |