组织具有多个计算机的计算系统、在计算机之中分配计算任务、以及在计算机系统中维护数据完整性与冗余的系统和方法与流程

文档序号:11935161阅读:304来源:国知局
组织具有多个计算机的计算系统、在计算机之中分配计算任务、以及在计算机系统中维护数据完整性与冗余的系统和方法与流程

本申请要求递交于2015年4月20日、名为“SYSTEMS AND METHODS TO DISTRIBUTE COMPUTING TASK AMONG MULTIPLE COMPUTERS(用于在多个计算机之中分配计算任务的系统和方法)”的美国专利申请序列号为14/691,301,递交于2015年4月20日、名为“SYSTEMS AND METHODS TO ORGANIZE A COMPUTING SYSTEM HAVING MULTIPLE COMPUTERS(用于组织具有多个计算机的计算系统的系统和方法)”的美国申请序列号为14/691,316,递交于2015年4月20日、名为“SYSTEMS AND METHOD TO MAINTAIN DATA INTEGRITY AND REDUNDANCY IN A COMPUTING SYSTEM HAVING MULTIPLE COMPUTERS(在具有多个计算机的计算机系统中维护数据完整性与冗余的系统和方法)”的美国专利申请序列号为14/691,324的优先权;以及递交于2014年8月29日、名为“SYSTEMS AND METHODS TO CONFIGURE DATA STORAGE AND PROCESSING WITH REDUNDANCY AND EFFICIENCY(用于配置数据存储和处理冗余和效率的系统和方法)”的美国临时专利申请序列号为62/044,140的优先权,上述申请通过引用全部结合于此。

技术领域

在本公开中所表示的至少一些的实施例总体上涉及分布式计算,具体但不局限于用冗余进行的数据存储。



背景技术:

目前的存储网络方案(例如,企业级的方案)主要基于使用由少数CPU/核来控制一些盘的阵列的服务器。基于在盘阵列中分配数据/信息的片段或块,实现冗余和错误更正的策略(例如,廉价硬盘的冗余阵列或独立硬盘的冗余阵列(RAID))。CPU服务在各种通信协议中所做出的输入/输出(I/O)请求,诸如http、ftp、samba等等。

在这种方案中,因为通常在硬盘方面具有的瓶颈,所以通过添加CPU来加速服务器的执行并不普遍。在阵列中添加硬盘,要求阵列的重新形成。添加CPU和添加硬盘的两种操作都可能要求该服务的临时暂停。维护操作(诸如在阵列中放置硬盘)也可能引起服务的暂停或质量下降。

美国专利申请公布序列号2013/0346794公开了一种系统,用于当在存储设备组中的存储设备发生故障时恢复冗余。这种系统用专用备件来增加冗余和/或更正问题,并且任何存储位置都是使用专用备件的存储设备组的一部分。

KR20130133264公开了一种实现冗余的系统,其中每一个存储单元被配置以具有相应的单元以反映正在存储的数据。

CN103297547公开了一种构建云存储辅助系统的方法,其中在P2P存储中的数据有效性由用马尔科夫模型执行的数据动态建模所预测,并且因此,由于数据被云读取的事实,带宽成本被有效地降低。

美国专利申请公布序列号2012/0054280公开了相关联的用户之间共享云数据资源。

CN102984280公开了社交云存储网络应用,该应用使用主逻辑节点、多个连续节点、以及多个数据节点。

TW201234809公开了一种方法,基于由云存储访问系统所执行的社交网络的用于显示数据对象。

附图说明

图1根据一个实施例,示出连接多个单元计算机计算机网络以形成计算系统的计算机网络;

图2根据一个实施例,示出在计算机网络上由多个单元计算机所形成的计算实体;

图3根据一个实施例,示出配置用于计算实体的单元计算机的自动操作;

图4根据一个实施例,示出到计算机实体中的一组单元计算机的计算任务的分配;

图5根据一个实施例,示出配置计算系统的方法;

图6根据一个实施例,示出配置被添加到计算系统的计算机的方法;

图7根据一个实施例,示出操作计算系统中的计算机的方法;

图8根据一个实施例,示出分配与文件有关的计算任务到计算系统中的计算机的子集的方法;

图9根据一个实施例,示出分配与文件有关的计算任务到计算机系统中的计算机的子集的示例;

图10根据一个实施例,示出维护数据冗余和完成性的方法;

图11根据一个实施例,示出从具有用冗余所储存的文件的计算系统中移除计算机的方法;

图12根据一个实施例,示出在具有用冗余所储存的文件的计算系统中添加计算机的方法;

图13根据一个实施例,示出提出访问储存在计算系统中的多个计算机中的文件的请求的方法;

图14根据一个实施例,示出改变在计算系统中的计算机的可用性方法,该计算机系统被配置以用冗余储存文件;

图15根据一个实施例,示出配置数据存储的系统;

图16根据一个实施例,示出标识用于储存或处理一部分文件的计算设备的方法;

图17根据一个实施例,示出可以在计算系统中使用的计算机;

图18-图20根据一个实施例,示出在计算系统中的计算机的生命期。

具体实施方式

说明概述

本部分中总结了一些实施例,用于组织具有多个计算机的计算系统、在计算机之间分配计算任务、以及在计算系统中维护数据的完整性和冗余。

一方面,实施例包括计算设备,该计算设备被配置来标识所分配给计算设备的那部分计算工作(如果存在的话),基于该计算工作的标识信息以及计算网络中存在的一系列计算设备的标识符,来处理该计算工作。部分由独立于在计算网络中的其他计算设备的计算机设备所标识。例如,基于预先确定的计算功能,计算设备可以将计算工作的标识信息映射到计算设备的一组标识符。标识符中的每一个对应于计算工作的预先确定的部分。如果标识符中的一个对应于计算设备的标识符,那么计算设备执行与所映射的标识符相关联的计算任务的预先确定的部分。

另一方面,实施例包括具有经由用于形成计算实体的计算机网络所连接的多个计算机的计算系统。计算机中的每一个充分独立于其他计算机操作。计算机中的每一个被配置来当计算机被连接到计算机网络的时候,询问计算机网络中的网络基础设施以确定计算实体的标识,并且因此通过在该计算实体中宣告它的存在而加入计算实体。计算机中的每一个被配置以基于在网络基础设施中的连接性配置,来确定在计算实体中的计算机的标识符,并且基于在实体中的计算机的现有数据,来假设用来执行经由计算机网络朝向计算实体的计算请求的一部分操作的角色。

另一方面,实施例包括被配置以规则引擎的计算设备,以将一组预先确定的规则应用于与形成计算实体的计算网络中的计算机的现有数据的变化相关的情况,在这种情况中,在计算实体中所储存的数据在计算机之间被分配用于冗余和数据恢复。响应于先前在计算实体中存在的计算机的缺少,规则使得计算设备与计算机的一个或多个进行通信以执行数据恢复和用冗余储存该缺少的计算机的数据。响应于添加新的计算机到计算实体中,规则使得计算设备与计算机的一个或多个进行通信以横跨计算实体重新分配数据,以使用由新的计算机所提供的存储容量。

本公开包括方法和执行这些方法的装置,包括执行这些方法的数据处理系统、以及包含指令的计算机可读介质,当该指令在数据处理系统上被执行的时候处理系统使得该系统执行这些方法,

通过下文的附图和详细描述,其他特征将是显而易见的。

具体实施例

本公开包括允许用于电子数据的存储系统的实现方式的技术,其中根据表现和空间,系统可以被虚拟地和无限地扩展。

在一个实施例中,本文所呈现的技术使用一组专用的软件指令,该指令被配置以间接得知硬件故障,并且因此能够自动地围绕故障工作,并且作为整体维护所储存的数据以及系统的完整性与可靠性。

在一个实施例中,数据存储系统被配置为社交云,作为计算实体来操作,该计算实体包括作为计算单元来操作的多个单元计算机(cell computer),该计算单元被配置来提供校验和可用性。

例如,相对于校验,一个实施例中的实体中的任何单元可以由该角色的任何其他设备而容易地替代(例如,基于点对点策略),并且相对于可用性,在系统中的数据和硬件具有冗余。

图1根据一个实施例,示出连接用于形成计算系统的多个单元计算机的计算机网络。

