分布式系统及分布式系统中目标对象的调度方法技术方案

技术编号:15520718 阅读:189 留言:0更新日期:2017-06-04 10:12
本发明专利技术公开了一种分布式系统及分布式系统中目标对象的调度方法。该调度方法包括:创建对应于目标对象的锁资源对象,锁资源对象包括与目标对象相关的锁信息;响应于接收到特定线程发送的锁请求,根据锁请求所针对的目标对象的锁资源对象的锁信息,判断特定线程当前是否能够获取目标对象所对应的锁。由此,可以将分布式环境下的不同特定线程的锁请求映射为同一JVM管理下的锁请求,从而可以统一管理调度分布式环境下的多个锁请求。

Scheduling method of target object in distributed system and distributed system

The invention discloses a distributed system and a scheduling method of a target object in a distributed system. The method of scheduling includes lock resources to create object corresponding to the target object, the lock comprises a lock object resource information associated with the object; in response to receiving sending a specific thread lock request according to the information resource lock request object lock lock the target object, judging whether the current thread specific to the corresponding target gets the object lock. As a result, the lock request of different threads in a distributed environment can be mapped to the lock request under the same JVM management, so that a plurality of lock requests in a distributed environment can be managed uniformly.

【技术实现步骤摘要】
分布式系统及分布式系统中目标对象的调度方法
本专利技术涉及分布式
,特别是涉及一种分布式系统及分布式系统中目标对象的调度方法。
技术介绍
分布式锁是实现分布式环境下同步访问共享资源的一种方式。如果不同的分布式系统或是同一分布式系统下的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,需要采取一定的措施防止彼此干扰以保证访问的一致性,在这种情况下,便需要使用到分布式锁。现有的分布式锁的实现方案大多是简单地锁定一个服务标志(通常用一个字符串代表一个服务处理),在锁定该服务标志期间,分布式环境中的其他逻辑在试图锁定同一个服务标志时将被阻塞,直到最早锁定了该服务标志的线程释放了锁,才有机会进入锁。该方案存在如下问题:1)都是排他性锁,使用该类锁时服务吞吐率低;2)不支持锁可重入,影响业务代码的设计结构,让代码不能更优雅更灵活地规划;3)未能系统性地识别和处理集群中锁定了某些服务标志的机器单点故障超时等问题,集群中单台机器有问题就能很轻易地影响其他的机器,可靠性,健壮性差;4)不能有效、及时地识别死锁,业务代码的不安全性增加,排查问题困难。由此,需要一种新的分布式环境下的锁的调度方案以解决上述至少一项问题。
技术实现思路
本专利技术主要的目的在于提供一种分布式系统及分布式系统中目标对象的调度方法,以解决上述至少一项问题。根据本专利技术的一个方面,提供了一种分布式系统中目标对象的调度方法,包括:创建对应于目标对象的锁资源对象,锁资源对象包括与目标对象相关的锁信息;响应于接收到特定线程发送的锁请求,根据锁请求所针对的目标对象的锁资源对象的锁信息,判断特定线程当前是否能够获取目标对象所对应的锁。由此,可以将分布式环境下的不同特定线程的锁请求映射为同一JVM管理下的锁请求,从而可以统一管理调度分布式环境下的多个锁请求。优选地,锁信息可以包括:目标对象的对象ID、持有目标对象的第一线程、第一线程持有的针对目标对象的锁的类型和时间,并且/或者锁请求可以包括:该锁请求所针对的目标对象的对象ID、请求的锁的类型、请求时间。优选地,锁信息还可以包括:等待目标对象的第二线程、第二线程所请求的针对目标对象的锁的类型和时间。优选地,判断特定线程当前是否能够获取目标对象所对应的锁的步骤可以包括:对锁请求所对应的锁资源对象进行加锁;进入临界区以访问锁资源对象,并根据锁信息以及预定的锁争用逻辑,判断特定线程当前能否获取锁。由此,对于特定线程的锁请求,可以对锁请求所对应的锁资源对象加锁,利用锁资源对象的临界区,来判断当前是否允许其获取锁请求所针对的目标对象。优选地,预定的锁争用逻辑可以包括:允许多个不同线程在同一时间针对同一目标对象分别获取读锁;在一个线程持有针对一个目标对象的写锁的情况下,任何其它线程不能持有针对一个目标对象的读锁和写锁。由此预定的锁争用逻辑可以是模拟JVM线程锁争用逻辑。优选地,该调度方法还可以包括:在判定特定线程当前不能获取锁的情况下,退出临界区,并在锁资源对象中记录该锁请求;以及/或者在判定特定线程当前能够获取锁的情况下,在锁资源对象中记录该特定线程获取的锁的类型和时间,并退出临界区。由此,为了提升锁请求的处理效率,可以在进入锁资源对象的临界区后仅执行必要的处理操作,非必要的操作可以在退出临界区后执行。优选地,在判定特定线程不能获取锁的情况下退出临界区并在锁资源对象中记录该锁请求可以包括:在退出临界区后等待锁的释放;在等待超过预定时间后锁仍未释放时,建立新线程继续等待锁的释放,并将锁请求的等待消息缓存到锁资源对象中。由此,可以基于建立的新线程及时识别锁的被释放信息,以便让相应的线程及时获得锁。优选地,该调度方法还可以包括:在判定特定线程当前不能获取目标对象的锁时,向特定线程发送锁等待消息,以便特定线程开启自旋等待模式,以等待锁;以及/或者在判定特定线程当前能够获取目标对象的锁时,向特定线程发送锁,以便特定线程执行后续业务逻辑的处理。优选地,该调度方法还可以包括:清理锁资源对象中无效的锁信息;以及/或者将强制中断的锁信息和/或标记为无效的锁信息告知客户端。由此,可以对锁资源对象中的锁数据进行维护,使得其中存储的锁数据均为有效数据,以避免分布式环境下的各种异常和故障对调度造成的影响。优选地,该调度方法还可以包括:记录接收到的锁请求所针对的目标对象及发送该锁请求的特定线程;在接收到的锁请求所对应的特定线程与之前记录的特定线程为同一线程且所针对的目标对象与之前记录的特定线程所对应的锁请求所针对的目标对象相同时,允许该特定线程获取所请求的目标对象的锁。由此,在某个线程获取针对目标对象的锁后,再次发出针对该目标对象的锁时可以允许其直接获取所请求的锁,即本专利技术还支持重入锁请求。优选地,可以根据特定线程发送锁请求时的机器IP和/或应用端口和/或特定线程ID,记录发送该锁请求的特定线程。优选地,该调度方法还可以包括:基于分布式系统中锁资源对象中的锁信息,判断锁请求是否会造成死锁;在判定锁请求会造成死锁时,判定特定线程当前不能获取锁。优选地,判断锁请求是否会造成死锁的步骤可以包括:以线程和目标对象为顶点,构造网状图,其中,线程和其持有的目标对象之间以第一连线连接,线程和其等待的目标对象之间以第二连线连接;在特定线程与其它线程和目标对象构成闭合环,闭合环中的第一连线和第二连线间隔出现的情况下,判定锁请求会造成死锁。根据本专利技术的另一个方面,还提出了一种分布式系统,包括:调度节点和至少一个用于运行线程的业务节点,运行在业务节点上的线程能够通过业务节点向调度节点发送锁请求,响应于接收到特定线程发送的锁请求,调度节点能够根据锁请求所针对的目标对象的锁资源对象,判断特定线程当前是否能够获取目标对象所对应的锁,在锁请求所针对的目标对象的锁资源对象未建立的情况下,调度节点创建对应于目标对象的锁资源对象,锁资源对象包括与目标对象相关的锁信息。优选地,锁信息可以包括:目标对象的对象ID、持有目标对象的第一线程、第一线程持有的针对目标对象的锁的类型和时间,并且/或者锁请求可以包括:对象ID、请求的锁的类型、请求时间。优选地,锁信息还可以包括:等待目标对象的第二线程、第二线程所请求的针对目标对象的锁的类型和时间。优选地,调度节点对锁请求所对应的锁资源对象进行加锁,进入临界区以访问锁资源对象,并根据锁信息以及预定的锁争用逻辑,判断特定线程当前能否获取锁。优选地,预定的锁争用逻辑可以包括:允许多个不同线程在同一时间针对同一目标对象分别获取读锁;在一个线程持有针对一个目标对象的写锁的情况下,任何其它线程不能持有针对一个目标对象的读锁和写锁。优选地,在判定特定线程当前不能获取锁的情况下,调度节点退出临界区,并在锁资源对象中记录该锁请求,并且/或者在判定特定线程当前能够获取锁的情况下,调度节点在锁资源对象中记录该特定线程获取的锁的类型和时间,并退出临界区。优选地,调度节点在退出临界区后等待锁的释放,在等待超过预定时间后锁仍未释放时,调度节点建立新线程继续等待锁的释放,并将锁请求的等待消息缓存到锁资源对象中。优选地,在判定特定线程当前不能获取目标对象的锁时,调度节点向特定线程发送锁等待消息,以便特定线程开启自旋等待模式,以等待锁;以及/或者在判定特定线程当前能够本文档来自技高网...
分布式系统及分布式系统中目标对象的调度方法

【技术保护点】
一种分布式系统中目标对象的调度方法,包括:创建对应于所述目标对象的锁资源对象,所述锁资源对象包括与所述目标对象相关的锁信息;响应于接收到特定线程发送的锁请求,根据所述锁请求所针对的目标对象的锁资源对象的锁信息,判断所述特定线程当前是否能够获取所述目标对象所对应的锁。

【技术特征摘要】
1.一种分布式系统中目标对象的调度方法,包括:创建对应于所述目标对象的锁资源对象,所述锁资源对象包括与所述目标对象相关的锁信息;响应于接收到特定线程发送的锁请求,根据所述锁请求所针对的目标对象的锁资源对象的锁信息,判断所述特定线程当前是否能够获取所述目标对象所对应的锁。2.根据权利要求1所述的调度方法,其中,所述锁信息包括:所述目标对象的对象ID、持有所述目标对象的第一线程、所述第一线程持有的针对目标对象的锁的类型和时间,并且/或者所述锁请求包括:该锁请求所针对的目标对象的对象ID、请求的锁的类型、请求时间。3.根据权利要求2所述的调度方法,其中,所述锁信息还包括:等待所述目标对象的第二线程、所述第二线程所请求的针对目标对象的锁的类型和时间。4.根据权利要求1所述的调度方法,其中,所述判断特定线程当前是否能够获取所述目标对象所对应的锁的步骤包括:对所述锁请求所对应的锁资源对象进行加锁;进入临界区以访问所述锁资源对象,并根据所述锁信息以及预定的锁争用逻辑,判断所述特定线程当前能否获取锁。5.根据权利要求4所述的调度方法,其中,预定的锁争用逻辑包括:允许多个不同线程在同一时间针对同一目标对象分别获取读锁;在一个线程持有针对一个目标对象的写锁的情况下,任何其它线程不能持有针对所述一个目标对象的读锁和写锁。6.根据权利要求4所述的调度方法,还包括:在判定所述特定线程当前不能获取锁的情况下,退出所述临界区,并在所述锁资源对象中记录该锁请求;以及/或者在判定所述特定线程当前能够获取锁的情况下,在所述锁资源对象中记录该特定线程获取的锁的类型和时间,并退出所述临界区。7.根据权利要求6所述的调度方法,其中,在判定所述特定线程不能获取锁的情况下退出所述临界区并在所述锁资源对象中记录该锁请求包括:在退出所述临界区后等待所述锁的释放;在等待超过预定时间后所述锁仍未释放时,建立新线程继续等待所述锁的释放,并将所述锁请求的等待消息缓存到所述锁资源对象中。8.根据权利要求6所述的调度方法,还包括:在判定所述特定线程当前不能获取所述目标对象的锁时,向所述特定线程发送锁等待消息,以便所述特定线程开启自旋等待模式,以等待所述锁;以及/或者在判定所述特定线程当前能够获取所述目标对象的锁时,向所述特定线程发送所述锁,以便所述特定线程执行后续业务逻辑的处理。9.根据权利要求1所述的调度方法,还包括:清理所述锁资源对象中无效的锁信息;以及/或者将强制中断的锁信息和/或标记为无效的锁信息告知客户端。10.根据权利要求1所述的调度方法,还包括:记录接收到的锁请求所针对的目标对象及发送该锁请求的特定线程;在接收到的锁请求所对应的特定线程与之前记录的特定线程为同一线程,并且所针对的目标对象与之前记录的特定线程所对应的锁请求所针对的目标对象相同时,允许该特定线程获取所请求的目标对象的锁。11.根据权利要求10所述的调度方法,其中,根据所述特定线程发送锁请求时的机器IP和/或应用端口和/或特定线程ID,记录发送该锁请求的特定线程。12.根据权利要求1至11中任何一项所述的调度方法,还包括:基于分布式系统中锁资源对象的锁信息,判断所述锁请求是否会造成死锁;在判定所述锁请求会造成死锁时,判定所述特定线程当前不能获取锁。13.根据权利要求12所述的调度方法,所述判断所述锁请求是否会造成死锁的步骤包括:以线程和目标对象为顶点,构造网状图,其中,线程和其持有的目标对象之间以第一连线连接,线程和...

【专利技术属性】
技术研发人员:吴彰合
申请(专利权)人:广州爱九游信息技术有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1