CN103488530B - 一种锁迁移方法及装置 - Google Patents
一种锁迁移方法及装置 Download PDFInfo
- Publication number
- CN103488530B CN103488530B CN201310425019.6A CN201310425019A CN103488530B CN 103488530 B CN103488530 B CN 103488530B CN 201310425019 A CN201310425019 A CN 201310425019A CN 103488530 B CN103488530 B CN 103488530B
- Authority
- CN
- China
- Prior art keywords
- lock
- executor
- address
- task
- moving apparatus
- 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.)
- Active
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种锁迁移方法及装置,用以解决现有技术中现有的锁迁移过程中任务会被执行两次,浪费了执行任务所消耗的资源的问题。迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为该迁移装置自身的地址,并接收执行器发送的添加键值的请求,将接收到的请求发送给第一锁和第二锁,当接收到的第二锁返回的结果是存在结果时,向执行器返回该存在结果,当接收到的第二锁返回的结果不是存在结果时,将接收到的第一锁返回的结果返回给执行器,迁移装置将各执行器的取锁目标地址修改为第二锁的地址。通过上述方法,可避免各执行器从第一锁迁移到第二锁的过程中重复执行相同的任务。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种锁迁移方法及装置。
背景技术
目前,任务处理系统在处理一批任务时,会将这些任务同时存放在多个任务队列中,每个任务队列中存放的任务均是相同的,每个任务队列由至少一个执行器(worker)来执行任务队列中的任务,如图1所示。
图1为现有技术中通过多个任务队列和worker处理任务的示意图,任务处理系统包括3个任务队列,每个任务队列中的任务由1个worker来执行。在执行任务时,用户可通过客户端向任务队列添加任务,客户端将同一个任务添加到3个任务队列中,然后worker从任务队列中获取任务并执行。
由于在如图1所示的任务处理系统中,每个任务队列中的任务均相同,因此,为了提高执行任务的效率,保证一个任务只被执行一次,图1所示的任务处理系统中还包括一个分布式锁,即memcache。
对于一个worker而言,当该worker获取到任务队列中的一个任务时,先向memcache中添加该任务对应的键(key)值。而由于memcache的添加操作是互斥的,即,相同的key值只能添加一次,而不能多次添加,因此,当worker向memcache中添加该任务对应的key值时,memcache判断该key值是否存在,若是,则不添加该key值并返回存在结果(EXISTS),否则,添加该key值并返回成功添加结果(SUCCESS)。相应的,如果worker接收到memcache返回的EXISTS,则说明未取到该任务的锁,从而不执行该任务,获取任务队列中的下一个任务,如果worker接收到memcache返回的SUCCESS,则说明取到该任务的锁,从而执行该任务。
通过上述方法即可实现一个任务只被执行一次。
在现有的任务处理系统中,任务队列、worker、memcache往往部署在不同的服务器上,如果memcache所在的服务器出现故障,就需要进行锁迁移,即,将memcache部署在新的服务器上。
在现有技术中,锁迁移的方法主要是在新的服务器上启动一个新的memcache,将每个worker配置文件中的取锁目标地址由原来的memcache的地址修改为新的memcache的地址,并重启每个worker,以实现将各执行器从原来的memcache迁移到新的memcache上。
但是,在实际应用场景中,由于在修改每个worker配置文件中的取锁目标地址时不可能实现同时对所有的worker配置文件进行修改,因此,现有技术在进行锁迁移的过程中并不能保证一个任务只执行一次,下面举例进行说明。
例如,3个不同的任务队列分别对应的worker为worker1、worker2、worker3。现假设在锁迁移过程中,先将worker1配置文件中的取锁目标地址修改为新地址,worker2和worker3暂未修改。如果worker1、worker2、worker3都从各自的任务队列中获取到了相同的任务,记为任务x,该任务x未被执行过,则此时worker1会向新的memcache取锁,由于新的memcache中未保存任务x的key值,因此worker1会取到任务x的锁,从而执行任务x,而worker2和worker3会向原来的memcache取锁,由于该任务x未被执行过,原来的memcache中也未保存任务x的key值,因此worker2和worker3中的其中一个会取到任务x的锁,也会执行任务x。从而,任务x被执行了两次。
另外,即使理想情况下可以实现同时对所有的worker配置文件进行修改,现有技术中在进行锁迁移的过程中也不能保证一个任务只执行一次。例如,3个不同的任务队列分别对应的worker为worker1、worker2、worker3。假设在worker1、worker2、worker3尚未迁移到新的memcache上时,对于任务x,worker1先获取并执行了该任务x,此时原来的memcache中保存了任务x对应的key值,而新的memcache并未保存任务x对应的key值,则在worker1、worker2、worker3都迁移到新的memcache上之后,worker2或worker3又获取到该任务x时,会向新的memcache取锁,由于新的memcache并未保存任务x对应的key值,因此,worker2或worker3会再次执行任务x。
由上例可以看出,在现有的锁迁移过程中,同一个任务会被重复执行。
发明内容
本发明实施例提供一种锁迁移方法及装置,用以解决现有的锁迁移过程中同一个任务会被重复执行的问题。
本发明实施例提供的一种锁迁移方法,包括:
迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为所述迁移装置自身的地址;并
针对每个执行器,接收该执行器发送的添加键值的请求,将接收到的所述请求发送给所述第一锁和第二锁,并接收所述第一锁和第二锁返回的结果;以及
当所述第二锁返回的是存在结果时,所述迁移装置向该执行器返回所述存在结果,当所述第二锁返回的不是存在结果时,所述迁移装置向该执行器返回接收到的所述第一锁返回的结果;
所述迁移装置将各执行器的取锁目标地址修改为所述第二锁的地址。
本发明实施例提供的一种锁迁移装置,包括:
第一修改模块,用于在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为所述锁迁移装置自身的地址;
接收转发模块,用于针对每个执行器,接收该执行器发送的添加键值的请求,将接收到的所述请求发送给所述第一锁和第二锁,并接收所述第一锁和第二锁返回的结果;以及当所述第二锁返回的是存在结果时,向该执行器返回所述存在结果,当所述第二锁返回的不是存在结果时,向该执行器返回接收到的所述第一锁返回的结果;
第二修改模块,用于将各执行器的取锁目标地址修改为所述第二锁的地址。
本发明实施例提供一种锁迁移方法及装置,迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为该迁移装置自身的地址,并接收执行器发送的添加键值的请求,将接收到的请求发送给第一锁和第二锁,当接收到的第二锁返回的结果是存在结果时,向执行器返回该存在结果,当接收到的第二锁返回的结果不是存在结果时,将接收到的第一锁返回的结果返回给执行器,迁移装置将各执行器的取锁目标地址修改为第二锁的地址。通过上述方法,可避免各执行器从第一锁迁移到第二锁的过程中重复执行相同的任务。
附图说明
图1为现有技术中通过多个任务队列和worker处理任务的示意图;
图2为本发明实施例提供的锁迁移过程;
图3为本发明实施例提供的任务处理系统结构示意图;
图4为本发明实施例提供的锁迁移装置结构示意图。
具体实施方式
为了避免执行器在从原来的锁迁移到新锁的过程中重复执行相同的任务的问题,本发明实施例的核心思想是:对于一个任务来说,原来的锁和新锁只要其中一个保存了该任务对应的键值,执行器就不执行该任务,以避免锁迁移过程中重复执行相同的任务,节省执行任务所消耗的资源。在具体实现时,本发明实施例引入迁移装置,迁移装置用于在锁迁移过程中拦截各执行器向原来的锁或新锁发送的添加键值的请求,并将该添加键值的请求转发给原来的锁和新锁,即,同时向原来的锁和新锁添加同一个任务对应的键值,当新锁返回的是存在结果时,向执行器返回该存在结果,使执行器不执行该任务,当新锁返回的不是存在结果时,向执行器返回原来的锁返回的结果,使执行器根据原来的锁返回的结果确定是否执行该任务。
下面结合说明书附图,对本发明实施例进行详细描述。
图2为本发明实施例提供的锁迁移过程,具体包括以下步骤:
S201:迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为该迁移装置自身的地址。
本发明实施例中引入迁移装置,用于在锁迁移过程中在执行器和新旧锁之间转发消息。
在步骤S201中,各执行器要从第一锁迁移到第二锁,也即,第一锁为原来的锁,第二锁为新锁。迁移装置将各执行器的取锁目标地址修改为该迁移装置自身的地址后,后续各执行器无论是向第一锁发送添加键值的请求,还是向第二锁发送添加键值的请求,这些请求都会被发送到迁移装置。
具体的,迁移装置在将各执行器的取锁目标地址修改为该迁移装置自身的地址时,可将各执行器配置文件中的互联网协议(Internet Protocol,IP)地址修改为该迁移装置自身的IP地址,将各执行器配置文件中的端口号修改为该迁移装置自身的端口号。
S202:针对每个执行器,接收该执行器发送的添加键值的请求,将接收到的请求发送给第一锁和第二锁,并接收第一锁和第二锁返回的结果。
在步骤S202中,迁移装置针对每个执行器,接收该执行器发送的添加键值的请求,在本发明实施例中,迁移装置接收到一个请求后,并不是将该请求发送给第一锁或第二锁中的其中一个,而是将该请求既发送给第一锁也发送给第二锁,也即,此时执行器是通过迁移装置同时向新旧锁添加同一个任务对应的键值。
迁移装置将该请求发送给第一锁和第二锁后,接收第一锁和第二锁返回的结果,需要说明的是,本发明实施例中第一锁和第二锁的功能与现有技术中锁的功能相同,即,无论是对于第一锁还是第二锁,在接收到添加键值的请求时,都要判断自身当前是否已经保存了该键值,若是,则不添加该键值并返回存在结果(EXISTS),否则,添加该键值并返回成功添加结果(SUCCESS)。
S203:当第二锁返回的是存在结果时,迁移装置向该执行器返回该存在结果,当第二锁返回的不是存在结果时,迁移装置向该执行器返回接收到的第一锁返回的结果。
在本发明实施例中,第一锁和第二锁也并非是直接向执行器返回结果的,而是将结果都返回到迁移装置,迁移装置则判断第二锁(新锁)返回的是否为存在结果,若是,则直接向该执行器返回该存在结果,从而执行器判定该键值对应的任务已经被执行,不执行该任务,继续获取相应任务队列中的下一个任务,否则,迁移装置则将接收到的第一锁(旧锁)返回的结果返回给执行器,执行器可根据接收到的结果判定是否执行该任务,如果第一锁返回的结果是存在结果,则执行器同样不执行该任务,如果第一锁返回的结果不是存在结果,则执行器执行该任务。
S204:迁移装置将各执行器的取锁目标地址修改为第二锁的地址。
迁移装置最后将各执行器的取锁目标地址修改为第二锁的地址,完成各执行器从第一锁到第二锁的迁移。
具体的,迁移装置将各执行器的取锁目标地址修改为第二锁的地址时,可将各执行器配置文件中的IP地址修改为第二锁的IP地址,将各执行器配置文件中的端口号修改为第二锁的端口号。
在将各执行器的取锁目标地址修改为第二锁的地址之后,迁移装置还要重启各执行器。
需要说明的是,步骤S201中,迁移装置是不可能同时将所有的执行器的取锁目标地址修改为该迁移装置自身的地址的,而是一个一个修改的,同样的,步骤S204中迁移装置也不可能同时将所有的执行器的取锁目标地址修改为第二锁的地址,也是一个一个修改的,但无论迁移装置是否可以同时修改所有执行器的取锁目标地址,本发明实施例提供的上述锁迁移方法都可以避免同一个任务被重复执行,下面结合图3对上述图2所示的锁迁移过程的效果进行分析。
图3为本发明实施例提供的任务处理系统结构示意图,在图3中,任务处理系统包括队列1、队列2、队列3共3个任务队列,这3个任务队列分别对应的执行器为worker1、worker2、worker3。图3所示的任务处理系统中还包括第一锁、第二锁和迁移装置,假设worker1、worker2、worker3这3个执行器当前均从第一锁中取锁,现要将这3个执行器从第一锁迁移到第二锁,则迁移装置执行如图2所示的方法对这3个执行器进行迁移。
那么,在进行如图2所示的锁迁移过程中,会出现以下几种情况:
情况一、在步骤S201之前,也即,迁移装置未将任何一个执行器的取锁目标地址修改为该迁移装置自身的地址之前,各执行器均从第一锁中取锁,而由于第一锁的添加操作是互斥的,也即,对于一个键值来说,该键值只能被添加一次,因此此时对于一个任务来说,只有一个执行器会执行该任务,也就是说该任务只会被执行一次。
情况二、在执行步骤S201、S202、S203的过程中,也即,迁移装置在将各执行器的取锁目标地址修改为该迁移装置自身的地址时,由于不可能同时修改所有执行器的取锁目标地址,因此会出现一部分执行器的取锁目标地址已经被修改为迁移装置的地址,另一部分执行器的取锁目标地址尚未修改(仍是第一锁的地址)的情况。
以图3为例进行说明,假设worker1的取锁目标地址已经被修改为迁移装置的地址,worker2、worker3的取锁目标地址仍是第一锁的地址。
此时,对于一个任务x,如果worker1先获取到这个任务,则会向迁移装置发送添加该任务x对应的键值的请求,迁移装置则向第一锁和第二锁发送该请求。假设任务x未被执行过,则第一锁和第二锁中都未保存该任务x对应的键值,因此,第一锁和第二锁都会添加该任务x对应的键值,向迁移装置返回的结果都不是存在结果。而迁移装置接收到的第二锁返回的结果不是存在结果,则将第一锁返回的结果返回给worker1,第一锁返回的结果也不是存在结果,因此worker1执行该任务x。后续如果worker2又获取到该任务x,由于worker2的取锁目标地址仍是第一锁的地址,因此直接向第一锁发送添加任务x对应的键值的请求,而由于此时第一锁中已经添加了任务x对应的键值,因此,第一锁向worker2返回的结果是存在结果,从而worker2不执行任务x,继续获取下一个任务。
相反的,如果worker2先获取到任务x,则由于worker2的取锁目标地址仍是第一锁的地址,worker2就会直接向第一锁发送添加任务x对应的键值的请求。仍假设任务x未被执行过,则第一锁和第二锁中都未保存任务x对应的键值,因此第一锁添加任务x对应的键值,向worker2返回的结果也不是存在结果,worker2接收到该结果后,执行该任务x。后续如果worker1又获取到该任务x,则会向迁移装置发送添加该任务x对应的键值的请求,迁移装置则向第一锁和第二锁发送该请求,由于此时第二锁中未保存任务x对应的键值,因此第二锁向迁移装置返回的结果不是存在结果,但此时第一锁中已经保存了任务x对应的键值,因此第一锁向迁移装置返回的结果是存在结果。迁移装置接收到的第二锁返回的结果不是存在结果,因此将第一锁返回的结果返回给worker1,而由于第一锁返回的结果是存在结果,因此worker1接收到该结果后不执行任务x,继续获取下一个任务。
可见,在情况二中,任务x并未被重复执行。
情况三、步骤S201执行完成后,也即,迁移装置已经将所有执行器的取锁目标地址都修改为该迁移装置自身的地址后,所有的执行器都通过迁移装置向第一锁和第二锁进行取锁。
此时,由于情况二中一部分执行器是直接将添加键值的请求发送给第一锁,另一部分执行器是通过迁移装置将添加键值的请求发送给第一锁和第二锁,因此,在情况三中,对于一个任务来说,该任务对应的键值要么同时存在于第一锁和第二锁,要么只存在于第一锁中。
以图3为例进行说明,假设worker1、worker2、worker3的取锁目标地址均是迁移装置的地址。
对于任务x,如果worker1的取锁目标地址在被修改成迁移装置的地址之前就已经执行了任务x,那么,任务x对应的键值就只存在于第一锁中,而不存在于第二锁中。此时,假设worker2又获取到任务x,向迁移装置发送添加任务x对应的键值的请求,该请求会被迁移装置发送给第一锁和第二锁,而由于第二锁中未保存任务x对应的键值,因此添加该任务x对应的键值,向迁移装置返回的结果不是存在结果,但第一锁中已经保存了任务x对应的键值,因此返回的结果是存在结果。而迁移装置接收到的第二锁返回的结果不是存在结果,因此将第一锁返回的结果返回给worker2,由于第一锁返回的结果是存在结果,因此,worker2不执行任务x。后续如果worker3又获取到任务x,则由于第二锁中也已经保存了任务x对应的键值,因此向迁移装置返回的结果是存在结果,从而迁移装置直接向worker3返回存在结果,worker3也不执行任务x。
相反的,对于任务x,如果worker1的取锁目标地址在被修改成迁移装置的地址之后执行了任务x,那么,任务x对应的键值就同时存在于第一锁和第二锁中,假设worker2又获取到了任务x,通过迁移装置向第一锁和第二锁发送添加任务x对应的键值的请求,则由于第二锁中已经保存了任务x对应的键值,因此向迁移装置返回的结果是存在结果,迁移装置则直接将该存在结果返回给worker2,worker2不执行任务x。类似的,后续worker3获取到该任务x后也同样不会执行任务x。
可见,在情况三中,任务x也未被重复执行。
情况四、在执行步骤S202、S203、S204的过程中,也即,迁移装置在将各执行器的取锁目标地址修改为第二锁的地址时,由于也不可能同时修改所有执行器的取锁目标地址,因此会出现一部分执行器的取锁目标地址已经被修改为第二锁的地址,另一部分执行器的取锁目标地址尚未修改(仍是迁移装置的地址)的情况。
以图3为例进行说明,假设worker1的取锁目标地址已经被修改为第二锁的地址,worker2、worker3的取锁目标地址仍是迁移装置的地址。
此时,对于一个任务x,如果worker1先获取到这个任务,则会直接向第二锁发送添加该任务x对应的键值的请求。假设任务x未被执行过,则第一锁和第二锁中都未保存该任务x对应的键值,因此,第二锁会添加该任务x对应的键值,向worker1返回的结果不是存在结果,从而worker1执行该任务x。后续如果worker2获取到该任务x,通过迁移装置向第一锁和第二锁发送添加该任务x对应的键值的请求,则由于此时第一锁中未保存任务x对应的键值,因此第一锁添加该任务x对应的键值,向迁移装置返回的结果不是存在结果,但此时第二锁中已经保存了任务x对应的键值,因此向迁移装置返回的结果是存在结果,从而,迁移装置直接将第二锁返回的该存在结果返回给worker2,worker2不执行该任务x。
相反的,如果worker2先获取到任务x,则由于worker2的取锁目标地址仍是迁移装置的地址,worker2就会通过迁移装置向第一锁和第二锁发送添加任务x对应的键值的请求。假设任务x未被执行过,则第一锁和第二锁中都未保存任务x对应的键值,因此第一锁和第二锁都会添加任务x对应的键值,向迁移装置返回的结果也不是存在结果。迁移装置由于接收到的第二锁返回的结果不是存在结果,因此将第一锁返回的结果返回给worker2,由于第一锁返回的结果也不是存在结果,因此worker2执行该任务x。后续如果worker1又获取到任务x,则会直接向第二锁发送添加该任务x对应的键值的请求,而由于此时第二锁中已经保存了任务x对应的键值,因此会响worker1返回存在结果,从而worker1不执行任务x。
可见,在情况二中,任务x也未被重复执行。
情况五、在步骤S204之后,也即,迁移装置已经将所有执行器的取锁目标地址均修改为第二锁的地址之后,各执行器均从第二锁中取锁,而由于第二锁的添加操作是互斥的,因此此时对于一个任务来说,只有一个执行器会执行该任务,也就是说该任务只会被执行一次。
由上述分析可见,通过如图2所示的锁迁移方法,如果迁移装置并不能同时修改所有执行器的取锁目标地址,那么图2所示的迁移过程中会依次出现上述情况一~五,情况一~五均可避免执行器重复执行相同的任务,如果理想情况下迁移装置可以同时修改所有执行器的取锁目标地址,那么图2所示的迁移过程中会依次出现上述情况一、情况三、情况五,也均可避免执行器重复执行相同的任务。
进一步的,在实际应用中,考虑到采用如图2所示的锁迁移方法时,会出现一种特殊的情况,这种特殊的情况是:第一个执行器在其取锁目标地址尚未被修改成迁移装置的地址之前就执行了一个任务,而第二个执行器的取锁目标地址被修改为迁移装置的地址之后,很快就又被修改成第二锁的地址,然后获取到了同样的任务,这样就会导致这个任务会被重复执行,仍以图3为例进行说明。
假设对于任务x,worker2在取锁目标地址尚未被修改成迁移装置的地址之前就执行了任务x,也即,此时第一锁中保存了任务x对应的键值,而第二锁中未保存任务x对应的键值,如果此时worker1的取锁目标地址已经经历了被修改成迁移装置的地址再被修改成第二锁的地址的过程,那么如果worker1又获取到了任务x,则会直接从第二锁中取锁,由于第二锁中此时并未保存任务x对应的键值,因此worker1会再次执行任务x。
上述特殊情况下任务被重复执行的原因就在于:在迁移装置将执行器的取锁目标地址由迁移装置的地址修改为第二锁的地址的过程中,对于执行器获取到的一个任务而言,该任务对应的键值只存在与第一锁中,而不存在于第二锁中。换言之,要避免上述特殊情况的出现,只要在迁移装置将执行器的取锁目标地址由迁移装置的地址修改为第二锁的地址之前,使执行器获取到的任务对应的键值既存在于第一锁中也存在于第二锁中,就可避免上述特殊情况下任务被重复执行。
因此,在本发明实施例中,迁移装置在将各执行器的取锁目标地址修改为迁移装置自身的地址之后,暂不将各执行器的取锁目标地址修改为第二锁的地址,而在将各执行器的取锁目标地址修改为第二锁的地址之前,向各任务队列中添加预设的监控任务,并等待至接收到n次各执行器发送的添加该监控任务对应的键值的请求时,再将各执行器的取锁目标地址修改为第二锁的地址。其中,n为任务队列的数量。
采用上述方法可避免出现上述特殊情况的原因在于:任务队列是采用“先入先出”机制的,即,对于一个任务队列而言,先添加到该任务队列中的任务会先被相应的执行器获取到,后添加到该任务队列中的任务则后被相应的执行器获取到。那么,如果对于添加的监控任务来说,迁移装置接收到添加该监控任务对应的键值的请求的次数等于任务队列的数量,就说明在各任务队列中排在监控任务之后的其他任务在被执行器获取到之后,都会通过迁移装置向第一锁和第二锁添加键值,也就是说,在各任务队列中排在监控任务之后的其他任务的键值如果被第一锁保存,其也会被第二锁保存,此时,迁移装置再将各执行器的取锁目标地址修改为第二锁的地址,就可以避免出现上述特殊情况而导致任务被重复执行。
以上为本发明实施例提供的锁迁移方法,基于同样的发明思路,本发明实施例还提供一种锁迁移装置,如图4所示。
图4为本发明实施例提供的锁迁移装置结构示意图,具体包括:
第一修改模块401,用于在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为所述锁迁移装置自身的地址;
接收转发模块402,用于针对每个执行器,接收该执行器发送的添加键值的请求,将接收到的所述请求发送给所述第一锁和第二锁,并接收所述第一锁和第二锁返回的结果;以及当所述第二锁返回的是存在结果时,向该执行器返回所述存在结果,当所述第二锁返回的不是存在结果时,向该执行器返回接收到的所述第一锁返回的结果;
第二修改模块403,用于将各执行器的取锁目标地址修改为所述第二锁的地址。
所述装置还包括:
任务添加模块404,用于在所述第二修改模块403将各执行器的取锁目标地址修改为所述第二锁的地址之前,向各任务队列中添加预设的监控任务;
所述接收转发模块402还用于,接收各执行器发送的添加所述监控任务对应的键值的请求;
所述第二修改模块403具体用于,等待至所述接收转发模块402接收到n次添加所述监控任务对应的键值的请求时,将各执行器的取锁目标地址修改为所述第二锁的地址,其中,n为任务队列的数量。
所述第一修改模块401具体用于,将各执行器配置文件中的互联网协议IP地址修改为所述锁迁移装置自身的IP地址,将各执行器配置文件中的端口号修改为所述锁迁移装置自身的端口号。
所述第二修改模块403具体用于,将各执行器配置文件中的互联网协议IP地址修改为所述第二锁的IP地址,将各执行器配置文件中的端口号修改为所述第二锁的端口号。
所述装置还包括:
重启模块405,用于在所述第二修改模块403将各执行器的取锁目标地址修改为所述第二锁的地址之后,重启各执行器。
本发明实施例提供一种锁迁移方法及装置,迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为该迁移装置自身的地址,并接收执行器发送的添加键值的请求,将接收到的请求发送给第一锁和第二锁,当接收到的第二锁返回的结果是存在结果时,向执行器返回该存在结果,当接收到的第二锁返回的结果不是存在结果时,将接收到的第一锁返回的结果返回给执行器,迁移装置将各执行器的取锁目标地址修改为第二锁的地址。通过上述方法,可避免各执行器从第一锁迁移到第二锁的过程中重复执行相同的任务。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请实施例的精神和范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种锁迁移方法,其特征在于,包括:
迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为所述迁移装置自身的地址;并
针对每个执行器,接收该执行器发送的添加键值的请求,将接收到的所述请求发送给所述第一锁和第二锁,并接收所述第一锁和第二锁返回的结果;以及
当所述第二锁返回的是存在结果时,所述迁移装置向该执行器返回所述存在结果,当所述第二锁返回的不是存在结果时,所述迁移装置向该执行器返回接收到的所述第一锁返回的结果;
所述迁移装置将各执行器的取锁目标地址修改为所述第二锁的地址。
2.如权利要求1所述的方法,其特征在于,所述迁移装置将各执行器的取锁目标地址修改为所述第二锁的地址之前,所述方法还包括:
所述迁移装置向各任务队列中添加预设的监控任务;并
等待至接收到各执行器共发送的n次添加所述监控任务对应的键值的请求,其中,n为任务队列的数量;之后执行所述将各执行器的取锁目标地址修改为所述第二锁的地址的步骤。
3.如权利要求1所述的方法,其特征在于,将各执行器的取锁目标地址修改为所述迁移装置自身的地址,具体包括:
所述迁移装置将各执行器配置文件中的互联网协议IP地址修改为所述迁移装置自身的IP地址,将各执行器配置文件中的端口号修改为所述迁移装置自身的端口号。
4.如权利要求1所述的方法,其特征在于,所述迁移装置将各执行器的取锁目标地址修改为所述第二锁的地址,具体包括:
所述迁移装置将各执行器配置文件中的互联网协议IP地址修改为所述第二锁的IP地址,将各执行器配置文件中的端口号修改为所述第二锁的端口号。
5.如权利要求1所述的方法,其特征在于,所述迁移装置将各执行器的取锁目标地址修改为所述第二锁的地址之后,所述方法还包括:
重启各执行器。
6.一种锁迁移装置,其特征在于,包括:
第一修改模块,用于在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为所述锁迁移装置自身的地址;
接收转发模块,用于针对每个执行器,接收该执行器发送的添加键值的请求,将接收到的所述请求发送给所述第一锁和第二锁,并接收所述第一锁和第二锁返回的结果;以及当所述第二锁返回的是存在结果时,向该执行器返回所述存在结果,当所述第二锁返回的不是存在结果时,向该执行器返回接收到的所述第一锁返回的结果;
第二修改模块,用于将各执行器的取锁目标地址修改为所述第二锁的地址。
7.如权利要求6所述的装置,其特征在于,所述装置还包括:
任务添加模块,用于在所述第二修改模块将各执行器的取锁目标地址修改为所述第二锁的地址之前,向各任务队列中添加预设的监控任务;
所述接收转发模块还用于,接收各执行器发送的添加所述监控任务对应的键值的请求;
所述第二修改模块具体用于,等待至所述接收转发模块接收到n次添加所述监控任务对应的键值的请求时,将各执行器的取锁目标地址修改为所述第二锁的地址,其中,n为任务队列的数量。
8.如权利要求6所述的装置,其特征在于,所述第一修改模块具体用于,将各执行器配置文件中的互联网协议IP地址修改为所述锁迁移装置自身的IP地址,将各执行器配置文件中的端口号修改为所述锁迁移装置自身的端口号。
9.如权利要求6所述的装置,其特征在于,所述第二修改模块具体用于,将各执行器配置文件中的互联网协议IP地址修改为所述第二锁的IP地址,将各执行器配置文件中的端口号修改为所述第二锁的端口号。
10.如权利要求6所述的装置,其特征在于,所述装置还包括:
重启模块,用于在所述第二修改模块将各执行器的取锁目标地址修改为所述第二锁的地址之后,重启各执行器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310425019.6A CN103488530B (zh) | 2013-09-17 | 2013-09-17 | 一种锁迁移方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310425019.6A CN103488530B (zh) | 2013-09-17 | 2013-09-17 | 一种锁迁移方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103488530A CN103488530A (zh) | 2014-01-01 |
CN103488530B true CN103488530B (zh) | 2016-10-19 |
Family
ID=49828786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310425019.6A Active CN103488530B (zh) | 2013-09-17 | 2013-09-17 | 一种锁迁移方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103488530B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110109754B (zh) * | 2016-05-17 | 2023-06-30 | 青岛海信移动通信技术有限公司 | 进程的调度方法及装置 |
CN113268348B (zh) * | 2021-05-31 | 2023-03-21 | 上海数禾信息科技有限公司 | 分布式锁服务器的切换方法、装置、计算机设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8341459B2 (en) * | 2007-08-01 | 2012-12-25 | Brocade Communications Systems, Inc. | Data migration without interrupting host access and with data lock for write access requests such that held write access requests do not expire |
CN103067433A (zh) * | 2011-10-24 | 2013-04-24 | 阿里巴巴集团控股有限公司 | 一种分布式存储系统的数据迁移方法、设备和系统 |
CN103248667A (zh) * | 2012-02-14 | 2013-08-14 | 阿里巴巴集团控股有限公司 | 一种分布式系统的资源访问方法和系统 |
-
2013
- 2013-09-17 CN CN201310425019.6A patent/CN103488530B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8341459B2 (en) * | 2007-08-01 | 2012-12-25 | Brocade Communications Systems, Inc. | Data migration without interrupting host access and with data lock for write access requests such that held write access requests do not expire |
CN103067433A (zh) * | 2011-10-24 | 2013-04-24 | 阿里巴巴集团控股有限公司 | 一种分布式存储系统的数据迁移方法、设备和系统 |
CN103248667A (zh) * | 2012-02-14 | 2013-08-14 | 阿里巴巴集团控股有限公司 | 一种分布式系统的资源访问方法和系统 |
Non-Patent Citations (1)
Title |
---|
"分布式Memcached在社交游戏中的应用研究";陈俊等;《电脑知识与技术》;20110718;第7卷(第10期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN103488530A (zh) | 2014-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10841366B2 (en) | Service graph based serverless cloud platform | |
US10192179B1 (en) | Session transfer in a customer service environment | |
CN115269184A (zh) | 函数即服务(faas)执行分配器 | |
US9852220B1 (en) | Distributed workflow management system | |
CN106712981B (zh) | 一种节点变更通知方法及装置 | |
US11133991B2 (en) | Consolidating manufacturing intelligence event queue items | |
CN106570097A (zh) | 序列生成方法及装置 | |
CN108664343A (zh) | 一种微服务的有状态调用方法及装置 | |
CN108304272B (zh) | 一种数据io请求的处理方法及装置 | |
CN111327717B (zh) | 一种mac地址学习方法及装置 | |
US20150304227A1 (en) | Queue Management Method and Apparatus | |
CN103488530B (zh) | 一种锁迁移方法及装置 | |
CN113411363A (zh) | 一种镜像文件的上传方法、相关设备及计算机存储介质 | |
CN110764930A (zh) | 基于消息模式的请求或应答处理方法及装置 | |
CN109309858B (zh) | 一种互斥图标的显示方法、装置、设备及介质 | |
CN115297024B (zh) | 网络安全设备的性能测试方法、装置及电子设备 | |
US20230418681A1 (en) | Intelligent layer derived deployment of containers | |
CN106933646A (zh) | 一种创建虚拟机的方法及装置 | |
CN106899504B (zh) | 一种跨集群服务的路由方法以及装置 | |
US9020883B2 (en) | System and method to provide BPEL support for correlation aggregation | |
US10592287B2 (en) | API and user interface for MapReduce jobs | |
US20140258484A1 (en) | Transparent message modification for diagnostics or testing | |
US20180159720A1 (en) | Dynamic agent deployment in a data processing system | |
US20230076061A1 (en) | Cascaded priority mapping | |
CN104660521B (zh) | 一种组播流量控制的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230407 Address after: Room 501-502, 5/F, Sina Headquarters Scientific Research Building, Block N-1 and N-2, Zhongguancun Software Park, Dongbei Wangxi Road, Haidian District, Beijing, 100193 Patentee after: Sina Technology (China) Co.,Ltd. Address before: 100080, International Building, No. 58 West Fourth Ring Road, Haidian District, Beijing, 20 floor Patentee before: Sina.com Technology (China) Co.,Ltd. |
|
TR01 | Transfer of patent right |