在图1中,一组单元计算机(101)可以经由一组网络设备(103)(诸如网络交换器、路由器、网关等等)连接到计算机网络上。在单元计算机(101)连接到计算机网络之前,最初单元计算机(101)可以在软件和/或硬件中被完全相同地配置。一旦连接到网络设备(103),在一个实施例中,该单元计算机(101)被配置来针对在计算实体中的计算角色为它们自己自动地分配独特的标识符。

例如,在网络设备(103)的网络连接性层级中,被连接到相应的网络设备(103)的单元计算机(101)中的每一个具有独特的位置。在网络连接性层级中存在的独特的位置可以被映射到独特的标识符。因此,如果不同的单元计算机(101)在相同的独特的位置代替相应的单元计算机(101),那么不同的单元计算机(101)被分配相同的独特的标识符。

在一个实施例中,单元计算机(101)中的每一个都被配置来与网络基础设施进行通信以在网络连接性层级中标识它的独特的位置并且用预先确定的方案或功能使得位置信息对于独特的标识符可用。因此,一旦被连接到计算机网络中,基于与该网络基础设施的通信,单元计算机(101)中的每一个能够计算/确定在计算实体/系统中它的独特的标识符。

在一个实施例中,基于相应的单元计算机(101)将要连接到的计算机网络的特征,单元计算机(101)中的每一个还可以被配置来自动地确定相应的单元计算机(101)将要加入的计算机实体的标识。

例如,一旦被连接到计算机网络上,单元计算机(101)被配置以与网络基础设施进行通信以确定计算机网络的域名,并且用域名作为计算机实体的标识符,或用域名来计算计算机实体的标识符。单元计算机(101)之后被配置以加入由计算机实体标识符所标识的计算机实体/系统。因此,相同地被配置的单元计算机(101)可以仅仅连接到具有不同域名的计算机网络中,以加入对应该域名的相应的计算实体。

图2根据一个实施例,示出经由计算机网络由多个单元计算机(101)所形成的计算实体。

在图2中,计算机网络(105)包括如图1所示出的网络设备(103)。当相应的单元计算机(101)被连接到计算机网络(105)的时候,单元计算机(101)中的每一个计算计算机实体标识符。因为基于与计算机网络(105)相同的域名来计算机实体标识符,所以单元计算机(101)加入相同的计算实体(107)中。

在一个实施例中,单元计算机(101)中的每一个被配置以在计算实体(107)中传播单元计算机(101)的现有信息。例如,当单元计算机(101)被连接到计算机网络(105)上的时候,该单元计算机(101)被配置来与网络基础设施进行通信以计算它的独特的标识符,并且在计算机网络(105)中宣告它的存在和独特的标识符,使得在网络中的与该单元计算机(101)相邻的其他单元计算机(101)得知该单元计算机(101)存在于计算实体(107)中。

在一个实施例中,每一个相应的单元计算机(101)被配置来在相应的单元计算机(101)中储存单元计算机(101)的现有数据,包括相应的单元计算机(101)得知的单元计算机(101)的一系列独特的标识符。例如,如果相应的单元计算机(101)在计算机网络(105)中观察到宣告新的单元计算机(101)的存在的信息,该相应的单元计算机(101)被配置来添加新的单元计算机(101)到它的现有列表中。

此外,当现有数据发生变化的时候,每一个相应的单元计算机(101)可以向它的现有列表上中的每一个单元计算机(101)提供通知消息以传播该变化。在一些实施例中,单元计算机(101)中的每一个等待某个随机时间段以推送出它的关于该变化的通知。

因此,在计算实体(107)中,单元计算机(101)中的每一个得知该计算实体(107)中的其他单元计算机(101)的可用性。基于现有数据以及预先确定的算法,计算实体(107)中的单元计算机(101)中的每一个可以将它自己与计算实体(107)所共享的计算任务从其他单元计算机(101)的操作中独立地标识/分配。

图3根据一个实施例,示出配置用于计算实体(107)的单元计算机的自动操作。在图3中,一旦被连接到计算机网络(105)中,每一个单元计算机(101)被配置来与网络基础设施(诸如,网络设备(103))进行通信以自动地确定它的网络配置数据,诸如因特网(IP)地址(117)、计算机网络(105)的域名(113)、以及在网络设备(103)的连接性层级中的单元计算机(101)的网络连接性位置(115)。

例如,网络设备(103)中的每一个具有多个端口。网络设备(103)的每个端口具有独特的标识符。到端口的连接由该端口的独特的标识符所标识;并且从单元计算机(101)到顶层网络设备(103)(诸如,顶层网关)的对具体端口的连接的层级表示单元计算机(101)的独特的网络连接性位置(115)。

在图3中,在独特的网络连接性位置(115)处所连接的单元计算机(101)的独特的单元标识符(123)是从独特的网络连接性位置(115)中所计算,并且单元计算机(101)所加入的计算实体(107)的实体标识符(121)是从域名(113)中所计算。因此,基于网络配置数据(111),单元计算机(101)配置它自己在计算实体(107)中的角色。

在一个实施例中,计算实体(107)被配置来针对接收的请求分配计算机任务给计算实体(107)中的单元计算机(101)的子集。在一个实施例中,单元计算机(101)中的每一个包含在计算实体(107)中的其他单元计算机(101)的现有信息,并且在相同的数据上采用相同的算法(包括现有信息)来对任务的分配进行计算。因此,针对在计算实体(107)中所接收的给定的计算请求,每一个相应的单元计算机(101)能够确定单元计算机(101)的标识,该标识被分配来执行用于计算请求的任务的预先确定的部分,并且每一个相应的单元计算机(101)标识与执行被分配给相应的单元计算机(101)的部分。因此,每一个相应的单元计算机(101)能够自我分配计算任务的正确部分。

图4根据一个实施例,示出到计算实体(107)中的一组单元计算机(101)的计算任务的分配。在图4中,现有映射(125)包括在计算实体(107)中的单元计算机(101)的单元标识符(123)之间的映射,以及用于网络通信的单元计算机(101)的IP地址(117)(或者其他类型的网络地址)。

在一个实施例中,针对给定的全局请求标识符(129)(诸如将被储存在计算实体(107)中的文件的文件名),用于处理请求的操作被分成预先确定的数量的任务(127)。例如,任务(127)中的每一个可以对应于用冗余或同等物来储存该文件的数据的预先确定的部分。向任务(127)分配单元计算机(101)的子集,预先确定的算法被用于现有映射(125)和全局请求标识符(129)来计算单元标识符(123)(并且因此他们对应于IP地址(117))。

例如,单元标识符(123)可以被配置为在预先确定的范围(诸如,虚拟IP地址)内的数字,以及散列函数可以被用于预先确定的范围的全局请求标识符(129)。散列函数可以递归地被用于计算在现有映射内(125)的多个单元标识符(123)。用于为相应的任务(127)选择IP地址(117)的其他方法可以被使用。因此,本公开不局限于散列函数的实现方式。

在一个实施例中,针对相应的任务(127)的IP地址(117)的选择基于全局请求标识符(129),使得不同的请求被分配给单元计算机(101)的不同的子集用于在计算实体(107)中的单元计算机(101)之间的自动负载平衡。

在一个实施例中,由于在计算实体(107)中的单元计算机(101)中的每一个维护相同的现有映射(125)、接收相同的全局请求标识符(129)、并且使用相同的算法/函数来计算所分配用于执行任务的单元计算机(101)的IP地址(117)的所选中的单元标识符(123),所以单元计算机(101)可以计算出相同的结果。因此,单元计算机(101)中的每一个仅仅确定是否有分配给它们自己的任务(127),并且如果有的话则执行相应的任务(127)。

图5根据一个实施例,示出配置计算系统的方法。在图5中,在具有相同的配置的多个可互换的单元计算机(101)以如图1与图2所示的方式被连接到(201)计算机网络(105)之后,该单元计算机(101)基于计算机网络(105)的网络标识被组织(203)进入计算实体(107)。由于单元计算机(101)中的每一个可以获得独立于彼此的计算机网络(105)的网络标识,单元计算机(101)中的每一个可以被配置来计算它所加入的计算实体(107)的独立于其他单元计算机(101)的实体标识符(121)。

