一种基于请求处理时间的云存储系统均衡负载的读取方法及系统与流程

文档序号:17548859发布日期:2019-04-30 18:05阅读:225来源:国知局
一种基于请求处理时间的云存储系统均衡负载的读取方法及系统与流程

本发明涉及网络应用技术领域,更具体地,涉及一种基于请求处理时间的云存储系统均衡负载的读取方法及系统。



背景技术:

近年来,互联网的发展改变了人们的生活方式,大量数据密集合型应用应运而生,越来越多的领域和行业需要存储和管理大规模的数据。数据的形式多变、复杂性高,传统单一的存储方式无法应对海量数据的存储和管理,云存储技术得以快速发展。

云存储是在云计算技术的基础上发展而来的,云计算是一种利用互联网实现随时随地、按需、便捷地访问共享资源池的计算模式,其目标在于,通过网络将大型的计算任务分割成若干较小的计算任务,分配给多台服务器共同处理。因此,云计算系统是一个以数据运算和处理为核心的系统,而当云计算系统的核心是数据的存储和管理时,云计算系统就需要设备管理和数据存储的相关技术。云存储通过网格技术、分布式文件系统、集合群应用等关键技术,整合网络中异构的存储资源,并通过一定的接口,对外提供统一的数据存储服务和数据访问服务。在web时代,云存储及时与应用软件的结合为互联网用户带来了便利的服务,并有效保证了数据的可用性、安全性。对象存储技术以对象为单元,对象大小不固定,并且对象存储设备承担了部分文件系统底层的功能,具有优良的自治功能。因此,基于对象存储技术开发的存储系统可以提供一个具有商性能、易扩展、易共享、可容错的存储环境。

开源云平台openstack的对象云存储系统swift,属于云存储技术的一种,适合存储永久类型的静态数据。swift的体系结构可以分为两层:访问层和存储层。访问层主要包含代理服务器和认证,分别处理restful请求和用户身份认证。存储层由物理存储节点组成,负责对象数据的存储。云存储系统swift在网盘应用、存储资源池、集合中备份、归档和分级存储等其他应用场景中也有着广泛的应用。云存储系统swift在对性能普通且类型不同的存储设备进行统一的管理,虚拟成统一的存储池,并通过一致性哈希算法和文件副本策略,构建出易扩展的、无单点故障的、可容灾的分布式文件存储系统。云存储系统swift是一种对象存储系统,存储单元是对象。对象包括数据和元数据,数据是用户数据,元数据是对象属性,元数据与传统的inode数据相似,包括与对象相关的如时间戳、在磁盘上的逻辑分布、数据块和对象的长度等属性。对于用户而言,通过发送http请求和云存储系统swift进行交互。用户可以将数据作为一个对象发送给云存储系统swift,也可以从云存储系统swift中以一个对象的形式读取数据。用户无需关心对象的存储形式和存储位置。云存储系统swift也是一个分布式存储系统,采用可扩展的系统结构,利用多台分布在不同位置的存储设备,通巧网络通信将所有存储设备连接起来共同提供数据存储服务。分布式存储系统与传统的集合中存储系统相比,适合承担海量数据的存储和管理,能够提高存储系统的稳定性、可用性和存储效率。

在云存储系统swift中通过nwr策略来控制一致性级别,在实际的分布式存储系统中,nwr的取值与环境密切相关。nwr的默认配置为n=3,w=2,r=2,即默认每个对象的副本个数为3,写操作需要确保成功写入2个副本才算成功,另一副本可由系统自动更新,读操作需要确保成功读取2个副本才算成功,取最新版本的副本返回给用户。

用户在使用云存储系统swift时,并不是直接地访问某一台服务器,而是访问不同种类的服务器共同构建的存储池。云存储系统swift将用户请求分配到各服务器上,由各服务器共同完成用户的请求。因此,在云存储系统swift中,完成用户请求的速度与每一个服务器都息息相关。然而,云存储系统swift在处理用户的读取请求时,却随机地为请求选择服务器。这种做法未考虑各服务器的实时负载、请求之间的差异,容易造成读取请求阻塞在某些服务器上,而另外一部分服务器却空闲的情况,从而无法有效地利用各服务器,影响用户请求的处理速度。

因此,需要一种技术,以解决基于请求处理时间的云存储系统swift均衡负载的读取的问题。



技术实现要素:

本发明提供了一种基于请求处理时间的云存储系统均衡负载的读取的方法和系统,以解决如何基于请求处理时间对云存储系统均衡负载进行读取的问题。

为了解决上述问题,本发明提供了一种基于请求处理时间的云存储系统均衡负载的读取方法,

