一种基于tooz的信号量的实现方法及装置制造方法及图纸

技术编号:36345225 阅读:60 留言:0更新日期:2023-01-14 17:59
本发明专利技术涉及云计算领域和计算机网络领域,具体提供了一种基于tooz的信号量的实现方法,具有如下步骤:S1、对tooz的接口进行改造,增加一个Semaphore类;S2、加锁的方法acquire若加锁成功则返回锁对象L;S3、释放锁的方法release是将已经成功获取到的锁进行释放的操作;S4、针对步骤s3中提到的acquire方法,获取锁的具体方法;S5、为防止加锁的操作过于频繁导致锁服务的压力过大,设置加锁失败的超时时间;S6、使用__exit__和__enter__方法,简化用户的使用;S7、修改Agent端的RPC API的代码,并调用使用信号量锁加锁。与现有技术相比,本发明专利技术通过tooz实现了一个信号量锁,支持配置最大的并发量M,解决了tooz仅支持互斥锁的缺陷。解决了tooz仅支持互斥锁的缺陷。解决了tooz仅支持互斥锁的缺陷。

【技术实现步骤摘要】
一种基于tooz的信号量的实现方法及装置


[0001]本专利技术涉及云计算领域和计算机网络领域,具体提供一种基于tooz的信号量的实现方法及装置。

技术介绍

[0002]云计算技术因其原生的高扩展性和高可用性,吸引了越来越多的企业选择将自己的业务从线下机房的物理机上迁移到云数据中心上。OpenStack是一种开源的云计算平台的管理软件。对于一个常见的OpenStack集群的部署,其集群中的节点根据功能不同一般分为控制节点、计算节点和网络节点,其中控制节点运行着管理服务,如:neutron

server、MySQL等;计算节点运行着虚拟机和虚拟网络的管理Agent,如网络Agent、nova

compute Agent等;网络节点一般运行着NAT网关等网络Agent。随着技术的不断成熟,OpenStack所管理的集群的容量已经达到了1000以上。
[0003]集群规模的扩张,对集群的管理带来了更大的挑战,其中一个是多网络Agent的重启对服务端neutron

server的压力,当前多Agent重启的情况下,Agent之间并没有进行同步和并发量的限制,一般的思路是在neutron

server和其所在的控制节点进行网络限速、限制并发连接数等方案,这种方法虽然能够限速,但是对Agent端不优化,且Agent仍然会由于访问超时进行重试,最终导致控制端的负载长时间的飙高。

技术实现思路

[0004]本专利技术是针对上述现有技术的不足,提供一种实用性强的基于tooz的信号量的实现方法。
[0005]本专利技术进一步的技术任务是提供一种设计合理,安全适用的基于tooz的信号量的实现装置。
[0006]本专利技术解决其技术问题所采用的技术方案是:
[0007]一种基于tooz的信号量的实现方法,在已有tooz的基础上,实现一个信号锁;
[0008]具有如下步骤:
[0009]S1、对tooz的接口进行改造,增加一个Semaphore类,所述Semaphore类至少实现两个节点acquire和release,acquire实现一个加锁的过程,所述release则是将当前持有的锁释放;
[0010]S2、加锁的方法acquire若加锁成功则返回锁对象L;
[0011]S3、释放锁的方法release是将已经成功获取到的锁进行释放的操作;
[0012]S4、针对步骤s3中提到的acquire方法,获取锁的具体方法;
[0013]S5、为防止加锁的操作过于频繁导致锁服务的压力过大,设置加锁失败的超时时间;
[0014]S6、使用__exit__和__enter__方法,简化用户的使用;
[0015]S7、修改Agent端的RPC API的代码,并调用使用信号量锁加锁。
[0016]进一步的,在步骤S1中,在通过类初始化实例时传入锁名称和锁的最大并发访问数M,所述M必须是一个正整数。
[0017]进一步的,在步骤S2中,所述锁对象L是复用tooz已有的锁,入参中带有一个可选的超时参数timeout,默认配置为无限,即在没有获取锁的情况下,进行无限期的等待;
[0018]若配置的值大于零,则在等待了超过timeout的时间后超时,并抛出异常退出。
[0019]进一步的,在步骤S3中,释放锁的方法release是将已经成功获取到的锁进行释放的操作,入参为锁对象L,调用L的release方法将锁释放,等待锁释放完成后,方法退出。
[0020]进一步的,在步骤S4中,首先根据所述Semaphore对象的最大并发量M,对{0...M

1}这些整数进行遍历,并尝试对形如名称

