一种分布式锁实现方法和装置与流程

文档序号:16530774发布日期:2019-01-05 10:44阅读:236来源:国知局
一种分布式锁实现方法和装置与流程

本发明涉及云计算技术,尤指一种分布式锁实现方法和装置。



背景技术:

随着计算机技术和网络技术的快速发展,大型集群在实际生产环境中越来越多的被使用。通过虚拟化,组成云计算平台。在虚拟化系统中,不通系统或者是在同一个系统不同主机之间共享同一个或一组资源,常常需要协调动作,往往需要互斥来防止彼此的干扰,保证一致性,因此需要分布式锁来保证在上述情况下系统正常运行。

分布式锁实现方案大致分两种:一种实现方案是依赖于网络,通过网络通信来保证获取资源的一致性,但是对于网络的稳定性依赖度较高,比如dlm;第二种实现方案是依赖共享存储,通过对共享存储的读写保证多方的协商,实现方案如sanlock。sanlock的实现方案是依赖于diskpaxos算法,但是diskpaxos算法依赖于存储空间,sanlock设定了固定的2048个块大小来实现diskpaxos算法,即一个资源对应的空间是1m,sanlock通过deltalease来维护节点存活状态,通过diskpaxos算法来获取资源锁。diskpaxos算法是通过读取所有的数据来判断对方是否在获取资源,同时判断资源是否被获取,diskpaxos算法过程中至少要进行六次i/o来完成算法,其中每一次读取读取时候都是全部读取,即读取当前资源的所有的内容,即1m空间内容,当磁盘性能比较差时候一个diskpaxos算法需要读取至少3m空间,严重影响sanlock算法时效性,同时,一般使用分布式锁的时候规模并没有达到2000节点个数,基本上都是个位数或者是十位数的节点个数使用,造成了存储空间的浪费。



技术实现要素:

为了解决上述技术问题,本发明提供了一种分布式锁实现方法和装置,通过读取共享存储中存活节点对应部分,减少数据读取量,提升了分布式锁实现效率,解决了每次都需要读取全部共享存储空间造成资源浪费的问题。

为了达到本发明目的,本发明提供了一种分布式锁实现方法,包括:

获取当前锁空间中存活的节点;

读取共享存储中所述存活的节点对应的i/o块。

优选的,读取共享存储中所述存活的节点对应的i/o块的步骤包括:

确定所述存储的节点中节点号最大的节点;

根据所述节点号最大的节点在共享存储中的i/o块位置,获取读取时的最大偏移量;

根据所述最大偏移量,计算读取空间;

读取所述读取空间中i/o块内存储的信息。

优选的,所述锁空间中每个节点对应所述共享存储中的一个i/o块。

优选的,所述共享存储中的i/o块按照节点号的顺序分配。

优选的,获取当前锁空间中存活的节点的步骤包括:

获取当前锁空间中存活的节点号最大的节点。

本发明还提供了一种分布式锁实现装置,包括:

节点存活状态获取模块,用于获取当前锁空间中存活的节点;

信息读取模块,用于读取共享存储中所述存活的节点对应的i/o块。

优选的,所述信息读取模块包括:

最大节点确定单元,用于确定所述存储的节点中节点号最大的节点;

最大偏移量确定单元,用于根据所述节点号最大的节点在共享存储中的i/o块位置,获取读取时的最大偏移量;

读取空间计算单元,用于根据所述最大偏移量,计算读取空间;

信息读取单元,用于读取所述读取空间中i/o块内存储的信息。

优选的,所述节点存活状态获取模块,具体用于获取当前锁空间中存活的节点号最大的节点。

本发明提供了一种分布式锁实现方法和装置,获取当前锁空间中存活的节点,读取共享存储中所述存活的节点对应的i/o块。通过只读取存活节点对应的i/o块,减少数据读取量,提升了分布式锁实现效率,解决了每次都需要读取全部共享存储空间造成资源浪费的问题。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。

图1为本发明的一实施例提供的一种分布式锁实现方法的流程示意图;

图2为图1中步骤102的具体流程图;

图3为本发明的一实施例提供的一种分布式锁实现装置的结构示意图;

图4为图3中信息读取模块302的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

diskpaxos算法是通过读取所有的数据来判断对方是否在获取资源,同时判断资源是否被获取,diskpaxos算法过程中至少要进行六次i/o来完成算法,其中每一次读取读取时候都是全部读取,即读取当前资源的所有的内容,即1m空间内容,当磁盘性能比较差时候一个diskpaxos算法需要读取至少3m空间,严重影响sanlock算法时效性,同时,一般使用分布式锁的时候规模并没有达到2000节点个数,基本上都是个位数或者是十位数的节点个数使用,造成了存储空间的浪费。