在图5中,基于网络配置数据(111)(例如,网络连接性位置(115)),单元标识符(123)被分配(205)给单元计算机(101)。由于单元计算机(101)中的每一个可以独立于彼此获得它的网络配置数据(111),单元计算机(101)中的每一个可以被配置来计算它的独立于其他单元计算机(101)的单元标识符(123)。

在图5中,基于被分配给单元计算机(101)的单元标识符(123),单元计算机(101)的角色被分配(207)给计算实体(107)中的单元计算机(101)。因此,基于由自我分配的标识符(123)以及分配方案预先确定的作用,单元计算机(101)可以自我分配它们在计算机实体(107)中的作用。

在图5中,单元计算机(101)在计算实体(107)内传送(209)具有它们相应地被分配的单元标识符(123)的单元计算机(101)的存在。因此,当计算机网络(105)中将被传播的现有数据不存在更多的变化的时候,单元计算机(101)中的每一个具有在计算实体(107)中的单元计算机(101)的单元标识符(123)的相同的完整列表和用于与彼此通信的它们相应的网络地址。

在图5中,基于具有所分配的单元标识符(123)的单元计算机(101)的现有数据,计算实体(107)被配置来分配(211)计算任务(127)给单元计算机(101)。由于单元计算机(101)中的每一个在它们的现有数据中具有单元标识符(123)的相同的完整列表,所以单元计算机(101)中的每一个可以独立于其他单元计算机(101)标识那些分配给它们自己的任务(127)。

在图5中,如果(213)新的单元计算机(101)被加入到计算机网络(105)中,新的单元计算机(101)基于计算机网络(105)的网络标识符被组织(203)到计算实体(107)中。如果(213)现有的单元计算机(101)从计算机网络(105)中被移除,在计算实体(107)中剩余的单元计算机(101)与彼此进行通信(209)以更新它们的现有数据。

如果现有的单元计算机(101)在相同的网络连接性位置(115)被新的单元计算机(101)所代替(例如,被连接到相同的网络设备(103)的相同的端口),那么该新的单元计算网络(101)在该计算实体(107)中自动地替代现有的单元计算机(101)的角色。

因此,通过自动操作,人力在维护以及配置计算实体(107)过程中的介入被减少和/或最小化。

图6根据一个实施例,示出配置所添加到计算系统中的计算机的方法。

在图6中,在单元计算机(101)被连接(231)到计算机网络(105)之后,单元计算机(101)与计算网络(105)进行通信以自动地配置单元计算机(101)的网络参数,诸如来自动态主机配置协议(DHCP)的服务器的IP地址(117)。单元计算机(101)之后自动地与计算网络(105)进行通信(235)以标识在连接性层级中的单元计算机(101)的网络连接性位置(115)(例如,经由链路层发现协议(LLDP)查询)。基于诸如计算机网络(105)的域名(113)的网络参数,单元计算机(101)确定(237)计算实体(107)的实体标识符(121);基于单元计算机(101)的网络连接性位置(115),从多个预先确定的作用中选择选单元计算机(101)的作用。

在图6中,单元计算机(101)宣告(241)该单元计算机(101)在计算实体(107)中的存在;标识(243)在计算实体(107)中的其他单元计算机(101);基于在计算实体(107)中的其他单元计算机(101)的标识,标识(245)与该角色相关联的一组任务(127);以及在计算实体(107)中执行(247)该组任务(127)。

图7根据一个实施例,示出在计算机系统中操作计算机的方法。

在图7中,在启动(251)所连接到计算机网络(105)的单元计算机(101)的之后,该单元计算机(101)自动地与服务器进行通信(253)以配置连接到计算机网络(105)的单元计算机(101)的网络接口。单元计算机(101)确定(255)单元计算机(101)的域名(113)用于所连接到计算机网络(105)的网络接口;从域名(113)计算(257)计算实体(107)的实体标识符(121);询问(259)(诸如,经由LLDP询问)网络基础设施,来确定基础设施中网络接口的独特的位置;以及,从表示网络基础设施中网络接口的独特的位置的数据中,计算(261)在计算机实体(107)中的单元计算机(101)的独特的单元标识符(123)。

在获得(263)计算实体(107)中的单元计算机(101)的单元标识符(123)的列表之后,针对对于计算实体(107)的给定请求并且基于在单元计算机(101)上的现有映射(125)中所剩余的单元标识符(123)的列表,单元计算机(101)确定(265)将在单元计算机(101)上被实现的那部分请求。

在一个实施例中,将要在单元计算机(101)上所实现的那部分请求还基于给定请求的全局请求标识符(129)(诸如将要在计算实体(107)中储存的文件的名称)所确定。

在一个实施例中,所使用的分布式散列表(DHT)方法将被用作在单元之间的通信协议来传送存在和断开(例如,如由Lon Stoica等人在“Chord:A scalable Peer-to-peer Lookup Service for Internet Applications(弦:针对互联网应用可调整点对点查找服务,其于2001年8月27-31日在美国加州圣地亚哥的SIGCOMM’01所指出、并且发表于2003年2月IEEE/ACM汇刊,Networking,Vol.11,第一期第17-32页))”中所公开的。

图8根据一个实施例,示出将与文件相关的计算任务(127)分配给计算机系统中的计算机的子集的方法。

在图8中,在具有多个单元计算机(101)的计算机实体(107)中储存(271)计算机实体(107)中用来标识单元计算机(101)的存在的现有数据(诸如,125)之后,计算机实体(107)接收(273)请求以储存具有文件名的文件。依据预先确定的方案,文件在计算实体(107)中的储存被分成(275)多个操作。为了将多个操作/任务(127)分配给多个单元计算机(101),对于文件名采用(277)散列方案以获得用来标识(279)多个单元计算机(101)的多个散列值。

在一个实施例中,在计算实体(107)中的单元计算机(101)被配置来计算散列值以标识(279)多个平行的单元计算机,并且确定它们是否被分配以执行任何和/或哪些操作。

因此,由散列值所标识的多个单元计算机(101)中的每一个相应的单元计算机(101),自我分配(281)相应的操作。

图9根据一个实施例,示出将与文件相关的计算任务(127)分配给计算系统中的计算机的子集的示例。

在图9中,在标识多个单元计算机(101)的存在的现有映射(125)被储存(291)在计算实体(107)的单元计算机(101)中之后,单元计算机(101)在计算实体(107)中接收(293)对于储存具有文件名的文件的请求,其中该文件在计算实体(107)中的储存被预先分为多个任务(127),诸如保存该文件的元数据、保存文件的副本或文件的一部分、计算用于缓存的校验数据、保存校验数据等等。

在图9中,单元计算机(101)将散列方案用于文件名以获得多个散列值,每一个散列值对应任务(127)中的一个,并且每一个散列值对应计算实体(107)中的单元计算机(101)中的一个。

单元计算机(101)确定(297)是否有散列值自身对应于单元计算机(101)的标识,如果有的话,则执行(299)与自身对应于单元计算机(101)的标识的散列值相关联的任务(127)。

图10根据一个实施例,示出维护数据冗余和完整性的方法。在图10中,具有多个单元计算机(101)的计算实体(107)储存现有映射(125),该现有映射(125)标识计算实体(107)中的单元计算机(101)的存在。单元计算机(101)中的每一个储存(303)一组规则,并且被规则引擎所配置以执行该规则。

在图10中,响应于在计算实体(107)中的数据操作和现有映射(125)的改变,单元计算机(101)向规则引擎提供(307)输入。基于规则在规则引擎的控制下,单元计算机(101)与彼此进行通信以维护数据冗余和完整性。

图11根据一个实施例,示出将计算机从具有用冗余所储存的文件的计算系统中移除的方法。

在图11中,在检测到(311)单元计算机(101)从计算实体(107)的缺少之后,在计算实体(107)中剩余的单元计算机(101)的规则引擎使得剩余的单元计算机(101)传播关于单元计算机(101)在计算实体(107)中的缺少的信息,以更新(313)在计算实体(107)中的剩余单元计算机(101)的现有映射(125);标识(315)在计算实体(107)中的文件,该文件具有先前所储存在单元计算机(101)上的部分;以及在计算实体(107)的剩余的单元计算机(101)之间进行通信以恢复用于储存计算实体(107)中的文件的数据冗余。

图12根据一个实施例,示出将计算机添加到具有用冗余所储存的文件的计算系统的方法。

在图12中,在检测到(321)所添加到计算实体(107)的新的单元计算机(101)的存在之后,在计算实体(107)中的单元计算机(101)的规则引擎传播(323)关于单元计算机(101)在计算实体(107)中存在的信息,标识(325)将被部分地储存在新的单元计算机(101)上的文件,以及在计算实体(107)中的单元计算机(101)之间进行通信(327)以生成用于在新的单元计算机(101)上储存的那部分文件。

图13根据一个实施例,示出请求访问储存在计算系统的多个计算机中的文件的方法。

在图13中,在单元计算机(101)接收(331)访问被储存在具有多个单元计算机(101)的计算实体(107)中的文件的请求之后,单元计算机(101)标识(333)计算实体(107)中的多个单元计算机(101),该多个计算机(101)储存部分用于该文件的数据。单元计算机(101)的规则引擎指导单元计算机(101)与多个单元计算机(101)进行通信以核实针对该文件的数据完整性,并且响应于核实该文件的数据完整性的过程中发生的故障而执行(337)数据恢复。

图14根据一个实施例,示出改变所配置以用冗余储存文件的计算系统中的计算机可用性的方法。

在图14中,在单元计算机(101)接收(341)计算实体(107)中的单元计算机(101)的现有数据的改变之后,单元计算机(101)的规则引擎被配置以检查该改变带来的影响。

例如,规则引擎标识(343)储存在单元计算机(101)中的文件,规则引擎在该单元计算机(101)上运行并且标识(345)多个单元计算机(101),多个单元计算机(101)中的每一个被分配来储存文件的一部分数据。规则引擎确定(347)在现有数据中的改变是否引起在被分配来储存文件的数据的多个单元计算机的标识中的改变,并且如果存在标识的改变,则规则引擎开始更新(349)计算实体(107)中的文件的数据。

例如,在现有数据改变之前,如在图4中所示出的现有映射(125)分配第一组单元计算机(101)以储存给定文件的数据。在现有数据改变之后,用于储存文件的数据的第一组单元计算机(101)的分配可能改变也可能不改变。如果存在改变,那么单元计算机(101)的规则引擎可以启动数据恢复处理,将数据从单元计算机(101)的第一组中移动到由所更新的现有映射所计算的单元计算机(101)的第二组中。

例如,在改变之后,单元计算机(101)可以不再被分配用于储存文件的任何数据,并且该文件被重新储存在系统中一段时间之后,规则引擎可以从单元计算机(101)中删除该文件的数据。

例如,在现有映射(125)改变之后,单元计算机(101)可以确定对于第一组单元计算机(101)中的一个或多个的数据储存分配已经根据现有映射的改变而改变,并且作为响应,规则引擎可以与相应的单元计算机(101)进行通信以更新在其中所存储的数据。

例如,在现有映射(125)发生改变之后,单元计算机(101)可以确定文件的数据的副本将从一个单元计算机(101)被移动到另一个,并且单元计算机(101)的规则引擎被配置以与相应的单元计算机(101)进行通信来安排数据的传输。

例如,在现有映射(125)发生改变之后,单元计算机(101)可以确定另一个单元计算机(101)现在是所分配来储存文件的部分数据的单元计算机(101)的新成员。单元计算机(101)的规则引擎可以与先前所分配来储存文件的规则引擎进行协作来重新获得文件的副本,并且向新成员传送该文件,该新成员可以独立地操作该文件来储存所要求的数据,就如文件是从用户所接收的情况一样。此外,互相分配的单元计算机(101)的组的先前的成员的规则引擎可以标识用于重新获得和/或计算将被储存在新成员中的数据的最高效的方法。

图15根据一个实施例,示出配置数据存储的系统。

例如,如图15所示出的社交云具有来自对应于网络中的域(诸如,cynny.com)的一个实体(409)的一组单元(425)(例如,计算机实体(107))的单元计算机(101))。

在图15中,单元中的每一个具有至少CPU(415)、数据存储盘(417)、被配置以软件指令和/或与数据(例如,421、423)相关联的存储器(419)、以及网络接口(413)。

在图15中,通过确定每一个单元(425)被物理地连接到的计算机网络(407)(例如,cynny.com)的域,每一个单元(425)被配置以通过软件指令来确定它所属于的实体(409)。单元(425)可以,例如,经由询问网络网关用标准网络协议来标识域。因此,基于网络配置,被附着到网络(407)的单元(425)可以自动地配置它自己以加入相应的实体(409)。

在图15中,每一个单元(425)被配置以通过从它所连接的网络(407)获得信息以理解它在实体(409)中的角色。例如,单元(425)可以用标准网络协议(诸如LLDP(链路层发现协议))来确定关于它所连接的第一层网络交换(411)和相邻单元(例如,所连接到相同的第一层网络交换(411)的其他单元(425))的信息,关于第一层网络交换所连接的第二层网络交换和相邻单元(例如,连接到相同的第二层级网络交换(411)的其他单元)的信息等等。

例如,在一个实施例中,单元(425)被连接到第一网络交换(411)A上,该第一网络交换(411)A转而连接到数据库配置中的第二网络交换(411)B。用LLDP协议(或其他协议),单元(425)被告知网络配置:单元(425)被连接到网络交换(411)A上的端口X,以及网络交换(411)A被连接到网络交换(411)B上的端口Y。基于这样的网络配置信息,单元(425)确定它在实体(409)中的角色。

例如,单元(425)被配置来解析LLDP询问回答和确定在即时网络(407)(例如,在网络交换(411)A的端口2上)中单元(425)的位置。之后单元解析LLDP询问回答来确定网络交换(411)A的位置(例如,在网络交换(411)B的端口24上)。基于询问结果,单元(425)用确定性的方案计算角色标识符(例如,“24,2”,基于网络交换(411)A的端口2,和网络交换(411)B的端口24)。标识符(例如“24,2”)可以表明单元(425)是否具有储存元数据的角色、储存用户数据的角色、或执行计算服务的角色等等。例如,在一个实施例中,预先确定的规则可以指定:对应于具有第一层网络交换(411)的端口2处的位置的单元(425)的标识符是具有储存元数据的角色的单元(425),并且因此具有样式“*,2”的单元(425)的标识符是被分配为元数据单元(425)的角色的单元(425)。

在一个实施例中,每一个单元(425)与当前存在于网络(407)的其他单元(425)进行通信以配置它自己。单元(425)的网络分析星载软件对该单元自身分配角色,该角色表明由实体(409)中的单元(425)所提供的服务,诸如执行针对实体(409)的某些类型的计算,为实体(409)提供某些数据存储能力等等。单元(425)加入实体以提供对应于角色的服务,并且其他单元(425)可以被告知该单元(425)在实体(409)的存在并且调整他们的操作以利用由该单元(425)所提供的服务。

在一个实施例中,当加入实体(409)的单元(425)无法检测实体(409)的相邻的最小一组单元(425)的时候,单元(425)假设它出现了问题并且开启诊断周期。

在一个实施例中,当单元(425)在网络(407)中启用的时候,单元(425)配置它自己以承担角色。例如,单元(425)中的一些可以被配置以储存文件的元数据(例如,许可、文件类型、共享、冗余),并且其他的单元(425)可以被配置来储存文件(例如,图片、视频等等)的用户数据。当附加的单元(425)被启动以加入实体(409)的时候,单元(425)与彼此进行通信来分配和/或更新角色。

在一些实施例中,实体(409)的具体的单元(425)被配置以执行用于在实体(409)中生成和/或更新VIP映射的计算,并且将VIP映射加入到实体(409)中,该VIP映射由所有其他单元(425)的IPMap(421)软件所使用。此外,通过协商会话中的通信,单元(425)可以分配角色。在一个实施例中,用户接口被提供用来允许用户对于单元(425)进行配置和/或管理对于单元(425)的角色的分配。

在一个实施例中,每个单元(425)具有在实体(409)中当前可用的单元(425)的一组映射。映射可以用网络配置数据(111)标识单元(425)。例如,连接到第一层网络交换(411)的端口2的单元,转而连接到第二层网络交换(411)的端口24上,该单元可用基于标识符“24,2”的位置而被标识。物理的IP地址(441)基于网络位置标识符(443)“24,2”被分配给单元(425)。将被储存的给定的一组数据可以被映射到虚拟IP地址(437)经由预先确定的计算操作(例如,由下文所提供的散列示例)。映射被用来将虚拟IP地址(437)链接到物理IP地址(411),使得将被储存的该给定的数据组可以经过预先确定的计算操作,首先映射到虚拟IP地址(437)并且之后用该映射被映射到物理IP地址(411)。这可以被叫做图16中所示出的VIP映射(439)。

在一个实施例中,当单元(425)加入实体(409)的时候,它在网络(407)/实体(409)中宣告自己的存在(例如,经由LLDP)。推动/拉动策略或DHT方法可以在单元(425)中被实现以使得在实体(409)中的所有的单元(425)获得已更新的VIP映射(439)。例如,在实体(409)中随机地选取的单元A被添加到新的VIP映射(439)之后,这个单元A用相同的VIP映射(439)添加另一个单元Y。在预先确定的代(generation)的数量(例如,3或4)之后,添加(推动阶段(push phase))结束。在推动/拉动实施例中,周期性地(例如,每X秒),每一个单元(425)被配置来询问一个或多个其他单元(425)用于关于VIP映射(438)的更新(拉动阶段(pull phase))。当在推动阶段中足够的单元用新的VIP映射(439)被添加之后,该VIP映射(439)可以在拉动阶段中被迅速地传播到呼叫单元(425)。

如在示例的实施例中,分布式散列表(DHT)方法可以被用于上文所描述的推动/拉动消息交换,来更新VIP映射(439)。例如,VIP映射(439)可以通过使用针对因特网应用的可扩展的点对点查找服务的一种实现方式而被更新,例如,如由Lon Stoica等人在“Chord:A scalable Peer-to-peer Lookup Service for Intemet Applications(弦:针对互联网应用可调整点对点查找服务,其于2001年8月27-31日在美国加州圣地亚哥的SIGCOMM’01所指出、并且发表于2003年2月IEEE/ACM汇刊,Networking,Vol.11,第一期第17-32页)中所公开的。在这种实施例中,单元(425)一被加入到实体(409)中,单元(425)就被配置拥有具体的数据子集。通信协议(诸如在Chrod系统中所使用的)可以被用来对实体(409)中的所有其他单元(425)更新关于新到达的单元(425)的存在。在一个实施例中,CHORD模块作为单元(425)中预加载的软件的具体层级而实现,并且被配置使用针对因特网应用的可扩展的点对点查找服务,来更新VIP映射(如在lon Stoica的Chord系统中的)。

在一个实施例中,实体(409)(例如,具有经由在某域名(113)下的网络配置的所组织的单元的聚集(425))实现文件系统,但是它不仅仅是文件系统。实体(409)可以具有经由一个或多个网络(407)所连接的世界范围的单元(425)。在实体(409)中,单元(425)可以在区域内(例如,一组单元(425)在欧洲,其他在美国)在本地被组织。世界可扩展的实体(409)被配置来组织它自己为了使得它的用户连接到最近的单元(425)使得允许与用户的有效的交互。

在一个实施例中,实体(409)以及经由实体(409)所实现的文件系统是全球化的。在文件系统中,单一的用户文件(405)可以包括在不同的世界的区域的单元(425)。例如,如果用户希望订阅针对他自己的损坏-复原策略,用户可以决定实现复制策略(replication policy)以在不同的世界区域中储存他的文件的副本。当这种策略被使用,客户端软件(403)(例如,在下文中所讨论的IPMap(421))在单元(425)中运行并且被配置来确定单元(425)是否将储存用户文件(405)的数据并且被配置来使得来自不同区域的单元(425)储存该文件。

在图15中,单元中的每一个具有被配置来计算用于用户文件储存的位置的IPMap(421)(例如,客户端软件(403))。在一个实施例中,给定用户文件(405)的哪部分被储存在哪些单元(425)中和/或在哪些位置,是从用户文件(405)的数据以及在实体(409)中的当前可用的单元(425)的映射(例如,VIP映射(439))直接地计算出的。

例如,用户文件(405)的文件名(431)可以是散列的,以用散列方案(433)生成具有固定长度的字符串的散列值(435),如图16所示出的。字符串的不同的部分被用来标识不同的单元(425)用于用户文件(405)的不同部分的存储,以及字符串的部分可以被用来在单元(425)的文件系统中标识目录和本地文件名(431),来储存用户文件(405)的相应的部分。因此,针对给定的文件名(431),IPMap(421)可以确定性地计算用户文件(405)的哪部分被储存在哪个单元(425)中和在相应单元(425)的文件系统中的哪个目录中。在一个实施例中,基于所分配给实体(409)的单元(425)的角色的配置而计算IPMap(421)。在一个实施例中,由实体(409)中的单元(425)所共享的公共的文件(例如,虚拟IP映射(437))被用来以决定性的方式将字符串的给定部分映射到单元(425)中的一个的IP地址(411)。

在示例中,在用户文件(405)的文件名(431)被散列到字符串中之后,字符串的第一部分被映射,来标识第一单元(425)来储存用户文件(405)的第一副本;字符串的第二部分被映射来标识第二单元(425)以储存用户文件(405)的第二副本;字符串的第三部分标识在第一与第二单元(425)中的目录来储存第一与第二副本;以及字符串的第四部分标识用于在目录中储存第一与第二副本的本地文件名(431),该本地文件名(431)由字符串的第三部分在第一与第二单元(425)中所标识。因此,IPMap(421)的示例实现了实体(409)中所储存的用户文件(405)的镜像。

在另一个示例中,散列函数可以被递归地采用来获得散列值(435)的序列;以及在序列中的散列值中的每一个可以被用来标识单元(425)。例如,在序列中的第一散列值(435)被用来标识第一单元(425)以储存用户文件(405)的第一副本;在序列中的第二散列值(435)被用来标识第二单元(425)以储存用户文件(405)的第二副本;在序列中的第三散列值(435)被用来标识在第一与第二单元(425)中的目录以储存第一与第二副本;以及在序列中的第四散列值(435)被用来标识被用来在目录中储存第一与第二副本的本地文件名(431),该本地文件名(431)由字符串的第三部分在第一与第二单元(425)中所标识。

在一个实施例中,用户文件(405)的文件名(431)的散列值(435)(或散列值(435)的部分)被用来以确定性的方式从VIP映射(439)中查询单元(425)。例如,来自字符串的值的不同范围可对应于在VIP映射(439)中所标识的不同的单元(425)。在一些实施例中,VIP映射(439)包括用于从字符串值(即,虚拟IP地址(437))映射到单元(425)的物理IP地址(411)的信息。

在图15中,在用户计算机(401)上运行的客户端软件(403)将用户文件(405)广播到实体(409)的单元(425),以及在单元(425)中的每一个中执行的IPMap(421)确定是否有任何文件的部分将被储存在相应的单元(425)上。如果有的话,则储存该部分的单元(425)的本地文件系统中的位置和/或文件名(431)被计算。此外,已经接收到用户文件(405)的单元(425)用IPMap(421)来确定哪个单元负责用户文件(405)的储存,并且将该用户文件(405)传送到相应的单元(425)。此外,(例如,由客户端软件(403)所选中的或由IPMap(421)所确定的)单元(425)中的一个被配置来与客户端软件(403)进行通信,用于将用户文件(405)更多地传送到负责存储用户文件(405)的单元(425)。

总体上,IPMap(421)可以被实现来储存用于对全部数据恢复的冗余和/或奇偶校验数据的镜像副本。例如,IPMap(421)可以用用户文件(405)的文件名(431)的一部分散列值(435)(或在递归地被计算的散列的序列中的散列值(435))来标识单元(425)以计算与储存校验数据。因此,冗余和/或奇偶校验方案的不同的层级可以通过将数据经由IPMap(421)分配到实体(409)中的负责单元(425)而实现。

在一个实施例中,IPMap(421)被配置以将一组用于储存用户文件(405)的预先确定的操作映射到在实体(409)中的单元(425)的子集。总的来说,IPMap(421)可以被配置来将一组计算机操作(例如,计算和/或数据存储)映射到实体中的一组单元(425)。

在图15中,实体(409)的单元(425)中的每一个具有运行来维护数据完整性的脑(Brain)(423)(例如,软件)。当读取/写入用户文件(405)的时候,负责用户文件(405)的单元(425)与其他单元(425)进行通信,该其他单元(425)也对于用户文件(405)负责用于监控储存在实体(409)中具有所期望的程度的冗余/奇偶校验的用户文件(405)的状态。例如,如果单元(425)被发现不再在实体(409)中可用(例如,当单元(425)死亡,或在多于阈值的时间段内下线),那么剩余的单元(425)的VIP映射(439)被更新以允许单元(425)的IPMap(421)制定出先前在死亡的单元(425)中所存储的文件的新的位置,并且将可用的文件复制到新的位置。在一个实施例中,经由规则引擎来实现脑(423),并且用规则引擎实现一组数据完整性规则和损坏复原策略。

例如,当单元(425)死亡或移除网络(407)的时候,单元(425)用脑(423)检测到死亡的/移除的单元的缺少,以及响应于将新的VIP映射(439)被添加到其他单元(425),其中先前被分配给缺少的单元(425)的散列值(435)被重新分配给其他单元。因此,由所缺少的单元(425)提供的责任被分配给剩余的单元(425)。在新的VIP映射被传播到实体(409)中的单元(425)之后,每一个单元(425)的脑(423)开始从仍旧存活的冗余副本或基于错误更正算法来恢复数据。

例如,当新的单元(425)被加入到实体(409)的时候,现存的VIP映射(439)被修改以将一组散列值分配给单元(425)以生成新的VIP映射(439)。在新的VIP映射(439)在实体(409)中被传播并且新的单元(425)从其他单元(425)获得数据之后,在不再负责某些VIP映射的脑(423)的控制下的相关的单元(425),可以开始从它们的盘(417)中删除相应的数据,它们将不再被询问以提供这些数据(即,它们不再服务与VIP映射(439)相关的数据)。

本文所公开的硬件架构很快地变换关于与存储系统的维护和扩展相关的问题的视角。

一个实施例的存储实体(409)包括单元(425)服务器的庞大的和多种的组,该单元(425)服务器的组可以非常小并且由CPU(415)和盘(417)理想地组成。例如,在存储实体(409)中所采用的CPU(415)的数量以及盘(417)的数量可以是完全相同的。

CPU(415)或盘(417)的添加如连接以太网总线一样简单,并且并不意味着服务的任何停止或破坏。

不要求维护操作就可以将新的单元(425)加入到网络(407)以代替死去的单元。

存储空间(理论上是无限的)通过(基于散列的)确定性的数学算法被寻址,该存储空间允许所有被保存的数据由反向推导同一算法重新获得。这避免了像在传统的方法所发生的一样使用索引。

通过IPMap(421)软件和VIP映射的使用,算法可以在系列的独立的存储单元(425)上联合地传播数据,该单元中的每一个只拥有储存在系统上的一小部分信息。这还意味着通过加入新的单元(425),实体(409)的系统可以无限地被扩展。

当新的单元(425)被加入到实体(409)中的时候,它自动地连接到其他单元,并且自动地承担起它在系统中的角色。

经由IPMap(421)软件和VIP映射(439)的使用,信息遵从冗余策略被传播进单元(425),使得丢失有限数量的单元(425)不会危害数据可用性。

当现存的单元(425)不再能够在实体(409)中提供充足表现的服务的时候,新的单元(425)可以仅仅通过将它们连接到网络(407)而被加入到实体(409)。这允许信息的冗余水平随着时间被持续维持。

在本公开的存储系统中,表现随着每一个新单元(425)的加入而加强。这种现象的发生是因为由整个系统所执行的盘I/O的载荷的操作在更大数量的独立的储存/计算单元上传播。在提供服务的方面,单元(425)以充分独立与彼此的方式操作。

在传统的储存系统中,在计算功率和带宽保持不变的情况下,新空间的加入通常使得表现变慢。

在一个实施例中,存储系统的硬件由一组基础单元所组成,每一个是如图7所示的微服务器或单元(425)。

在图17中,微服务器/单元(425)包括CPU(435)、网络接口卡(451)以及用来储存系统和软件服务的永久性存储器(455)。此外,每一个微服务器/单元(425)具有大容量存储器(457)以储存从用户所接收的数据(以防服务器正在使用存储单元)。

使用网络(407),在横跨世界的存储系统中的单元(425)可以出于共享和同步数据的目的与彼此进行通信。因此,一组自我组织的单元可以形成计算/存储实体(409)形式的存储系统。

在一个实施例中,单元(425)通过连接到它的计算机网络(407)被加入实体(409)中而无需关于它在实体(409)中的位置和作用的信息。这意味着单元(425)不知道哪些其他的单元(425)是它的邻近单元,并且它不知道它是应该储存数据还是仅仅提供计算服务。

在单元(425)被连接到网络(407)之后,它通过与其他单元(425)和/或网络(407)基础设施(例如,网络交换器(411)、网关)进行通信得到关于实体(409)的信息/指令。该信息可以通过用标准化网络协议(诸如LLDP(链路层发现协议))而获得。

在一些实施例中,所表明的配置文件可以被使用。这种文件可以最初被添加,例如,但它们根据实体(409)的健康状况和实体(409)中存在的单元数量而随时间变化。

在一个实施例中,在新的单元(425)被连接到计算机网络(407)之后,在实体(409)中的单元与彼此进行通信来重新组织实体(409)以利用新的单元(425)的服务,并且适应于该实体(409)可以提供的服务的水平。

在一个实施例中,新的单元(425)并不具有关于以太网或TCP/IP协议的预加载的Mac地址和/或预加载的IP地址(411)。这些参数基于在计算网络(407)中所连接的单元(425)的物理位置被分配给单元(425)(例如,依据它所连接到的端口和/或网络交换器(411)/网关的层级)。

例如,当单元加入实体(409)的时候,它询问其他的单元关于托管的信息。在托管信息的基础上,它假设在实体(409)中的角色。软件组件,IPMap(421)被配置来组合物理的IP地址(411)和角色分配。

在一个实施例中,单元(425)的逻辑角色基于物理IP地址(411)被分配。单元(425)仅仅负责被存储到实体(409)中的那部分数据或可计算的一组操作的部分。

例如,在角色与定位信息之间的映射可以被用来实现角色分配。在通过读取在定位与角色之间的映射,单元(425)基于它所连接(例如,经由LLDP所标识)的转换器(411)端口为它自己分配物理地址(Mac地址和IP地址(411))之后,它得知它在实体(409)中的具有的角色。

以上的安排表明单元(425)能够易于取代其他的单元(425)。当单元(425)物理地被另一个单元(425)在网络(407)连接架构的相同的物理位置所替代的时候,作为替代单元(425)将获得被替代单元的相同的Mac地址、相同的IP地址(411)、以及相同的角色。

通过把作为替代的单元(425)放置在网络(407)连接架构中不同的物理位置,但是分配相同的角色,单元(425)还可以被逻辑地替代。

在一个实施例中,实体(409)作为整体将告知单元(425):它需要解除它的角色以及在哪里得到它仍旧丢失的数据的信息。数据(也来自死亡单元(425))通常在网络(407)中是可用的,作为冗余和错误更正策略的序列。

单元(425)可以被设置为休眠的。例如,在单元(425)获得在计算机网络(407)中的IP地址(411)之后,如果它未被分配到角色,那么它在实体(409)中是休眠的,直到实体(409)被告知该单元(425)的存在并且重新组织它自己以使用单元(425)的服务。

在一个实施例中,要将单元(425)设置为休眠,就足以将它的位置从角色的映射中除去。将它再次放入映射使得实体(409)再次开始使用它。

在一个实施例中,IPMap(421)是为具有物理IP地址(441)的单元(425)分配数据的部分或可计算的角色的软件组件。它可以通过一些实现方式技术或通过以下各项的混合而被获得:散列映射、Btree/Btree*、以及一般的indexer技术。IPMap(421)具有作为输入数据的标识(例如,字节),以及作为输出提供至少一个单元(425)的标识和/或单元(425)上的一个位置,数据(或数据的一部分)将要被储存在该位置上。

在一个实施例中,脑(423)是软件组件,该软件组件监管数据可用性和单元(425)活动。每个单元(425)包括脑(423),该脑(423)可以为了更正数据而做出即时的决定。决定基于由一些单元(425)所提供的即时信息而做出。

脑(423)可以执行永久地或透明地作用于它决定更正的数据。基本上根据奇偶校验/冗余策略实现更正。

共用的RAID5/RAID6盘阵列设备可以实现针对奇偶校验/冗余的技术。然而,在当前应用的存储系统中,冗余/奇偶校验组不被获得以被储存在盘(417)的固定的组上(例如,阵列)。由于数据可靠性是独立于硬件的单一片段的可靠性的,这个改变将很大地改善系统的可靠性。

在一个实施例中,计算/储存实体(409)是在VIP映射(439)上所列出的微服务器(单元(425))的组。这可以例如作为一架或多架微处理器(单元(425))而实现。

每一个单元(425)实现软件,该软件使得它自动地假设在机架层级中的角色,通过例如负责数据的预先确定的组以及同时使用相同的软件,保证即使在实体(409)中的其他单元(425)可能发生故障的时候,能够避免服务降级而无需使得实体(409)提供给用户的服务降级。

机架层级的简单示例可以由以下各角色所实现:

元数据单元(425):包含关于许可、文件类型、共享、冗余等等信息的单元(425);以及

数据单元(425):包含数据(图片、视频等等)的单元(425)。

当实体(409)被询问来访问所储存的文件的时候,实体(409)访问元数据信息以确定用户是否可以访问所储存文件的数据。

示例的实现方式:实体(409)作为单元(425)的架所实现。架包括网络装置(交换器(411))、以及存储单元(425)的一些底座。这些装置中的每一个都可能由于各种原因而发生故障。为了减少对用户服务的缺少的风险,在每一个单元(425)内存在两种专用软件程序的实现方式:IPMap(421)以及脑(423)。IPMap(421)给单元(425)角色;以及脑(423)实现错误检测和/或错误更正的策略。在一些实施例中,CHORD模块还可以在IPMap的模型下被添加以提供在单元-实体层级的检测方面的标准方法。

IPMap(421)可以以HashMap的形式被实现。例如,当用户上传文件,该文件明确地与一组单元(425)相关联,并且文件的数据字节被储存在硬盘驱动(417)上,该硬盘驱动以独特的方式被附着在单元(425)的确定的组上。

例如,在一个示例的实施方式中,Md5被用于用户文件的文件名(例如,file.bmp)以获得散列值(435)(例如,4a586cf87b342878153dc3c81d76fccb)。

Md5(file.bmp)=4a586cf87b342878153dc3c81d76fccb

散列值(435)的前面的n字节通过用储存在公共的文件中的映射被加入IP地址(411)。具有IP地址(411)的单元(425)将储存用户文件(405)的数据的第一副本。

散列值(435)的n+1到m字节被用来个性化第二IP地址(411),以及具有第二IP地址(411)的单元(425)将储存用户文件(405)的数据的第二副本。

散列值(435)的m+1到p字节被用来标识微服务器(单元(425))的大容量存储器(457)的文件系统中的目录,用于储存用户文件(405)的数据的副本。

散列(345)的p+1到q字节被用来标识名称,文件通过该名称被储存在微服务器(单元(425))的大容量存储器(457)的文件系统中。

应当注意以上基于Md5所示出的简单方案的使用存在许多冲突(例如,不同的文件被映射到相同的存储位置)。可以实现智能系统以避免/解决该冲突和/或减少冲突的几率。

在本示例上构建的散列方法可以被用来标识多于两个的IP地址(411)用于储存多于两个的文件的副本,和/或储存错误-更正副本,该副本被储存在由从散列值(435)所确定的IP地址(411)所标识的单元(425)的一个上。

在采用CHORD模块的实施例中,可以用基于MD5方法生成一个或多个密钥。然而,用MD5散列方程所生成的密钥不直接映射到虚拟IP。通过用针对在CHORD模块中实现的点对点查找服务的通信协议来询问实体,用CHORD模块来复原可用(competent)的IP。虚拟IP对真实IP的映射仍旧被使用,但是基于动态。映射可用被认为在很长的时间段内是静态的,但是可以对它自己进行更新以免错误或新的实体,对于客户不产生任何影响,这可以保证对于每一个密钥接收负责该密钥的节点的VIP。

用这种方法,当单元(425)死亡的时候,系统可以忍受该单元(425)的缺失。在系统的剩余的单元(425)中运行的脑(423)检测到单元(425)的缺失并且可以重新组织来进行包括让其他单元(425)代替失去的单元的位置的操作。

用户文件(405)的全部数据仍旧是可用的,该用户文件(405)的全部数据储存在包含该相同文件的副本的剩余单元(425)的组中。任何单元(425)的脑(423)可以将这个数据从剩余的单元(425)移动到新的单元(425),该新的单元(425)在重新组织后加入该组。

在一个实施例中,每一个单元(425)可以由适当被设计的客户端所到达。例如,客户端发送消息到单元(425)。消息基本上包括关于将储存的用户文件(405)的数据。

位于单元(425)内的IPMap(421)计算文件将被储存在实体(409)的哪里。

消息包含关于冗余副本和延伸的校验副本的信息。冗余副本和校验允许忍受和对于最终的用户掩饰错误。

更多地,当执行写入/读取互动的时候,单元(425)收集关于以下各项的即时信息:

对于已复制的数据可用的副本数量;

对于校验更正数据的每个组可用的校验因子的数量;

成功写入另一个单元(425);

成功从另一个单元(425)读取;

成功连接到另一个单元(425);和/或

成功到达另一个单元。

当读取/写入数据的时候,这些指示符通常是可用的。如果发生了某些故障(和达到了某些警报阈值),脑(423)启动分析的常规程序使得对于更正或忍受该问题做出决定。

这种信息的可用性允许实施错误检测策略的实现。

基于所检测到的错误。错误-更正策略可以被触发。

一组先前的规则当前被植入脑(423)的软件中:

当检查冗余/奇偶策略的时候,如果一些副本(相同版本)被破坏,脑(423)负责替代该丢失的副本;

Ipmap(file)=adrr_copyl,addr_copy2,...,addr_copy3;

For each copy in

adrr_copy1,addr_copy2,...,addr_copy3;

Do:

if copy is damaged

read next(copy)and replace(copy);

Done;

当连接/到达单元(425)的时候,如果问题揭露,那么为了标识错误的宽度启动诊断常规程序。

如果它是到达问题,那么脑(423)尝试通过用另外的路径到达单元(425)。

单元(425)被提供了更多的网络接口卡(451):cell.a,cell.b等等。

If connect(cell.A)==false

Then:connect(cell.B)

如果存在连接问题(单元(425)是可到达的但是未能响应)修复策略被触发。

If connect(cell.A)==true

Then:If(SendData(cell.A,copy)==false and

SendData(cell.B,copy)==false)

Then:

//the copy is sent to another cell(425)

SendData(next(cell),copy)

如果太多单元(425)都是不可用的,则实体-服务被暂停。

For each cell(425)in Rack

Do:

If(connect(cell.A)==false and

Connect(cell.B)==false)

N=N+1;

Done

If N>25%of Rack SuspendService();

脑(423)可以作为规则引擎而实现。规则的组易于扩展。

图18-20根据一个实施例,示出了在实体中单元(425)的生命期。

在图18中,单元的实体(409)由用户所到达。用户上传文件A到实体(409)上。

他的文件立即被复制到一些单元(425)(例如,单元10,、单元10、单元2n)。

在(例如,单元2n)(或盘(427)连接到的)单元(425)被破坏之后,脑(423)检测问题并且复制来自依旧可用的单元(425)的数据,将数据包含在依旧响应的另一个单元(425)(例如,单元12)中,如在图19中所示。

在一个实施例中,不存在确定性的方法来标识将要掌握所恢复副本的单元(425),所以该过程可以一直持续直到网络已经相当广泛的时候。

在诊断/修复动作之后,用户能够再一次恢复他的文件无需缺少任何服务。

这种方法比下文所解释的目前的基于RAID的方法更好。

脑(423)还可以基于针对被配置用于作为规则引擎而运行的脑(423)的规则,来决定推迟修复或不更正问题,。

如果故障是暂时的(例如,网络(407)问题)或维修操作被执行以重新启动丢失的单元(425)/盘(417),一段时间内数据是过剩的,如图20所示的。在实体(409)的单元(425)中的一个上运行的脑(423)现在可以决定移除旧的副本使得能够维持实体(409)中的盘(417)空间的适度的低使用率。

