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

文档序号:9238201阅读:820来源:国知局
分布式系统共享网络资源的方法、终端及系统的制作方法
【技术领域】
[0001]本发明涉及互联网技术领域,尤其涉及一种分布式系统共享网络资源的方法、终端及系统。
【背景技术】
[0002]在分布式计算中,多个客户端可以通过计算机网络访问各分布式系统节点上的共享资源,为了使分布式计算能够正常稳定运行,必须保证多个客户端对同一共享资源的安全访问,避免数据的一致性遭到破坏,由此而产生了控制分布式系统之间同步访问共享资源的分布式锁。
[0003]与普通锁相比,分布式锁面临的问题更多,比如如何保证某个进程持有锁时而意外终止之后,其他进程能够正常获得锁,以保证其他进程共享资源的正常进行。
[0004]针对上述问题,现有技术中,通常采用一个中间件回收所有客户端的锁请求,然后将回收的锁请求放到锁请求队列里,再通过中间件依次处理所有客户端的锁请求,并通过定时器来确定锁是否超时,进而判断是否成功获取到锁。但是,现有的这种处理方案中,系统设计较为复杂,而且可扩展性差。

【发明内容】

[0005]本发明实施例提供一种设计简单、可扩展性好、可快速解决分布式计算中对共享资源的安全访问问题的分布式系统共享网络资源的方法、终端及系统。
[0006]本发明实施例提出一种分布式系统共享网络资源的方法,包括:
[0007]终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
[0008]所述服务器根据接收的所述第一原子操作的触发指令,执行所述第一原子操作,并向所述终端返回操作结果;
[0009]当所述操作结果为未成功获取到分布式锁时,所述终端向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
[0010]本发明还提出一种分布式系统共享网络资源的系统,包括:终端和与所述终端通信连接的服务器,其中:
[0011]所述终端,用于向所述服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
[0012]所述服务器,用于根据接收的所述第一原子操作的触发指令,执行所述第一原子操作,并向所述终端返回操作结果;
[0013]所述终端,还用于当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
[0014]本发明还提出一种分布式系统共享网络资源的方法,包括:
[0015]终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
[0016]接收所述服务器执行所述第一原子操作后返回的操作结果;
[0017]当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
[0018]本发明还提出一种分布式系统共享网络资源的终端,包括:
[0019]第一原子操作触发模块,用于向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
[0020]接收模块,用于接收所述服务器执行所述第一原子操作后返回的操作结果;
[0021]第二原子操作触发模块,用于当所述操作结果为未成功获取到分布式锁时,向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进行相应操作,直至获取到所述分布式锁。
[0022]本发明实施例提出的一种分布式系统共享网络资源的方法、终端及系统,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端向服务器触发第二原子操作,以判断分布式锁是否超时,并根据判断结果进行相应操作,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,可以快速解决分布式计算中对共享资源的安全访问问题,比如可以保证某个进程持有锁时意外终止之后,其他进程能够正常获得锁,具有设计简单、可扩展性好的技术效果。
【附图说明】
[0023]图1是本发明分布式系统共享网络资源的方法第一实施例的流程示意图;
[0024]图2是本发明分布式系统共享网络资源的方法第二实施例的流程示意图;
[0025]图3是本发明分布式系统共享网络资源的方法第三实施例的流程示意图;
[0026]图4是本发明分布式系统共享网络资源的方法第四实施例的流程示意图;
[0027]图5是本发明分布式系统共享网络资源的系统较佳实施例的架构示意图;
[0028]图6是本发明分布式系统共享网络资源的终端第一实施例的功能模块示意图;
[0029]图7是本发明分布式系统共享网络资源的终端实施例中第二原子操作触发模块的结构不意图;
[0030]图8是本发明分布式系统共享网络资源的终端第二实施例的功能模块示意图;
[0031]图9是本发明分布式系统共享网络资源的终端第三实施例的功能模块示意图;
[0032]图10是本发明实施例分布式系统共享网络资源的终端的另一种结构示意图。
[0033]为了使本发明的技术方案更加清楚、明了,下面将结合附图作进一步详述。
【具体实施方式】
[0034]应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0035]本发明实施例的主要解决方案是:终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;服务器根据接收的第一原子操作的触发指令,执行第一原子操作,并向终端返回操作结果;当操作结果为未成功获取到分布式锁时,终端向服务器触发第二原子操作,以判断分布式锁是否超时,并根据判断结果进行相应操作,直至获取到分布式锁,由此,基于原子操作实现分布式锁的获取,快速解决分布式计算中对共享资源的安全访问问题,设计简单、可扩展性好。
[0036]如图1所示,本发明第一实施例提出一种分布式系统共享网络资源的方法,包括:
[0037]步骤S101,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;
[0038]本实施例方法运行环境涉及分布式系统中的服务器和终端,在分布式计算中,多个终端可以通过计算机网络访问各节点上的共享资源。为了使分布式计算能够正常稳定运行,通过分布式锁保证多个终端对同一共享资源的安全访问,避免数据的一致性遭到破坏。
[0039]在本实施例中,终端基于redis提供的原子操作,与服务器交互实现分布式锁的获取,以保证网络资源共享的正常进行,比如保证某个进程(不同的终端代表不同的进程)持有锁时意外终止之后,其他进程能够正常获得锁等。
[0040]其中,redis(REmote Dict1nary Server)是一个 key-value (键-值)的内存存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string (字符串)、list (链表)、set (集合)和zset (有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的,即原子操作,在原子操作中,更高层不能发现其内部实现与结构。
[0041]具体来讲,原子操作,就是不能被更高等级中断抢夺优先的操作,就是不能被中断的操作。以操作系统为例,由于操作系统大部分时间处于开中断状态,所以,一个程序在执行的时候可能被优先级更高的线程中断。而有些操作是不能被中断的,不然会出现无法还原的后果,这时候,这些操作就需要原子操作。
[0042]现代操作系统中,一般都提供了原子操作来实现一些同步操作,因此,原子操作也就是一个独立而不可分割的操作。在单核环境中,一般的意义下原子操作中线程不会被切换,线程切换要么在原子操作之前,要么在原子操作完成之后。更广泛的意义下,原子操作是指一系列必须整体完成的操作步骤,如果任何一步操作没有完成,那么所有完成的步骤都必须回滚,这样就可以保证要么所有操作步骤都未完成,要么所有操作步骤都被完成。
[0043]例如在单核系统里,单个的机器指令可以看成是原子操作(如果有编译器优化、乱序执行等情况除外);在多核系统中,单个的机器指令就不是原子操作,因为多核系统里是多指令流并行运行的,一个核在执行一个指令时,其他核同时执行的指令有可能操作同一块内存区域,从而出现数据竞争现象。多核系统中的原子操作通常使用内存栅障(memorybarrier)来实现,即一个CPU核在执行原子操作时,其他CPU核必须停止对内存操作或者不对指定的内存进行操作,这样才能避免数据竞争问题。
[0044]在此基础上,redis支持各种不同方式的排序。与memcached—样,为了保证效率,数据都是缓存在内存中。与memcached的区别在于:redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave (主从)同止/J/ O
[0045]本实施例利用redis的原子操作实现分布式锁(以下简称锁)的获取方案,其核心思想是利用redis的setnx操作进行获取锁的动作,利用redis的GetSet操作判断锁是否超时,并根据判断结果进行相应操作,直至获取到锁。
[0046]具体地,首先,终端在访问共享资源时,终端向服务器触发第一原子操作,用以获取共享网络资源的分布式锁;其中,第一原子操作以redis的setnx操作进行举例,但不限于此种情形。
[0047]在第一原子操作的触发指令中携带有以分布式锁的锁名为key,以该key对应的第一时间戳为value的key-value参数;其中:锁名为与终端共享资源相关的字符串,第一时间戳为终端的当前时间与终端设定的超时时间之和。
[0048]步骤S102,所述服务器根据接收的所述第一原子操作的触发指令,执行所述第一原子操作,并向所述终端返回操作结果;
[0049]在服务器侧,服务器在接收不同终端发来的各种操作触发指令,并获取不同终端上报的时间戳。
[0050]具体地,服务器在接收到终端发来的第一原子操作的触发指令后,执行第一原子操作,以获取该终端共享网络资源的锁。
[0051]服务器在执行第一原子操作时,会根据是否获取到锁反馈不同的操作结果,比如,设定获取到锁的操作结果为1,设定未获取到锁的操作结果为I之外的其他值,比如O。最后,服务器会将操作结果反馈给终端。
[0052]步骤S103,当所述操作结果为未成功获取到分布式锁时,所述终端向所述服务器触发第二原子操作,以判断所述分布式锁是否超时,并根据判断结果进
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1