为了解决上述问题,本发明的实施例提供了一种分布式锁实现方法和装置。下面结合附图,对本发明的实施例进行说明。

本发明的一实施例提供了一种分布式锁实现方法,以sanlock分布式锁为例,使用该方法实现分布式锁读取的流程如图1所示,包括:

步骤101、获取当前锁空间中存活的节点。

本步骤中,具体的,获取当前锁空间中存活的节点号最大的节点。

sanlock的deltalease保存在当前锁空间中存活的节点的信息,sanlock执行diskpaxos算法时候从内存中读取该信息并不影响sanlockdiskpaxos算法执行的时间。

deltalease算法中增加识别存活节点号最大的节点id,sanlock通过设置节点号1~2000来进行i/o块对应,即每个节点对应自己的i/o块,deltalease算法是写入节点自己对应的i/o块,读取别的节点对应的i/o块,从而达到证明自己存活并且识别其他节点存活信息的效果。

sanlock节点对应的块是顺序的,同时是连续的,因此,通过不同的节点偏移量能够知道节点对应的id号。

过deltalease保存的节点号,读取最大值,计算出i/o块大小,sanlock的paxos算法对应的资源特点在于,资源信息的前两个块对应的是资源的信息,后边的2000个块对应的是节点的信息,即执行paxos算法时候会检查资源信息之后然后进行i/o,写入自己对应的块来证明自己要获取该资源,同时读取其他节点的块来判断没有竞争该锁资源。

竞争锁资源时候只有存活的节点即deltalease正常刷新的节点才能获取资源锁,因此执行paxos算法时候只需要知道存活的节点,读取存活节点对应的信息即可知道是否有人竞争锁资源。

步骤102、读取共享存储中所述存活的节点对应的i/o块。

所述锁空间中每个节点对应所述共享存储中的一个i/o块。所述共享存储中的i/o块按照节点号的顺序分配。只需要读取存活节点对应的信息,paxos算法节点对应的块同样是线性分布的,因此知道最大的节点号就能够知道需要读取的i/o块,不需要读取所有的节点信息。

本发明实施例中,修改sanlockpaxos算法deltalease和paxoslease,deltalease顺序保存存活的节点信息,并且保存最大的节点信息到一定位置,方便paxoslease进行读取;修改paxos算法,每一次进行读取时候从deltalease中读取存活节点的最大的id号,通过存活节点中最大节点id计算出此次i/o读取的大小进行读取;重新编译sanlock的rpm包,正常的部署使用sanlock;配置使用sanlock时最好是从最小节点数开始。

本步骤具体如图2所示,包括:

步骤1021、确定所述存储的节点中节点号最大的节点。

步骤1022、根据所述节点号最大的节点在共享存储中的i/o块位置,获取读取时的最大偏移量。

执行diskpaxos算法时候获取节点最大值能够获取到资源空间中sanlock写入的最大偏移量,从初始位置至该最大偏移量指向的位置即为读取空间,仅仅读取该读取空间即可读取集群所有的节点diskpaxos算法的信息。

步骤1023、根据所述最大偏移量,计算读取空间。

步骤1024、读取所述读取空间中i/o块内存储的信息。

本发明实施例中只读取已经写过的最大偏移地址的内容不增加i/o次数,但是减小了需要读取的i/o块的数量,优化了i/o速率,提高了diskpaxos算法速度本发明通过查看sanlock的deltalease存活的节点个数,找出节点的最大值,通过仅仅读取存活节点对应的连续空间来减小每一次i/o读取的块大小,同时不增加i/o的次数,能够减小sanlock执行diskpaxos算法时候总i/o量,从而减小读取块大小来提升diskpaxos算法速度,提高了sanlock算法的时效性。

本发明的一实施例还提供了一种分布式锁实现装置,其结构如图3所示,包括:

节点存活状态获取模块301,用于获取当前锁空间中存活的节点;

信息读取模块302,用于读取共享存储中所述存活的节点对应的i/o块。

优选的,所述信息读取模块302的结构如图4所示,包括:

最大节点确定单元3021,用于确定所述存储的节点中节点号最大的节点;

最大偏移量确定单元3022,用于根据所述节点号最大的节点在共享存储中的i/o块位置,获取读取时的最大偏移量;

读取空间计算单元3023,用于根据所述最大偏移量,计算读取空间;

信息读取单元3024,用于读取所述读取空间中i/o块内存储的信息。

优选的,所述节点存活状态获取模块301,具体用于获取当前锁空间中存活的节点号最大的节点。

本发明的实施例提供了一种分布式锁实现方法和装置,获取当前锁空间中存活的节点,读取共享存储中所述存活的节点对应的i/o块。通过只读取存活节点对应的i/o块,减少数据读取量,提升了分布式锁实现效率,解决了每次都需要读取全部共享存储空间造成资源浪费的问题。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

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