设置请求集合中每个请求的处理状态,所述处理状态包括:第一级处理状态、第二级处理状态以及第三级处理状态;利用最小二乘法,将服务器集合中的服务器的负载值拟合为直线,通过所述直线的斜率判断所述服务器集合中的所有服务器的负载是否发生了倾斜;

当所述服务器集合中的服务器的负载没有倾斜时,将处理能力属性最低值的服务器分配给长度属性值最小的请求,并更新所述分配请求后的服务器的处理能力属性值;对所述请求的状态进行更新,若所述请求的状态为第二级处理状态,则更新所述请求的状态为第三级状态;若所述请求的状态为第一级处理状态,确认所述请求的副本所在的服务器,优先选择处理能力属性最低值的服务器,并将所述请求分配给所述处理能力属性最低值的服务器,并将所述请求的状态更新为第二级处理状态;

本发明提供了一种基于请求处理时间的云存储系统均衡负载的读取方法,

设置请求集合中每个请求的处理状态,所述处理状态包括:第一级处理状态、第二级处理状态以及第三级处理状态;利用最小二乘法,将服务器集合中的服务器的负载值拟合为直线,通过所述直线的斜率判断所述服务器集合中的所有服务器的负载是否发生了倾斜;

当所述服务器集合中的服务器的负载有倾斜时,选取负载值低于所述服务器集合中所有服务器的平均负载的所有低负载服务器,组成低负载服务器集合,优先选择当前请求集合中长度属性值最小的请求分配给所述低负载服务器中的服务器,并更新所述分配请求后的服务器的处理能力属性值,获取所述请求的处理状态,将所述请求的第一级处理状态更新为第二级处理状态,或将所述请求的第二级处理状态更新为第三级处理状态。

优选地,还包括:获取多个请求,将多个请求记为请求集合;将多个服务器记为服务器集合。

优选地,设置所述请求集合中的多个请求中每个请求的长度属性,所述长度属性用于记录所述请求集合中对应请求的长度;

设置所述服务器集合中的多个服务器中每个服务器的处理能力属性,所述处理能力属性用于记录所述服务器集合中对应服务器的处理能力。

优选地,还包括:对所述请求集合中的多个请求和服务器集合的多个服务器进行排序,建立所述请求集合和服务器集合的二维矩阵。

优选地,所述二维矩阵的行为按照当前负载排序后的服务器集合,所述二维矩阵的行数为所述服务器集合的大小;所述二维矩阵的列为按照长度排序后的请求集合,所述二维矩阵的列数为所述请求集合的大小。

基于本发明的另一方面,提供一种基于请求处理时间的云存储系统均衡负载的读取系统,

状态记录单元,用于设置所述请求集合中每个请求的处理状态,所述处理状态包括:第一级处理状态、第二级处理状态以及第三级处理状态;负载判断单元,用于利用最小二乘法,将所述服务器集合中的服务器的负载值拟合为直接,通过所述直线的斜率判断所述服务器集合中的所有服务器的负载是否发生了倾斜;

第一处理单元,用于当所述服务器集合中的服务器的负载没有倾斜时,将处理能力属性最低值的服务器分配给长度属性值最小的请求,并更新所述分配请求后的服务器的处理能力属性值;对所述请求的状态进行更新,若所述请求的状态为第二级处理状态,则更新所述请求的状态为第三级状态;若所述请求的状态为第一级处理状态,确认所述请求的副本所在的服务器,优先选择处理能力属性最低值的服务器,并将所述请求分配给所述处理能力属性最低值的服务器,并将所述请求的状态更新为第二级处理状态;

基于本发明的另一方面,提供一种基于请求处理时间的云存储系统均衡负载的读取系统,

状态记录单元,用于设置所述请求集合中每个请求的处理状态,所述处理状态包括:第一级处理状态、第二级处理状态以及第三级处理状态;负载判断单元,用于利用最小二乘法,将所述服务器集合中的服务器的负载值拟合为直接,通过所述直线的斜率判断所述服务器集合中的所有服务器的负载是否发生了倾斜;

第二处理单元,用于当所述服务器集合中的服务器的负载有倾斜时,选取负载值低于所述服务器集合中所有服务器的平均负载的所有低负载服务器,组成低负载服务器集合,优先选择当前请求集合中长度属性值最小的请求分配给所述低负载服务器中的服务器,并更新所述分配请求后的服务器的处理能力属性值,获取所述请求的处理状态,将所述请求的第一级处理状态更新为第二级处理状态,或将所述请求的第二级处理状态更新为第三级处理状态。

优选地,还包括初始单元,用于获取多个请求,将多个请求记为请求集合;将多个服务器记为服务器集合。

