一种基于tooz的信号量的实现方法及装置与流程

文档序号:32947385发布日期:2023-01-14 11:42阅读:28来源:国知局
一种基于tooz的信号量的实现方法及装置与流程

1.本发明涉及云计算领域和计算机网络领域,具体提供一种基于tooz的信号量的实现方法及装置。


背景技术:

2.云计算技术因其原生的高扩展性和高可用性,吸引了越来越多的企业选择将自己的业务从线下机房的物理机上迁移到云数据中心上。openstack是一种开源的云计算平台的管理软件。对于一个常见的openstack集群的部署,其集群中的节点根据功能不同一般分为控制节点、计算节点和网络节点,其中控制节点运行着管理服务,如:neutron-server、mysql等;计算节点运行着虚拟机和虚拟网络的管理agent,如网络agent、nova-compute agent等;网络节点一般运行着nat网关等网络agent。随着技术的不断成熟,openstack所管理的集群的容量已经达到了1000以上。
3.集群规模的扩张,对集群的管理带来了更大的挑战,其中一个是多网络agent的重启对服务端neutron-server的压力,当前多agent重启的情况下,agent之间并没有进行同步和并发量的限制,一般的思路是在neutron-server和其所在的控制节点进行网络限速、限制并发连接数等方案,这种方法虽然能够限速,但是对agent端不优化,且agent仍然会由于访问超时进行重试,最终导致控制端的负载长时间的飙高。


技术实现要素:

4.本发明是针对上述现有技术的不足,提供一种实用性强的基于tooz的信号量的实现方法。
5.本发明进一步的技术任务是提供一种设计合理,安全适用的基于tooz的信号量的实现装置。
6.本发明解决其技术问题所采用的技术方案是:
7.一种基于tooz的信号量的实现方法,在已有tooz的基础上,实现一个信号锁;
8.具有如下步骤:
9.s1、对tooz的接口进行改造,增加一个semaphore类,所述semaphore类至少实现两个节点acquire和release,acquire实现一个加锁的过程,所述release则是将当前持有的锁释放;
10.s2、加锁的方法acquire若加锁成功则返回锁对象l;
11.s3、释放锁的方法release是将已经成功获取到的锁进行释放的操作;
12.s4、针对步骤s3中提到的acquire方法,获取锁的具体方法;
13.s5、为防止加锁的操作过于频繁导致锁服务的压力过大,设置加锁失败的超时时间;
14.s6、使用__exit__和__enter__方法,简化用户的使用;
15.s7、修改agent端的rpc api的代码,并调用使用信号量锁加锁。
16.进一步的,在步骤s1中,在通过类初始化实例时传入锁名称和锁的最大并发访问数m,所述m必须是一个正整数。
17.进一步的,在步骤s2中,所述锁对象l是复用tooz已有的锁,入参中带有一个可选的超时参数timeout,默认配置为无限,即在没有获取锁的情况下,进行无限期的等待;
18.若配置的值大于零,则在等待了超过timeout的时间后超时,并抛出异常退出。
19.进一步的,在步骤s3中,释放锁的方法release是将已经成功获取到的锁进行释放的操作,入参为锁对象l,调用l的release方法将锁释放,等待锁释放完成后,方法退出。
20.进一步的,在步骤s4中,首先根据所述semaphore对象的最大并发量m,对{0...m-1}这些整数进行遍历,并尝试对形如名称-{index}的新锁名进行加锁,其中index是{0..m-1}这些整数中的一个,若在遍历的过程中加锁成功,则说明并发的访问量不足m,加锁成功,返回这个锁对象,在加锁的过程中如果timeout不为零,则将每次加锁的超时时间设置为timeout/m/n,其中n是每个锁名期望的尝试次数。
21.作为优选,n是每个锁名期望的尝试次数,将n置为2,这样将0到m-1这些整数锁代表的锁遍历2遍;
22.如果timeout为0,则将加锁的超时时间置为1/n即可。
23.进一步的,在步骤s5中,将加锁失败的超时时间置为max(0.5,1/n,timeout/m/n),timeout的值为0-0.5s之间。
24.进一步的,在步骤s6中,当用户使用sempahore实例化的对象时,可以使用with关键字,同时将获取到的锁l保存在线程本地的变量中threading.local,在__exit__的时候获取到暂存的锁l,并将其释放。
25.进一步的,在步骤s7中,修改agent端的rpc api的代码,定位到调用时间长、查询信息量大的方法,并在调用之前使用信号量锁加锁,其中,信号量锁的最大并发量通过配置文件配置。
26.一种基于tooz的信号量的实现装置,包括:至少一个存储器和至少一个处理器;
27.所述至少一个存储器,用于存储机器可读程序;
28.所述至少一个处理器,用于调用所述机器可读程序,执行一种基于tooz的信号量的实现方法。
29.本发明的一种基于tooz的信号量的实现方法及装置和现有技术相比,具有以下突出的有益效果:
30.本发明通过tooz实现了一个信号量锁,支持配置最大的并发量m,解决了tooz仅支持互斥锁的缺陷。通过复用tooz本身的互斥锁,实现了信号量锁,实现方便,代码的侵入性小。客户端使用信号量锁,可以实现控制并发量,一方面降低了多agent重启情况下造成服务端负载过重的问题;一方面也降低了客户端由于服务端过载而导致的大量超时重试的问题。
附图说明
31.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据
这些附图获得其他的附图。
32.附图1是一种基于tooz的信号量的实现方法的流程示意图;
33.附图2是一种基于tooz的信号量的实现方法中客户端使用信号量锁的流程示意图。
具体实施方式
34.为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
35.下面给出一个最佳实施例:
36.如图1、2所示,本是实施例中一种基于tooz的信号量的实现方法,当前tooz已经实现了简单的分布式锁,这个分布式锁已经实现了加锁(acquire)、解锁(release)等操作,本方案复用这个已经实现的锁。
37.具体步骤如下:
38.s1、针对通过tooz实现一个信号量锁,首先需要对tooz的接口改造,增加一个semaphore类,在通过类初始化实例时需传入锁的名称和锁的最大的并发访问数(m),其中m必须是一个正整数。semaphore类至少实现两个节点acquire和release,其中acquire实现一个加锁的过程,release则是将当前持有的锁释放。
39.s2、加锁的方法acquire若加锁成功则返回锁对象l,注意这里的锁l即时前文描述的复用tooz已有的锁。其入参中带有一个可选的超时参数timeout,默认配置为无限,即在没有获取锁的情况下,进行无限期的等待。若配置的值大于零,则在等待了超过timeout的时间后超时,并抛出异常退出。
40.s3、释放锁的方法release是将已经成功获取到的锁进行释放的操作,其入参为锁对象l,在方法中调用l的release方法将锁释放。由于释放过程时间较短,故不设超时参数,等待锁释放完成后,方法退出。
41.s4、针对步骤s3中提到的acquire方法,其获取锁的方法描述如下:首先根据semaphore对象的最大并发量(m),对{0...m-1}这些整数进行遍历,并尝试对形如“名称-{index}”的新锁名进行加锁,其中index是{0..m-1}这些整数中的一个,若在遍历的过程中加锁成功,则说明并发的访问量不足m,加锁成功,返回这个锁对象,在加锁的过程中如果timeout不为零,则将每次加锁的超时时间设置为timeout/m/n。
42.其中n是每个锁名期望的尝试次数,一般的可以将n置为2,这样就将0到m-1这些整数锁代表的锁遍历2遍。如果timeout为0,则将加锁的超时时间置为1/n即可。
43.s5、为了防止加锁的操作过于频繁导致锁服务(memcached或etcd)的压力过大,将加锁失败的超时时间置为max(0.5,1/n,timeout/m/n),注意timeout的值默认配置为0.25s即可。
44.s6、优选的为了简化用户的使用,实现__exit__和__enter__方法,当用户使用sempahore实例化的对象时,可以使用with关键字,同时将获取到的锁l保存在线程本地的变量中(threading.local),在__exit__的时候获取到暂存的锁l,并将其释放。
45.s7、修改agent端的rpc api的代码,定位到调用时间长、查询信息量大的方法,并在调用之前使用信号量锁加锁,其中信号量锁的最大并发量可以通过配置文件配置。
46.基于上述方法,本是实施例中的一种基于tooz的信号量的实现装置,包括:至少一个存储器和至少一个处理器;
47.所述至少一个存储器,用于存储机器可读程序;
48.所述至少一个处理器,用于调用所述机器可读程序,执行一种基于tooz的信号量的实现方法。
49.上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的一种基于tooz的信号量的实现方法及装置权利要求书的且任何所述技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。
50.尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1