{index}的新锁名进行加锁,其中index是{0..M

1}这些整数中的一个,若在遍历的过程中加锁成功,则说明并发的访问量不足M,加锁成功,返回这个锁对象,在加锁的过程中如果timeout不为零,则将每次加锁的超时时间设置为timeout/M/N,其中N是每个锁名期望的尝试次数。
[0021]作为优选,N是每个锁名期望的尝试次数,将N置为2,这样将0到M

1这些整数锁代表的锁遍历2遍;
[0022]如果timeout为0,则将加锁的超时时间置为1/N即可。
[0023]进一步的,在步骤S5中,将加锁失败的超时时间置为max(0.5,1/N,timeout/M/N),timeout的值为0

0.5s之间。
[0024]进一步的,在步骤S6中,当用户使用Sempahore实例化的对象时,可以使用with关键字,同时将获取到的锁L保存在线程本地的变量中threading.local,在__exit__的时候获取到暂存的锁L,并将其释放。
[0025]进一步的,在步骤S7中,修改Agent端的RPC API的代码,定位到调用时间长、查询信息量大的方法,并在调用之前使用信号量锁加锁,其中,信号量锁的最大并发量通过配置文件配置。
[0026]一种基于tooz的信号量的实现装置,包括:至少一个存储器和至少一个处理器;
[0027]所述至少一个存储器,用于存储机器可读程序;
[0028]所述至少一个处理器,用于调用所述机器可读程序,执行一种基于tooz的信号量的实现方法。
[0029]本专利技术的一种基于tooz的信号量的实现方法及装置和现有技术相比,具有以下突出的有益效果:
[0030]本专利技术通过tooz实现了一个信号量锁,支持配置最大的并发量M,解决了tooz仅支持互斥锁的缺陷。通过复用tooz本身的互斥锁,实现了信号量锁,实现方便,代码的侵入性小。客户端使用信号量锁,可以实现控制并发量,一方面降低了多Agent重启情况下造成服务端负载过重的问题;一方面也降低了客户端由于服务端过载而导致的大量超时重试的问题。
附图说明
[0031]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据
这些附图获得其他的附图。
[0032]附图1是一种基于tooz的信号量的实现方法的流程示意图;
[0033]附图2是一种基于tooz的信号量的实现方法中客户端使用信号量锁的流程示意图。
具体实施方式
[0034]为了使本
的人员更好的理解本专利技术的方案,下面结合具体的实施方式对本专利技术作进一步的详细说明。显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本专利技术保护的范围。
[0035]下面给出一个最佳实施例:<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于tooz的信号量的实现方法,其特征在于,在已有tooz的基础上,实现一个信号锁;具有如下步骤:S1、对tooz的接口进行改造,增加一个Semaphore类,所述Semaphore类至少实现两个节点acquire和release,acquire实现一个加锁的过程,所述release则是将当前持有的锁释放;S2、加锁的方法acquire若加锁成功则返回锁对象L;S3、释放锁的方法release是将已经成功获取到的锁进行释放的操作;S4、针对步骤s3中提到的acquire方法,获取锁的具体方法;S5、为防止加锁的操作过于频繁导致锁服务的压力过大,设置加锁失败的超时时间;S6、使用__exit__和__enter__方法,简化用户的使用;S7、修改Agent端的RPC API的代码,并调用使用信号量锁加锁。2.根据权利要求1所述的一种基于tooz的信号量的实现方法,其特征在于,在步骤S1中,在通过类初始化实例时传入锁名称和锁的最大并发访问数M,所述M必须是一个正整数。3.根据权利要求2所述的一种基于tooz的信号量的实现方法,其特征在于,在步骤S2中,所述锁对象L是复用tooz已有的锁,入参中带有一个可选的超时参数timeout,默认配置为无限,即在没有获取锁的情况下,进行无限期的等待;若配置的值大于零,则在等待了超过timeout的时间后超时,并抛出异常退出。4.根据权利要求3所述的一种基于tooz的信号量的实现方法,其特征在于,在步骤S3中,释放锁的方法release是将已经成功获取到的锁进行释放的操作,入参为锁对象L,调用L的release方法将锁释放,等待锁释放完成后,方法退出。5.根据权利要求4所述的一种基于tooz的信号量的实现方法,其特征在于,在步骤S4中,首先根据所述Semaphore对象的最大并发量M,对{0...M

1}这些...

【专利技术属性】
技术研发人员:申嘉童宋伟谢涛涛
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:

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

1