CN104954411A - 分布式***共享网络资源的方法、终端及*** - Google Patents
分布式***共享网络资源的方法、终端及*** Download PDFInfo
- Publication number
- CN104954411A CN104954411A CN201410127465.3A CN201410127465A CN104954411A CN 104954411 A CN104954411 A CN 104954411A CN 201410127465 A CN201410127465 A CN 201410127465A CN 104954411 A CN104954411 A CN 104954411A
- Authority
- CN
- China
- Prior art keywords
- atomic operation
- terminal
- distributed lock
- server
- time
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Hardware Redundancy (AREA)
Abstract
本发明涉及一种分布式***共享网络资源的方法、终端及***,其方法包括:终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端向服务器触发第二原子操作,以判断分布式锁是否超时,并根据判断结果进行相应操作,直至获取到分布式锁。本发明基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种分布式***共享网络资源的方法、终端及***。
背景技术
在分布式计算中,多个客户端可以通过计算机网络访问各分布式***节点上的共享资源,为了使分布式计算能够正常稳定运行,必须保证多个客户端对同一共享资源的安全访问,避免数据的一致性遭到破坏,由此而产生了控制分布式***之间同步访问共享资源的分布式锁。
与普通锁相比,分布式锁面临的问题更多,比如如何保证某个进程持有锁时而意外终止之后,其他进程能够正常获得锁,以保证其他进程共享资源的正常进行。
针对上述问题,现有技术中,通常采用一个中间件回收所有客户端的锁请求,然后将回收的锁请求放到锁请求队列里,再通过中间件依次处理所有客户端的锁请求,并通过定时器来确定锁是否超时,进而判断是否成功获取到锁。但是,现有的这种处理方案中,***设计较为复杂,而且可扩展性差。
发明内容
本发明实施例提供一种设计简单、可扩展性好、可快速解决分布式计算中对共享资源的安全访问问题的分布式***共享网络资源的方法、终端及***。
本发明实施例提出一种分布式***共享网络资源的方法,包括:
终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
所述服务器根据接收的所述第一原子操作的触发指令,执行所述第一原子操作,并向所述终端返回操作结果;
当所述操作结果为未成功获取到分布式锁时,所述终端向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
本发明还提出一种分布式***共享网络资源的***,包括:终端和与所述终端通信连接的服务器,其中:
所述终端,用于向所述服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
所述服务器,用于根据接收的所述第一原子操作的触发指令,执行所述第一原子操作,并向所述终端返回操作结果;
所述终端,还用于当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
本发明还提出一种分布式***共享网络资源的方法,包括:
终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
接收所述服务器执行所述第一原子操作后返回的操作结果;
当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
本发明还提出一种分布式***共享网络资源的终端,包括:
第一原子操作触发模块,用于向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
接收模块,用于接收所述服务器执行所述第一原子操作后返回的操作结果;
第二原子操作触发模块,用于当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
本发明实施例提出的一种分布式***共享网络资源的方法、终端及***,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端向服务器触发第二原子操作,以判断分布式锁是否超时,并根据判断结果进行相应操作,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果。
附图说明
图1是本发明分布式***共享网络资源的方法第一实施例的流程示意图;
图2是本发明分布式***共享网络资源的方法第二实施例的流程示意图;
图3是本发明分布式***共享网络资源的方法第三实施例的流程示意图;
图4是本发明分布式***共享网络资源的方法第四实施例的流程示意图;
图5是本发明分布式***共享网络资源的***较佳实施例的架构示意图;
图6是本发明分布式***共享网络资源的终端第一实施例的功能模块示意图;
图7是本发明分布式***共享网络资源的终端实施例中第二原子操作触发模块的结构示意图;
图8是本发明分布式***共享网络资源的终端第二实施例的功能模块示意图;
图9是本发明分布式***共享网络资源的终端第三实施例的功能模块示意图;
图10是本发明实施例分布式***共享网络资源的终端的另一种结构示意图。
为了使本发明的技术方案更加清楚、明了,下面将结合附图作进一步详述。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例的主要解决方案是:终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端向服务器触发第二原子操作,以判断分布式锁是否超时,并根据判断结果进行相应操作,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,快速解决分布式计算中对共享资源的安全访问问题,设计简单、可扩展性好。
如图1所示,本发明第一实施例提出一种分布式***共享网络资源的方法,包括:
步骤S101,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
本实施例方法运行环境涉及分布式***中的服务器和终端,在分布式计算中,多个终端可以通过计算机网络访问各节点上的共享资源。为了使分布式计算能够正常稳定运行,通过分布式锁保证多个终端对同一共享资源的安全访问,避免数据的一致性遭到破坏。
在本实施例中,终端基于redis提供的原子操作,与服务器交互实现分布式锁的获取,以保证网络资源共享的正常进行,比如保证某个进程(不同的终端代表不同的进程)持有锁时意外终止之后,其他进程能够正常获得锁等。
其中,redis(REmote DIctionary Server)是一个key-value(键-值)的内存存储***。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,即原子操作,在原子操作中,更高层不能发现其内部实现与结构。
具体来讲,原子操作,就是不能被更高等级中断抢夺优先的操作,就是不能被中断的操作。以操作***为例,由于操作***大部分时间处于开中断状态,所以,一个程序在执行的时候可能被优先级更高的线程中断。而有些操作是不能被中断的,不然会出现无法还原的后果,这时候,这些操作就需要原子操作。
现代操作***中,一般都提供了原子操作来实现一些同步操作,因此,原子操作也就是一个独立而不可分割的操作。在单核环境中,一般的意义下原子操作中线程不会被切换,线程切换要么在原子操作之前,要么在原子操作完成之后。更广泛的意义下,原子操作是指一系列必须整体完成的操作步骤,如果任何一步操作没有完成,那么所有完成的步骤都必须回滚,这样就可以保证要么所有操作步骤都未完成,要么所有操作步骤都被完成。
例如在单核***里,单个的机器指令可以看成是原子操作(如果有编译器优化、乱序执行等情况除外);在多核***中,单个的机器指令就不是原子操作,因为多核***里是多指令流并行运行的,一个核在执行一个指令时,其他核同时执行的指令有可能操作同一块内存区域,从而出现数据竞争现象。多核***中的原子操作通常使用内存栅障(memory barrier)来实现,即一个CPU核在执行原子操作时,其他CPU核必须停止对内存操作或者不对指定的内存进行操作,这样才能避免数据竞争问题。
在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。与memcached的区别在于:redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
本实施例利用redis的原子操作实现分布式锁(以下简称锁)的获取方案,其核心思想是利用redis的setnx操作进行获取锁的动作,利用redis的GetSet操作判断锁是否超时,并根据判断结果进行相应操作,直至获取到锁。
具体地,首先,终端在访问共享资源时,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;其中,第一原子操作以redis的setnx操作进行举例,但不限于此种情形。
在第一原子操作的触发指令中携带有以分布式锁的锁名为key,以该key对应的第一时间戳为value的key-value参数;其中:锁名为与终端共享资源相关的字符串,第一时间戳为终端的当前时间与终端设定的超时时间之和。
步骤S102,所述服务器根据接收的所述第一原子操作的触发指令,执行所述第一原子操作,并向所述终端返回操作结果;
在服务器侧,服务器在接收不同终端发来的各种操作触发指令,并获取不同终端上报的时间戳。
具体地,服务器在接收到终端发来的第一原子操作的触发指令后,执行第一原子操作,以获取该终端共享网络资源的锁。
服务器在执行第一原子操作时,会根据是否获取到锁反馈不同的操作结果,比如,设定获取到锁的操作结果为1,设定未获取到锁的操作结果为1之外的其他值,比如0。最后,服务器会将操作结果反馈给终端。
步骤S103,当所述操作结果为未成功获取到分布式锁时,所述终端向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
终端在获取到服务器反馈的操作结果后,根据操作结果进行相应操作,当操作结果表明成功获取到锁时,终端通过获取的锁共享网络资源。
当操作结果表明未成功获取到锁时,终端向服务器发送第二原子操作的触发指令,以避免其它拿到锁的进程死掉没有释放锁而造成死锁。
终端在发给服务器的第二原子操作的触发指令中携带有由该终端的当前时间与设定的超时时间之和构成的第二时间戳。其中,第二原子操作以redis的GetSet操作进行举例,但不限于此种情形。
服务器根据接收的上述第二原子操作的触发指令,执行第二原子操作,并向终端返回第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳,该时间戳可能是异于当前终端的其它终端改写并上报给服务器的时间戳。
终端在接收到服务器返回的第三时间戳后,判断该第三时间戳是否小于终端的当前时间,若是,则判定锁超时,从而成功获取到锁;否则,返回执行上述步骤S101:向服务器触发第一原子操作,直至获取到所述分布式锁。
本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端向服务器触发第二原子操作,以判断分布式锁是否超时,若超时,则成功获取到锁,否则,返回执行终端向服务器触发第一原子操作步骤,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果。
如图2所示,本发明第二实施例提出一种分布式***共享网络资源的方法,在上述第一实施例的基础上,在上述步骤S102之后,在操作结果为未成功获取到分布式锁时,终端向服务器发送第二原子操作的触发指令的步骤之前还包括:
步骤S104,当所述操作结果为未成功获取到分布式锁时,所述终端从所述服务器获取当前记录的第四时间戳;
步骤S105,所述终端判断所述第四时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,执行步骤S103:向服务器触发第二原子操作;否则,返回执行步骤S101:终端向服务器触发第一原子操作,直至获取到所述分布式锁。
本实施例与上述图1所示的第一实施例的区别在于,在本实施例中,终端在通过发送第一原子操作未成功获取到分布式锁时,不是直接向服务器触发第二原子操作,而是先判断分布式锁是否超时,若超时则向服务器触发第二原子操作,若不超时,则直接返回步骤S101,由此可以简化分布式锁的获取流程,提高操作效率和准确性。
具体地,终端在通过发送第一原子操作未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的第四时间戳,终端判断该第四时间戳是否小于终端的当前时间,若是,则判定分布式锁超时,向服务器触发第二原子操作;否则,终端向服务器触发第一原子操作,直至获取到分布式锁。
本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的时间戳,终端判断该时间戳是否小于终端的当前时间,若是,则判定分布式锁超时,向服务器触发第二原子操作,否则,终端向服务器触发第一原子操作,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果;同时可以简化分布式锁的获取流程,提高操作效率和准确性。
如图3所示,本发明第三实施例提出一种分布式***共享网络资源的方法,包括:
步骤S201,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
本实施例方法运行环境涉及分布式***中的服务器和终端,在分布式计算中,多个终端可以通过计算机网络访问各节点上的共享资源。为了使分布式计算能够正常稳定运行,通过分布式锁保证多个终端对同一共享资源的安全访问,避免数据的一致性遭到破坏。
在本实施例中,终端基于redis提供的原子操作,与服务器交互实现分布式锁的获取,以保证网络资源共享的正常进行,比如保证某个进程(不同的终端代表不同的进程)持有锁时意外终止之后,其他进程能够正常获得锁等。
其中,redis是一个key-value(键-值)的内存存储***。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,即原子操作(在原子操作中,更高层不能发现其内部实现与结构)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。与memcached的区别在于:redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
本实施例利用redis的原子操作实现分布式锁(以下简称锁)的获取方案,其核心思想是利用redis的setnx操作进行获取锁的动作,利用redis的GetSet操作判断锁是否超时,并根据判断结果进行相应操作,直至获取到锁。
具体地,首先,终端在访问共享资源时,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;其中,第一原子操作以redis的setnx操作进行举例,但不限于此种情形。
在第一原子操作的触发指令中携带有以分布式锁的锁名为key,以该key对应的第一时间戳为value的key-value参数;其中:锁名为与终端共享资源相关的字符串,第一时间戳为终端的当前时间与终端设定的超时时间之和。
步骤S202,接收所述服务器执行所述第一原子操作后返回的操作结果;
在服务器侧,服务器在接收不同终端发来的各种操作触发指令,并获取不同终端上报的时间戳。
具体地,服务器在接收到终端发来的第一原子操作的触发指令后,执行第一原子操作,以获取该终端共享网络资源的锁。
服务器在执行第一原子操作时,会根据是否获取到锁反馈不同的操作结果,比如,设定获取到锁的操作结果为1,设定未获取到锁的操作结果为1之外的其他值,比如0。最后,服务器会将操作结果反馈给终端。
步骤S203,当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
终端在获取到服务器反馈的操作结果后,根据操作结果进行相应操作,当操作结果表明成功获取到锁时,终端通过获取的锁共享网络资源。
当操作结果表明未成功获取到锁时,终端向服务器发送第二原子操作的触发指令,以避免其它拿到锁的进程死掉没有释放锁而造成死锁。
终端在发给服务器的第二原子操作的触发指令中携带有由该终端的当前时间与设定的超时时间之和构成的第二时间戳。其中,第二原子操作以redis的GetSet操作进行举例,但不限于此种情形。
服务器根据接收的上述第二原子操作的触发指令,执行第二原子操作,并向终端返回第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳,该时间戳可能是异于当前终端的其它终端改写并上报给服务器的时间戳。
终端在接收到服务器返回的第三时间戳后,判断该第三时间戳是否小于终端的当前时间,若是,则判定锁超时,从而成功获取到锁;否则,返回执行向服务器触发第一原子操作,直至获取到所述分布式锁。
本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端向服务器触发第二原子操作,以判断分布式锁是否超时,若超时,则成功获取到锁,否则,返回执行终端向服务器触发第一原子操作步骤,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果。
如图4所示,本发明第四实施例提出一种分布式***共享网络资源的方法,在上述图3所示的第三实施例的基础上,在上述步骤S202之后,在终端向服务器触发第二原子操作的步骤之前还包括:
步骤S204,当所述操作结果为未成功获取到分布式锁时,所述终端从所述服务器获取当前记录的第四时间戳;
步骤S205,判断所述第四时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,执行步骤S203:向服务器触发第二原子操作;否则,返回执行步骤S201:终端向服务器触发第一原子操作,直至获取到所述分布式锁。
本实施例与上述图3所示的第三实施例的区别在于,在本实施例中,终端在通过发送第一原子操作未成功获取到分布式锁时,不是直接向服务器触发第二原子操作,而是先判断分布式锁是否超时,若超时则向服务器触发第二原子操作,若不超时,则直接返回步骤S201,由此可以简化分布式锁的获取流程,提高操作效率和准确性。
具体地,终端在通过发送第一原子操作未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的第四时间戳,终端判断该第四时间戳是否小于终端的当前时间,若是,则判定分布式锁超时,向服务器触发第二原子操作;否则,终端向服务器触发第一原子操作,直至获取到分布式锁。
本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的时间戳,终端判断该时间戳是否小于终端的当前时间,若是,则判定分布式锁超时,向服务器触发第二原子操作,否则,终端向服务器触发第一原子操作,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果;同时可以简化分布式锁的获取流程,提高操作效率和准确性。
如图5所示,本发明较佳实施例提出一种分布式***共享网络资源的***,包括:终端302和与所述终端302通信连接的服务器301,其中:
所述终端302,用于向所述服务器301触发第一原子操作,用以获取共享网络资源的分布式锁;
所述服务器301,用于根据接收的所述第一原子操作的触发指令,执行所述第一原子操作,并向所述终端302返回操作结果;
所述终端302,还用于当所述操作结果为未成功获取到分布式锁时,向所述服务器301触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
进一步地,所述终端302,还用于当操作结果为未成功获取到分布式锁时,向所述服务器301发送第二原子操作的触发指令,在所述第二原子操作的触发指令中携带所述终端302的当前时间与设定的超时时间之和构成的第二时间戳;
所述服务器301,还用于根据接收的所述第二原子操作的触发指令,执行所述第二原子操作,并向所述终端302返回第三时间戳;所述第三时间戳为:所述终端302触发所述第二原子操作之前,所述服务器301获取到的时间戳;
所述终端302,还用于判断所述第三时间戳是否小于终端302的当前时间,若是,则判定所述分布式锁超时,成功获取到分布式锁;否则,返回执行向服务器301触发第一原子操作,直至获取到所述分布式锁。
本实施例方案涉及分布式***中的服务器301和终端302,在分布式计算中,多个终端302可以通过计算机网络访问各节点上的共享资源。为了使分布式计算能够正常稳定运行,通过分布式锁保证多个终端302对同一共享资源的安全访问,避免数据的一致性遭到破坏。
在本实施例中,终端302基于redis提供的原子操作,与服务器301交互实现分布式锁的获取,以保证网络资源共享的正常进行,比如保证某个进程(不同的终端302代表不同的进程)持有锁时意外终止之后,其他进程能够正常获得锁等。
其中,redis是一个key-value(键-值)的内存存储***。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,即原子操作,在原子操作中,更高层不能发现其内部实现与结构。
具体来讲,原子操作,就是不能被更高等级中断抢夺优先的操作,就是不能被中断的操作。以操作***为例,由于操作***大部分时间处于开中断状态,所以,一个程序在执行的时候可能被优先级更高的线程中断。而有些操作是不能被中断的,不然会出现无法还原的后果,这时候,这些操作就需要原子操作。
现代操作***中,一般都提供了原子操作来实现一些同步操作,因此,原子操作也就是一个独立而不可分割的操作。在单核环境中,一般的意义下原子操作中线程不会被切换,线程切换要么在原子操作之前,要么在原子操作完成之后。更广泛的意义下,原子操作是指一系列必须整体完成的操作步骤,如果任何一步操作没有完成,那么所有完成的步骤都必须回滚,这样就可以保证要么所有操作步骤都未完成,要么所有操作步骤都被完成。
例如在单核***里,单个的机器指令可以看成是原子操作(如果有编译器优化、乱序执行等情况除外);在多核***中,单个的机器指令就不是原子操作,因为多核***里是多指令流并行运行的,一个核在执行一个指令时,其他核同时执行的指令有可能操作同一块内存区域,从而出现数据竞争现象。多核***中的原子操作通常使用内存栅障(memory barrier)来实现,即一个CPU核在执行原子操作时,其他CPU核必须停止对内存操作或者不对指定的内存进行操作,这样才能避免数据竞争问题。
在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。与memcached的区别在于:redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
本实施例利用redis的原子操作实现分布式锁(以下简称锁)的获取方案,其核心思想是利用redis的setnx操作进行获取锁的动作,利用redis的GetSet操作判断锁是否超时,并根据判断结果进行相应操作,直至获取到锁。
具体地,首先,终端302在访问共享资源时,终端302向服务器301触发第一原子操作,用以获取共享网络资源的分布式锁;其中,第一原子操作以redis的setnx操作进行举例,但不限于此种情形。
在第一原子操作的触发指令中携带有以分布式锁的锁名为key,以该key对应的第一时间戳为value的key-value参数;其中:锁名为与终端302共享资源相关的字符串,第一时间戳为终端302的当前时间与终端302设定的超时时间之和。
在服务器301侧,服务器301在接收不同终端302发来的各种操作触发指令,并获取不同终端302上报的时间戳。
具体地,服务器301在接收到终端302发来的第一原子操作的触发指令后,执行第一原子操作,以获取该终端302共享网络资源的锁。
服务器301在执行第一原子操作时,会根据是否获取到锁反馈不同的操作结果,比如,设定获取到锁的操作结果为1,设定未获取到锁的操作结果为1之外的其他值,比如0。最后,服务器301会将操作结果反馈给终端302。
终端302在获取到服务器301反馈的操作结果后,根据操作结果进行相应操作,当操作结果表明成功获取到锁时,终端302通过获取的锁共享网络资源。
当操作结果表明未成功获取到锁时,终端302向服务器301发送第二原子操作的触发指令,以避免其它拿到锁的进程死掉没有释放锁而造成死锁。
终端302在发给服务器301的第二原子操作的触发指令中携带有由该终端302的当前时间与设定的超时时间之和构成的第二时间戳。其中,第二原子操作以redis的GetSet操作进行举例,但不限于此种情形。
服务器301根据接收的上述第二原子操作的触发指令,执行第二原子操作,并向终端302返回第三时间戳;所述第三时间戳为:所述终端302触发所述第二原子操作之前,所述服务器301获取到的时间戳,该时间戳可能是异于当前终端302的其它终端302改写并上报给服务器301的时间戳。
终端302在接收到服务器301返回的第三时间戳后,判断该第三时间戳是否小于终端302的当前时间,若是,则判定锁超时,从而成功获取到锁;否则,返回执行向服务器301触发第一原子操作,直至获取到所述分布式锁。
本实施例通过上述方案,终端302向服务器301触发第一原子操作,用以获取共享网络资源的分布式锁;服务器301根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端302返回操作结果;当操作结果为未成功获取到分布式锁时,终端302向服务器301触发第二原子操作,以判断分布式锁是否超时,若超时,则成功获取到锁,否则,返回执行终端302向服务器301触发第一原子操作步骤,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果。
进一步地,所述终端302还用于当所述操作结果为未成功获取到分布式锁时,从所述服务器301获取当前记录的第四时间戳;判断所述第四时间戳是否小于终端302的当前时间,若是,则判定所述分布式锁超时,向服务器301触发第二原子操作;否则,返回执行向服务器301触发第一原子操作,直至获取到所述分布式锁。
在此种实施方式中,终端302在通过发送第一原子操作未成功获取到分布式锁时,不是直接向服务器301触发第二原子操作,而是先判断分布式锁是否超时,若超时则向服务器301触发第二原子操作,若不超时,则直接返回执行向服务器301触发第一原子操作,由此可以简化分布式锁的获取流程,提高操作效率和准确性。
如图6所示,本发明第一实施例提出一种分布式***共享网络资源的终端,包括:第一原子操作触发模块401、接收模块402及第二原子操作触发模块403,其中:
第一原子操作触发模块401,用于向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
接收模块402,用于接收所述服务器执行所述第一原子操作后返回的操作结果;
第二原子操作触发模块403,用于当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
本实施例方案涉及分布式***中的服务器和终端,在分布式计算中,多个终端可以通过计算机网络访问各节点上的共享资源。为了使分布式计算能够正常稳定运行,通过分布式锁保证多个终端对同一共享资源的安全访问,避免数据的一致性遭到破坏。
在本实施例中,终端基于redis提供的原子操作,与服务器交互实现分布式锁的获取,以保证网络资源共享的正常进行,比如保证某个进程(不同的终端代表不同的进程)持有锁时意外终止之后,其他进程能够正常获得锁等。
其中,redis是一个key-value(键-值)的内存存储***。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,即原子操作(在原子操作中,更高层不能发现其内部实现与结构)。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。与memcached的区别在于:redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
本实施例利用redis的原子操作实现分布式锁(以下简称锁)的获取方案,其核心思想是利用redis的setnx操作进行获取锁的动作,利用redis的GetSet操作判断锁是否超时,并根据判断结果进行相应操作,直至获取到锁。
具体地,首先,终端在访问共享资源时,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;其中,第一原子操作以redis的setnx操作进行举例,但不限于此种情形。
在第一原子操作的触发指令中携带有以分布式锁的锁名为key,以该key对应的第一时间戳为value的key-value参数;其中:锁名为与终端共享资源相关的字符串,第一时间戳为终端的当前时间与终端设定的超时时间之和。
在服务器侧,服务器在接收不同终端发来的各种操作触发指令,并获取不同终端上报的时间戳。
具体地,服务器在接收到终端发来的第一原子操作的触发指令后,执行第一原子操作,以获取该终端共享网络资源的锁。
服务器在执行第一原子操作时,会根据是否获取到锁反馈不同的操作结果,比如,设定获取到锁的操作结果为1,设定未获取到锁的操作结果为1之外的其他值,比如0。最后,服务器会将操作结果反馈给终端。
终端在获取到服务器反馈的操作结果后,根据操作结果进行相应操作,当操作结果表明成功获取到锁时,终端通过获取的锁共享网络资源。
当操作结果表明未成功获取到锁时,终端向服务器发送第二原子操作的触发指令,以避免其它拿到锁的进程死掉没有释放锁而造成死锁。
终端在发给服务器的第二原子操作的触发指令中携带有由该终端的当前时间与设定的超时时间之和构成的第二时间戳。其中,第二原子操作以redis的GetSet操作进行举例,但不限于此种情形。
服务器根据接收的上述第二原子操作的触发指令,执行第二原子操作,并向终端返回第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳,该时间戳可能是异于当前终端的其它终端改写并上报给服务器的时间戳。
终端在接收到服务器返回的第三时间戳后,判断该第三时间戳是否小于终端的当前时间,若是,则判定锁超时,从而成功获取到锁;否则,返回执行向服务器触发第一原子操作,直至获取到所述分布式锁。
本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端向服务器触发第二原子操作,以判断分布式锁是否超时,若超时,则成功获取到锁,否则,返回执行终端向服务器触发第一原子操作步骤,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果。
更为具体地,如图7所示,所述第二原子操作触发模块403包括:发送单元4031、接收单元4032及判断操作单元4033,其中:
发送单元4031,用于当操作结果为未成功获取到分布式锁时,向所述服务器发送第二原子操作的触发指令,在所述第二原子操作的触发指令中携带所述终端的当前时间与设定的超时时间之和构成的第二时间戳;
接收单元4032,用于接收所述服务器执行所述第二原子操作返回的第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳;
判断操作单元4033,用于判断所述第三时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,成功获取到分布式锁;否则,由所述第一原子操作触发模块向服务器触发第一原子操作,直至获取到所述分布式锁。
如图8所示,本发明第二实施例提出一种分布式***共享网络资源的终端,在上述图6所示的第一实施例的基础上,还包括:
判断操作模块404,用于当所述操作结果为未成功获取到分布式锁时,从所述服务器获取当前记录的第四时间戳;判断所述第四时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,由所述第二原子操作触发模块403向服务器触发第二原子操作;否则,由所述第一原子操作触发模块401向服务器触发第一原子操作,直至获取到所述分布式锁。
本实施例与上述图6所示的第三实施例的区别在于,在本实施例中,终端在通过发送第一原子操作未成功获取到分布式锁时,不是直接向服务器触发第二原子操作,而是先判断分布式锁是否超时,若超时则向服务器触发第二原子操作,若不超时,则直接由第一原子操作触发模块401向服务器触发第一原子操作,由此可以简化分布式锁的获取流程,提高操作效率和准确性。
具体地,终端在通过发送第一原子操作未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的第四时间戳,终端判断该第四时间戳是否小于终端的当前时间,若是,则判定分布式锁超时,向服务器触发第二原子操作;否则,终端向服务器触发第一原子操作,直至获取到分布式锁。
本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的时间戳,终端判断该时间戳是否小于终端的当前时间,若是,则判定分布式锁超时,向服务器触发第二原子操作,否则,终端向服务器触发第一原子操作,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果;同时可以简化分布式锁的获取流程,提高操作效率和准确性。
如图9所示,本发明第三实施例提出一种分布式***共享网络资源的终端,在上述图8所示的第二实施例的基础上,还包括:
资源共享模块405,用于当成功获取到分布式锁时,通过获取的分布式锁共享网络资源。
本实施例与上述图8所示的第二实施例的区别在于,本实施例还包括终端在成功获取到分布式锁后,通过获取的分布式锁共享网络资源,由此实现了分布式***中网络资源的共享,保证了分布式计算能够正常稳定运行,同时也保证了多个终端对同一共享资源的安全访问,避免数据的一致性遭到破坏。
如图10所示,图10是本发明实施例提出的分布式***共享网络资源的终端的一种结构示意图。
如图10所示,该终端可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatilememory),例如个磁盘存储器。存储器1005可选的还可以是个位于远离前述处理器1001的存储装置。如图10所示,作为一种计算机存储介质的存储器1005中可以包括操作***、网络通信模块、用户接口模块以及共享网络资源应用程序。
在图10所示的终端中,网络接口1004主要用于连接服务器,与服务器进行数据通信;用户接口1003主要用于连接用户端,与用户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的共享网络资源应用程序,并执行以下操作:
通过用户接口1003获取用户的操作指令,通过网络接口1004向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;所述服务器根据接收的所述第一原子操作的触发指令,执行所述第一原子操作,并向所述终端返回操作结果;当所述操作结果为未成功获取到分布式锁时,所述终端向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
在一个实施例中,处理器1001调用存储器1005中存储的共享网络资源应用程序可以执行以下操作:
当操作结果为未成功获取到分布式锁时,所述终端通过网络接口1004向所述服务器发送第二原子操作的触发指令,在所述第二原子操作的触发指令中携带所述终端的当前时间与设定的超时时间之和构成的第二时间戳;所述服务器根据接收的所述第二原子操作的触发指令,执行所述第二原子操作,并向所述终端返回第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳;终端判断所述第三时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,成功获取到分布式锁;否则,返回执行步骤:向服务器触发第一原子操作,直至获取到所述分布式锁。
在一个实施例中,处理器1001调用存储器1005中存储的共享网络资源应用程序可以执行以下操作:
所述终端向所述服务器发送第二原子操作的触发指令的步骤之前还包括:
当所述操作结果为未成功获取到分布式锁时,所述终端从所述服务器获取当前记录的第四时间戳;
所述终端判断所述第四时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,执行步骤:向服务器触发第二原子操作;否则,返回执行步骤:终端向服务器触发第一原子操作,直至获取到所述分布式锁。
进一步地,在一个实施例中,处理器1001调用存储器1005中存储的共享网络资源应用程序可以执行以下操作:
当成功获取到分布式锁时,所述终端通过获取的分布式锁共享网络资源。
本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的时间戳,终端判断该时间戳是否小于终端的当前时间,若是,则判定分布式锁超时,向服务器触发第二原子操作,否则,终端向服务器触发第一原子操作,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果;同时可以简化分布式锁的获取流程,提高操作效率和准确性。
还需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (19)
1.一种分布式***共享网络资源的方法,其特征在于,包括:
终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
所述服务器根据接收的所述第一原子操作的触发指令,执行所述第一原子操作,并向所述终端返回操作结果;
当所述操作结果为未成功获取到分布式锁时,所述终端向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
2.根据权利要求1所述的方法,其特征在于,所述第一原子操作的触发指令携带有以所述分布式锁的锁名为key,以所述key对应的第一时间戳为value的key-value参数;所述第一时间戳为所述终端的当前时间与设定的超时时间之和。
3.根据权利要求1所述的方法,其特征在于,所述当操作结果为未成功获取到分布式锁时,所述终端向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁的步骤包括:
当操作结果为未成功获取到分布式锁时,所述终端向所述服务器发送第二原子操作的触发指令,在所述第二原子操作的触发指令中携带所述终端的当前时间与设定的超时时间之和构成的第二时间戳;
所述服务器根据接收的所述第二原子操作的触发指令,执行所述第二原子操作,并向所述终端返回第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳;
所述终端判断所述第三时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,成功获取到分布式锁;否则,返回执行步骤:向服务器触发第一原子操作,直至获取到所述分布式锁。
4.根据权利要求3所述的方法,其特征在于,所述终端向所述服务器发送第二原子操作的触发指令的步骤之前还包括:
当所述操作结果为未成功获取到分布式锁时,所述终端从所述服务器获取当前记录的第四时间戳;
所述终端判断所述第四时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,执行步骤:向服务器触发第二原子操作;否则,返回执行步骤:终端向服务器触发第一原子操作,直至获取到所述分布式锁。
5.根据权利要求1-4中任一项所述的方法,其特征在于,还包括:
当成功获取到分布式锁时,所述终端通过获取的分布式锁共享网络资源。
6.一种分布式***共享网络资源的***,其特征在于,包括:终端和与所述终端通信连接的服务器,其中:
所述终端,用于向所述服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
所述服务器,用于根据接收的所述第一原子操作的触发指令,执行所述第一原子操作,并向所述终端返回操作结果;
所述终端,还用于当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
7.根据权利要求6所述的***,其特征在于,
所述终端,还用于当操作结果为未成功获取到分布式锁时,向所述服务器发送第二原子操作的触发指令,在所述第二原子操作的触发指令中携带所述终端的当前时间与设定的超时时间之和构成的第二时间戳;
所述服务器,还用于根据接收的所述第二原子操作的触发指令,执行所述第二原子操作,并向所述终端返回第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳;
所述终端,还用于判断所述第三时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,成功获取到分布式锁;否则,返回执行向服务器触发第一原子操作,直至获取到所述分布式锁。
8.根据权利要求7所述的***,其特征在于,
所述终端,还用于当所述操作结果为未成功获取到分布式锁时,从所述服务器获取当前记录的第四时间戳;判断所述第四时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,向服务器触发第二原子操作;否则,返回执行向服务器触发第一原子操作,直至获取到所述分布式锁。
9.根据权利要求6、7或8所述的***,其特征在于,
所述终端,还用于当成功获取到分布式锁时,通过获取的分布式锁共享网络资源。
10.一种分布式***共享网络资源的方法,其特征在于,包括:
终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
接收所述服务器执行所述第一原子操作后返回的操作结果;
当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
11.根据权利要求10所述的方法,其特征在于,所述第一原子操作的触发指令携带有以所述分布式锁的锁名为key,以所述key对应的第一时间戳为value的key-value参数;所述第一时间戳包括所述终端的当前时间与设定的超时时间之和。
12.根据权利要求10所述的方法,其特征在于,所述当操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁的步骤包括:
当操作结果为未成功获取到分布式锁时,所述终端向所述服务器发送第二原子操作的触发指令,在所述第二原子操作的触发指令中携带所述终端的当前时间与设定的超时时间之和构成的第二时间戳;
接收所述服务器执行所述第二原子操作返回的第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳;
判断所述第三时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,成功获取到分布式锁;否则,返回执行步骤:终端向服务器触发第一原子操作,直至获取到所述分布式锁。
13.根据权利要求12所述的方法,其特征在于,所述向服务器触发第二原子操作的步骤之前还包括:
当所述操作结果为未成功获取到分布式锁时,所述终端从所述服务器获取当前记录的第四时间戳;
判断所述第四时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,执行步骤:向服务器触发第二原子操作;否则,返回执行步骤:终端向服务器触发第一原子操作,直至获取到所述分布式锁。
14.根据权利要求10-13中任一项所述的方法,其特征在于,还包括:
当成功获取到分布式锁时,所述终端通过获取的分布式锁共享网络资源。
15.一种分布式***共享网络资源的终端,其特征在于,包括:
第一原子操作触发模块,用于向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
接收模块,用于接收所述服务器执行所述第一原子操作后返回的操作结果;
第二原子操作触发模块,用于当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
16.根据权利要求15所述的终端,其特征在于,所述第一原子操作的触发指令携带有以所述分布式锁的锁名为key,以所述key对应的第一时间戳为value的key-value参数;所述第一时间戳包括所述终端的当前时间与设定的超时时间之和。
17.根据权利要求16所述的终端,其特征在于,所述第二原子操作触发模块包括:
发送单元,用于当操作结果为未成功获取到分布式锁时,向所述服务器发送第二原子操作的触发指令,在所述第二原子操作的触发指令中携带所述终端的当前时间与设定的超时时间之和构成的第二时间戳;
接收单元,用于接收所述服务器执行所述第二原子操作返回的第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳;
判断操作单元,用于判断所述第三时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,成功获取到分布式锁;否则,由所述第一原子操作触发模块向服务器触发第一原子操作,直至获取到所述分布式锁。
18.根据权利要求17所述的终端,其特征在于,还包括:
判断操作模块;用于当所述操作结果为未成功获取到分布式锁时,从所述服务器获取当前记录的第四时间戳;判断所述第四时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,由所述第二原子操作触发模块向服务器触发第二原子操作;否则,由所述第一原子操作触发模块向服务器触发第一原子操作,直至获取到所述分布式锁。
19.根据权利要求15-18中任一项所述的终端,其特征在于,还包括:
资源共享模块,用于当成功获取到分布式锁时,通过获取的分布式锁共享网络资源。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410127465.3A CN104954411A (zh) | 2014-03-31 | 2014-03-31 | 分布式***共享网络资源的方法、终端及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410127465.3A CN104954411A (zh) | 2014-03-31 | 2014-03-31 | 分布式***共享网络资源的方法、终端及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104954411A true CN104954411A (zh) | 2015-09-30 |
Family
ID=54168762
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410127465.3A Pending CN104954411A (zh) | 2014-03-31 | 2014-03-31 | 分布式***共享网络资源的方法、终端及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104954411A (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106020939A (zh) * | 2016-05-31 | 2016-10-12 | 北京小米移动软件有限公司 | 删除锁的方法、装置和用于删除锁的装置 |
CN106354565A (zh) * | 2016-09-21 | 2017-01-25 | 努比亚技术有限公司 | 一种分布式锁客户端及控制方法 |
CN107239238A (zh) * | 2017-07-27 | 2017-10-10 | 郑州云海信息技术有限公司 | 一种基于分布式锁的存储的io操作方法及装置 |
CN107301091A (zh) * | 2016-04-14 | 2017-10-27 | 北京京东尚科信息技术有限公司 | 资源分配方法和装置 |
CN108959499A (zh) * | 2018-06-26 | 2018-12-07 | 郑州云海信息技术有限公司 | 分布式文件***性能分析方法、装置、设备及存储介质 |
CN109101528A (zh) * | 2018-06-21 | 2018-12-28 | 深圳市买买提信息科技有限公司 | 数据处理方法、数据处理装置及电子设备 |
CN109324877A (zh) * | 2018-08-15 | 2019-02-12 | 北京天元创新科技有限公司 | 数据访问的方法及服务器 |
CN110445864A (zh) * | 2019-08-11 | 2019-11-12 | 西藏宁算科技集团有限公司 | 一种云计算环境下分布式锁的实现方法及*** |
CN111639309A (zh) * | 2020-05-26 | 2020-09-08 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、节点设备及存储介质 |
CN112463419A (zh) * | 2021-01-26 | 2021-03-09 | 北京轻松筹信息技术有限公司 | 基于中间件的主备节点工作方法及装置、电子设备 |
CN113806384A (zh) * | 2021-08-19 | 2021-12-17 | 紫光云(南京)数字技术有限公司 | 基于redis的分配递增整型数据的方法 |
CN114567540A (zh) * | 2022-02-25 | 2022-05-31 | 北京百度网讯科技有限公司 | 主备节点切换方法、装置、设备、介质及程序产品 |
CN114679464A (zh) * | 2022-03-24 | 2022-06-28 | 未鲲(上海)科技服务有限公司 | 基于分布式锁的数据回滚方法、装置、设备和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101184106A (zh) * | 2007-11-30 | 2008-05-21 | 北京航空航天大学 | 一种移动数据库的关联事务处理方法 |
CN101252603A (zh) * | 2008-04-11 | 2008-08-27 | 清华大学 | 基于存储区域网络san的集群分布式锁管理方法 |
US7716180B2 (en) * | 2005-12-29 | 2010-05-11 | Amazon Technologies, Inc. | Distributed storage system with web services client interface |
CN102088701A (zh) * | 2009-12-08 | 2011-06-08 | 中兴通讯股份有限公司 | 一种节省网络流量的方法和*** |
US20110161076A1 (en) * | 2009-12-31 | 2011-06-30 | Davis Bruce L | Intuitive Computing Methods and Systems |
CN101141482B (zh) * | 2007-09-29 | 2012-01-18 | 腾讯科技(深圳)有限公司 | 网络资源管理***及方法 |
CN102831156A (zh) * | 2012-06-29 | 2012-12-19 | 浙江大学 | 一种云计算平台上的分布式事务处理方法 |
CN103399894A (zh) * | 2013-07-23 | 2013-11-20 | 中国科学院信息工程研究所 | 一种基于共享存储池的分布式事务处理方法 |
-
2014
- 2014-03-31 CN CN201410127465.3A patent/CN104954411A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7716180B2 (en) * | 2005-12-29 | 2010-05-11 | Amazon Technologies, Inc. | Distributed storage system with web services client interface |
CN101141482B (zh) * | 2007-09-29 | 2012-01-18 | 腾讯科技(深圳)有限公司 | 网络资源管理***及方法 |
CN101184106A (zh) * | 2007-11-30 | 2008-05-21 | 北京航空航天大学 | 一种移动数据库的关联事务处理方法 |
CN101252603A (zh) * | 2008-04-11 | 2008-08-27 | 清华大学 | 基于存储区域网络san的集群分布式锁管理方法 |
CN102088701A (zh) * | 2009-12-08 | 2011-06-08 | 中兴通讯股份有限公司 | 一种节省网络流量的方法和*** |
US20110161076A1 (en) * | 2009-12-31 | 2011-06-30 | Davis Bruce L | Intuitive Computing Methods and Systems |
CN102831156A (zh) * | 2012-06-29 | 2012-12-19 | 浙江大学 | 一种云计算平台上的分布式事务处理方法 |
CN103399894A (zh) * | 2013-07-23 | 2013-11-20 | 中国科学院信息工程研究所 | 一种基于共享存储池的分布式事务处理方法 |
Non-Patent Citations (1)
Title |
---|
UNJUST: "用Redis实现分布式锁", 《HTTPS://WWW.XUEBUYUAN.COM/1795343.HTML》 * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107301091A (zh) * | 2016-04-14 | 2017-10-27 | 北京京东尚科信息技术有限公司 | 资源分配方法和装置 |
CN106020939A (zh) * | 2016-05-31 | 2016-10-12 | 北京小米移动软件有限公司 | 删除锁的方法、装置和用于删除锁的装置 |
CN106354565A (zh) * | 2016-09-21 | 2017-01-25 | 努比亚技术有限公司 | 一种分布式锁客户端及控制方法 |
CN106354565B (zh) * | 2016-09-21 | 2019-08-20 | 努比亚技术有限公司 | 一种分布式锁客户端及控制方法 |
CN107239238A (zh) * | 2017-07-27 | 2017-10-10 | 郑州云海信息技术有限公司 | 一种基于分布式锁的存储的io操作方法及装置 |
CN109101528A (zh) * | 2018-06-21 | 2018-12-28 | 深圳市买买提信息科技有限公司 | 数据处理方法、数据处理装置及电子设备 |
CN108959499A (zh) * | 2018-06-26 | 2018-12-07 | 郑州云海信息技术有限公司 | 分布式文件***性能分析方法、装置、设备及存储介质 |
CN109324877A (zh) * | 2018-08-15 | 2019-02-12 | 北京天元创新科技有限公司 | 数据访问的方法及服务器 |
CN110445864A (zh) * | 2019-08-11 | 2019-11-12 | 西藏宁算科技集团有限公司 | 一种云计算环境下分布式锁的实现方法及*** |
CN110445864B (zh) * | 2019-08-11 | 2022-04-08 | 西藏宁算科技集团有限公司 | 一种云计算环境下分布式锁的实现方法及*** |
CN111639309A (zh) * | 2020-05-26 | 2020-09-08 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、节点设备及存储介质 |
CN111639309B (zh) * | 2020-05-26 | 2021-08-24 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置、节点设备及存储介质 |
CN112463419A (zh) * | 2021-01-26 | 2021-03-09 | 北京轻松筹信息技术有限公司 | 基于中间件的主备节点工作方法及装置、电子设备 |
CN113806384A (zh) * | 2021-08-19 | 2021-12-17 | 紫光云(南京)数字技术有限公司 | 基于redis的分配递增整型数据的方法 |
CN114567540A (zh) * | 2022-02-25 | 2022-05-31 | 北京百度网讯科技有限公司 | 主备节点切换方法、装置、设备、介质及程序产品 |
CN114679464A (zh) * | 2022-03-24 | 2022-06-28 | 未鲲(上海)科技服务有限公司 | 基于分布式锁的数据回滚方法、装置、设备和存储介质 |
CN114679464B (zh) * | 2022-03-24 | 2024-02-13 | 深圳九有数据库有限公司 | 基于分布式锁的数据回滚方法、装置、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104954411A (zh) | 分布式***共享网络资源的方法、终端及*** | |
CN110389900B (zh) | 一种分布式数据库集群测试方法、装置及存储介质 | |
CN108076098B (zh) | 一种业务处理方法及*** | |
CN107729139B (zh) | 一种并发获取资源的方法和装置 | |
WO2016184175A1 (zh) | 数据库处理方法及装置 | |
US20120159421A1 (en) | System and Method for Exclusion of Inconsistent Objects from Lifecycle Management Processes | |
CN109032796B (zh) | 一种数据处理方法和装置 | |
CN107402956B (zh) | 大任务的数据处理方法、设备和计算机可读存储介质 | |
CN111897633A (zh) | 一种任务处理的方法和装置 | |
CN109697112B (zh) | 分布式集约化一站式作业***和实现方法 | |
CN111240812A (zh) | 任务执行方法及装置 | |
WO2021057605A1 (zh) | 设备管理方法、装置、***、设备及存储介质 | |
CN106375103B (zh) | 一种告警数据采集和发送方法 | |
CN112612467A (zh) | 一种处理基于qiankun的微前端架构的方法和装置 | |
EP3823213A1 (en) | Network management method and apparatus | |
CN111200651A (zh) | 定时调用微服务的方法、***、设备和介质 | |
CN113703946A (zh) | 应用恢复方法及其装置、电子设备、计算机可读存储介质 | |
CN111767126A (zh) | 分布式批量处理的***和方法 | |
CN101751292B (zh) | Atc***中一种实现多机关键数据一致性功能的方法 | |
CN111382141A (zh) | 主从架构配置方法、装置、设备以及计算机可读存储介质 | |
CN107102901B (zh) | 一种任务处理方法和装置 | |
CN113342511A (zh) | 一种分布式任务管理***及方法 | |
CN109818998B (zh) | 信息同步方法和装置 | |
CN105187244A (zh) | 一种支持多种管理模式的数字通信设备访问管理*** | |
US9304841B2 (en) | Dispatcher framework to provide inter-application communication |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150930 |