分布式存储系统中处理对象的元数据的方法及装置与流程

文档序号:16782248发布日期:2019-02-01 19:13阅读:157来源:国知局
分布式存储系统中处理对象的元数据的方法及装置与流程
本发明实施例涉及存储
技术领域
,尤其涉及一种分布式存储系统中处理对象的元数据的方法及装置。
背景技术
:在分布式存储系统中,服务节点根据对象的标识所包括的片键值(shardkey)确定该对象的元数据归属分区(即确定将对象的元数据写入哪一分区),进而使得管理该分区的索引节点对该对象的元数据进行管理。一般的,片键值包括桶的名称以及对象的名称。这样,在键值为顺序排列的场景中,分布式存储系统中某一桶内的对象的元数据总是归属于一个分区中,造成分区热点,且该桶内的对象的元数据的分布不均匀。即使后续分布式存储系统中分区的数量变大,也依旧无法解决对象的元数据的分布不均匀的问题。技术实现要素:本申请提供一种分布式存储系统中处理对象的元数据的方法及装置,能够解决对象的元数据的分布不均匀的问题。为达到上述目的,本申请采用如下技术方案:第一方面,提供一种分布式存储系统中处理对象的元数据的方法,该分布式存储系统的桶包括至少两个逻辑子桶,该至少两个逻辑子桶映射到的分区不同,至少两个逻辑子桶中的第一逻辑子桶映射到第一分区,分布式存储系统中的索引节点用于管理第一分区。具体的,该方法为:分布式存储系统中的服务节点在接收到包括桶的名称以及第一对象的名称的输入输出(input/output,io)操作后,根据桶的名称以及第一对象的名称,从桶中选择第一逻辑子桶,并根据第一逻辑子桶与第一分区的映射关系,向索引节点发送包括第一逻辑子桶的名称和第一对象的名称的处理请求,该处理请求用于请求在第一分区中处理第一对象的元数据。本申请提供的方法中,在桶与分区之间引入了逻辑子桶的概念,一个桶包括至少两个逻辑子桶,且每个逻辑子桶映射到不同的分区,这样,服务节点可将一个桶中的不同对象的元数据散列到不同的逻辑子桶,进而写入不同的分区,有效的提高了同一桶中不同对象的元数据的分布的均匀性,避免了分区热点的出现。可选的,在本申请的一种可能的实现方式中,上述服务节点根据桶的名称以及第一对象的名称,从桶中选择第一逻辑子桶的方法为:服务节点根据桶的名称,确定桶;服务节点根据第一对象的名称、桶中逻辑子桶的数量、桶中逻辑子桶号的起始编号以及分布式存储系统的初始的分区的数量,确定第一逻辑子桶的编号。服务节点在确定出第一逻辑子桶的编号后,即可根据该编号从至少两个逻辑子桶中选取出第一逻辑子桶。进一步地,在根据第一逻辑子桶与第一分区的映射关系,向索引节点发送处理请求之前,服务节点还生成包括第一逻辑子桶的名称,这里,第一逻辑子桶的名称包括第一逻辑子桶的编号以及桶的名称。一个桶包括至少两个逻辑子桶,在桶中所述至少两个逻辑子桶可以采用编号进行区分。由于分布式存储系统可能包括至少两个桶,因此,对于每个逻辑子桶而言,该逻辑子桶的名称需要采用其归属的桶的名称以及该逻辑子桶的编号表示。可选的,在本申请的另一种可能的实现方式中,在接收输入输出io操作之前,服务节点还建立桶,并根据桶的性能指标,确定该桶中逻辑子桶的数量,以及根据分布式存储系统的初始的分区的数量和随机数,确定桶中逻辑子桶的起始编号。可选的,在本申请的另一种可能的实现方式中,本申请中分布式存储系统的初始的分区的数量不小于2。在初始的分区的数量不小于2的情况下,有效的提升了该分布式存储系统的初始性能。第二方面,提供一种服务节点,应用于分布式存储系统,该分布式存储系统还包括索引节点。该分布式存储系统的桶包括至少两个逻辑子桶,至少两个逻辑子桶映射到的分区不同,至少两个逻辑子桶中的第一逻辑子桶映射到第一分区,索引节点用于管理第一分区。本申请提供的服务节点包括接收单元、处理单元和发送单元。具体的,上述接收单元,用于接收io操作,该io操作包括桶的名称以及第一对象的名称。上述处理单元,用于根据桶的名称以及第一对象的名称,从桶中选择第一逻辑子桶。上述发送单元,用于根据第一逻辑子桶与第一分区的映射关系,向上述索引节点发送处理请求,该处理请求包括第一逻辑子桶的名称和第一对象的名称,该处理请求用于请求在第一分区中处理第一对象的元数据。可选的,在本申请的一种可能的实现方式中,上述处理单元,具体用于根据桶的名称,确定桶,以及根据第一对象的名称、桶中逻辑子桶的数量、桶中逻辑子桶号的起始编号以及分布式存储系统的初始的分区的数量,确定第一逻辑子桶的编号。此外,上述处理单元,还用于在上述发送单元根据第一逻辑子桶与第一分区的映射关系,向索引节点发送处理请求之前,生成包括第一逻辑子桶的编号以及桶的名称的第一逻辑子桶的名称。可选的,在本申请的另一种可能的实现方式中,上述处理单元,还用于在上述接收单元接收输入输出io操作之前,建立桶,以及根据桶的性能指标,确定桶中逻辑子桶的数量,以及根据分布式存储系统的初始的分区的数量以及随机数,确定桶中逻辑子桶的起始编号。可选的,在本申请的另一种可能的实现方式中,分布式存储系统的初始的分区的数量不小于2。第三方面,提供一种服务节点,该服务节点包括:一个或多个处理器和存储器。存储器与上述一个或多个处理器连接。存储器用于存储计算机指令,当一个或多个处理器执行该计算机指令时,服务节点执行如上述第一方面及其任意一种可能的实现方式中任意之一所述的方法。第四方面,提供一种包含指令的计算机程序产品,该计算机程序产品包括计算机指令,当上述第三方面所述的服务节点的处理器执行计算机指令时,使得所述服务节点执行如上述第一方面及其任意一种可能的实现方式中任意之一所述的方法。第五方面,提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机指令,当上述第三方面所述的服务节点的处理器执行计算机指令时,使得所述服务节点执行如上述第一方面及其任意一种可能的实现方式中任意之一所述的方法。在本申请中,上述服务节点的名字对设备或功能模块本身不构成限定,在实际实现中,这些设备或功能模块可以以其他名称出现。只要各个设备或功能模块的功能和本申请类似,属于本申请权利要求及其等同技术的范围之内。本申请中第二方面到第五方面及其各种实现方式的具体描述,可以参考第一方面及其各种实现方式中的详细描述;并且,第二方面到第五方面及其各种实现方式的有益效果,可以参考第一方面及其各种实现方式中的有益效果分析,此处不再赘述。本申请的这些方面或其他方面在以下的描述中会更加简明易懂。附图说明图1为本发明实施例中分区的示意图;图2为本发明实施例中分布式存储系统的结构示意图一;图3为本发明实施例中分布式存储系统的结构示意图二;图4为本发明实施例中服务节点的硬件结构示意图;图5为本发明实施例中处理对象的元数据的方法的流程示意图;图6为本发明实施例中服务节点的结构示意图一;图7为本发明实施例提种服务节点的结构示意图二。具体实施方式本发明实施例的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于限定特定顺序。在本发明实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。分布式存储系统包括多个服务器。一般的,根据服务器具备的功能,将分布式存储系统中的多个服务器划分为服务节点、索引节点以及存储节点。存储节点用于存储对象的数据和/或对象的元数据,具体的,对象的数据和/或对象的元数据存储于存储节点的存储介质(如硬盘)中。索引节点用于管理对象的元数据,能够将该对象的元数据写入其管理的某一分区中。服务节点用于确定将某一桶内的对象的元数据写入某一分区中。在分布式存储系统中,每一对象的元数据均以一条数据条目的形式存储于元数据表中。每一对象的标识包括桶的名称、对象的名称以及对象的版本号。为了适应元数据表中数据条目不断增长的需求,分布式存储系统中通常采用分区技术将元数据表进行动态拆分,拆分后的每个分区管理不同的数据条目。每个分区由分布式存储系统中的某一个索引节点管理。动态分区实现了分布式存储系统的动态横向扩展。在分区技术中,分布式存储系统通常使用数据条目中至少一列的数值确定该数据条目归属的分区,该至少一列的数值的组合称为片键值(shardkey)。也就是说,对于元数据表中的每个数据条目,均可根据该数据条目的片键值唯一确定该数据条目归属的分区。示例性的,下述表1为元数据表,该元数据表中“桶的名称”、“对象的名称”以及“对象的版本号”的组合唯一标识一个对象,即对象的标识为{桶的名称、对象的名称、对象版本号}。为了适应元数据的数量的不断增长,分布式存储系统中可以将{桶的名称、对象的名称}作为shardkey,以便于索引不同分区。表1桶的名称对象的名称对象的版本号……a01091……a01092……b02011……表1中的第1行数据条目的shardkey为{桶的名称是“a”,对象的名称为“0109”}。第2行数据条目的shardkey为{桶的名称是“a”,对象的名称为“0109”},第2行数据条目的shardkey与第1行数据条目的shardkey相同,因此,第1行数据条目表示的元数据和第2行数据条目表示的元数据属于同一分区。但是,第1行数据条目表示的对象的标识{桶的名称是“a”,对象的名称为“0109”,对象的版本号为“1”}和第2行数据条目表示的对象的标识{桶的名称是“a”,对象的名称为“0109”,对象的版本号为“2”}不同。第3行数据条目的shardkey为{桶的名称是“b”,对象的名称为“0201”}。为了保证对象的元数据能够按照shardkey的自然序排列,分布式存储系统通常采用范围分区(rangepartition)技术。对于处于分区边界点上的元数据,采用左闭右开或者左开右闭的原则确定该元数据归属的分区。示例性的,图1示出了分布式存储系统中分区的结构。图1中的bn表示桶的名称,on表示对象的名称,ver表示对象的版本号。对于处于分区边界点上的元数据,若采用左闭右开原则确定该元数据归属的分区,则分区1的shardkey的数值范围为:({bn:min;on:max},{bn:0011;on:max}],分区2的shardkey的数值范围为:({bn:0011;on:max}~{bn:0020;on:max}]。若某一对象的标识为:{bn:0010;on:max;ver:1},则该对象的元数据归属的分区为分区1。在分布式存储系统中,由于对象的片键值唯一确定该对象的元数据归属的分区,因此,在片键值采用顺序排列的场景中,同一桶中的多个对象的元数据总是归属于同一个分区,造成分区热点,且该桶内的对象的元数据的分布不均匀。此外,传统的分布式存储系统在初始启动后,整个分布式存储系统中只有一个分区,此时所有对象的元数据的操作均由该分区提供服务。在运行一段时间后,经过多次拆分,分布式存储系统中存在多个分区,分布式存储系统的性能得到线性扩展。但是,这种方式下,分布式存储系统的初始性能较低。鉴于此,本发明实施例提供了一种分布式存储系统中处理对象的元数据的方法及装置。其基本原理是:在分布式存储系统的桶中建立至少两个逻辑子桶,将同一个桶中的对象的元数据散列到不同的逻辑子桶中,每个逻辑子桶再映射到不同的分区,以达到同一桶中对象的元数据归属于不同分区的效果,有效的提高了对象的元数据分布的均匀性。进一步地,本发明实施例提供的分布式存储系统中处理对象的元数据的方法中,还能够在分布式存储系统初始化部署时,根据每一个服务节点的规模和性能,配置多个分区。也就是说,在初始化部署分布式存储系统时,为该分布式存储系统配置了初始的分区的数量。该初始的分区的数量不小于2。这样,保证了分布式存储系统初始的多分区能力,有效的提高了该分布式存储系统的初始性能。以下,结合附图,对本发明实施例提供的技术方案进行示例性说明。图2为本发明实施例提供的一种分布式存储系统的结构示意图。如图2所示,分布式存储系统包括至少一个服务节点20、至少两个索引节点21以及至少两个存储节点22。对于每个索引节点21而言,该索引节点21可与每个服务节点20通信,还可与每个存储节点22通信。该分布式存储系统中的至少一个服务节点20可以组成服务节点集群,至少一个索引节点21可以组成索引节点集群,至少一个存储节点22可以组成存储阵列。服务节点20可以构建分布式存储系统中的桶,并在已经建立的桶中建立至少两个逻辑子桶。所述至少两个逻辑子桶的编号按照字典序顺序排列,每一逻辑子桶的名称包括该逻辑子桶的编号以及该逻辑子桶所归属的桶的名称。至少两个逻辑子桶映射到的分区不同。也就是说,对于某一逻辑子桶的对象的元数据,该对象的元数据所归属的分区与该逻辑子桶存在映射关系。该服务节点20可以根据对象的片键值确定逻辑子桶,并根据逻辑子桶与分片之间的映射关系确定出索引节点。具体的,在目标桶中的第一逻辑子桶与第一分区映射,且分布式存储系统中的目标索引节点管理第一分区的情况下,参考下述图5,服务节点21用于:建立目标桶,并根据目标桶的性能指标,确定目标桶中逻辑子桶的数量,以及确定目标子桶中逻辑子桶的起始编号(s500);接收包括目标桶的名称以及第一对象的名称的写操作(s501);根据目标桶的名称以及第一对象的名称,从目标桶中选择第一逻辑子桶(s502);根据第一逻辑子桶与第一分区的映射关系,向目标索引节点发送包括第一逻辑子桶的名称和第一对象的名称的处理请求(s503)。其中,在本发明实施例中,io操作可以是写操作或读操作。写操作可以携带待写逻辑区块地址(logicalblockaddress,lba)和待写数据,用于将待写数据写入待写lba对应的物理存储空间中。读操作可以携带待读lba,用于读取待读lba对应的物理存储空间中存储的数据(即待读数据)。索引节点21用于管理对象的元数据,能够将该对象的元数据写入其管理的某一分区中。索引节点21可以管理分布式存储系统中的至少一个分区。索引节点21在接收到服务节点20发送的包括逻辑子桶的名称和对象的名的处理请求后,在与该逻辑子桶存在映射关系的分区中处理对象的元数据。存储节点22用于存储对象的数据和/或对象的元数据,具体的,对象的数据和/或对象的元数据存储于存储节点的存储介质中。可选的,存储节点22的存储介质的物理形态可以是固态硬盘(solidstatedrives,ssd),也可以是磁盘(harddiskdrive,hdd),本发明实施例对此不作具体限定。本发明实施例中的服务节点20、索引节点21以及存储节点22均可以为物理机(如服务器),也可以为虚拟机,还可以为用于提供对象存储服务的其他任一设备,本发明实施例对此不作具体限定。示例性的,图3为本发明实施例中的分布式存储系统的另一种结构示意图。如图3所示,分布式存储系统包括n(n≥1)个服务节点、m(m≥2)个索引节点以及k(k≥2)个存储节点。其中,n个服务节点为服务节点1、服务节点2、……、服务节点n;m个索引节点为索引节点1、索引节点2、……、索引节点m;k个存储节点为存储节点1、存储节点2、……、存储节点k。每个服务节点均可建立桶,并在已经建立的桶中建立至少两个逻辑子桶,所述至少两个逻辑子桶的编号按照字典序顺序排列,每一逻辑子桶的名称包括该逻辑子桶的编号以及该逻辑子桶所归属的桶的名称。图3中,服务节点1建立有桶1,桶1中建立有5个逻辑子桶,这5个逻辑子桶的名称分别为:001-bck1、002-bck1、003-bck1、004-bck1、005-bck1。001-bck1表示该逻辑子桶为桶1中编号为001的逻辑子桶,002-bck1表示该逻辑子桶为桶1中编号为002的逻辑子桶,以此类推。每个逻辑子桶均映射到一个分区,且同一桶中的至少两个逻辑子桶映射到的分区不同。也就是说,对于某一逻辑子桶的对象的元数据,该对象的元数据所归属的分区与该逻辑子桶存在映射关系。图3中的逻辑子桶001-bck1映射到分区1,逻辑子桶003-bck1映射到分区i,也就是说,逻辑子桶001-bck1与分区1之间存在映射关系,逻辑子桶003-bck1与分区i之间存在映射关系。分布式存储系统中的每个索引节点管理至少一个分区。图3中的索引节点2管理分区1,索引节点1管理分区i,这样,在写操作的情况下,索引节点2可将逻辑子桶001-bck1中对象的元数据写入分区1,索引节点1可将逻辑子桶003-bck1中对象的元数据写入分区i。具体的,索引节点2将逻辑子桶001-bck1中对象的元数据写入与分区1对应的存储节点中,索引节点1将逻辑子桶003-bck1中对象的元数据写入与分区i对应的存储节点中。通常,在执行io操作之前,首先需要搭建分布式存储系统,具体的,根据配置文件在分布式存储系统的服务节点上部署分区、建立逻辑子桶等。其中,配置文件可以用于记录:分布式存储系统中的分区的初始数量(即初始的分区的数量),与每个逻辑子桶存在映射关系的分区、索引节点的数量等。图4为本发明实施例提供的服务节点20的结构示意图。如图4所示,本发明实施例提供的服务节点20包括:通信接口40、通信接口41和控制模块42。通信接口20和通信接口41分别与控制模块42连接。在服务节点20中,通信接口40用于与客户端通信,通信接口41用于与索引节点21通信。通信接口40和通信接口41通过通信网络通信,通信网络如以太网,无线局域网(wirelesslocalareanetwor,wlan)等。控制模块42在目标桶中建立至少两个逻辑子桶,还用于在目标桶中选择第一逻辑子桶。如图4所示,控制模块42包括处理器421和存储器422。处理器421和存储器422连接。通信接口40、通信接口41、处理器421和存储器422可以通过系统总线43连接。存储器422可以是独立存在的,通过系统总线43与处理器421相连接。存储器422也可以和处理器421集成在一起。处理器421用于目标桶中建立至少两个逻辑子桶,还用于在目标桶中选择第一逻辑子桶。存储器422用于临时存储服务节点20接收到的信息。存储器422还用于存储软件程序以及应用模块,处理器421通过运行存储在存储器422的软件程序以及应用模块,从而执行服务节点20的各种功能应用以及数据处理。存储器422主要包括存储程序区4221。其中,存储程序区4221可存储操作系统、至少一个功能所需的应用程序,比如选择第一逻辑子桶等。处理器421可以是任何计算器件,可以是通用中央处理器(cpu),微处理器,可编程控制器,特定应用集成电路(application-specificintegratedcircuit,asic),或一个或多个用于控制以上方案程序执行的集成电路。处理器421是服务节点20的控制中心。处理器421利用各种接口和线路连接服务节点20的各个部分,通过运行或执行存储在存储器422内的软件程序和/或应用模块,执行服务节点20的各种功能和处理数据,从而对服务节点20进行整体监控。在具体实现中,作为一种实施例,处理器可以包括一个或多个cpu,例如图4中的处理器包括cpu0和cpu1。存储器422可以包括易失性存储器(volatilememory),例如,随机存取存储器(random-accessmemory,ram);该存储器422也可以包括非易失性存储器(non-volatilememory),例如,只读存储器(read-onlymemory,rom),快闪存储器(flashmemory),硬盘(harddiskdrive,hdd)、固态硬盘(solid-statedrive,ssd)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由网络设备存取的任何其他介质,但不限于此。系统总线43可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。系统总线43可以分为地址总线、数据总线、控制总线等。本发明实施例中为清楚说明,在图4中将各种总线都示意为系统总线43。以下,结合图2~图4,对本发明实施例提供的分布式存储系统中处理对象的元数据的方法进行说明。为了便于说明,以分布式存储系统中的目标索引节点管理第一分区为例进行说明。如图5所示,为本发明实施例提供的一种分布式存储系统中处理对象的元数据的方法的交互示意图。其中,具体是以io操作是写操作为例进行说明的。图5所示的方法可以包括如下步骤:s500、服务节点建立目标桶,并根据目标桶的性能指标,确定目标桶中逻辑子桶的数量,以及确定目标子桶中逻辑子桶的起始编号。服务节点为分布式存储系统中至少一个服务节点中的任意一个。具体的,用户可以在具有创建目标桶的需求时,向分布式存储系统发送桶创建请求。分布式存储系统中的服务节点接收到桶创建请求后,根据目标桶的相关属性,如桶的名称、桶的大小等,创建目标桶。服务节点在创建目标桶后,根据目标桶的性能指标,确定逻辑子桶的数量。容易理解的是,目标桶中逻辑子桶的数量会直接影响到该目标桶的初始性能,因此,在用户未设置逻辑子桶的数量的情况下,目标桶中逻辑子桶的数量为默认值;在用户设置的逻辑子桶的数量太大时,目标桶中逻辑子桶的数量为分布式存储系统中的最大子桶数。服务节点不仅需要确定目标桶中逻辑子桶的数量,还需要确定目标桶中逻辑子桶的起始编号。可选的,逻辑子桶的编号按照字典序顺序排列,这样,在确定出逻辑子桶的起始编号后,服务节点即可确定出目标桶中每一逻辑子桶的编号。可选的,服务节点可以根据分布式存储系统的初始的分区的数量以及随机数,采用取模运算确定目标桶中逻辑子桶的起始编号,也可以根据分布式存储系统的初始的分区的数量以及随机数,采用简单的加减运算确定目标桶中逻辑子桶的起始编号,还可以根据分布式存储系统的初始的分区的数量以及随机数,采用乘加运算确定目标桶中逻辑子桶的起始编号,本发明实施例对此不做具体限定。示例性的,服务节点采用下述公式计算目标桶中逻辑子桶的起始编号:s0=rand()%c其中,s0表示目标桶中逻辑子桶号的起始编号,rand()表示随机数,c为分布式存储系统的初始的分区的数量。采用上述公式计算逻辑子桶的起始编号,由于计算逻辑子桶的起始编号用到了随机数,因此,目标桶中逻辑子桶的起始编号也具备随机性。在确定出目标桶中逻辑子桶的数量以及目标子桶中逻辑子桶的起始编号后,服务节点将其存储。本发明实施例中的初始的分区的数量是在新建分布式系统时,为分布式存储系统配置的分区总数。该初始的分区的数量可以为1,也可以不小于2。对于初始的分区的数量为1的情况,在运行一段时间后,分布式系统中的分区数会增多(可参考上述描述)。在这种情况下,本发明实施例提供的处理对象的元数据的方法适用于后续分区数增多的场景。对于初始的分区的数量不小于2的情况,分布式存储系统确定初始的分区的数量的方法为:根据每一服务节点的性能为每一服务节点配置一定数量的分区,这样,所有服务节点的分区数的总和为初始的分区的数量。示例性的,分布式存储系统包括16个服务节点,若每个服务节点设置有4个分区即可发挥该服务节点的所有能力,则初始的分区的数量为16×4=64个。相比于初始的分区的数量为1,初始的分区的数量不小于2有效的提高了分布式存储系统的初始性能。s501、服务节点接收写操作,该写操作用于请求写入目标桶中第一对象的元数据。该写操作包括第一对象的标识,第一对象的标识包括目标桶的名称、第一对象的名称以及第一对象的版本号。s502、服务节点根据目标桶的名称以及第一对象的名称,从目标桶中选择第一逻辑子桶。具体的,服务节点根据目标桶的名称,确定目标桶;然后,服务节点根据第一对象的名称、目标桶中逻辑子桶的数量、目标桶中逻辑子桶的起始编号以及初始的分区的数量,计算目标逻辑子桶的编号。可选的,服务节点可以采用取模运算计算目标逻辑子桶的编号,也可以采用简单的加减运算计算目标逻辑子桶的编号,还可以采用乘加运算计算目标逻辑子桶的编号,本发明实施例对此不做具体限定。示例性的,服务节点采用下述公式计算目标逻辑子桶的编号:s1=(s0+hash(a)%b)%c其中,s1表示目标逻辑子桶的编号,s0表示目标桶中逻辑子桶号的起始编号,a表示第一对象的名称,b为目标桶中逻辑子桶的数量,c为初始的分区的数量,hash(a)表示第一对象的名称的哈希值。服务节点计算出目标逻辑子桶的编号,即可确定出目标逻辑子桶。s503、服务节点向目标索引节点发送处理请求,处理请求包括目标逻辑子桶的名称和第一对象的名称,处理请求用于请求在目标逻辑子桶对应的分区中写入第一对象的元数据。服务节点在计算出目标逻辑子桶的编号后,根据该目标逻辑子桶的编号以及目标桶的名称生成目标逻辑子桶的名称。目标逻辑子桶的名称包括目标逻辑子桶的编号以及目标桶的名称。s504、目标索引节点将第一对象的元数据写入到存储节点。目标索引节点将第一对象的元数据写入存储节点的方法可以参考现有技术中索引节点将某一对象的元数据存储于存储节点的方法,本发明实施例对此不作具体限定。由于目标桶中建立有至少两个逻辑子桶,所述至少两个逻辑子桶分别映射到不同的分区,因此,同一桶中不同对象的元数据可以散列到不同的逻辑子桶中,进而写入不同的分区中,有效的提高了对象的元数据分布的均匀性。对于io操作是读操作的情况,处理对象的元数据的方法的流程与图4示出的流程类似,不同的是,目标索引节点需要从存储节点中读取出携带有目标逻辑子桶的名称的元数据。后续,目标索引节点向服务节点发送读取出的携带有目标逻辑子桶的名称的元数据,进一步地,服务节点去除目标逻辑子桶的名称,并将去除目标逻辑子桶的名称的元数据进行排序,这样,服务节点即可获取到第一对象的所有元数据。综上所述,本发明实施例提供的分布式存储系统中处理对象元数据方法,通过在分布式存储系统的桶中建立至少两个逻辑子桶,将同一个桶中的对象的元数据散列到不同的逻辑子桶中,每个逻辑子桶再映射到不同的分区,以达到同一桶中对象的元数据归属于不同分区的效果,有效的提高了对象的元数据分布的均匀性。本发明实施例可以根据上述方法示例对服务节点进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在采用对应各个功能划分各个功能模块的情况下,图6示出上述实施例中所涉及的服务节点的一种可能的结构示意图。如图6所示,服务节点6包括接收单元60、处理单元61和发送单元62。接收单元60用于支持该服务节点执行上述实施例中的s501等,和/或用于本文所描述的技术的其它过程。处理单元61用于支持该服务节点执行上述实施例中的s500、s502等,和/或用于本文所描述的技术的其它过程。发送单元62用于支持该服务节点执行上述实施例中的s503等,和/或用于本文所描述的技术的其它过程。当然,本发明实施例提供的服务节点包括但不限于上述模块,例如服务节点还可以包括存储单元63。存储单元63可以用于存储该服务节点的程序代码。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。在采用集成的单元的情况下,本发明实施例提供的服务节点的结构示意图如图7所示。在图7中,服务节点7包括:处理模块70和通信模块71。处理模块70用于对服务节点的动作进行控制管理,例如,执行上述处理单元61执行的步骤,和/或用于执行本文所描述的技术的其它过程。通信模块71用于支持服务节点与其他设备之间的交互,例如,执行上述接收单元60和发送单元62执行的步骤。如图7所示,服务节点7还可以包括存储模块72,存储模块72用于存储服务节点7的程序代码和数据,例如存储上述存储单元63所保存的内容。其中,处理模块70与上述图4中的处理器421对应,通信模块71与上述图4中的通信接口40和通信接口41对应,存储模块与上述图4中的存储器422对应。其中,上述方法实施例涉及的各场景的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。上述服务节点6和服务节点7均可执行上述图5所示的分布式存储系统中处理对象的元数据的方法。本发明实施例中服务节点以及索引节点所执行的功能也可以由分布式对象存储系统中其他节点来执行。具体实现可根据分布式对象存储系统的需求来确定。本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令,当服务节点的处理器在执行该计算机指令时,该服务节点执行如图5所示的分布式存储系统中处理对象的元数据的方法。本发明实施例还提供一种计算机程序产品,该计算机程序产品包括计算机指令,当服务节点的处理器执行该计算机指令时,使得服务节点实施执行如图5所示的分布式存储系统中处理对象的元数据的方法。在上述实施例中,可以全部或部分的通过软件,硬件,固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式出现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl)、以太网)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质,(例如,软盘,硬盘、磁带)、光介质(例如,dvd)或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。在本发明实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本发明实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1