一种基于zookeeper的优先级锁抢占方法和系统与流程

文档序号:19154998发布日期:2019-11-16 00:37阅读:946来源:国知局
一种基于zookeeper的优先级锁抢占方法和系统与流程

本发明涉及互联网技术领域,特别是涉及一种基于zookeeper的优先级锁抢占方法和系统。



背景技术:

在互联网项目中,由于业务规模越来越大,对系统的高可用提出了更高的要求。一般采取集群多活的部署架构,对于系统中某一节点出现故障,不影响整体的运行。但是在某些场景情况下(如唯一账号的使用),不能采取多活的方式,而只能采取主备的方式保证系统的高可用,在主节点发生故障时,由备节点接管业务。传统主备方案中都是基于服务器资源进行的主备切换,当一台服务器上部署多个服务时,只能进行整体的主备切换。而不能做到单服务/单业务的主备切换。

通常的分布式锁抢占方案中,一般采用数据库或者redis进行实现,数据库锁高并发性能差,redis在锁时间限制和缓存一致性存在一定问题。锁的分配基本都是遵循时间的先后顺序,由于服务节点的时间不固定,会导致锁会各个服务节点抢占的概率均等,在正常模式下,我们无法预估业务会被哪个服务抢占;同时我们无法设置各个节点的优先级,灵活度较低。当我们在正常情况下,业务固定在某个节点上处理时,现有的锁就无法支持这个需求。

现有的技术方案的主要缺点有以下两点:缺点1:无法设置优先级,灵活度较低;缺点2:在锁被抢占之后,不会自动释放锁,无法达到主节点恢复之后备节点自动释放锁。



技术实现要素:

鉴于以上所述现有技术的缺点,本发明的目的在于提供一种基于zookeeper的优先级锁抢占方法和系统,用于解决现有技术中无法设置优先级,灵活度较低;在锁被抢占之后,不会自动释放锁,无法达到主节点恢复之后备节点自动释放锁的问题。

本发明提供一种基于zookeeper的优先级锁抢占方法,包括步骤:s1、从数据库中读取业务服务的优先级;s2、连接zookeeper并判断zookeeper当前业务目录是否存在;若否,则创建业务目录并进入步骤s3;若是,则进入步骤s3;s3、根据所述业务服务的优先级抢占对应锁并向zookeeper注册服务。

于本发明的一实施例中,所述步骤s3包括步骤:s31、判断所述业务服务的优先级是否是主优先级;若是,则进入步骤s32;若否,则采用备优先级抢占锁;s32、判断是否存在主节点临时节点;若是,则监听所述主节点临时节点;若否,则创建临时节点,并进入步骤s33;s33、主服务抢占锁成功,启动业务处理线程。

于本发明的一实施例中,所述步骤“采用备优先级抢占锁”还包括步骤:s311、判断是否存在主节点临时节点;若是,则监听主节点临时节点,并在监听结果发生变化时进入步骤s312;若否,则直接进入步骤s312;s312、判断是否存在备节点临时节点;若是,则监听备节点临时节点;若否,则穿件临时节点,并进入步骤s313;s313、备服务抢占锁成功,启动业务处理线程。

于本发明的一实施例中,所述步骤s312包括步骤:在监听所述备节点临时节点时,判断监听结果是否有变化;若是,则重复步骤s312进行二次检测。

于本发明的一实施例中,所述步骤s313之后还包括步骤:s314、监听主节点,并判断主节点是否变化;若否,则持续监听;若是,则进入步骤s315;s315、判断主节点是否存在;若是,则释放业务线程和id对应的锁,并监听所述主节点;若否,则监听所述主节点。

于本发明的一实施例中,所述步骤s32包括步骤:在监听所述主节点临时节点时,判断监听结果是否有变化;若是,则重复步骤s32进行二次检测。

于本发明的一实施例中,所述步骤s33包括步骤,判断业务处理线程是否启动成功;若否,则释放主服务抢占锁,删除主节点。

本发明还提供了一种基于zookeeper的优先级锁抢占系统,使用上述的基于zookeeper的优先级锁抢占方法进行优先级锁抢占。

如上所述,本发明的一种基于zookeeper的优先级锁抢占方法和系统,具有以下有益效果:

可以通过设置主备优先级的方式,保证正常情况下系统业务在主节点上正常运行;当主节点发生故障时,备节点接管业务;当主节点恢复时,备节点自动释放业务。从而在服务配置上我们可以将更大的资源配置给主节点,达到更高的资源利用效率。

附图说明

图1显示为本发明中基于zookeeper的优先级锁抢占方法的流程方框示意图。

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。

需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

参见图1,须知,本说明书所附图式所绘示的结构、比例、大小等,均仅用以配合说明书所揭示的内容,以供熟悉此技术的人士了解与阅读,并非用以限定本发明可实施的限定条件,故不具技术上的实质意义,任何结构的修饰、比例关系的改变或大小的调整,在不影响本发明所能产生的功效及所能达成的目的下,均应仍落在本发明所揭示的技术内容得能涵盖的范围内。同时,本说明书中所引用的如“上”、“下”、“左”、“右”、“中间”及“一”等的用语,亦仅为便于叙述的明了,而非用以限定本发明可实施的范围,其相对关系的改变或调整,在无实质变更技术内容下,当亦视为本发明可实施的范畴。

如图1所示,图1显示为本发明中基于zookeeper的优先级锁抢占方法的流程方框示意图。本发明提供了一种基于zookeeper的优先级锁抢占方法,包括步骤:s1、从数据库中读取业务服务的优先级,据此判断业务服务是主服务还是备用服务;s2、连接zookeeper并判断zookeeper当前业务目录是否存在;若否,则创建业务目录并进入步骤s3;若是,则进入步骤s3;s3、根据所述业务服务的优先级抢占对应锁并向zookeeper注册服务。本实施例中,zookeeper可以通过分布式协调服务,用于注册业务锁节点;采用业务目录:给每一个需要使用优先级抢占锁的业务创建一个目录;主节点:业务优先级抢占锁使用的主节点;备节点:业务优先级抢占锁使用的备节点;业务服务为实际处理业务的服务资源。其中,zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是google的chubby一个开源的实现,是hadoop和hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

在本发明的一实施例中,所述步骤s3包括步骤:s31、判断所述业务服务的优先级是否是主优先级;若是,则进入步骤s32;若否,则采用备优先级抢占锁;s32、判断是否存在主节点临时节点;若是,则监听所述主节点临时节点;若否,则创建临时节点,并进入步骤s33;s33、主服务抢占锁成功,启动业务处理线程。

进一步地,所述步骤“采用备优先级抢占锁”还包括步骤:s311、判断是否存在主节点临时节点;若是,则监听主节点临时节点,并在监听结果发生变化时进入步骤s312;若否,则直接进入步骤s312;s312、判断是否存在备节点临时节点;若是,则监听备节点临时节点;若否,则穿件临时节点,并进入步骤s313;s313、备服务抢占锁成功,启动业务处理线程。

优选地,所述步骤s312包括步骤:在监听所述备节点临时节点时,判断监听结果是否有变化;若是,则重复步骤s312进行二次检测。同时,所述步骤s313之后还包括步骤:s314、监听主节点,并判断主节点是否变化;若否,则持续监听;若是,则进入步骤s315;s315、判断主节点是否存在;若是,则释放业务线程和id对应的锁,并监听所述主节点;若否,则监听所述主节点。

在本发明的另一实施例中,所述步骤s32包括步骤:在监听所述主节点临时节点时,判断监听结果是否有变化;若是,则重复步骤s32进行二次检测。进一步地,所述步骤s33包括步骤,判断业务处理线程是否启动成功;若否,则释放主服务抢占锁,删除主节点。

从而实现了分布式锁的优先级抢占方法,应用于保证唯一性事务在正常情况下都是在主节点上运行,只有在主发生故障时,备节点接管,而且在主节点恢复之后备节点自动释放锁。

本发明还提供了一种基于zookeeper的优先级锁抢占系统,使用上述的基于zookeeper的优先级锁抢占方法进行优先级锁抢占。

综上所述,本发明的基于zookeeper的优先级锁抢占方法和系统,可以通过设置主备优先级的方式,保证正常情况下系统业务在主节点上正常运行;当主节点发生故障时,备节点接管业务;当主节点恢复时,备节点自动释放业务。从而在服务配置上我们可以将更大的资源配置给主节点,达到更高的资源利用效率。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1