CN111857992B - 一种Radosgw模块中线程资源分配方法和装置 - Google Patents

一种Radosgw模块中线程资源分配方法和装置 Download PDF

Info

Publication number
CN111857992B
CN111857992B CN202010585943.0A CN202010585943A CN111857992B CN 111857992 B CN111857992 B CN 111857992B CN 202010585943 A CN202010585943 A CN 202010585943A CN 111857992 B CN111857992 B CN 111857992B
Authority
CN
China
Prior art keywords
thread
target
target cluster
access request
cluster
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
Application number
CN202010585943.0A
Other languages
English (en)
Other versions
CN111857992A (zh
Inventor
常纪雄
孙细妹
陆兆新
刘太良
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xiamen Wangsu Co Ltd
Original Assignee
Xiamen Wangsu Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xiamen Wangsu Co Ltd filed Critical Xiamen Wangsu Co Ltd
Priority to CN202010585943.0A priority Critical patent/CN111857992B/zh
Publication of CN111857992A publication Critical patent/CN111857992A/zh
Application granted granted Critical
Publication of CN111857992B publication Critical patent/CN111857992B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5011Pool
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了一种Radosgw模块中线程资源分配方法,所述方法包括:获取请求队列信息,并判断所述请求队列信息中是否存在访问请求,如果存在所述访问请求,识别各个所述访问请求中任意一个目标访问请求携带的目标集群标识;获取当前全局线程已使用数,并根据所述目标集群标识查询目标集群的当前线程已使用数和目标集群线程阈值,其中,所述目标集群标识与所述目标集群相绑定;基于所述当前全局线程已使用数、所述目标集群的当前线程已使用数和所述目标集群线程阈值,判断是否向所述目标访问请求分配线程资源。本申请提供的技术方案,可以提高线程资源的使用效率。

Description

一种Radosgw模块中线程资源分配方法和装置
技术领域
本发明涉及互联网技术领域,特别涉及一种Radosgw模块中线程资源分配方法和装置。
背景技术
CEPH(分布式文件***)具有高扩展性、高性能、高可靠性等优点,同时CEPH***可以提供块存储服务、对象存储服务以及文件***存储服务,因此人们开始越来越多的使用CEPH***来储存和管理数据。随着大数据以及云计算的快速发展,人们对数据及存储提出了更高的要求,单个CEPH集群已经无法满足人们的需求,因此将多个CEPH集群组合在一起,以提供更好的服务,已经成为一种发展趋势。
Radosgw模块作为CEPH***的一个组件,在CEPH***中充当接入网关的角色,通常一个Radosgw模块只能对接一个CEPH集群,如果同时存在多个CEPH集群,那么访问量低的CEPH集群中的Radosgw模块会过于空闲,而访问量高的CEPH集群中的Radosgw模块会成为***的瓶颈。针对上述问题,部分CEPH***对Radosgw模块进行了改进,使得Radosgw模块可以识别访问请求中携带的CEPH集群ID号,这样便可以通过一个Radosgw模块访问不同的CEPH集群,解决Radosgw模块压力不均匀的问题。然而这种改进会产生另一个问题,即当访问某一个CEPH集群的请求大量到来时,Radosgw模块的线程资源会逐渐被访问该CEPH集群的请求占满,此时访问其他CEPH集群的请求将无法得到及时的处理与响应。
鉴于此,有必要提供一种新的Radosgw模块中线程资源分配方法和装置以解决上述不足。
发明内容
本申请的目的在于提供一种Radosgw模块中线程资源分配方法和装置,可以提高线程资源的使用效率。
为实现上述目的,本申请一方面提供一种Radosgw模块中线程资源分配方法,所述方法包括:获取请求队列信息,并判断所述请求队列信息中是否存在访问请求,如果存在所述访问请求,识别各个所述访问请求中任意一个目标访问请求携带的目标集群标识;获取当前全局线程已使用数,并根据所述目标集群标识查询目标集群的当前线程已使用数和目标集群线程阈值,其中,所述目标集群标识与所述目标集群相绑定;基于所述当前全局线程已使用数、所述目标集群的当前线程已使用数和所述目标集群线程阈值,判断是否向所述目标访问请求分配线程资源。
为实现上述目的,本申请另一方面还提供一种Radosgw模块中线程资源分配装置,所述装置包括:队列信息获取模块,用于获取请求队列信息,并判断所述请求队列信息中是否存在访问请求,如果存在所述访问请求,识别各个所述访问请求中任意一个目标访问请求携带的目标集群标识;线程信息获取模块,用于获取当前全局线程已使用数,并根据所述目标集群标识查询目标集群的当前线程已使用数和目标集群线程阈值,其中,所述目标集群标识与所述目标集群相绑定;线程资源分配模块,用于基于所述当前全局线程已使用数、所述目标集群的当前线程已使用数和所述目标集群线程阈值,判断是否向所述目标访问请求分配线程资源。
为实现上述目的,本申请另一方面还提供一种Radosgw模块中线程资源分配装置,所述线程资源分配装置包括存储器和处理器,所述存储器用于存储计算机程序,当所述计算机程序被所述处理器执行时,实现上述线程资源分配的方法。
由此可见,本申请提供的技术方案,在为任意一个访问请求分配线程资源时,可以首先识别该访问请求中携带的集群标识,然后通过该集群标识查询到该访问请求需要访问的集群,进而获取到该集群的当前线程已使用数和该集群的线程阈值,之后再结合当前全局线程已使用数,判断是否对上述访问请求分配线程资源。通过为每一个集群设置线程阈值,可以使得每一个集群都有最低的线程资源分配数额,从而保证每一个集群都具有最低的响应能力。同时,由于***在判断是否对访问请求分配线程资源时,是基于当前的线程资源使用情况来决定的,而线程资源的使用情况是随着时间不断变化的,因此,***可以结合最新的线程资源使用情况为各个访问请求动态分配线程资源。通过上述方法,一方面可以避免线程资源被访问某一集群的请求所占满,而导致访问其它集群的请求无法得到响应,另一方面还可以根据线程资源的实际使用情况,及时对分配至各个集群的线程资源进行调整,从而提高线程资源的整体使用效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施方式中资源池的架构示意图;
图2是本申请实施方式一中线程资源分配方法的流程图;
图3是本申请实施方式二中线程资源分配方法的流程图;
图4是本发明实施方式中线程资源分配装置的功能模块示意图;
图5是本发明实施方式中线程资源分配装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
CEPH(分布式文件***)具有高扩展性、高性能、高可靠性等优点,同时CEPH***可以提供块存储服务、对象存储服务以及文件***存储服务,因此人们开始越来越多的使用CEPH***来储存和管理数据。随着大数据以及云计算的快速发展,人们对数据及存储提出了更高的要求,单个CEPH集群已经无法满足人们的需求,因此将多个CEPH集群组合在一起,以提供更好的服务,已经成为一种发展趋势。
Radosgw模块是对象存储服务接口,其作为CEPH***的一个组件,在CEPH***中充当接入网关的角色。原生的CEPH***中,一个Radosgw模块只能对接一个CEPH集群,因此当多个CEPH集群组成一个大的资源池时,人们需要为每一个CEPH集群分别设置一个或多个Radosgw模块,这可能会出现访问量低的CEPH集群中的Radosgw模块会过于空闲,而访问量高的CEPH集群中的Radosgw模块会成为***的瓶颈,这并不利于发挥全部CEPH集群的性能。针对上述问题,部分CEPH***对Radosgw模块进行了改进,使得Radosgw模块可以识别访问请求中携带的CEPH集群ID号,通过对资源池中的各个CEPH集群进行标记,为每一个CEPH集群分配唯一的ID号,当一个请求需要访问某一个特定的CEPH集群时,该请求可以在报文中携带上述特定CEPH集群的ID号,这样Radosgw模块便可以将该请求发送至上述特定CEPH集群。经过上述改进,便可以通过一个Radosgw模块访问不同的CEPH集群。
然而,上述方式可能会产生另一个问题,即当访问某一个特定CEPH集群的请求大量到来,或者某一个特定的CEPH集群的处理速度较慢或者不响应时,Radosgw模块收到请求后线程资源可能会逐级被访问该CEPH集群的请求所占满,此时访问其他CEPH集群的请求将无法得到及时的处理与响应。如果为了避免Radosgw模块的线程资源被访问单一集群的请求所占满,而对线程资源按集群进行固定分配,则会造成访问量大的集群的线程资源不足,访问量小的集群的线程资源闲置,这又降低了线程资源的使用效率。
因此,如何对访问不同集群的请求进行线程资源的动态调整,以提高线程资源的使用效率,同时避免被单一集群的请求耗尽线程资源,便成为本领域亟需解决的课题。
本申请提供的技术方案可以解决上述不足。
为便于理解本申请中涉及到的CEPH集群的内容,下面对其进行简要介绍。
CEPH的设计目标是采用商用硬件来构建大规模的、具有高可用性、高可扩展性、高性能的分布式存储***。它可以将多台服务器组成一个超大集群,把这些机器中的磁盘资源整合到一块儿,然后按需分配给应用使用。CEPH在结构上可以分为ceph client和cephnode两个部分,其中,ceph client用于访问CEPH的底层服务或组件,同时对外提供各种接口,例如对象存储接口、块存储接口和文件级存储接口;ceph node是CEPH的底层服务提供端,可以理解为存储集群。Radosgw模块是ceph client中的一个功能组件,属于对象存储接口,可以对外可提供swift、s3接口类型的restful api,Radosgw模块具有缓冲功能,当有大量访问请求同时到达Radosgw模块时,Radosgw模块会把上述访问请求缓存到等待队列中,以等待***为其分配线程资源。
在实际应用中,ceph client和ceph node通常部署在不同的服务器上,多台服务器组合在一起,以对外提供服务,此时,上述多台服务器便组成了一个CEPH集群。随着云计算和大数据的快速发展,单个CEPH集群的服务能力已经无法满足人们的需求,因此,人们将多个CEPH集群组合在一起,以构建一个具有更大服务能力的资源池。
请参阅图1,为本申请实施方式中资源池的架构示意图。
在本实施方式中,资源池包含三个CEPH集群,即CEPH-C1、CEPH-C2和CEPH-C3,每一个CEPH集群都绑定有唯一的集群标识,即C1、C2和C3,同时资源池设置有一个Radosgw模块,上述Radosgw模块同时与各个CEPH集群连接,以使得用户可以通过该Radosgw模块访问资源池中的各个CEPH集群。同时,上述Radosgw模块可以识别用户发送的访问请求中携带的CEPH集群标识,在实际应用中,当一个请求需要访问某一个特定的CEPH集群时,可以在该请求的报文中携带上述特定CEPH集群的集群标识,这样Radosgw模块便可以将该请求发送至上述特定CEPH集群。例如,Rec-C1表示访问CEPH-C1集群的请求,Rec-C2表示访问CEPH-C2集群的请求,Rec-C3表示访问CEPH-C3集群的请求,通过识别访问请求中携带的集群标识,本实施方式可以通过一个Radosgw模块访问不同的CEPH集群。
需要特别指出的是,本实施方式将CEPH集群的数量设置为三个,将Radosgw模块的数量设置为一个只是示意性的,并不是对本申请的限制,基于本申请的思想,在其它实施方式中也可以将CEPH集群的数量设置为更多或者更少,并且将Radosgw模块的数量设置为多个。当资源池中设置有多个Radosgw模块时,每一个Radosgw模块都与资源池中的各个CEPH集群连接,并且每一个Radosgw模块都可以识别访问请求中携带的CEPH集群标识。同时将Rec-C1、Rec-C2和Rec-C3标示为由三个不同的用户发送也是示意性的,在实际应用中,也可以由同一个用户发送访问不同CEPH集群的请求。
为便于叙述,下文以资源池中只设置有一个Radosgw模块为例进行说明。
请参阅图2,为本申请实施方式一中线程资源分配方法的流程图。
S101:获取请求队列信息,并判断所述请求队列信息中是否存在访问请求,如果存在所述访问请求,识别各个所述访问请求中任意一个目标访问请求携带的目标集群标识。
在一个实施方式中,当大量的访问请求同时到达某一个Radosgw模块时,该Radosgw模块中的请求接收线程可以将上述各个访问请求缓存到等待队列中,上述等待队列可以起到缓冲的作用,使请求接收线程不必等待请求完成,从而解决访问请求不能被及时接收的问题。
需要特别指出的是,如果CEPH***中存在多个Radosgw模块,那么CEPH***中的业务***可以首先基于上述多个Radosgw模块的压力情况,在上述多个Radosgw模块中选择出压力较小的Radosgw模块,然后再将用户发送的各个访问请求发往该压力较小的Radosgw模块,进而通过该压力较小的Radosgw模块去访问目标集群。在实际应用中,业务***可以通过统计发往各个Radosgw模块的请求数量、各个Radosgw模块的响应速度,或者读取各个Radosgw模块的负载信息等方式判断各个Radosgw模块的压力情况。进一步的,随着访问请求不断被发往上述压力较小的Radosgw模块,该Radosgw模块的压力会不断增大,该Radosgw模块可能会出现处理速度降低,甚至不响应的情况,因此业务***可以判定该Radosgw模块的负载较大,从而将后继的访问请求发往其他Radosgw模块,亦即业务***可以实时或者周期性的获取各个Radosgw模块的压力情况,并将用户发送的访问请求始终发往压力最小的Radosgw模块。
需要特别指出的是,在本实施方式中各个访问请求的报文信息中都携带有其将要访问的CEPH集群的集群标识,Radosgw模块可以识别上述访问请求携带的集群标识。
当访问请求被放入等待队列后,Radosgw模块可以基于各个访问请求携带的信息生成请求队列信息,以供后期使用。应当指出的是,即使Radosgw模块没有接收到任何访问请求,Radosgw模块初始化时也将创建等待队列,只是此时的等待队列中并不存在任何访问请求,即等待队列是空队列。在实际应用中,可以在Radosgw模块中添加线程资源动态分配插件,上述线程资源动态分配插件可以通过线程同步的方式与Radosgw模块进行通信,进而获取到Radosgw模块生成的请求队列信息。
当线程资源动态分配插件获取到请求队列信息后,上述线程资源动态分配插件可以判断请求队列信息中是否存在访问请求,即线程资源动态分配插件可以判断请求队列是否为空队列,如果线程资源动态分配插件判断请求队列是空队列,则说明此时Radosgw模块并没有接收到任何的访问请求,也就意味着没有访问请求需要分配线程资源,因此,线程资源动态分配插件可以结束本次处理过程,并等待***触发下一次处理过程的开启;如果线程资源动态分配插件判断请求队列中存在访问请求,则说明此时存在需要Radosgw模块进行处理的访问请求,也就意味着需要为上述访问请求分配线程资源,那么线程资源动态分配插件便可以基于获取到的上述请求队列信息,对请求队列信息中的任意一个访问请求(即目标访问请求)进行识别,进而获取到目标访问请求报文中携带的目标集群标识。
需要特别指出的是,线程资源动态分配插件在对访问请求进行识别时,可以按照各个访问请求在请求队列信息中的排列顺序依次进行,也可以在请求队列信息中随机取出一个访问请求进行处理,本申请对此不作限制。
S102:获取当前全局线程已使用数,并根据所述目标集群标识查询目标集群的当前线程已使用数和目标集群线程阈值,其中,所述目标集群标识与所述目标集群相绑定。
在一个实施方式中,当线程资源动态分配插件获取到目标访问请求携带的目标集群标识后,线程资源动态分配插件便可以与Radosgw模块中的主线程进行通信,并根据上述目标集群标识,查询与上述目标集群标识相绑定的目标集群的当前线程已使用数,同时,线程资源动态分配插件还可以从Radosgw模块处获取当前全局线程已使用数。目标集群的当前线程已使用数用于表明当前时刻访问目标集群的请求已占用的线程资源数,当前全局线程已使用数用于表明当前时刻访问各个集群的请求已占用的线程资源数总和,例如资源池中存在C1、C2、C3三个CEPH集群,以C1集群作为目标集群为例,假设当前时刻访问C1集群的请求已占用的线程资源数为10,访问C2集群的请求已占用的线程资源数为5,访问C3集群的请求已占用的线程资源数为21,则目标集群的当前线程已使用数为10,当前全局线程已使用数为36。
进一步的,线程资源动态分配插件还可以根据上述目标集群标识查询***设置的目标集群线程阈值。在一个实施方式中,线程资源动态分配插件在获取请求队列信息之前,Radosgw模块可以提前创建线程资源池,并设置线程资源池的线程资源总数和线程资源高水位数,其中,线程资源总数用于表明Radosgw模块可以提供的最大线程资源数,即表明Radosgw模块最多可以同时处理多少数量的访问请求;线程资源高水位数用于表明Radosgw模块的性能警戒值,当Radosgw模块同时处理的访问请求的数量达到线程资源高水位数时,表示需要对访问请求进行限制(例如停止对新的访问请求进行处理),以避免Radosgw模块出现故障。在实际应用中,Radosgw模块可以根据服务器的硬件性能(例如CPU计算能力、内存/硬盘读写性能),以及经验值设定线程资源总数和线程资源高水位数,通常可以将线程资源高水位数设置为线程资源总数的50%至80%之间的任意一个数值。
需要特别指出的是,创建线程资源池的操作也可以由线程资源动态分配插件进行,此时,线程资源动态分配插件作为操作控制方,而Radosgw模块作为线程资源提供方,Radosgw模块可以接收线程资源动态分配插件的指令,生成线程资源池以供线程资源动态分配插件调用。
当Radosgw模块完成线程资源总数和线程资源高水位数的设定后,Radosgw模块还可以根据线程资源总数、线程资源高水位数和集群数量,设置各个集群的线程阈值,其中,线程阈值包括线程资源上限值和线程资源下限值。线程资源上限值用于表示Radosgw模块可以为某一个CEPH集群提供的最大线程资源数,当Radosgw模块为某一个CEPH集群分配的线程资源数达到线程资源上限值时,即使Radosgw模块再次接收到访问该CEPH集群的请求,线程资源动态分配插件也不会再为该访问请求分配线程资源。线程资源下限值用于表示Radosgw模块为某一个CEPH集群保留的最低线程资源数,线程资源下限值保证即使Radosgw模块的线程资源使用数已经达到性能警戒值,Radosgw模块也能通过线程资源动态分配插件为该CEPH集群提供最低数量的线程资源,以避免线程资源被访问其它CEPH集群的请求所占满,而导致访问该CEPH集群的请求无法得到处理。
在实际应用中,线程资源上限值和线程资源下限值可以结合线程资源总数、线程资源高水位数和集群数量进行设定,例如,以resource_total表示线程资源总数、以resource_watermark表示线程资源高水位数,以n表示集群数量,以req_max表示线程资源上限值,以req_min表示线程资源下限值,则req_max可以设置为resource_watermark/(n*40%)至resource_watermark/(n*20%)之间的任意一个数值,req_min可以设置为(resource_total-resource_watermark)/(n*70%)至(resource_total-resource_watermark)/n之间的任意一个数值。
需要特别指出的是,在为某一个CEPH集群设置req_min和req_max的具体数值时,还可以进一步参考该CEPH集群的访问频率和/或其服务器的硬件性能,例如,对于服务器的硬件性能较强的CEPH集群,可以将其req_max的数值设定为更靠近取值区间的右端,而对于服务器的硬件性能较弱的CEPH集群,可以将其req_max的数值设定为更靠近取值区间的左端,本申请对req_min和req_max的具体取值不作限制。
S103:基于所述当前全局线程已使用数、所述目标集群的当前线程已使用数和所述目标集群线程阈值,判断是否向所述目标访问请求分配线程资源。
在一个实施方式中,当线程资源动态分配插件获取到当前全局线程已使用数、目标集群的当前线程已使用数和目标集群线程阈值之后,线程资源动态分配插件便可以基于上述获取到的信息,并结合预设的线程资源分配规则,判断是否对目标访问请求分配线程资源。
下面结合图3,对基于当前全局线程已使用数、目标集群的当前线程已使用数和目标集群线程阈值,判断是否向目标访问请求分配线程资源进行详细说明。
在一个实施方式中,线程资源动态分配插件可以首先判断当前全局线程已使用数是否小于线程资源高水位数,若当前全局线程已使用数小于线程资源高水位数,则进一步判断目标集群的当前线程已使用数是否小于目标集群的线程资源上限值,若目标集群的当前线程已使用数小于目标集群的线程资源上限值,则线程资源动态分配插件可以向目标访问请求分配线程资源。
在本实施方式中,当访问目标集群的请求较多,并且当前线程资源使用率较低(即当前全局线程已使用数小于线程资源高水位数)的时候,如果访问上述目标集群的请求所占用的线程资源数未达到目标集群的线程资源上限值(即目标集群的当前线程已使用数小于目标集群的线程资源上限值),那么,线程资源动态分配插件可以继续向目标访问请求分配线程资源,以使得目标访问请求可以对目标集群进行访问。
在实际应用中,当线程资源动态分配插件判断向目标访问请求分配线程资源之后,线程资源动态分配插件可以通过线程资源池向目标访问请求分配线程资源。例如,线程资源动态分配插件可以首先判断线程资源池中的核心线程池是否已满,如果核心线程池未满,则线程资源动态分配插件可以通知Radosgw模块创建一个新的工作线程来执行目标访问请求的任务,如果核心线程池已满,则线程资源动态分配插件可以将目标访问请求放入线程资源池的任务队列中,以等待执行。需要特别指出的是,线程资源池中的任务队列为阻塞队列,以保证任务队列中没有任务时阻塞获取任务的线程,使得线程资源池中的线程进入等待状态,从而释放cpu资源。
由于线程资源动态分配插件为目标访问请求分配线程资源后,当前全局线程已使用数在数值上会变大,因此线程资源动态分配插件还需要更新当前全局线程已使用数,从而保证线程资源动态分配插件在为下一个访问请求判断是否分配线程资源时,可以获取到最新的当前线程已使用数。同理,线程资源动态分配插件还需要更新目标集群的当前线程已使用数,从而保证线程资源动态分配插件在处理下一个访问目标集群的请求时,可以获取到最新的目标集群的当前线程已使用数。相应的,当线程资源动态分配插件更新完当前全局线程已使用数和目标集群的当前线程已使用数之后,线程资源动态分配插件还需要将目标访问请求从请求队列信息中删除,以避免重复对目标访问请求分配线程资源。
在实际应用中,Radosgw模块所能提供的线程资源是有限的,因此需要考虑线程资源的回收问题。在一种可实现的方式中,当线程资源动态分配插件将目标访问请求从请求队列信息中删除后,线程资源动态分配插件还可以获取目标访问请求的执行状态,当线程资源动态分配插件判断目标访问请求已经执行完毕后,线程资源动态分配插件可以回收向目标访问请求分配的线程资源,即将处理上述目标访问请求的线程资源回收,并将回收的上述线程资源重新放入线程资源池中,以供线程资源动态分配插件将其分配给其它访问请求。相应的,当线程资源动态分配插件将上述线程资源重新放入线程资源池后,当前全局线程已使用数和目标集群的当前线程已使用数会发生变化,因此线程资源动态分配插件还需要更新当前全局线程已使用数和目标集群的当前线程已使用数。
在另一个实施方式中,如果线程资源动态分配插件判断当前全局线程已使用数小于线程资源高水位数,并且目标集群的当前线程已使用数大于或者等于目标集群的线程资源上限值,则说明当前访问目标集群的请求所占用的线程资源数已经较多,此时已经在很大程度上满足了访问目标集群的请求,为了避免访问其它集群的请求无法获取线程资源,而导致长时间得不到服务,线程资源动态分配插件将不再向上述目标访问请求分配线程资源,而是将目标访问请求继续放在请求队列信息中,以等待下一个周期对其进行处理。
在另一个实施方式中,如果线程资源动态分配插件判断当前全局线程已使用数大于或者等于线程资源高水位数,则可以进一步判断目标集群的当前线程已使用数是否小于目标集群的线程资源下限值,若目标集群的当前线程已使用数小于目标集群的线程资源下限值,则线程资源动态分配插件可以向目标访问请求分配线程资源。
在本实施方式中,如果当前全局线程已使用数达到线程资源高水位数,则说明当前线程资源使用率较高,为避免Radosgw模块资源耗尽出现故障,此时需要对访问目标集群的请求进行限制,但为了不直接中断访问目标集群请求的处理,线程资源动态分配插件需要参考目标集群的线程资源下限值,如果目标集群的当前线程已使用数小于目标集群的线程资源下限值,说明Radosgw模块为目标集群保留的最低线程资源并没有耗尽,因此,线程资源动态分配插件可以向目标访问请求分配线程资源,以满足目标集群的最低访问需求。
在另一个实施方式中,如果线程资源动态分配插件判断当前全局线程已使用数大于或者等于线程资源高水位数,并且目标集群的当前线程已使用数大于或者等于目标集群的线程资源下限值,则说明当前线程资源使用率较高,并且Radosgw模块为目标集群保留的最低线程资源已经耗尽,为避免访问其它集群的请求无法申请到最低限度的线程资源,线程资源动态分配插件将不再向上述目标访问请求分配线程资源,而是将目标访问请求继续放在请求队列信息中,以等待下一个周期对其进行处理。
需要特别指出的是,当前全局线程已使用数和目标集群的当前线程已使用数是随着时间不断变化的。例如,当目标访问请求被处理完成后,随着线程资源的回收,当前全局线程已使用数将减少,目标集群的当前线程已使用数也将减少。而随着线程资源动态分配插件不断为访问目标集群的请求分配线程资源,目标集群的当前线程已使用数将会不断增大,当前全局线程已使用数也将不断增大。因此,线程资源动态分配插件在每次对访问目标集群的请求进行处理时,都需要根据当前时刻的目标集群的线程已使用数和全局线程已使用数,判断是否为其分配线程资源。
由于Radosgw模块在不断接收外界发来的访问请求,因此Radosgw模块生成的请求队列信息是随着时间不断变化的,因此在一个实施方式中,线程资源动态分配插件还可以设置探测间隔时间,并基于上述探测间隔时间周期性的获取Radosgw模块生成的请求队列信息。同时,由于线程资源动态分配插件在为任意的访问请求分配线程资源后,都会将该访问请求从请求队列信息中删除,因此Radosgw模块生成的请求队列信息中所包含的访问请求,必然是未分配线程资源的,因此线程资源动态分配插件可以基于在最新周期获取到的请求队列信息,对各个访问请求进行处理,并判断是否为其分配线程资源。
请参阅图4,本申请还提供一种线程资源分配装置,所述装置包括:
队列信息获取模块,用于获取请求队列信息,并判断所述请求队列信息中是否存在访问请求,如果存在所述访问请求,识别各个所述访问请求中任意一个目标访问请求携带的目标集群标识;
线程信息获取模块,用于获取当前全局线程已使用数,并根据所述目标集群标识查询目标集群的当前线程已使用数和目标集群线程阈值,其中,所述目标集群标识与所述目标集群相绑定;
线程资源分配模块,用于基于所述当前全局线程已使用数、所述目标集群的当前线程已使用数和所述目标集群线程阈值,判断是否向所述目标访问请求分配线程资源。
在一个实施方式中,所述装置还包括:
线程资源创建模块,用于创建线程资源池,并设置所述线程资源池的线程资源总数和线程资源高水位数,以及根据所述线程资源总数、所述线程资源高水位数和集群数量,设置各个集群的线程阈值,其中,所述线程阈值包括线程资源上限值和线程资源下限值。
在一个实施方式中,所述线程资源分配模块基于所述当前全局线程已使用数、所述目标集群的当前线程已使用数和所述目标集群线程阈值,判断是否向所述目标访问请求分配线程资源包括:
判断所述当前全局线程已使用数是否小于所述线程资源高水位数,若小于,则判断所述目标集群的当前线程已使用数是否小于所述目标集群的线程资源上限值,若所述目标集群的当前线程已使用数小于所述目标集群的线程资源上限值,则向所述目标访问请求分配线程资源;
若所述目标集群的当前线程已使用数大于或者等于所述目标集群的线程资源上限值,则不向所述目标访问请求分配线程资源。
在一个实施方式中,所述线程资源分配模块,还用于若所述当前全局线程已使用数大于或者等于所述线程资源高水位数,则判断所述目标集群的当前线程已使用数是否小于所述目标集群的线程资源下限值,若所述目标集群的当前线程已使用数小于所述目标集群的线程资源下限值,则向所述目标访问请求分配线程资源;
若所述目标集群的当前线程已使用数大于或者等于所述目标集群的线程资源下限值,则不向所述目标访问请求分配线程资源。
在一个实施方式中,所述线程资源分配模块,还用于通过所述线程资源池向所述目标访问请求分配线程资源,并更新所述当前全局线程已使用数和所述目标集群的当前线程已使用数;
所述队列信息获取模块,还用于将所述目标访问请求从所述请求队列信息中删除。
在一个实施方式中,所述装置还包括:
线程资源回收模块,用于获取所述目标访问请求的执行状态,当所述目标访问请求执行完毕,回收向所述目标访问请求分配的线程资源,并更新所述当前全局线程已使用数和所述目标集群的当前线程已使用数。
在一个实施方式中,所述队列信息获取模块,还用于设置探测间隔时间,并基于所述探测间隔时间周期性的获取所述请求队列信息。
请参阅图5,本申请还提供一种线程资源分配装置,所述线程资源分配装置包括存储器和处理器,所述存储器用于存储计算机程序,当所述计算机程序被所述处理器执行时,可以实现如上述的线程资源分配方法。具体地,在硬件层面,该模型部署装置可以包括处理器、内部总线和存储器。所述存储器可以包括内存以及非易失性存储器。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行。本领域普通技术人员可以理解,图5所示的结构仅为示意,其并不对上述线程资源分配装置的结构造成限定。例如,所述线程资源分配装置还可包括比图5中所示更多或者更少的组件,例如还可以包括其他的处理硬件,如GPU(Graphics Processing Unit,图像处理器),或者对外通信端口等。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等。
本实施方式中,所述的处理器可以包括中央处理器(CPU)或图形处理器(GPU),当然也可以包括其他的具有逻辑处理能力的单片机、逻辑门电路、集成电路等,或其适当组合。本实施方式所述的存储器可以是用于保存信息的记忆设备。在数字***中,能保存二进制数据的设备可以是存储器;在集成电路中,一个没有实物形式的具有存储功能的电路也可以为存储器,如RAM、FIFO等;在***中,具有实物形式的存储设备也可以叫存储器等。实现的时候,该存储器也可以采用云存储器的方式实现,具体实现方式,本说明书不做限定。
需要说明的是,本说明书中的线程资源分配装置,具体的实现方式可以参照方法实施方式的描述,在此不作一一赘述。
由此可见,本申请提供的技术方案,在为任意一个访问请求分配线程资源时,可以首先识别该访问请求中携带的集群标识,然后通过该集群标识查询到该访问请求需要访问的集群,进而获取到该集群的当前线程已使用数和该集群的线程阈值,之后再结合当前全局线程已使用数,判断是否对上述访问请求分配线程资源。通过为每一个集群设置线程阈值,可以使得每一个集群都有最低的线程资源分配数额,从而保证每一个集群都具有最低的响应能力。同时,由于***在判断是否对访问请求分配线程资源时,是基于当前的线程资源使用情况来决定的,而线程资源的使用情况是随着时间不断变化的,因此,***可以结合最新的线程资源使用情况为各个访问请求动态分配线程资源。通过上述方法,一方面可以避免线程资源被访问某一集群的请求所占满,而导致访问其它集群的请求无法得到响应,另一方面还可以根据线程资源的实际使用情况,及时对分配至各个集群的线程资源进行调整,从而提高线程资源的整体使用效率。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (15)

1.一种Radosgw模块中线程资源分配方法,其特征在于,所述方法包括:
创建线程资源池,并设置所述线程资源池的线程资源高水位数,获取请求队列信息,并判断所述请求队列信息中是否存在访问请求,如果存在所述访问请求,识别各个所述访问请求中任意一个目标访问请求携带的目标集群标识;
获取当前全局线程已使用数,并根据所述目标集群标识查询目标集群的当前线程已使用数和目标集群线程阈值,其中,所述目标集群标识与所述目标集群相绑定;
基于所述当前全局线程已使用数、所述目标集群的当前线程已使用数和所述目标集群线程阈值,判断是否向所述目标访问请求分配线程资源,其中,若所述当前全局线程已使用数小于所述线程资源高水位数,且所述目标集群的当前线程已使用数小于所述目标集群线程阈值的上限值,则向所述目标访问请求分配线程资源。
2.根据权利要求1所述的方法,其特征在于,在获取请求队列信息之前,所述方法还包括:
设置所述线程资源池的线程资源总数;
根据所述线程资源总数、所述线程资源高水位数和集群数量,设置各个集群的线程阈值,其中,所述线程阈值包括线程资源上限值和线程资源下限值。
3.根据权利要求2所述的方法,其特征在于,基于所述当前全局线程已使用数、所述目标集群的当前线程已使用数和所述目标集群线程阈值,判断是否向所述目标访问请求分配线程资源包括:
若所述当前全局线程已使用数小于所述线程资源高水位数,且所述目标集群的当前线程已使用数大于或者等于所述目标集群的线程资源上限值,则不向所述目标访问请求分配线程资源。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
若所述当前全局线程已使用数大于或者等于所述线程资源高水位数,则判断所述目标集群的当前线程已使用数是否小于所述目标集群的线程资源下限值,若所述目标集群的当前线程已使用数小于所述目标集群的线程资源下限值,则向所述目标访问请求分配线程资源;
若所述目标集群的当前线程已使用数大于或者等于所述目标集群的线程资源下限值,则不向所述目标访问请求分配线程资源。
5.根据权利要求2所述的方法,其特征在于,当判断向所述目标访问请求分配线程资源之后,所述方法还包括:
通过所述线程资源池向所述目标访问请求分配线程资源,并更新所述当前全局线程已使用数和所述目标集群的当前线程已使用数;
将所述目标访问请求从所述请求队列信息中删除。
6.根据权利要求5所述的方法,其特征在于,将所述目标访问请求从所述请求队列信息中删除后,所述方法还包括:
获取所述目标访问请求的执行状态,当所述目标访问请求执行完毕,回收向所述目标访问请求分配的线程资源,并更新所述当前全局线程已使用数和所述目标集群的当前线程已使用数。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
设置探测间隔时间,并基于所述探测间隔时间周期性的获取所述请求队列信息。
8.一种Radosgw模块中线程资源分配装置,其特征在于,所述装置包括:
线程资源创建模块,用于创建线程资源池,并设置所述线程资源池的线程资源高水位数;
队列信息获取模块,用于获取请求队列信息,并判断所述请求队列信息中是否存在访问请求,如果存在所述访问请求,识别各个所述访问请求中任意一个目标访问请求携带的目标集群标识;
线程信息获取模块,用于获取当前全局线程已使用数,并根据所述目标集群标识查询目标集群的当前线程已使用数和目标集群线程阈值,其中,所述目标集群标识与所述目标集群相绑定;
线程资源分配模块,用于基于所述当前全局线程已使用数、所述目标集群的当前线程已使用数和所述目标集群线程阈值,判断是否向所述目标访问请求分配线程资源,其中,若所述当前全局线程已使用数小于所述线程资源高水位数,且所述目标集群的当前线程已使用数小于所述目标集群线程阈值的上限值,则向所述目标访问请求分配线程资源。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
线程资源创建模块,用于设置所述线程资源池的线程资源总数,以及根据所述线程资源总数、所述线程资源高水位数和集群数量,设置各个集群的线程阈值,其中,所述线程阈值包括线程资源上限值和线程资源下限值。
10.根据权利要求9所述的装置,其特征在于,所述线程资源分配模块基于所述当前全局线程已使用数、所述目标集群的当前线程已使用数和所述目标集群线程阈值,判断是否向所述目标访问请求分配线程资源包括:
若所述当前全局线程已使用数小于所述线程资源高水位数,且所述目标集群的当前线程已使用数大于或者等于所述目标集群的线程资源上限值,则不向所述目标访问请求分配线程资源。
11.根据权利要求10所述的装置,其特征在于,
所述线程资源分配模块,还用于若所述当前全局线程已使用数大于或者等于所述线程资源高水位数,则判断所述目标集群的当前线程已使用数是否小于所述目标集群的线程资源下限值,若所述目标集群的当前线程已使用数小于所述目标集群的线程资源下限值,则向所述目标访问请求分配线程资源;
若所述目标集群的当前线程已使用数大于或者等于所述目标集群的线程资源下限值,则不向所述目标访问请求分配线程资源。
12.根据权利要求9所述的装置,其特征在于,
所述线程资源分配模块,还用于通过所述线程资源池向所述目标访问请求分配线程资源,并更新所述当前全局线程已使用数和所述目标集群的当前线程已使用数;
所述队列信息获取模块,还用于将所述目标访问请求从所述请求队列信息中删除。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
线程资源回收模块,用于获取所述目标访问请求的执行状态,当所述目标访问请求执行完毕,回收向所述目标访问请求分配的线程资源,并更新所述当前全局线程已使用数和所述目标集群的当前线程已使用数。
14.根据权利要求8所述的装置,其特征在于,
所述队列信息获取模块,还用于设置探测间隔时间,并基于所述探测间隔时间周期性的获取所述请求队列信息。
15.一种Radosgw模块中线程资源分配装置,其特征在于,所述线程资源分配装置包括存储器和处理器,所述存储器用于存储计算机程序,当所述计算机程序被所述处理器执行时,实现如权利要求1至7中任一权利要求所述的方法。
CN202010585943.0A 2020-06-24 2020-06-24 一种Radosgw模块中线程资源分配方法和装置 Active CN111857992B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010585943.0A CN111857992B (zh) 2020-06-24 2020-06-24 一种Radosgw模块中线程资源分配方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010585943.0A CN111857992B (zh) 2020-06-24 2020-06-24 一种Radosgw模块中线程资源分配方法和装置

Publications (2)

Publication Number Publication Date
CN111857992A CN111857992A (zh) 2020-10-30
CN111857992B true CN111857992B (zh) 2024-04-16

Family

ID=72988074

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010585943.0A Active CN111857992B (zh) 2020-06-24 2020-06-24 一种Radosgw模块中线程资源分配方法和装置

Country Status (1)

Country Link
CN (1) CN111857992B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115080201B (zh) * 2022-05-07 2024-05-14 北京控制工程研究所 一种面向应急任务的高可靠卫星自主任务规划方法及***
CN115643309A (zh) * 2022-10-27 2023-01-24 极道科技(北京)有限公司 一种基于请求调度队列长度的动态流控方法和***
CN118051346A (zh) * 2024-04-11 2024-05-17 恒生电子股份有限公司 请求动态限流方法、装置、电子设备和可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103649932A (zh) * 2011-05-20 2014-03-19 索夫特机械公司 资源的分散分配以及用于支持由多个引擎执行指令序列的互连结构
CN106470169A (zh) * 2015-08-19 2017-03-01 阿里巴巴集团控股有限公司 一种业务请求调整方法及设备
CN107153653A (zh) * 2016-03-03 2017-09-12 阿里巴巴集团控股有限公司 一种分库分表的轮询访问方法及装置
CN109710402A (zh) * 2018-12-17 2019-05-03 平安普惠企业管理有限公司 处理资源获取请求的方法、装置、计算机设备和存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10108364B2 (en) * 2015-06-26 2018-10-23 Nxp Usa, Inc. IC module and method of decoding resource access requests

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103649932A (zh) * 2011-05-20 2014-03-19 索夫特机械公司 资源的分散分配以及用于支持由多个引擎执行指令序列的互连结构
CN106470169A (zh) * 2015-08-19 2017-03-01 阿里巴巴集团控股有限公司 一种业务请求调整方法及设备
CN107153653A (zh) * 2016-03-03 2017-09-12 阿里巴巴集团控股有限公司 一种分库分表的轮询访问方法及装置
CN109710402A (zh) * 2018-12-17 2019-05-03 平安普惠企业管理有限公司 处理资源获取请求的方法、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
CN111857992A (zh) 2020-10-30

Similar Documents

Publication Publication Date Title
CN111857992B (zh) 一种Radosgw模块中线程资源分配方法和装置
JP5510556B2 (ja) 仮想マシンのストレージスペースおよび物理ホストを管理するための方法およびシステム
EP3073374A1 (en) Thread creation method, service request processing method and related device
CN109564528B (zh) 分布式计算中计算资源分配的***和方法
CN113037794B (zh) 计算资源配置调度方法、装置及***
CN110196770B (zh) 云***内存数据处理方法、装置、设备及存储介质
CN113485822A (zh) 内存管理方法、***、客户端、服务器及存储介质
CN111190745A (zh) 一种数据处理方法、装置及计算机可读存储介质
CN108667744B (zh) 流量控制方法及装置
CN112398945B (zh) 一种基于背压的业务处理方法及装置
CN111309644B (zh) 一种内存分配方法、装置和计算机可读存储介质
CN112600761B (zh) 一种资源分配的方法、装置及存储介质
CN106385377B (zh) 一种信息处理方法和***
WO2016202154A1 (zh) 一种gpu资源的分配方法及***
CN110647392A (zh) 一种基于容器集群的智能弹性伸缩方法
CN112860387A (zh) 分布式任务调度方法、装置、计算机设备及存储介质
CN109819674B (zh) 计算机存储介质、嵌入式调度方法及***
CN108139969B (zh) 一种内存配置方法、装置及***
CN109962941B (zh) 通信方法、装置以及服务器
CN114785739A (zh) 逻辑卷服务质量的控制方法、装置、设备及介质
CN110046040B (zh) 分布式任务处理方法及***和存储介质
CN113010453A (zh) 一种内存管理的方法、***、设备及可读存储介质
CN112559115A (zh) 一种容器镜像的删除方法、装置及设备
CN114860334B (zh) 虚拟机启动风暴的处理方法、装置、设备及介质
CN115378885B (zh) 超融合架构下的虚拟机业务网络带宽管理方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant