分布式文件系统中的去重复的制作方法

文档序号:15686827发布日期:2018-10-16 21:08阅读:188来源:国知局



背景技术:

计算机网络可能包括被用于在网络上代表计算机来存储和检索数据的存储系统。在一些存储系统中,特别是在大规模的存储系统(例如,那些采用分布式分段的文件系统)中,常见的是一定的数据项被存储在存储系统中的多个地方。例如,当两个或更多个文件具有一些共同的数据时,或者特定的数据集在给定的文件内出现在多个地方的情况下,可能发生数据重复。在另一例子中,如果存储系统被用于备份来自具有共同的文件的若干个计算机的数据,则可能发生数据重复。因此,存储系统可能包括“去重复”数据的能力,该能力是识别并移除重复数据的能力。

附图说明

关于下面的图来描述本发明的一些实施例:

图1是根据示例实现的文件系统的框图;

图2是示出根据示例实现的在分布式文件系统中去重复的方法的流程图;

图3是示出根据示例实现的在索引节点当中分配对键类别的控制的方法的流程图;

图4是描绘根据示例实现的索引操作的框图;

图5是描绘根据示例实现的代表性索引操作的框图;

图6是描绘根据示例实现的在分布式文件系统中的节点的框图;

图7是描绘根据另一示例实现的在分布式文件系统中的节点的框图;以及

图8是示出根据示例实现的确定键类别分布的方法的流程图。

具体实施方式

描述了分布式文件系统中的去重复。在实施例中,根据潜在键集来确定键类别。潜在键是可被用于代表文件系统中的文件内容的键。键类别的控制在文件系统的索引节点当中加以分配。文件系统中的节点对文件内容的数据块(例如,数据内容的部分,如以下描述的那样)去重复。在去重复期间,节点生成根据数据块计算的键。基于键和由索引节点控制的键类别之间的关系在索引节点当中分布键。以下通过参照若干示例描述各种实施例。

分布式文件系统可能是可伸缩的,在一些情况下大规模地可伸缩(例如,数百个节点和存储段)。在具有由大数量的节点控制的大数量的存储段的环境中为了去重复的目的保持对文件内容的各个要素的追踪可能是有挑战性的。进一步地,分布式文件系统被设计成能够通过按要求增长存储和处理能力来线性地按比例增加。在此描述的示例文件系统提供能够随同分布式文件系统一起伸缩的去重复能力。对已有的文件内容项(例如根据数据块计算的键)的知识被分散并被分布在多个索引节点上,从而允许被分布的知识利用附加的资源随同文件系统的其它部分一起增长。

在分布式文件系统中,不同的数据块的数量和相关的键的数量可能非常大。系统中的多个节点持续地生成不得不被去重复的新的文件数据。在在此描述的示例实现中,能够代表文件内容的数据块的完整的潜在键集被确定性地划分成键或“键类别”的子集。键类别的控制被分布在与执行去重复的节点通信的多个索引节点上。随着根据数据块计算的特有键的数量增加,并且/或者随着执行去重复的节点的数量增加,索引节点的数量可能增加并且键类别的控制可能被重分布以平衡索引负载。可以参照以下的图来理解示例实现。

图1是根据示例实现的文件系统100的框图。文件系统100包括多个节点。这些节点可能包括入口点节点104,索引节点106,目的节点110和存储节点112。这些节点还可能包括至少一个管理节点(“一个或多个管理节点130”)。目的节点110和存储节点112形成存储子系统108。存储节点112能够被逻辑地划分成被称为“存储段113”的部分。为了清楚的目的,通过示例,文件系统的节点被以复数来描述以代表实际的分布式分段的文件系统。在一般的示例实现中,文件系统100的一些节点可能是单个的,诸如至少一个入口点节点,至少一个目标节点,和/或至少一个存储节点。能够使用至少一个计算机系统来实现文件系统100中的节点。单个计算机系统能够实现所有的节点,或者能够使用多个计算机系统实现节点。

文件系统100能够服务客户机102。客户机102是文件数据的源和消费者。文件数据可能包括文件、数据流以及能够被存储在文件系统100中的相似类型的数据项。客户机102可能是能够成为文件数据的源和消费文件数据的任意类型的装置(例如,计算机)。客户机102通过网络105与文件系统100通信。客户机102和文件系统100能够使用各种协议—诸如网络文件系统(nfs)、服务器消息块(smb)、超文本传输协议(http)、文件传输协议(ftp)或相似类型的协议—通过网络105交换数据。为了存储文件数据,客户机102将文件数据发送至文件系统100。

入口点节点104管理在文件系统100中的文件数据的存储和去重复。入口点节点104为文件数据提供进入文件系统100的“入口”。入口点节点104在此一般被称为去重复或去重复节点。能够使用至少一个计算机(例如,一个或多个服务器)来实现入口点节点104。入口点节点104根据文件数据确定数据块。“数据块”是文件数据的一部分(例如,文件或文件流的一部分)。入口点节点104能够使用各种技术将文件数据划分成数据块。在示例中,入口点节点104能够将文件数据中的每n个字节确定为数据块。在另一示例中,数据块可能为不同的大小。入口点节点104能够使用算法来在“自然”边界上划分文件数据以形成数据块(例如,使用rabin指纹方案来确定大小可变的数据块)。入口点节点104还生成根据数据块计算的键。“键”是代表数据块的数据项(例如,用于数据块的指纹)。入口点节点104能够使用数学函数生成用于数据块的键。在示例中,使用哈希函数—诸如md5、sha-1、sha-256、sha-512或相似类型的函数—生成键。

为了执行去重复,入口点节点104获取数据块中的哪些被重复(例如,已经由存储子系统108存储)的知识。为了获取这一知识,入口点节点104与索引节点106通信。入口点节点104向索引节点106发送索引请求。索引请求包括代表数据块的键。索引节点106利用索引答复响应入口点节点104。索引答复能够指示数据块中的哪些重复,数据块中的哪些还没有被存储在存储子系统108中,以及/或者数据块中的哪些不应当被去重复(不去重复的原因在以下讨论)。基于索引答复,入口点节点104将数据块和相关的文件元数据中的一些发送至存储子系统108以进行存储。对于重复的数据块,入口点节点104能够仅将文件元数据发送至存储子系统108(例如,参照已有的数据块)。在一些示例中,入口点节点104能够在不执行去重复的情况下将数据块和相关的文件元数据发送至存储子系统108。入口点节点104能够基于来自索引节点106的索引答复或者基于由入口点节点本身确定的信息,决定不对一些数据块去重复。在示例中,如果两个数据块的键是用于去重复的候选数据块,则入口点节点104能够执行每个数据块的完整的数据比较以确认数据块实际上是重复的。

索引节点106基于键来控制存储在存储子系统108中的数据块的索引。能够使用至少一个计算机(例如,一个或多个服务器)来实现索引节点106。索引节点106维持存储基于键的关系的键数据库。键数据库的至少一部分能够由存储子系统108存储。因此,索引节点106能够与存储子系统108通信。在示例中,键数据库的一部分还被本地存储在索引节点106上(以下示出的示例)。索引节点106从入口点节点104接收索引请求。索引节点106从索引请求获取针对被去重复的数据块计算的键。索引节点106利用所计算的键查询键数据库,并根据结果生成索引答复。

目的节点110管理存储节点112。能够使用至少一个计算机(例如,一个或多个服务器)实现目的节点110。能够使用至少一个非易失性大容量存储装置—诸如磁盘和固态装置等—实现存储节点112。能够将多组大容量存储装置组织成廉价盘冗余阵列(raid)集。存储段113是在存储节点112内的逻辑存储段。能够使用多个大容量存储装置(例如,以用于冗余的raid配置)实现存储段113中的至少一个。

存储段113存储数据块文件114、元数据文件116和索引文件118。特定的存储段能够存储数据块文件、元数据文件或索引文件或它们的任意的组合。数据块文件存储文件数据的数据块。元数据文件存储文件元数据。文件元数据可能包括至数据块的指针,以及其它属性(例如所有权、许可等)。索引文件118能够存储由索引节点106管理的键数据库的至少一部分(例如,键数据库的在磁盘上的部分)。

目的节点110与入口点节点104和索引节点106通信。目的节点110针对数据块文件114、元数据文件116和索引文件118在存储段113中供应和去供应存储。目的节点110通过链接120与存储节点112通信。链接120可能包括直接连接(例如,直接附接的存储(das))或经诸如光纤通道(fc)、因特网小型计算机简单接口(iscsi)或串行附接的scsi(sas)等的互联的连接。链接120可能包括直接连接和经互联的连接的组合。

在示例中,能够使用通过网络109通信的不同计算机来实现入口点节点104、索引节点106和目的节点110中的至少一部分。节点能够使用各种协议通过链接109通信。在示例中,在节点上的处理能够使用远程过程调用(rpc)交换信息。在示例中,一些节点能够在相同的计算机上加以实现(例如,入口点节点和目的节点)。在这种情况下,节点能够使用计算机内的直接过程接口通过链路109通信。

如在上面注意到的那样,入口点节点104生成根据文件内容的数据块计算的键。用于生成键的函数应当具有原像抗性、第二原像抗性以及碰撞抗性。能够使用产生具有特定比特数量的消息摘要的哈希函数(例如,sha-1算法产生160比特的消息)来生成键。由此,存在能够被针对数据块来计算的潜在键的域(例如,sha-1包括2^160个可能的键)。在示例中,潜在键的域被划分成键的子集或类别(“键类别”)。能够通过各种方法将可能键集划分成确定性的子集。例如,假定根据文件内容的键生成创建值的均匀分布,则能够通过来自消息中被指定的位置的特定数量(n个比特)的比特(例如n个最高有效比特,n个最低有效比特,在消息的中间的某处的n个比特(无论连续与否)等)来识别键类别。在这样的方案中,可能键集被划分成2^n个键类别。

在另一示例中,能够通过识别更有可能根据文件数据生成的键来生成键类别(例如,有可能的键类别)。能够使用静态分析、启发分析或者它们的组合来生成键类别。静态分析可能包括分析与已知的操作系统和应用等有关的文件数据以识别数据块和更有可能出现的后果键(例如,根据所期待的文件内容计算的所期待的键)。能够随着时间的经过基于所计算的针对文件内容的数据块的键来执行启发分析以识别在去重复期间最有可能出现的键类别。示例启发可能包括识别用于文件数据中熟知的数据模式的键。在另一示例中,能够基于被管理的数据块的一些帕雷托(pareto)生成键类别(例如,键类别可以被形成以使得如果键属于键类别的(100-k)%则为k%,其中k在50和100之间)。一般而言,键域可以被划分成一定数量的更有可能的键类别以及至少一个不太可能的类别。在这种方案中,每个键类别可以不代表相同数量的键(例如,可能存在一定数量的更有可能的键类别并且然后存在用于其余键的单个更大的键类别)。

在又一示例中,键类别可以不整体地代表潜在键的整个域。在这种情况下,键类别可以是“代表性的键类别”,因为并非域中的每个键将落入到类别中。例如,如果能够使用n比特识别器将潜在键的域划分成2^n个键类别,则这样的键类别的仅仅一部分可以被选择为代表性键类别。可以执行诸如上面描述的那样的启发分析以确定更有可能的键类别,而不由类别来代表更不太可能的键。例如,如果帕雷托分析指示键的80%属于键类别的20%,则键类别的仅仅那20%能够被用作为代表性的。

一般而言,根据形成“键类别配置”的潜在键集来确定键类别。不考虑键类别配置,键类别的控制在索引节点106当中加以分配(“键类别分布”)。索引节点106中的每一个能够控制键类别中的至少一个。入口点节点104维持指示键类别控制在索引节点106当中的分布的数据(“键类别分布数据”)。入口点节点104基于键和根据键类别分布数据确定的键类别之间的关系将索引请求分布在索引节点106当中。入口点节点104基于使索引节点106与键类别关联的键类别分布数据来识别索引节点106中的哪些要接收一定的键。

在示例中,一个或多个管理节点130在文件系统100中控制键类别配置和键类别分布。能够使用至少一个计算机(例如,一个或多个服务器)实现一个或多个管理节点130。用户能够采用一个或多个管理节点130来建立键类别配置和键类别分布。一个或多个管理节点130能够将键类别分布通知给索引节点106和/或入口点节点104。在示例中,一个或多个管理节点130能够从文件系统中的节点(例如,入口点节点104、索引节点106和/或目的节点110)收集启发数据。一个或多个管理节点130能够随着时间的经过使用启发数据来生成至少一个键类别配置(例如,键类别配置能够基于启发数据随着时间的经过而改变)。能够使用上面描述的一个或多个启发分析来生成启发数据。

图2是示出根据示例实现的在分布式文件系统中去重复的方法200的流程图。能够由文件系统中的节点来执行方法200。方法200在步骤202处开始,其中根据潜在键集确定键类别。潜在键被用于代表由文件系统存储的文件内容。在步骤204处,键类别的控制在文件系统的索引节点当中加以分配。在步骤206处,在对文件内容的数据块去重复期间,文件系统中的节点生成根据数据块计算的键。在步骤208处,基于键和由索引节点控制的键类别之间的关系在索引节点当中分布键。

返回到图1,通过键类别的控制可能因各种原因—诸如负载平衡、硬件失效和维护等—而被从一个索引节点传递到另一个。如果通过键类别的控制被从一个索引节点移动到另一个,则索引节点106能够向入口点节点104提供键类别分布的最新改变,并且入口点节点104能够更新相应的键类别分布数据。索引节点106或其一部分能够将键类别分布信息广播给入口点节点104,或者能够使用传播方法,在该传播方法中,一些入口点节点104能够从一些索引节点106接收键类别分布信息,然后键类别分布信息能够被传播至其它入口点节点等等。在入口点节点104当中传播键类别分布信息的处理可能花费一些时间段。因此,跨入口点节点104的键类别分布数据可能是不同的。如果在这样的时间段期间入口点节点在其键类别分布数据上具有陈旧的关系,则该入口点节点可能向不正确的索引节点发送索引请求。当接收到不正确的索引请求时,索引节点106可能用指示不正确的键至键类别关系的索引答复进行响应。在这样的情况下,入口点节点104能够尝试更新相应的键类别分布数据或发送相对应的一个或多个数据块以进行存储而不去重复。

图3是示出根据示例实现的在索引节点当中分配键类别的控制的方法300的流程图。能够由文件系统中的节点来执行方法300。方法300能够被作为图2中的方法200中的步骤204的一部分来执行以在索引节点当中分配键类别的控制。方法300在步骤302处开始,其中基于键类别配置在索引节点当中分布键类别的控制。在步骤304处,键类别分布被提供给文件系统中的去重复节点(例如,入口点节点104)。在步骤306处,监测键类别分布的改变。例如,能够由于负载平衡、硬件失效和维护等在索引节点当中移动一个或多个键类别的控制。在另一示例中,键类别配置能够被改变(例如,能够创建更多的键类别,或者能够移除一些键类别)。在步骤308处,作出键类别分布是否已改变的确定。如果没改变,则方法300返回到步骤306。如果有改变,则方法300行进至步骤310。在步骤310处,基于键类别配置将键类别的控制重分布在索引节点当中。如在步骤306中注意到的那样,索引节点的配置和/或键类别配置可能已经改变。在步骤312处,新的键类别分布被提供给文件系统中的去重复节点(例如,入口点节点104)。方法300然后返回步骤306。

图8是示出根据示例实现的确定键类别配置的方法800的流程图。能够由文件系统中的节点来执行方法800。方法800能够被作为图2中的方法200中的步骤202的一部分来执行以根据潜在键确定键类别。方法800在步骤802处开始,其中执行静态分析和/或启发分析以识别有可能的键类别。能够对所期待的文件内容执行静态分析以生成所期待的键。能够对被去重复的数据块和相对应的计算的键执行启发分析。在步骤804处,从有可能的键类别中选择键类别以形成键类别配置。有可能的键类别的全部或一部分能够被用于形成键类别配置。

返回到图1,在示例键类别配置中,键类别整体地覆盖潜在键的整个域以使得由入口点服务器104生成的每个键落入到被指派给索引节点106中的一个的键类别中。随着入口点节点104生成键,键被匹配到键类别并基于键类别被发送到索引节点106中适当的索引节点。

图4是描绘根据示例实现的索引操作的框图。入口点节点104-1与索引节点106-1通信。索引节点106-1与存储子系统108通信。存储子系统108存储键数据库402(例如,在索引文件118中)。入口点节点104-1向索引节点106-1发送索引请求。索引请求404可能包括根据文件内容的一个或多个数据块计算的一个或多个键406,以及所述一个或多个数据块在存储子系统108内的建议的位置408(例如,存储段113中的哪些)。一个或多个键406在由索引节点106-1管理的键类别之内。能够在任意的入口点节点104和索引节点106之间执行目前的索引操作。

索引节点106-1利用来自索引请求的404的一个或多个键查询键数据库402,并获取查询结果。对于不在键数据库402中的一个或多个键406,索引节点106-1能够将这样的一个或多个键随同相应的建议的位置408一起添加到键数据库402。能够在键数据库402中将一个或多个键和相应的建议的位置标记为是临时的,直到相关的数据块被实际地存储在建议的位置中为止。对于键数据库402中的一个或多个键406中的每一个,查询结果可能包括键记录410。键记录410可能包括键值412,位置414和参照计数416。参照计数416指示与键值412相关的特定数据块被参照的次数。位置414指示与键值412相关的数据块在存储子系统108中被存储在哪里。对于键数据库402中的每个键,索引节点106-1能够更新参照计数416并在索引答复418中将位置414返回到入口点节点104-1。

返回到图1,在另一示例键类别配置中,键类别不整体地覆盖潜在键的整个域。键类别配置可能包括包括有作为代表性键的键类别。代表性索引假定仅熟知的键类别是有效的。仅这些有效的键类别被索引节点106控制。随着入口点节点104生成键,键被匹配到键类别。计算的键中的一些是具有匹配键类别的代表性键。其它的计算的键是不与键类别配置中的任何键类别匹配的非代表性键。入口点节点104将计算的键分组成键组。键组中的每一个包括代表性键。键组中的每一个还可以包括至少一个非代表性键。入口点节点104基于键组中代表性键和键类别之间的关系将键组发送到索引节点106。

图5是描绘根据示例实现的代表性索引操作的框图。入口点节点104-2与索引节点106-2通信。索引节点106-2与存储子系统108通信。存储子系统108存储键数据库502(例如,在索引文件118中)。入口点节点104-2向索引节点106-2发送索引请求。索引请求504可能包括键组505和键组中键的数量的指示(num506)。键组505可能包括代表性键508和至少一个非代表性键512。键组505还可能包括针对与代表性键508相关的数据块的建议的位置(loc510),以及针对与非代表性键512相关的数据块的建议的位置(loc514)。代表性键508在由索引节点106-2管理的键类别之内。能够在任意的入口点节点104和索引节点106之间执行目前的索引操作。

在示例中,索引节点106-2能够维持在由索引节点106-2管理的一个或多个键类别之内的已知的代表性键的本地数据库516(已知的代表性键是被存储在键数据库502中的代表性键)。索引节点106-1利用代表性键508查询本地数据库516并获取查询结果。如果代表性键508在本地数据库516中,则索引节点106-2利用代表性键508查询键数据库502以获取查询结果。查询结果可能包括至少一个代表性键记录518。一个或多个代表性键记录518中的每一个可能包括参照计数520和键组522。参照计数520指示键组522已经被检测到多少次。键组522包括代表性键值(rkv524)和至少一个非代表性键值(nrkv526)。键组522还包括指示与代表性键值524相关的数据块被存储在哪里的位置528,以及指示与一个或多个非代表性键值526相关的一个或多个数据块被存储在哪里的一个或多个位置530。

索引节点106-2尝试将在索引请求504中的键组505与在一个或多个代表性键记录518中的一个中的键组522匹配。如果找到匹配,则索引节点106-2更新相对应的参照计数520并在索引答复532中将位置528和一个或多个位置530返回至入口点节点104-2。如果没有找到匹配,则索引节点106-2尝试添加具有键组505的代表性键记录518。在一些示例中,键数据库502可以对能够针对每个已知的代表性键被存储的代表性键记录的数量有限制。如果新的代表性键记录518不能被添加到键数据库502,则索引节点106-2能够在索引答复532中指示数据块应当被存储而不进行去重复。如果新的代表性键记录518能够被添加到键数据库502,则参照计数520被递增并且能够在键数据库502中将键组505和相应的建议的位置528和530标记为是临时的,直到相关的数据块被实际地存储在建议的位置中为止。

如果代表性键508不在本地数据库516中,则索引节点106-2能够将具有键组505的代表性键记录518添加到键数据库502。索引节点106-2还利用代表性键508更新本地数据库516。能够在键数据库502中将键组505和相应的建议的位置528和530标记为是临时的,直到相关的数据块被实际地存储在建议的位置中为止。

返回到图1,如果采用代表性索引,则索引节点106能够维持代表性键和非代表性键的若干可能的组合。给定特定的键组,索引节点106不检测之前是否已经与另一代表性键相组合地看到相同的非代表性键。因此,在存储子系统108中将存在一些数据块重复。能够基于键类别配置来控制重复的量。使潜在键的域的键类别配置覆盖最大化来最小化在存储系统108中的数据块重复。然而,潜在键的域的更多的键类别配置覆盖导致更多的所要求的索引节点资源。能够选择代表性索引来使偶然的数据块重复相对于索引节点容量平衡。

在一些示例中,入口点节点104能够不执行索引操作并且由此不进行去重复地选择一些要被存储在存储子系统108中的数据块(“时机性去重复”)。这能够将去重复处理从写性能路径移除并防止索引操作消极地影响写效率。入口点节点104能够使用基于各种因素的策略实现时机性去重复。在一个示例中,入口点节点104能够对来自索引节点106的索引答复的响应性对比于存储数据块的存储子系统108的响应性进行启发分析。在另一示例中,入口点节点104能够追踪新看到的数据块对已经知道的数据块的比率。

例如,一些对于去重复最有吸引力的情况是克隆虚拟机。这样的克隆最初创建完全的数据重复。随后,随着虚拟机被积极地使用,看到可以被去重复的文件数据的可能性较低。入口点节点104能够使用时机性去重复来学习、自调节以及消除去重复尝试以及相关的害处。

如在上面注意到的那样,能够经多个存储段113分布数据块。这允许有足够的吞吐量用于在存储子系统108中放置新数据。入口点节点104能够决定存储段113中的哪些应当被用于存储数据块。在一些示例中,包括在窄的时间窗内被写到不同文件的数据的文件数据能够被放置到不同的存储段113中。在一些示例中,入口点节点104能够跨若干个存储段113分布属于相同文件或流的数据块。因此,入口点节点104能够通过跨不同的存储段113引导数据块的存储来实现各种raid方案。目的节点110能够向入口点节点104提供原子级地预分派空间并且增加数据块文件的大小的服务。

在一些示例中,目的节点110能够实现各种维持被去重复的环境的要素的工具150。工具能够随存储段113的数量和键类别配置中键类别的数量伸缩。例如,由入口点节点104执行的去重复处理能够被称为“直列式去重复”,因为随着文件数据被接收来执行去重复。目的节点110可能包括扫描存储节点112并对所选择的文件执行进一步的去重复的离线去重复工具。离线去重复工具还能够对经入口点节点104和/或索引节点106的决定而留下未进行去重复的数据块进行重评估和去重复。工具150还可能包括dcopy和dcmp用途以在不移动或读取数据的情况下有效率地拷贝和比较被去重复的文件。工具150可能包括用于创建数据块文件、索引文件和/或元数据文件的额外的复制件以增加其可用性和可存取性的复制工具。工具150可能包括能够将数据块文件、索引文件和元数据文件移动到被指定的存储段集的分层迁移工具。例如,索引文件能够被移动到使用固态大容量存储装置实现的存储段以更快地存取。在一定的时间段内没有被存取的数据块文件可能被移动到使用消旋盘装置实现的存储段。工具150可能包括移除空数据块文件的垃圾收集器。

图6是描绘在根据示例实现的分布式分段的文件系统中的节点600的框图。节点600能够被用于执行文件数据的去重复。例如,节点600能够实现图1的文件系统100中的入口点节点104。节点600包括处理器602、io接口606和存储器608。节点600还可能包括支持电路604和一个或多个硬件外围设备610。处理器602包括任意类型的微处理器、微控制器、微计算机或领域中已知的相似类型的计算装置。用于处理器602的支持电路604可能包括缓存、电源、时钟电路、数据寄存器和io电路等。io接口606能够被直接耦合至存储器608,或者经处理器602被耦合至存储器608。存储器608可能包括随机存取存储器、只读存储器、缓存存储器或磁读/写存储器等或者这样的存储器装置的任意组合。一个或多个硬件外围设备610可能包括代表处理器602执行功能的各种硬件电路。

io接口606接收文件数据,与存储子系统通信并且与索引节点通信。存储器608存储键类别分布数据612。键类别分布数据612包括索引节点和键类别之间的关系。键类别是根据被用于代表文件内容的潜在键集确定的。

在示例中,处理器602实现去重复器614以提供以下描述的功能。处理器602还能够实现分析器615。存储器608能够存储由处理器602执行以实现去重复器614和/或分析器615的代码616。在一些示例中,去重复器614和/或分析器615能够被实现为在一个或多个硬件外围设备610上的专用电路。例如,一个或多个硬件外围设备610可能包括诸如现场可编程门阵列(fpga)的可编程逻辑装置(pld),其能够被编程以实现去重复器614和/或分析器615的功能。

去重复器614从io接口606接收文件数据。去重复器614根据文件数据确定数据块,并生成根据数据块计算的键。去重复器614基于键类别分布数据612(经io接口606)将键分布在索引节点当中。例如,去重复器614可能将键匹配到键类别,并且然后识别根据键类别分布数据612控制键类别的索引节点。去重复器614基于来自索引节点的响应对用于在存储子系统中存储的数据块去重复。例如索引节点能够利用数据块中的哪些是已经知道的以及哪些是不知道的并且应当被存储来进行响应。去重复器614能够基于来自索引节点的响应选择性地将数据块发送到存储子系统。

在一些示例中,去重复器614把键分组成键组。键组的每一个包括作为键类别的成员的代表性键。一个或多个键组还可能包括并非是键类别的成员的至少一个非代表性键。去重复器614能够基于键组的代表性键和键类别分布数据612将键组发送至索引节点。例如,去重复器614能够将代表性键匹配到键类别,并且然后识别根据键类别分布数据612控制键类别的索引节点。

在一些示例中,去重复器614实现时机性去重复。去重复器614可能从文件数据选择一定的数据块并将这样的数据块发送到存储子系统以便被存储而不进行去重复。在上面描述了时机性去重复的方面。

分析器615能够收集关于根据被去重复的数据块计算的键的统计量。分析器615能够执行统计量的启发分析以生成启发数据。启发数据能够被用于识别可能形成键类别配置的有可能的键类别。已经在上面描述了各种启发分析。分析器615能够处理启发数据本身。在另一示例中,分析器615能够将启发数据发送至能够使用所述启发数据以确定键类别配置的其它一个或多个节点(例如,在图1中示出的一个或多个管理节点130)。

图7是描绘在根据示例实现的分布式分段的文件系统中的节点700的框图。节点700能够被用于执行用于对文件数据去重复的索引服务。例如,节点700能够实现图1的文件系统100中的索引节点106。节点700包括处理器702和io接口706。节点700还可能包括存储器708、支持电路704和一个或多个硬件外围设备710。处理器702包括任意类型的微处理器、微控制器、微计算机或本领域中已知的相似类型的计算装置。用于处理器702的支持电路704可能包括缓存、电源、时钟电路、数据寄存器和io电路等。io接口706能够被直接耦合至存储器708,或者经处理器702被耦合至存储器708。存储器708可能包括随机存取存储器、只读存储器、缓存存储器或磁读/写存储器等或者这样的存储器装置的任意组合。一个或多个硬件外围设备710可能包括代表处理器702执行功能的各种硬件电路。

io接口706与存储键数据库的至少一部分的存储子系统通信。io接口706从去重复节点接收索引请求。索引请求可能包括用于被去重复的数据块的计算的键。计算的键是被指派给节点的键类别的成员。多个键类别中的一个中的键类别是根据潜在键集确定的。

在示例中,处理器702实现索引器712以提供以下描述的功能。存储器708能够存储由处理器702执行以实现索引器712的代码714。在一些示例中,索引器712能够被实现为一个或多个硬件外围设备710上的专用电路。例如,一个或多个硬件外围设备710可能包括诸如现场可编程门阵列(fpga)的可编程逻辑装置(pld),其能够被编程以实现索引器712的功能。

索引器712从io接口706接收索引请求并获取计算的键。索引器712查询键数据库以获取查询结果。查询结果可能包括例如,指示计算的键是否已知的信息。索引器712基于查询结果(经io接口706)将响应发送至去重复节点以提供对用于在存储系统中存储的数据块的去重复。

在示例中,在索引请求中的计算的键能够被分组成键组。键组中的每一个包括作为被指派给节点的键类别的成员的代表性键。一个或多个键组还可能包括并非是任何键类别的一部分的至少一个非代表性键。索引器712能够基于键组的代表性键从键数据库获取键记录。在示例中,键记录中的每一个可能包括用于其中的每个代表性键和非代表性键的值,以及针对与其中的每个代表性键和非代表性键相关的数据块在存储子系统中的位置。在示例中,存储子系统存储键数据库的第一部分,并且存储器708存储键数据库的第二部分(“本地数据库716”)。本地数据库716包括用于由存储子系统存储的数据块的代表性键。

已经描述了分布式文件系统中的去重复。对已有的文件内容项(例如根据数据块计算的键)的知识被分散并被分布在多个索引节点上,从而允许被分布的知识利用附加的资源随同文件系统的其它部分一起增长。在示例实现中,能够代表文件内容的数据块的完整的潜在键集被划分成键类别。键类别能够覆盖潜在键的域的全部或者仅覆盖这样的键域的一部分。键类别的控制被分布在与去重复节点通信的多个索引节点上。随着根据数据块计算的特有键的数量增加,并且/或者随着执行去重复的节点的数量增加,索引节点的数量能够增加并且键类别的控制被重分布以平衡索引负载。去重复节点能够通过选择性地存储一些文件内容而不进行去重复来采用时机性去重复以改善写性能。

上面描述的方法可以在用于配置计算系统以执行所述方法的计算机可读介质中体现。能够跨多个物理装置(例如,计算机)来分布计算机可读介质。计算机可读介质可以包括例如但不限于任意数量的以下装置:包括盘和带存储介质的磁存储介质;诸如紧凑盘介质(例如,cd-rom,cd-r等)和数字视频盘存储介质的光存储介质;全息存储器;包括基于半导体的存储器单元的非易失性存储器存储介质,诸如闪速存储器,eeprom,eprom,rom;铁磁数字存储器;包括寄存器、缓冲器或缓存、主存储器、ram的易失性存储介质等,仅仅举了些例子。其它新的和各种类型的计算机可读介质可以被用于存储在此讨论的机器可读代码。

在前面的描述中,阐述了许多的细节以提供本发明的理解。然而,本领域技术人员将理解,可以在没有这些细节的情况下实施本发明。尽管本发明是关于有限数量的实施例公开的,但本领域技术人员将从中了解许多的修改和变形。意图由随附的权利要求覆盖落入到本发明的真实精神和范围内的这样的修改和变形。

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