在一个实施例中,技术被提供以实现针对电子数据的存储系统,该系统依据表现和存储空间,是虚拟地并且无限的可扩展的。该系统包括经由计算机网络所连接的一组微服务器,来针对角色分配以及数据恢复自我组织它们自己。映射技术被用来横跨微服务器的子集,分配储存任务和/或计算任务用于用数据冗余来储存或重新获得用户文件;并且基于用户文件的标识符以确定性的方法从系统可用的服务器中选择子集。选择被配置来在系统的微服务器之间伪随机地分配与不同的文件相关联的任务。

在一个实施例中,实现存储系统的方法包括:提供多个单元计算设备,其中每一个相应的单元计算设备具有网络接口、数据存储设备、处理器、以及储存那些被配置来操作相应的单元计算设备的指令的存储器。

当网络接口被连接到计算机网络的时候,相应的单元计算设备由指令(例如,实现针对点对点查找服务的指令,诸如在CHORD模块中的那些)所配置以至少执行以下操作:标识当前连接到计算网络的多个单元计算设备;在多个单元计算设备之间进行通信以维护在一组虚拟地址与多个单元计算设备之间的映射;接收数据集的标识;计算来自标识的虚拟地址;确定虚拟地址是否基于映射而对应于相应的单元计算设备;以及响应于确定虚拟地址响应于单元计算设备,储存或处理独立于在计算机网络上的其他单元计算设备的数据集的至少一部分。

在一个实施例中,响应于检测存在于计算机网络上的单元计算设备中的变化,当前存在于计算机网络上的单元计算设备与彼此进行通信以更新虚拟地址的组与当前存在于计算机网络上的单元计算设备之间的映射。

在一个实施例中,响应于检测到先前在映射中的单元计算设备的缺少,该单元计算设备根据基于更新该映射的一组规则来自动地执行数据恢复操作。

在一个实施例中,非暂态的计算机存储介质储存指令,该指令被配置以指示单元计算设备来执行上文所讨论的多个实施例的操作。

在一个实施例中,相应的单元计算设备被配置以指令以执行上文所讨论的多个实施例的操作。

在一个实施例中,计算系统包括连接到计算机网络并且被配置以执行以上所讨论的多个实施例的操作的指令的多个单元计算设备。

在一个实施例中,单元(425)的存储器(419)包括以下各项的一个或多个:ROM(只读计算机)、易失RAM(随机读取存储器)、以及非易失存储器(诸如硬件驱动、闪存等等)。

易失RAM具体地被实现为动态RAM(DRAM),该动态RAM持续地需要能量,为了刷新或维护在存储器中的数据。非易失存储器具体是磁盘驱动器、磁光盘驱动器、光盘驱动器(例如,DVD RAM)、或即使在能量被移除系统的之后仍能够维护数据的其他类型的存储器系统。非易失存储器还可以是随机存取存储器。

非易失存储器可以是直接耦接到在数据处理系统中的其余组件的本地设备。与系统的远程的非易失存储器,例如经由网络接口(诸如调制解调器或以太网接口)耦接到数据处理系统的网络存储设备也可以被使用。

在本说明中,出于简化说明的目的,一些功能与操作被描述为由软件代码所执行或引起。然而,这种表示还被用来指定该功能是由处理器(诸如,微处理器)对于代码/指令的执行而得出。

此外,或组合地,本文所描述的功能与操作可以用具有或不具有软件指令的专用电路被实现,诸如用专用集成电路(ASIC)或现场可编程门阵列(FPGA)。实施例可以用不具有软件指令的硬线电路而实现,或与软件指令相组合而实现。因此,技术既不被限制于硬件电路与软件的任何具体组合,也不被限制于用于由数据处理系统所执行的指令的任何特定的源。

尽管一个实施例可以在功能健全的计算机和计算机系统中被实现,但是各种实施例可以作为各种形式的计算产品被分配,并且可以被采用而不论真实地影响该分配的机器或计算机可读介质的特定的类型。

所公开的至少一些方面可以在软件中被至少部分地实施。即,技术可以对应于执行在存储器(诸如ROM、易失RAM、非易失存储器、缓存或远程存储设备)中所包含的指令的序列的它的存储器(诸如,微处理器)而在计算机系统或其他数据处理系统中被实施。

被执行以实现实施例的常规程序可以作为被称为“计算机程序”的操作系统的部分或具体的应用、组件、程序、对象、模块或指令的序列而实现。计算机程序通常包括计算机中的各种存储器和存储设备中在多个时刻的一个或多个指令的组,并且当由在计算机中的一个或多个处理器所读取和执行的时候,使得计算机执行对于执行涉及各种方面的元素的关键的操作。

机器可读介质可以被用来储存软件与数据,当由数据处理系统所执行的时候使得该系统执行各种方法。可执行的软件与数据被储存在各种空间中,该空间包括诸如ROM、易失RAM、非易失存储器和/或缓存。这种软件和/或数据的部分可以被储存在这些存储设备中的任何一个中。此外,数据和指令可以从中央服务器或点对点网络中所获得。数据和指令的不同的部分可以从不同的中央服务器和/或点对点网络在不同的时刻、在不同的通信会话、或在相同的通信会话中所获得。数据和指令可以先于应用的执行而全部地获得。此外,数据和指令的位置可以当被需要用于执行的时候及时被动态地获得。因此,不要求数据和指令在特定的时刻全部在机器可读介质上。

计算机可读介质的示例包括但不局限于可记录的和不可记录的类型的介质,诸如易失的和非易失的存储设备、只读存储器(ROM)、随机存取存储器(RAM)、闪存设备、软盘以及其他可移动的盘、磁盘存储介质、光盘存储介质(例如,光盘只读存储器(CD ROMS)、数字通用光盘(DVD)等等)。计算机可读介质可以储存指令。

指令还可以被体现在用于电的、光的、声学或其他形式的传播信号(诸如,载波、红外线信号、数字信号等等)的数字和模拟通信链路中。然而,传播信号(诸如,载波、红外线信号、数字信号等等)不是有形的机器可读的介质并且不被配置来储存指令。

总的来说,机器可读介质包括提供(即,储存和/或传输)由机器(例如,计算机、网络设备、个人数字助手、制造工具、具有一个或多个处理器的集的任何设备等等)可访问的形式的信息的任何机制。

在各种实施例中,硬件电路可以应用在与软件指令的组合中以实现该技术。因此,该技术既不局限于硬件与软件的任何具体的组合,也不局限于用于由数据处理系统所执行的指令的任何特定的源。

本说明书与附图是示例性的并且不应被理解为限制性的。本公开是发明特性的示出,使得本领域技术人员能够做出和使用该技术。大量的具体细节被描述以提供透彻的理解。然而,在某些示例中,出于避免模糊说明的目的,众所周知的或传统的细节没有被描述。在本公开中的一个实施例的参考条件,并不是对于相同的实施例所必需的参考条件;并且,这些参考条件意为至少一个。

本文标题的使用仅仅出于易于参考的目的被提供,并且不应以任何方式被理解为限制本公开或下文的权利要求书。

参考“一个实施例”意为联系该实施例所描述的具体的特性、结构、或特征被包括在本公开的至少一个实施例中。在说明书中的多处出现的短语“在一个实施例中”并不是必须指的是同一实施例,并且并不必须全部指的是排除其他实施例的单独的或其他的实施例。此外,所描述的各种特性可以由一个实施例而不是由其他实施例所呈现的。相似地,所描述的各种要求可以是针对一个实施例而不是其他实施例的要求。除非由明确说明和/或明显不相容性所排除,本说明中所描述的各种特性的组合也被本文所包括。例如,以上联系“在一个实施例中”或“在一些实施例中”的所描述的特性可以全部有选择地被包括在一个实现方式中,除了以下情况:从本说明中能够明显得得出的,某些特性是其他特性的从属,则可能限制从实现方式中排除所选中的特性;以及如从本说明中能够明显得得出的,某些特性与其他特性的不相容性,则可能限制在实现方式中一起包括所选中的特性。

在前述的说明书中,本公开已经参照具体的示例的实施例所描述。显然的是,可以做出多种修改而不离开如下述权利要求书中所列出的宽泛的精神和范围。相应地,本说明书以及附图被理解为示例的表达而不是限制的表达。

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