一种高并发业务下的分布式锁实现方法与流程

    专利2022-07-08  79


    本发明公开一种实现方法,涉及分布式数据通信技术领域,具体地说是一种高并发业务下的分布式锁实现方法。



    背景技术:

    随着业务的不断拓展和复杂性的不断提高,早期的dos系统秉承的单程序单线程的设计理念逐渐不能满足业务场景的需要,因此催生了在硬件不断发展的时代下,并发执行任务的设计模式。影响并发量的因素会更多的集中于市场的推广和用户体量的增大,传统的架构和现实的生产环境会产生脱轨。

    而在高并发的支撑上,数据治理和数据资产的管理也对整个系统提出了要求,关键业务数据的同步非常重要。在单独的进程中,对多线程进行synchronized锁同步,增强业务的原子性,但是也对整体操作系统的性能造成了极大的影响,os内核对对象monitor进行上锁的模式,在线程数据逐渐增多的场景下,容易导致单机系统极大的负担。



    技术实现要素:

    本发明针对现有技术的问题,提供一种高并发业务下的分布式锁实现方法,具有通用性强、实施简便等特点,具有广阔的应用前景。

    本发明提出的具体方案是:

    一种高并发业务下的分布式锁实现方法,在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,

    判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,

    否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,

    下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。

    优选地,所述的一种高并发业务下的分布式锁实现方法中当需获得分布式锁,当前线程在zookeeper创建临时有序节点,并获取所有临时有序节点的信息,判断当前线程创建的临时有序节点是否为最小临时有序节点。

    优选地,所述的一种高并发业务下的分布式锁实现方法中依据临时有序节点的信息,获取临时有序节点的时间差进行最小临时有序节点的判断。

    优选地,所述的一种高并发业务下的分布式锁实现方法中在跨进程的集群系统中,通过docker中配置zookeeper:

    启动docker服务器,

    查询docker镜像仓库中zookeeper的镜像,

    拉取zookeeper官方镜像,

    查询docker本地镜像,

    启动zookeeper官方镜像,完成配置。

    一种高并发业务下的分布式锁实现系统,包括交互模块、判断模块及释放模块,

    交互模块在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,

    判断模块判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,

    否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,

    释放模块协助下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。

    优选地,所述的一种高并发业务下的分布式锁实现系统中当需获得分布式锁,交互模块协助当前线程在zookeeper创建临时有序节点,并获取所有临时有序节点的信息,判断当前线程创建的临时有序节点是否为最小临时有序节点。

    优选地,所述的一种高并发业务下的分布式锁实现系统中判断模块依据临时有序节点的信息,获取临时有序节点的时间差进行最小临时有序节点的判断。

    一种高并发业务下的分布式锁实现装置,包括至少一个存储器和至少一个处理器;

    所述至少一个存储器,用于存储机器可读程序;

    所述至少一个处理器,用于调用所述机器可读程序,执行所述的一种高并发业务下的分布式锁实现方法。

    本发明的有益之处是:

    本发明提供一种高并发业务下的分布式锁实现方法,部署在集群中的业务系统,通过zookeeper的临时有序节点与线程进行交互,判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,避免了恶性竞争及争抢的线程数量太大,给cpu造成极大负担,造成资源的浪费,减小了os维护synchronized锁的性能损耗,保证了多个进程的线程操作同一业务流程数据时的数据同步,避免了脏读等问题的发生。

    附图说明

    图1是本发明方法流程示意图。

    具体实施方式

    常见的概念:

    高并发(highconcurrency)是指在同一个时间点,有很多用户同时的访问同一api接口或者url地址。

    高并发相关常用的一些指标有响应时间(responsetime),吞吐量(throughput),每秒查询率qps(querypersecond),并发用户数等。

    响应时间:系统对请求做出响应的时间。例如系统处理一个http请求需要10ms,这个10ms就是系统的响应时间。

    吞吐量:单位时间内处理的请求数量。

    每秒查询率:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。

    并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。

    而互联网系统的不断发展,催生了垂直拓展和水平扩展两种提高系统并发能力的方式。

    分布式系统(distributedsystem)是多个处理机通过通信线路互联而构成的松散耦合的系统,具备分布性、自治性、并行性和全局性,是针对于水平拓展提高系统并发能力提出的设计模式。

    分布式锁(distributedlock)是控制分布式系统之间同步访问共享资源的一种方式。分布式系统中,常常需要协调他们的动作,如果不同的系统或是同一个系统的不同主机之间共享一个或者一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,这个时候需要使用到分布式锁。

    zookeeper是一种分布式协调中间件,根据不同计算机上的节点,协调它们的访问顺序。zookeeper提供了多种场景包括分布式锁,分布式队列,服务注册,配置中心,全局id等都是基于zookeeper提供的特性,但是归根结底还是分布式协调中间件。

    下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。

    本发明提供一种高并发业务下的分布式锁实现方法,在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,

    判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,

    否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,

    下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。

    本发明主要基于高并发场景下,跨进程上锁的一种实现方式,部署在集群中的业务系统,将分布式锁交给zookeeper管理,减小了os维护synchronized锁的性能损耗,保证了多个进程的线程操作同一业务流程数据时的数据同步,避免了脏读等问题的发生。

    具有应用中,在本发明的一些实施例中,在集群中的业务系统中,利用docker中配置zookeeper服务:

    启动docker服务器:systemctlstartdocker,

    查询docker镜像仓库中zookeeper的镜像:dockersearchzookeeper,

    拉取官方镜像:dockerpullzookeeper,

    查询本地镜像:dockerimage,

    启动zookeeper官方镜像:dockerrun-d-p2181:2181–namesome-zookeeper–restartalwayszookeeper,

    查询启动的镜像容器:dockerps,

    进入容器内部操作:dockerexec-it***bash。

    利用zookeeper对节点进行增删改查,其中当客户端试图获得锁的时候,当前线程在zookeeper创建一个临时有序节点,并且返回回来此时所有临时有序节点的信息,对所有临时有序节点排序,以此来判断当前创建的节点是否在locks下的所有节点中最小的,如果是最小的,则此线程获得锁,如果不是最小的,进行zookeeper使用watcher进行监听watch并阻塞线程,而进行watch的节点进行更改的时候,则notifyall唤醒所有阻塞的线程再一次进行争抢,本发明监听当前线程的临时有序节点的邻近的上一个临时有序节点,避免争抢的线程数量太大,给cpu造成极大负担,造成资源的浪费的恶性竞争。

    在上述实施的基础上,若线程准备获得分布式锁,如果拿不到则进入block阻塞状态,调用acquire方法中会调用internallock方法,判断其返回值,而internallock中会设置可重入锁:

    获得锁之后会获得在zookeeper服务端的路径,此进程会和此锁进行绑定。

    对上述本发明方法进行实施验证,通过java进行高并发的模拟,通过多个不分进程的线程进行模拟:

    在代码模拟场景中,模拟了一千个非线程池分配的线程,与远程服务器上的zookeeper进行交互,在真实场景中,zookeeper无法分辨交互的线程是否为同一个进程中,则视为分布式的跨进程访问。

    运行结果表示,多个线程中只有一个线程会优先抢到锁,只有当其释放锁,下一个线程才能拿到此锁,符合线程安全场景。通过zookeeper的分布式协调的特性,成功的建立了线程安全级别的分布式锁。

    同时本发明提供一种高并发业务下的分布式锁实现系统,包括交互模块、判断模块及释放模块,

    交互模块在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,

    判断模块判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,

    否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,

    释放模块协助下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。

    上述系统内的各模块之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

    以及本发明提供一种高并发业务下的分布式锁实现装置,包括至少一个存储器和至少一个处理器;

    所述至少一个存储器,用于存储机器可读程序;

    所述至少一个处理器,用于调用所述机器可读程序,执行所述的一种高并发业务下的分布式锁实现方法。

    上述装置内的处理器的信息交互、执行可读程序过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

    需要说明的是,上述较佳实施例中各流程和各系统装置结构中不是所有的步骤和模块都是必须的,可以根据实际的需要忽略某些步骤或模块。各步骤的执行顺序不是固定的,可以根据需要进行调整。上述各实施例中描述的系统结构可以是物理结构,也可以是逻辑结构,即,有些模块可能由同一物理实体实现,或者,有些模块可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。

    以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。


    技术特征:

    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中任一所述的一种高并发业务下的分布式锁实现方法。

    技术总结
    本发明公开一种高并发业务下的分布式锁实现方法,涉及分布式数据通信技术领域;在跨进程的集群系统中,通过zookeeper的临时有序节点与线程进行交互,判断当前线程创建的临时有序节点是否为最小临时有序节点,若是则当前线程获得分布式锁,否则zookeeper监听邻近当前线程的临时有序节点的上一个临时有序节点并阻塞当前线程,直至存在临时有序节点为最小临时有序节点,最小临时有序节点对应的线程获得分布式锁,下一个线程直至当前获得分布式锁的线程释放分布式锁后才能获得所述的分布式锁。

    技术研发人员:张啸轩
    受保护的技术使用者:浪潮云信息技术股份公司
    技术研发日:2020.12.07
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-22898.html

    最新回复(0)