分布式系统共享网络资源的方法、终端及系统的制作方法_2

文档序号:9238201阅读:来源:国知局
行相应操作,直至获取到所述分布式锁。
[0053]终端在获取到服务器反馈的操作结果后,根据操作结果进行相应操作,当操作结果表明成功获取到锁时,终端通过获取的锁共享网络资源。
[0054]当操作结果表明未成功获取到锁时,终端向服务器发送第二原子操作的触发指令,以避免其它拿到锁的进程死掉没有释放锁而造成死锁。
[0055]终端在发给服务器的第二原子操作的触发指令中携带有由该终端的当前时间与设定的超时时间之和构成的第二时间戳。其中,第二原子操作以redis的GetSet操作进行举例,但不限于此种情形。
[0056]服务器根据接收的上述第二原子操作的触发指令,执行第二原子操作,并向终端返回第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳,该时间戳可能是异于当前终端的其它终端改写并上报给服务器的时间戳。
[0057]终端在接收到服务器返回的第三时间戳后,判断该第三时间戳是否小于终端的当前时间,若是,则判定锁超时,从而成功获取到锁;否则,返回执行上述步骤SlOl:向服务器触发第一原子操作,直至获取到所述分布式锁。
[0058]本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端向服务器触发第二原子操作,以判断分布式锁是否超时,若超时,则成功获取到锁,否则,返回执行终端向服务器触发第一原子操作步骤,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果。
[0059]如图2所示,本发明第二实施例提出一种分布式系统共享网络资源的方法,在上述第一实施例的基础上,在上述步骤S102之后,在操作结果为未成功获取到分布式锁时,终端向服务器发送第二原子操作的触发指令的步骤之前还包括:
[0060]步骤S104,当所述操作结果为未成功获取到分布式锁时,所述终端从所述服务器获取当前记录的第四时间戳;
[0061]步骤S105,所述终端判断所述第四时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,执行步骤S103:向服务器触发第二原子操作;否则,返回执行步骤SlOl:终端向服务器触发第一原子操作,直至获取到所述分布式锁。
[0062]本实施例与上述图1所示的第一实施例的区别在于,在本实施例中,终端在通过发送第一原子操作未成功获取到分布式锁时,不是直接向服务器触发第二原子操作,而是先判断分布式锁是否超时,若超时则向服务器触发第二原子操作,若不超时,则直接返回步骤S101,由此可以简化分布式锁的获取流程,提高操作效率和准确性。
[0063]具体地,终端在通过发送第一原子操作未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的第四时间戳,终端判断该第四时间戳是否小于终端的当前时间,若是,则判定分布式锁超时,向服务器触发第二原子操作;否则,终端向服务器触发第一原子操作,直至获取到分布式锁。
[0064]本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的时间戳,终端判断该时间戳是否小于终端的当前时间,若是,则判定分布式锁超时,向服务器触发第二原子操作,否则,终端向服务器触发第一原子操作,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果;同时可以简化分布式锁的获取流程,提高操作效率和准确性。
[0065]如图3所示,本发明第三实施例提出一种分布式系统共享网络资源的方法,包括:
[0066]步骤S201,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
[0067]本实施例方法运行环境涉及分布式系统中的服务器和终端,在分布式计算中,多个终端可以通过计算机网络访问各节点上的共享资源。为了使分布式计算能够正常稳定运行,通过分布式锁保证多个终端对同一共享资源的安全访问,避免数据的一致性遭到破坏。
[0068]在本实施例中,终端基于redis提供的原子操作,与服务器交互实现分布式锁的获取,以保证网络资源共享的正常进行,比如保证某个进程(不同的终端代表不同的进程)持有锁时意外终止之后,其他进程能够正常获得锁等。
[0069]其中,redis是一个key-value (键-值)的内存存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string (字符串)、list (链表)、set (集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,即原子操作(在原子操作中,更高层不能发现其内部实现与结构)。在此基础上,redis支持各种不同方式的排序。与memcached—样,为了保证效率,数据都是缓存在内存中。与memcached的区别在于:redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave (主从)同步。
[0070]本实施例利用redis的原子操作实现分布式锁(以下简称锁)的获取方案,其核心思想是利用redis的setnx操作进行获取锁的动作,利用redis的GetSet操作判断锁是否超时,并根据判断结果进行相应操作,直至获取到锁。
[0071]具体地,首先,终端在访问共享资源时,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;其中,第一原子操作以redis的setnx操作进行举例,但不限于此种情形。
[0072]在第一原子操作的触发指令中携带有以分布式锁的锁名为key,以该key对应的第一时间戳为value的key-value参数;其中:锁名为与终端共享资源相关的字符串,第一时间戳为终端的当前时间与终端设定的超时时间之和。
[0073]步骤S202,接收所述服务器执行所述第一原子操作后返回的操作结果;
[0074]在服务器侧,服务器在接收不同终端发来的各种操作触发指令,并获取不同终端上报的时间戳。
[0075]具体地,服务器在接收到终端发来的第一原子操作的触发指令后,执行第一原子操作,以获取该终端共享网络资源的锁。
[0076]服务器在执行第一原子操作时,会根据是否获取到锁反馈不同的操作结果,比如,设定获取到锁的操作结果为1,设定未获取到锁的操作结果为I之外的其他值,比如O。最后,服务器会将操作结果反馈给终端。
[0077]步骤S203,当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
[0078]终端在获取到服务器反馈的操作结果后,根据操作结果进行相应操作,当操作结果表明成功获取到锁时,终端通过获取的锁共享网络资源。
[0079]当操作结果表明未成功获取到锁时,终端向服务器发送第二原子操作的触发指令,以避免其它拿到锁的进程死掉没有释放锁而造成死锁。
[0080]终端在发给服务器的第二原子操作的触发指令中携带有由该终端的当前时间与设定的超时时间之和构成的第二时间戳。其中,第二原子操作以redis的GetSet操作进行举例,但不限于此种情形。
[0081]服务器根据接收的上述第二原子操作的触发指令,执行第二原子操作,并向终端返回第三时间戳;所述第三时间戳为:所述终端触发所述第二原子操作之前,所述服务器获取到的时间戳,该时间戳可能是异于当前终端的其它终端改写并上报给服务器的时间戳。
[0082]终端在接收到服务器返回的第三时间戳后,判断该第三时间戳是否小于终端的当前时间,若是,则判定锁超时,从而成功获取到锁;否则,返回执行向服务器触发第一原子操作,直至获取到所述分布式锁。
[0083]本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端向服务器触发第二原子操作,以判断分布式锁是否超时,若超时,则成功获取到锁,否则,返回执行终端向服务器触发第一原子操作步骤,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果。
[0084]如图4所示,本发明第四实施例提出一种分布式系统共享网络资源的方法,在上述图3所示的第三实施例的基础上,在上述步骤S202之后,在终端向服务器触发第二原子操作的步骤之前还包括:
[0085]步骤S204,当所述操作结果为未成功获取到分布式锁时,所述终端从所述服务器获取当前记录的第四时间戳;
[0086]步骤S205,判断所述第四时间戳是否小于终端的当前时间,若是,则判定所述分布式锁超时,执行步骤S203:向服务器触发第二原子操作;否则,返回执行步骤S201:终端向服务器触发第一原子操作,直至获取到所述分布式锁。
[0087]本实施例与上述图3所示的第三实施例的区别在于,在本实施例中,终端在通过发送第一原子操作未成功获取到分布式锁时,不是直接向服务器触发第二原子操作,而是先判断分布式锁是否超时,若超时则向服务器触发第二原子操作,若不超时,则直接返回步骤S201,由此可以简化分布式锁的获取流程,提高操作效率和准确性。
[0088]具体地,终端在通过发送第一原子操作未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的第四时间戳,终端判断该第四时间戳是否小于终端的当前时间,若是,则判定分布式锁超时,向服务器触发第二原子操作;否则,终端向服务器触发第一原子操作,直至获取到分布式锁。
[0089]本实施例通过上述方案,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端从服务器获取该服务器当前记录的时间戳,终端判断该时间戳是否小于终端的当前时间,若是,则判定分布式锁超时
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1