优选地,初始设置单元,用于设置所述请求集合中的多个请求中每个请求的长度属性,所述长度属性用于记录所述请求集合中对应请求的长度;

用于设置所述服务器集合中的多个服务器中每个服务器的处理能力属性,所述处理能力属性用于记录所述服务器集合中对应服务器的处理能力。

优选地,矩阵建立单元,用于对所述请求集合中的多个请求和服务器集合的多个服务器进行排序,建立所述请求集合和服务器集合的二维矩阵。

优选地,所述二维矩阵的行为按照当前负载排序后的服务器集合,所述二维矩阵的行数为所述服务器集合的大小;所述二维矩阵的列为按照长度排序后的请求集合,所述二维矩阵的列数为所述请求集合的大小。

本发明技术方案主要针对云存储系统在处理读取请求时的缺陷,提出了一种基于请求处理时间的读取负载均衡方法。相对于云存储系统原本为请求随机选择服务器,这种分配方式考虑了服务器的实时负载,避免了由于多数请求聚集合在少部分服务器而延长请求等待时间的情况。

附图说明

通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:

图1为根据本发明实施方式的一种基于请求处理时间的云存储系统swift均衡负载的读取方法流程图;

图2为根据本发明实施方式的一种基于请求处理时间的云存储系统swift均衡负载的读取方法流程图;以及

图3为根据本发明实施方式的一种基于请求处理时间的云存储系统swift均衡负载的读取系统结构图。

具体实施方式

现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。

除非另有说明,此处使用的术语(包括科技术语)对所属技术领域的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。

图1为根据本发明实施方式的一种基于请求处理时间的云存储系统swift均衡负载的读取方法流程图。本发明实施方式主要针对云存储系统swift在处理请求时容易在某些服务器出现的阻塞问题,考虑到引起的原因之一是没有考虑到服务器实时负载,提出了一种基于请求处理时间的云存储系统swift读取负载均衡方法。该算法采用最小二乘法将服务器负载拟合成直线,通过直线的斜率判断服务器负载是否发生倾斜。针对发生倾斜和未发生倾斜两种情况,采用不同的方法处理读取请求。如图1所示一种基于请求处理时间的云存储系统swift均衡负载的读取方法100从步骤101开始,在101步骤开始前,还包括:

获取多个请求,将多个请求记为请求集合;将多个服务器记为服务器集合。

设置请求集合中的多个请求中每个请求的长度属性,长度属性用于记录请求集合中对应请求的长度。

设置服务器集合中的多个服务器中每个服务器的处理能力属性,处理能力属性用于记录服务器集合中对应服务器的处理能力。

对请求集合中的多个请求和服务器集合的多个服务器进行排序,建立请求集合和服务器集合的二维矩阵。

优选地,二维矩阵的行为按照当前负载排序后的服务器集合,二维矩阵的行数为服务器集合的大小;二维矩阵的列为按照长度排序后的请求集合,二维矩阵的列数为请求集合的大小。

优选地,在步骤101:设置请求集合中每个请求的处理状态,处理状态包括:第一级处理状态、第二级处理状态以及第三级处理状态。

优选地,在步骤102:利用最小二乘法,将服务器集合中的服务器的负载值拟合为直线,通过直线的斜率判断服务器集合中的所有服务器的负载是否发生了倾斜。

优选地,在步骤103:当服务器集合中的服务器的负载没有倾斜时,将处理能力属性最低值的服务器分配给长度属性值最小的请求,并更新分配请求后的服务器的处理能力属性值;对请求的状态进行更新,若请求的状态为第二级处理状态,则更新请求的状态为第三级处理状态;若请求的状态为第一级处理状态,确认所述请求副本所在的服务器,优先选择处理能力属性最低值的服务器分配给所述请求,并将所述请求的状态更新为第二级处理状态。

优选地,在步骤104:当所述服务器集合中的服务器的负载有倾斜时,选取负载值低于所述服务器集合中所有服务器的平均负载的所有低负载服务器,记为低负载服务器集合,优先选择当前请求集合中长度属性值最小的请求分配给所述低负载服务器中的服务器,并更新分配请求后的服务器的处理能力属性值,获取所述请求的处理状态,将所述请求的第一级处理状态更新为第二级处理状态,或将所述请求的第二级处理状态更新为第三级处理状态。

图2为根据本发明实施方式的一种基于请求处理时间的云存储系统swift均衡负载的读取方法流程图,具体说明如下:

根据现有机制下云存储系统swift读取数据的缺陷,其首先会根据一致性哈希技术找出对象对应的虚拟节点,再根据虚拟节点和服务器的映射关系表。找出该虚拟节点的3个副本所在的3个对象服务器。接着在这3个对象服务器中随机选择两个并从中读取对象,然后对这2个副本进行比较,若它们一致,则直接向用户返回结果;若它们不一致,则对它们进行比较,选择较新版本的副本返回给用户。这种随机选择对象服务器的方式可以提高响应请求的速度,但却忽略了服务器的实时负载,会导致小部分服务器聚集合了大部分读取请求,而大部分服务器却只需要处理小部分读取请求的后果。另一方面,每个读取请求都需要从2个对象服务器中分别读取副本,若不考虑服务器的实时负载,则可能出现其中一个副本很快读出,另外一个副本则被阻塞,导致先读出的副本需要等待另一副本的读取,影响读取请求的处理速度。因此,在处理读取请求时考虑对象服务器的实时负载非常重要,这样才能合理地为选择请求选择服务器处理,提高资源的利用率。

假设用reqi表示某个请求,devj表示某个服务器,现有n个请求记为请求集合req_set:{req1,req2,...,reqn},m个服务器记为服务器集合dev_set:{dev1,dev2,...,devm},该算法解决的是如何合理地将这n个请求分配至m个服务器中,使各服务器承受的负载基本一致,避免负载倾斜现象。在swift中,对于任何一个用户发来的请求,并不是每一个对象服务器都可以对其进行处理。但在本算法中,默认每个服务器都可以处理请求集合中的任何一个请求,需要对用户请求进行预处理,将请求集合中的每一个请求与可以处理它的服务器对应起来,并且对服务器集合和请求集合进行排序。预处理结果用二维矩阵double_sort_matrix表示,行对应按照当前负载排序后的服务器集合,行数等于服务器集合的大小,列对应按照长度排序后的请求,列数等于请求集合的大小。

不同请求要读取的对象大小不一,有比较大的差异,本算法为每个请求增加一个长度属性来标识要读取的对象的大小,用obj_sizei来表示请求reqi的长度。swift中各对象服务器的性能也存在差异,考虑到不同服务器在处理同一个读取请求时主要涉及到其处理能力,各个服务器的处理能力采用p(devi)表示。通过让各个服务器处理同一个请求从而采用其处理速度的方式来决定其p(devi)的大小,处理速度快的服务器p(devi)大,处理速度慢的服务器p(devi)小。

swift中每个对象服务器会收到两种请求,读取请求和存储请求。本算法中暂且忽略各对象服务器上的存储请求,假设存储请求为各个服务器带来的负载相同,仅计算读取请求带来的负载。假设某对象服务器devj当前正在处理以及等待处理的读取请求有req1,req2,...,reqn,则对象服务器devj的负载loadj为:

loadj=(obj_size1+obj_size2+...+obj_sizen)/p(devj)

另外,假设某个时刻对象服务器devj的负载为cur_loadj,当其接收了新的请求reqi时,则其负载loadj将变为:

loadj=cur_loadj+obj_sizei/p(devj)

由于swift采用的n=3,w=2,r=2策略,每个读取请求需要读取两个副本。对于请求集合中的每个请求,只有从两个不同的服务器分别读取了副本之后才能认为该请求处理完毕。考虑到任何一个请求的两次处理都不一定是连续的,因此本算法对请求设置处理状态,各请求的最初状态都为条第一级处理状态waiting,表示请求正在等待分配;当请求被分配给某一服务器后,状态变为第二级处理状态processing,当请求第二次被分配给某个服务器后,状态变为第三级处理状态done。状态为第三级处理状态done的请求被认为已经分配完毕,可以从请求集合中删除。

基于请求处理时间的读取负载均衡算法的基本思路是首先判断当前各服务器的负载值是否出现倾斜,没有出现倾斜的状态被视为服务器负载均衡。然后针对发生倾斜和没有发生倾斜两种情况分别采取不同的措施。本算法采用最小二乘法判断当前各服务器的负载是否发生倾斜。首先以服务器id为横坐标,负载值为纵坐标,使用最小二乘法将各服务器的负载值拟合成一条直线,通过该直线的斜率k表示服务器的负载是否发生了倾斜。显而易见的是,直线的斜率k越大说明各服务器的负载值相差越大。但又因为斜率的范围为0到∞,因此本算法采用sin(arctan(k))(0≤sin(arctan(k))<1)表示服务器的负载是否倾斜。本算法将通过实验得出一个阈值threshold,若threshold满足公式:sin(arctan(k))<threshold则认为服务器的负载没有发生倾斜。反之,认为服务器的负载发生了倾斜。

