一种锁迁移方法及装置制造方法及图纸

技术编号:9535288 阅读:99 留言:0更新日期:2014-01-03 18:37
本发明专利技术公开了一种锁迁移方法及装置,用以解决现有技术中现有的锁迁移过程中任务会被执行两次,浪费了执行任务所消耗的资源的问题。迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为该迁移装置自身的地址,并接收执行器发送的添加键值的请求,将接收到的请求发送给第一锁和第二锁,当接收到的第二锁返回的结果是存在结果时,向执行器返回该存在结果,当接收到的第二锁返回的结果不是存在结果时,将接收到的第一锁返回的结果返回给执行器,迁移装置将各执行器的取锁目标地址修改为第二锁的地址。通过上述方法,可避免各执行器从第一锁迁移到第二锁的过程中重复执行相同的任务。

【技术实现步骤摘要】
【专利摘要】本专利技术公开了一种锁迁移方法及装置,用以解决现有技术中现有的锁迁移过程中任务会被执行两次,浪费了执行任务所消耗的资源的问题。迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为该迁移装置自身的地址,并接收执行器发送的添加键值的请求,将接收到的请求发送给第一锁和第二锁,当接收到的第二锁返回的结果是存在结果时,向执行器返回该存在结果,当接收到的第二锁返回的结果不是存在结果时,将接收到的第一锁返回的结果返回给执行器,迁移装置将各执行器的取锁目标地址修改为第二锁的地址。通过上述方法,可避免各执行器从第一锁迁移到第二锁的过程中重复执行相同的任务。【专利说明】一种锁迁移方法及装置
本专利技术涉及通信
,尤其涉及一种锁迁移方法及装置。
技术介绍
目前,任务处理系统在处理一批任务时,会将这些任务同时存放在多个任务队列中,每个任务队列中存放的任务均是相同的,每个任务队列由至少一个执行器(worker)来执行任务队列中的任务,如图1所示。图1为现有技术中通过多个任务队列和worker处理任务的示意图,任务处理系统包括3个任务队列,每个任务队列中的任务由I个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所在的服务器出现故障,就需要进行锁迁移,S卩,将memcache部署在新的服务器上。在现有技术中,锁迁移的方法主要是在新的服务器上启动一个新的memcache,将每个worker配置文件中的取锁目标地址由原来的memcache的地址修改为新的memcache的地址,并重启每个worker,以实现将各执行器从原来的memcache迁移到新的memcache上。但是,在实际应用场景中,由于在修改每个worker配置文件中的取锁目标地址时不可能实现同时对所有的worker配置文件进行修改,因此,现有技术在进行锁迁移的过程中并不能保证一个任务只执行一次,下面举例进行说明。例如,3个不同的任务队列分别对应的worker为workerl、worker2、worker3。现假设在锁迁移过程中,先将workerl配置文件中的取锁目标地址修改为新地址,worker2和worker3暂未修改。如果workerl、worker2、worker3都从各自的任务队列中获取到了相同的任务,记为任务X,该任务X未被执行过,则此时workerl会向新的memcache取锁,由于新的memcache中未保存任务x的key值,因此workerl会取到任务x的锁,从而执行任务X,而worker2和worker3会向原来的memcache取锁,由于该任务x未被执行过,原来的memcache中也未保存任务x的key值,因此worker2和worker3中的其中一个会取到任务X的锁,也会执行任务X。从而,任务X被执行了两次。另外,即使理想情况下可以实现同时对所有的worker配置文件进行修改,现有技术中在进行锁迁移的过程中也不能保证一个任务只执行一次。例如,3个不同的任务队列分别对应的 worker 为 workerl、worker2、worker3。假设在 workerl、worker2、worker3 尚未迁移到新的memcache上时,对于任务x, workerl先获取并执行了该任务x,此时原来的memcache中保存了任务x对应的key值,而新的memcache并未保存任务x对应的key值,则在 workerl、worker2、worker3 都迁移到新的 memcache 上之后,worker2 或 worker3 又获取到该任务X时,会向新的memcache取锁,由于新的memcache并未保存任务x对应的key值,因此,worker2或worker3会再次执行任务X。由上例可以看出,在现有的锁迁移过程中,同一个任务会被重复执行。
技术实现思路
本专利技术实施例提供一种锁迁移方法及装置,用以解决现有的锁迁移过程中同一个任务会被重复执行的问题。本专利技术实施例提供的一种锁迁移方法,包括:迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为所述迁移装置自身的地址;并针对每个执行器,接收该执行器发送的添加键值的请求,将接收到的所述请求发送给所述第一锁和第二锁,并接收所述第一锁和第二锁返回的结果;以及当所述第二锁返回的是存在结果时,所述迁移装置向该执行器返回所述存在结果,当所述第二锁返回的不是存在结果时,所述迁移装置向该执行器返回接收到的所述第一锁返回的结果;所述迁移装置将各执行器的取锁目标地址修改为所述第二锁的地址。本专利技术实施例提供的一种锁迁移装置,包括:第一修改模块,用于在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为所述锁迁移装置自身的地址;接收转发模块,用于针对每个执行器,接收该执行器发送的添加键值的请求,将接收到的所述请求发送给所述第一锁和第二锁,并接收所述第一锁和第二锁返回的结果;以及当所述第二锁返回的是存在结果时,向该执行器返回所述存在结果,当所述第二锁返回的不是存在结果时,向该执行器返回接收到的所述第一锁返回的结果;第二修改模块,用于将各执行器的取锁目标地址修改为所述第二锁的地址。本专利技术实施例提供一种锁迁移方法及装置,迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为该迁移装置自身的地址,并接收执行器发送的添加键值的请求,将接收到的请求发送给第一锁和第二锁,当接收到的第二锁返回的结果是存在结果时,向执行器返回该存在结果,当接收到的第二锁返回的结果不是存在结果时,将接收到的第一锁返回的结果返回给执行器,迁移装置将各执行器的取锁目标地址修改为第二锁的地址。通过上述方法,可避免各执行器从第一锁迁移到第二锁的过程中重复执行相同的任务。【专利附图】【附图说明】图1为现有技术中通过多个任务队列和worker处理任务的示意图;图2为本专利技术实施例提供本文档来自技高网
...

【技术保护点】
一种锁迁移方法,其特征在于,包括:迁移装置在将各执行器从第一锁迁移到第二锁上时,将各执行器的取锁目标地址修改为所述迁移装置自身的地址;并针对每个执行器,接收该执行器发送的添加键值的请求,将接收到的所述请求发送给所述第一锁和第二锁,并接收所述第一锁和第二锁返回的结果;以及当所述第二锁返回的是存在结果时,所述迁移装置向该执行器返回所述存在结果,当所述第二锁返回的不是存在结果时,所述迁移装置向该执行器返回接收到的所述第一锁返回的结果;所述迁移装置将各执行器的取锁目标地址修改为所述第二锁的地址。

【技术特征摘要】

【专利技术属性】
技术研发人员:汪海
申请(专利权)人:新浪网技术中国有限公司
类型:发明
国别省市:

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

1