一种分布式锁的实现方法及分布式系统与流程

文档序号:37594756发布日期:2024-04-18 12:30阅读:3来源:国知局
一种分布式锁的实现方法及分布式系统与流程

本申请涉及计算机,尤其是涉及一种分布式锁的实现方法及分布式系统。


背景技术:

1、当前大型网站及应用都是分布式部署的,在大规模集群中,分布式锁作为一个核心技术,用于支撑整个集群的大规模资源的互斥使用,由于现在集群规模越来越大,业务越来越多,因此对分布式锁的性能要求也越来越高。

2、现有分布式锁的实现方式有:基于zookeeper的实现方式、基于redis的实现方式。其中,基于zookeeper实现分布式锁的方式,虽然其数据一致性较高,但是该实现方式需要基于磁盘文件的加速策略,导致加解锁速度非常慢;而基于redis实现分布式锁的方式,虽然其性能较好,且不需要应用第三方插件,但是redis方案采用异步复制,一致性无法保证,且存在锁丢失的情况,同时,对于超大规模的分布式锁环境,无法满足需求。


技术实现思路

1、针对现有技术中的问题,本申请提供一种分布式锁的实现方法及分布式系统,能够有效解决分布式系统中加解锁的低效率问题,以及数据一致性无法保障的问题。为解决上述技术问题,本申请提供以下技术方案:

2、第一方面,本申请提供了一种分布式锁的实现方法,应用于分布式系统,所述分布式系统包括网关、客户端和供所述客户端执行业务资源访问操作的至少一个服务器节点,所述方法包括以下步骤:

3、所述客户端执行所述业务资源访问操作时,所述客户端根据所述业务资源访问操作的业务信息,获得对象关键字和生成的线程id;

4、所述客户端根据所述对象关键字、所述生成的线程id和所述网关反馈的空闲服务器节点,判断所述对象关键字的承载服务器节点是否加锁。

5、需要说明的是,在所述客户端执行业务资源访问操作之前,所述客户端和所述至少一个服务器节点都注册到网关;所述网关监测所述服务器节点的加解锁信息,反馈空闲服务器节点给所述客户端。

6、其中,所述客户端根据所述对象关键字、所述生成的线程id和所述网关反馈的空闲服务器节点,判断所述对象关键字的承载服务器节点是否加锁,具体步骤包括:

7、若所述客户端中未缓存任一加锁线程,使用hash算法从空闲服务器节点中确定所述对象关键字的承载服务器节点,并向所述承载服务器节点发送加锁请求,所述加锁请求中携带所述生成的线程id和所述客户端的身份id,所述承载服务器节点根据所述生成的线程id和所述客户端的身份id完成对所述对象关键字的承载服务器节点加锁。

8、另外,若所述客户端中有已缓存的线程id,则将所述生成的线程id与所述已缓存的线程id进行比较,

9、若所述生成的线程id与所述已缓存的线程id相同,则所述客户端的所述生成的线程id已经获取锁并在所述对象关键字的承载服务器节点加锁;

10、若所述生成的线程id与所述已缓存的线程id不同,则所述已缓存的线程id已经获取锁并在所述对象关键字的承载服务器节点加锁,所述客户端将所述生成的线程id放入等待解锁的队列中,以等待获取锁并对所述对象关键字的承载服务器节点加锁;

11、需要说明的是,所述客户端的身份id是所述客户端注册到网关时,所述网关通过监测所述客户端的物理信息和服务名生成并返回客户端的。

12、进一步地,所述分布式系统还包括一致性备份节点、非一致性备份节点,在承载服务器节点根据所述生成的线程id和所述身份id完成加锁后,所述方法还包括:

13、已加锁的承载服务器节点同步向一致性备份节点发送加锁请求,所述一致性备份节点同步所述已加锁的承载服务器节点的操作并生成操作记录数据,每一条操作记录数据生成一个变更序号,所述变更序号从小到大递增;

14、所述一致性备份节点定时向非一致性备份节点同步所述操作记录数据,所述非一致性备份节点根据所述变更序号,从小到大,逐一执行。

15、在一个可能的设计中,所述方法还包括:所述已加锁的承载服务器节点故障时,所述网关调度所述一致性备份节点升级为新的供所述客户端执行后续业务资源访问操作的服务器节点,调度所述非一致性备份节点升级为新的一致性备份节点;所述非一致性备份节点升级为新的一致性备份节点时,根据所述变更序号进行本地同步记录比对,保证与新的供所述客户端执行后续业务资源访问操作的新的服务器节点数据相同。

16、在一个可能的设计中,所述方法还包括:所述网关定时检查所述客户端是否存活,若发现所述客户端失效,则失效所述客户端的本地记录,并通知与所述客户端相关的服务器节点失效所述客户端的所有锁。

17、第二方面,本申请提供一种分布式系统,所述分布式系统包括网关、客户端和供所述客户端执行业务资源访问操作的至少一个服务器节点;

18、所述网关,用于监测所述服务器节点的加解锁信息,反馈空闲服务器节点给所述客户端;

19、所述客户端,用于通过所述业务资源访问操作的业务信息,获得对象关键字和生成的线程id;还用于通过所述对象关键字、所述生成的线程id和所述网关反馈的空闲服务器节点,判断所述对象关键字的承载服务器节点是否加锁;

20、所述服务器节点,用于对所述业务资源访问操作的数据进行存储。

21、综上所述,本申请通过在分布式系统中设置网关,完成对服务器节点和客户端的监控,极大提升了加锁的效率。并且可以及时解决已加锁的承载服务器节点产生的故障问题,以及客户端失效,无效占用服务器节点资源的问题;同时,通过设置一致性备份节点和非一致性备份节点。保障了客户端执行业务资源访问操作时的一致性。尤其在业务复杂度高的大型分布式系统中,需要进行全局加锁,其系统整体性能的关键就在于加解锁的效率和保障一致性,本申请在保障一致性的同时,成倍提升了加解锁的效率。



技术特征:

1.一种分布式锁的实现方法,其特征在于,应用于分布式系统,所述分布式系统包括网关、客户端和供所述客户端执行业务资源访问操作的至少一个服务器节点,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,在所述客户端执行业务资源访问操作之前,所述方法还包括:

3.根据权利要求1所述的方法,其特征在于,所述客户端根据所述对象关键字、所述生成的线程id和所述网关反馈的空闲服务器节点,判断所述对象关键字的承载服务器节点是否加锁,具体步骤包括:

4.根据权利要求3所述的方法,其特征在于,所述方法还包括:若所述客户端中有已缓存的线程id,则将所述生成的线程id与所述已缓存的线程id进行比较,

5.根据权利要求3所述的方法,所述客户端的身份id是所述客户端注册到网关时,所述网关通过监测所述客户端的物理信息和服务名生成并返回客户端的。

6.根据权利要求4所述的方法,其特征在于,所述分布式系统还包括一致性备份节点、非一致性备份节点,在承载服务器节点根据所述生成的线程id和所述客户端的身份id完成加锁后,所述方法还包括:

7.根据权利要求6所述的方法,其特征在于,所述方法还包括:

8.根据权利要求1-7任一项所述的方法,其特征在于,所述方法还包括:所述网关定时检查所述客户端是否存活,若发现所述客户端失效,则失效所述客户端的本地记录,并通知与所述客户端相关的服务器节点失效所述客户端的所有锁。

9.一种分布式系统,其特征在于,所述分布式系统包括网关、客户端和供所述客户端执行业务资源访问操作的至少一个服务器节点;

10.根据权利要求9所述的分布式系统,其特征在于,所述网关还用于监测所述客户端的物理信息和服务名,生成所述客户端的身份id。


技术总结
本申请提供一种分布式锁的实现方法及分布式系统,所述实现方法包括:客户端执行业务资源访问操作时,根据业务资源访问操作的业务信息,获得对象关键字和生成的线程ID;根据对象关键字、生成的线程ID和网关反馈的空闲服务器节点,判断对象关键字的承载服务器节点是否加锁。本申请通过在分布式系统中设置网关,完成对服务器节点和客户端的监控,极大提升了加锁的效率。并且可以及时解决已加锁的承载服务器节点产生的故障问题,以及客户端失效,无效占用服务器节点资源的问题;同时,通过设置一致性备份节点和非一致性备份节点,保障了客户端执行业务资源访问操作时的一致性。

技术研发人员:刘刚国
受保护的技术使用者:迈普通信技术股份有限公司
技术研发日:
技术公布日:2024/4/17
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1