当服务器的负载没有发生倾斜时,说明此时服务器负载相对均衡。为了尽量维持这种状态,则选择负载最低的服务器去处理长度较小的请求。该算法会选择负载最小的服务器devj,将请求集合中长度最小的请求reqi分配至该服务器,并更新服务器devj的当前负载值。接着判断请求reqi的状态,若状态为第二级处理状态processing,则将状态置为第三级处理状态done,从请求集合req_set中删除该请求。若状态为第一级处理状态waiting,则需要计算请求对应的虚拟节点,根据虚拟节点找出副本所在的所有服务器,然后从中选择除服务器devj外的负载值最小的服务器继续处理该请求。

当服务器的负载发生了倾斜时,说明此时服务器负载值相差较大,不宜再向负载值大的服务器分配请求,因此应将请求分配至负载较低的服务器。该算法会计算服务器集合中当前负载的平均值,记为ave_load。然后找出负载低于平均值的那些服务器,放入集合合low_ave_dev中。对于集合合low_ave_dev中的每一个服务器,选择当前请求集合req_set中长度最小的请求分配。每次分配后都需要更新服务器的负载w及请求状态,若请求原来状态为第二级处理状态processing则更新状态为第三级处理状态done,并从请求集合中删除请求。若请求原来状态为第一级处理状态waiting,则更新状态为第二级处理状态processing。

本发明实施方式主要针对swift在处理读取请求时的缺陷,提出了一种基于请求处理时间的读取负载均衡方法。本申请的算法考虑读取请求和对象服务器的差异性,使用最小二乘法来将服务器负载拟合成直线,利用直线的斜率状态来标识当前服务器负载是否均衡。并且根据服务器当前负载是否均衡采用不同的策略来应对,避免了读取请求的群聚效应,较少了请求等待的时间。

图3为根据本发明实施方式的一种基于请求处理时间的云存储系统swift均衡负载的读取系统结构图。如图3所示,一种基于请求处理时间的云存储系统swift均衡负载的读取系统300,包括:

状态记录单元301,用于设置请求集合中每个请求的处理状态,处理状态包括:第一级处理状态、第二级处理状态以及第三级处理状态。

负载判断单元302,用于利用最小二乘法,将服务器集合中的服务器的负载值拟合为直接,通过直线的斜率判断服务器集合中所有的服务器的负载是否发生了倾斜。

第一处理单元303,用于当服务器集合中的服务器的负载没有倾斜时,将处理能力属性最低值的服务器分配给长度属性值最小的请求,并更新分配请求后的服务器的处理能力属性值;对请求的状态进行更新,若请求的状态为第二级处理状态,则更新请求的状态为第三级状态;若请求的状态为第一级处理状态,确认所述请求的副本所在的服务器,优先选择处理能力属性最低值的服务器,并将所述请求分配给所述处理能力属性最低值的服务器,并将所述请求的状态更新为第二级处理状态。

第二处理单元304,用于当服务器集合中的服务器的负载有倾斜时,选取负载值低于服务器集合中所有服务器的平均负载的所有低负载服务器,记为低负载服务器集合,优先选择当前请求集合中长度属性值最小的请求分配给低负载服务器中的服务器,并更新分配请求后的服务器的处理能力属性值,获取所述请求的处理状态,将所述请求的第一级处理状态更新为第二级处理状态,或将所述请求的第二级处理状态更新为第三级处理状态。

优选地,系统300还包括初始单元,用于获取多个请求,将多个请求记为请求集合;将多个服务器记为服务器集合。

优选地,系统300还包括初始设置单元,用于设置请求集合中的多个请求中每个请求的长度属性,长度属性用于记录请求集合中对应请求的长度。

用于设置服务器集合中的多个服务器中每个服务器的处理能力属性,处理能力属性用于记录服务器集合中对应服务器的处理能力。

优选地,系统300还包括矩阵建立单元,用于对请求集合中的多个请求和服务器集合的多个服务器进行排序,建立请求集合和服务器集合的二维矩阵。

优选地,二维矩阵的行为按照当前负载排序后的服务器集合,二维矩阵的行数为服务器集合的大小;二维矩阵的列为按照长度排序后的请求集合,二维矩阵的列数为请求集合的大小。

发明实施方式的一种基于请求处理时间的云存储系统swift均衡负载的读取系统300与本发明实施方式一种基于请求处理时间的云存储系统swift均衡负载的读取方法100、200相对应,在此不再进行赘述。

已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如附带的专利权利要求所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。

通常地,在权利要求中使用的所有术语都根据他们在技术领域的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个/所述/该[装置、组件等]”都被开放地解释为所述装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1