存储方法和分布式存储系统与流程

文档序号:12664122阅读:314来源:国知局
存储方法和分布式存储系统与流程

本发明涉及数据存储技术领域,具体涉及一种存储方法和分布式存储系统。



背景技术:

随着计算机应用规模越来越大,对存储空间的需求也与日俱增。对应的,将复数设备的存储资源(比如,诸如磁盘组的存储介质)统合为一体作为一个存储池来提供存储服务成为了现在的主流。然而,在一个包含多个存储控制节点的分布式存储系统中,虽然多个存储控制节点同时对存储池中的同一个存储单元执行读取操作不会互相冲突,但当多个存储控制节点同时对同一个存储单元执行写入操作时会产生冲突,或当两个存储控制节点同时对存储池中的同一个存储单元分别执行读取操作和写入操作时也会产生冲突。由此可见,急需一种可避免上述提到的冲突的存储方式,以保证存储过程的效率和质量。



技术实现要素:

有鉴于此,本发明实施例提供了一种存储方法、存储装置和分布式存储系统,解决了现有存储方式导致的读操作和写操作之间冲突,以及写操作和写操作之间冲突的问题。

本发明一实施例提供的一种存储方法应用于一种分布式存储系统,所述分布式存储系统包括:至少两个存储控制节点和一个由所述至少两个存储控制节点共享的存储池,存储池包括至少两个存储单元,当任一所述存储控制节点要对所述存储池写入数据时,所述方法包括:

判断存储池中是否存在数据内容与当前写入数据相同的重复存储单元;以及

若判断结果为否,从所述存储池中分配一个空闲存储单元,将当前写入数据写入所述空闲存储单元。

本发明一实施例提供的一种分布式存储系统包括:至少两个存储控制节点和一个由所述至少两个存储控制节点共享的存储池,所述存储控制节点包括:

去重判断模块,配置为判断存储池中是否存在数据内容与当前写入数据相同的重复存储单元;

空闲单元管理模块,配置为从所述存储池中分配一个空闲存储单元;以及

写入模块,配置为若所述去重判断模块返回的判断结果为是,返回所述重复存储单元的存储地址;否则,将当前写入数据写入所述空闲单元管理模块所分配的空闲存储单元,返回已写入所述当前写入数据的所述空闲存储单元的存储地址。

本发明实施例提供的一种存储方法和分布式存储系统,每当存储控制节点要向存储池中写入数据时,首先判断存储池中是否存在数据内容与当前写入数据相同的重复存储单元。当不存在重复存储单元时,说明当前写入数据为存储池中所没有的新的数据内容,此时在一个空闲存储单元中写入当前写入数据。这样其他存储控制节点同时进行的读取操作仍可从当前存储单元中读取原有数据内容,其他存储控制节点同时进行的另一个写入操作则可在另一个空闲存储单元中写入另一个写入数据。由此可见,通过本发明实施例所提供的存储方式,读操作和写操作、以及写操作和写操作之间都不会产生冲突,从而有效保证了数据内容存储的效率和质量。同时,通过重复存储单元的判断过程避免了数据内容的重复存储,节约了存储空间,提高了存储资源的利用效率。

附图说明

图1所示为本发明一实施例提供的一种存储方法的流程示意图。

图2a所示为本发明一实施例提供的一种存储方法的原理示意图。

图2b所示为本发明一实施例提供的存储对象结构示意图。

图3所示为本发明一实施例提供的一种存储方法的流程示意图。

图4所示为本发明一实施例提供的一种存储方法中判断是否存在重复存储单元的流程示意图。

图5所示为本发明一实施例提供的存储控制节点的结构示意图。

图6所示为本发明另一实施例提供的存储控制节点的的结构示意图。

图7所示为本发明另一实施例提供的存储控制节点的的结构示意图。

图8所示为本发明一实施例提供的一种分布式存储系统的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1所示为本发明一实施例提供的一种存储方法的流程示意图。该存储方法应用于一种分布式存储系统,该分布式存储系统包括:至少两个存储控制节点和一个由该至少两个存储控制节点共享的存储池,存储池包括至少两个存储单元,当任一存储控制节点要对存储池写入数据时,该方法包括:

步骤101:判断存储池中是否存在数据内容与当前写入数据相同的重复存储单元。

若存储池中存在重复存储单元,则说明当前写入数据已经存储在了存储池中,此时就没有必要重复写入该当前写入数据了。

步骤102:如图2a所示,若判断结果为否,从存储池中分配一个空闲存储单元,将当前写入数据写入该空闲存储单元。

若存储池中并不存在重复存储单元,则说明当前写入数据为并未存储在存储池中的新的数据内容。通过先分配一个空闲存储单元,将其锁定后再写入新数据,可以保证不会有其它存储控制节点写入同一存储单元。由此可见,通过本发明实施例所提供的存储方式,读操作和写操作、以及写操作和写操作之间都不会产生冲突,从而有效保证了数据内容存储的效率和质量。同时,通过重复存储单元的判断过程避免了数据内容的重复存储,节约了存储空间,提高了存储资源的利用效率。

虽然图2a所示的仅为针对一个存储单元执行写入操作的过程,然而在本发明一实施例中,一个或多个存储单元可构成一个存储对象。这样当一个存储控制节点要对存储池中的一个存储对象执行写入操作时,需要针对存储对象所包括的多个存储单元逐一判断是否存在重复存储单元,并将存储对象中不存在重复存储单元的存储单元的数据写入存储池中的空闲存储单元中。

在本发明一实施例中,存储池可被预先划分为多个存储单元,其中每个存储单元所占据的存储空间相同。在一进一步实施例中,存储单元可以是一个逻辑层面上的存储概念。如图2b所示,一个存储单元可以是一个逻辑page,而一个逻辑page可包括至少一个物理page,该至少一个物理page可分布在至少一个存储介质中。这样当一个或多个存储单元构成一个存储对象时,从逻辑的层面上看一个存储对象中的不同存储单元是连续的,但在物理的层面上看该存储对象所对应的物理page可能是分布在存储池的多个存储介质中的。在一进一步实施例中,为了提高对于存储单元的读写效率,一个逻辑page所对应的至少一个物理page可分布在不同的存储介质中;为了实现物理层面上的容灾机制以保证数据存储安全,一个逻辑page所对应的至少一个物理page之间还可以冗余存储(例如RAID或Erasure Code)方式保存数据内容。

同时应当理解,与存储单元对应的存储地址也可以是一个逻辑层面上的概念,对应一个逻辑page;一个存储地址还可能包括至少一个实际的物理地址,该至少一个物理地址可以是不连续的,分别对应不同的物理page。由此可见,当对存储池中的一个存储单元执行写入操作时,实际上可能是对分布在存储池的不同存储介质中的多个物理page执行了写入操作,这样在后续的读取操作或写入操作时可同时享用不同存储介质的硬件资源以提高读写效率,并可以用冗余存储的方式提高数据可靠性和可用度,在部分存储介质出现故障时依然能正常读写数据。

还应当理解,当本发明实施例所提供的存储方法应用到不同的分布式存储系统结构中时,存储对象可能对应不同的具体形式。例如该存储对象可以是一个块设备、一个文件系统中的文件,或一个对象分布式存储系统中的对象等。本发明对存储对象的具体形式不做限定。

在本发明一实施例中,每个存储控制节点都能够无需借助其他存储控制节点而访问存储池中的所有存储单元,从而使得本发明所有的存储介质都实际上被所有的存储控制节点共享,进而实现了全局存储池的效果。在一进一步实施例中,上述全局存储池的效果可通过存储网络实现。具体而言,该分布式存储系统可进一步包括存储网络,至少两个存储节点和至少一个存储介质分别连接至存储网络,每个存储控制节点通过存储网络访问存储池中的存储单元。存储网络被配置为使得每一个存储控制节点都能够无需借助其他存储控制节点而访问所有存储介质。

在本发明一实施例中,存储网络可以包括至少一个存储交换设备,通过其中包括的存储交换设备之间的数据交换来实现存储控制节点对存储介质的访问。具体而言,存储控制节点和存储介质分别通过存储通道与存储交换设备连接。

在本发明另一实施例中,存储网络可以包括至少两个存储交换设备,每个存储控制节点都可以通过任意一个存储交换设备连接到任何一个存储介质。当任何一个存储交换设备或连接到一个存储交换设备的存储通道出现故障时,存储控制节点通过其它存储交换设备读写存储介质上的数据。

在本发明一实施例中,存储交换设备可以是SAS交换机或PCI/e交换机或Omni Path交换机或Infiniband交换机或以太网交换机或TLink交换机,对应地,存储通道可以是SAS(串行连接SCSI)通道或PCI/e通道或Omni Path通道或Infiniband通道或以太网通道或TLink通道。

在本发明一实施例中,存储池包括至少一个连接至存储网络的存储设备,每个存储设备又包括至少一个存储介质,存储控制节点所在的物理机独立于存储设备,存储设备更多作为连接存储介质与存储网络的一个通道。这样的方式,使得在需要进行动态平衡时,无需将物理数据在不同的存储介质中进行迁移,只需要通过配置平衡不同的存储控制节点所管理的存储介质即可。

在本发明另一实施例中,存储控制节点侧进一步包括计算节点,并且计算节点和存储控制节点设置在一台物理服务器中,该物理服务器通过存储网络与存储设备连接。利用本发明实施方式所构建的将计算节点和存储控制节点位于同一物理机的分布式共享(Distributed Shared)存储系统,从整体结构而言,可以减少所需物理设备的数量,从而降低成本。同时,计算节点也可以在本地访问到其希望访问的存储资源。另外,由于将计算节点和存储控制节点聚合在同一台物理服务器上,两者之间数据交换可以简单到仅仅是共享内存,性能特别优异。

在本发明一实施例中,存储介质可以包括但不限于硬盘、闪存、SRAM、DRAM、NVME或其它形式,存储介质的访问接口可以包括但不限于SAS接口、SATA接口、PCI/e接口、DIMM接口、NVMe接口、SCSI接口、AHCI接口。

在本发明一实施例中,当存储控制节点的写入数据操作被调用时,存储控制节点需要将该当前写入数据的实际存储地址返回给该调用者。而由于根据是否存在重复存储单元的情况不同,当前写入数据的实际存储地址是不同的。此时就需要根据是否存在重复存储单元的判断结果返回给调用者不同的存储地址。

图3所示为本发明一实施例提供的一种存储方法的流程示意图。当存储控制节点的写入数据操作被调用时,相对于图1所示的存储方法,图3所示的存储方法进一步包括:

步骤103:若判断结果为否,返回已写入当前写入数据的空闲存储单元的存储地址。

当不存储重复存储单元时,当前写入数据的实际存储地址为该写入的孔隙存储单元的存储地址,因此需要将该空闲存储单元的存储地址返给调用者以便于调用者定位到该当前写入数据。

步骤104:若判断结果为是,返回重复存储单元的存储地址。

当存在重复存储单元时,当前写入数据其实并没有被写入存储池,由于重复存储单元的数据内容与当前写入数据是相同的,将该重复存储单元的存储地址返回给调用者仍可保证调用者定位到与该当前写入数据相同的数据内容。

在本发明一实施例中,当一个或多个存储单元构成一个存储对象时,可在存储对象的元数据中记录存储对象中每个存储单元的存储地址。当在当前的写操作中存储单元的存储地址被更改时,存储对象的元数据要实时更新。例如,当对一个存储对象执行写入操作时,发现其中一个存储单元存在重复存储单元,则在存储对象的元数据中将该存储单元的存储地址更新为该重复存储单元的存储地址;而对于存储对象中并不存在重复存储单元的存储单元,说明这些存储单元的数据内容相对于原有数据内容发生了变化,由于这些存储单元的当前写入数据被写入了空闲存储单元,因此要在存储对象的元数据中将该存储单元的存储地址更新为该写入的空闲存储单元的存储地址。这样当后续的读取操作要读取该存储对象中的该存储地址发生变化的存储单元的数据内容时,便可从该更新后的元数据中获取该更新后的存储地址。而被更新掉的存储单元则被从当前存储对象中释放。当一存储单元不从属于任何存储对象时,该存储对象便可用于回收利用,具体的回收利用机制在后续的实施例中描述。

在本发明一实施例中,如图4所示,上述判断是否存在重复存储单元的过程也可具体通过如下过程实现:首先计算当前写入数据的数字摘要(S41);然后,判断存储池中是否存在数字摘要与当前写入数据的数字摘要相同的存储单元(S42);以及将存储池中数字摘要与当前写入数据的数字摘要不相同的存储单元确定为不重复存储单元(S43)。由于数字摘要与当前写入数据的数字摘要不相同的存储单元肯定不是重复存储单元,因此通过这种判断过程相当于缩小了在存储池中判断重复存储单元的范围,提高了判断效率。在本发明一实施例中,可以将存储池中数字摘要与当前写入数据的数字摘要相同的存储单元确定为重复存储单元。然而应当理解,也可以将数字摘要与其他的判断方式相结合来判断重复存储单元。例如,在本发明一实施例中,考虑到数字摘要并不能完全代表存储单元的数据内容,不同的数据内容仍有很小的概率计算出相同的数字摘要,为了避免当前写入数据被漏写,即便数字摘要的判断结果为相同,仍需要验证数字摘要与当前写入数据的数字摘要相同的存储单元的数据内容是否与当前写入数据相同,只有数据内容对比结果也为相同时才将数字摘要比较结果为相同的存储单元确定为重复存储单元。

在本发明一实施例中,存储单元或当前写入数据的数字摘要可为字符串形式,此时数字摘要的获取方法包括:选取一个N个字符构成的字符集;计算出二进制形式的数字摘要,这里计算二进制形式数字摘要的具体算法可根据需要提前选取,本发明对此不做限定;将二进制形式的数字摘要转换成N进制;以及将N进制形式的数字摘要转换为字符串,转换方法为将N进制形式的数字摘要的每一位转换成字符集中对应的一个字符。采用预先设定的固定长度字符集可简化二进制数字摘要的内容,从而进一步简化重复存储单元的判断过程,提高判断效率。

应当理解,当本发明实施例所提供的存储方法应用到不同的分布式存储系统结构中时,上述对于重复存储单元的判断过程又可能有不同的具体实现形式。例如,当存储池中建立有文件系统时,每个存储单元为文件系统中的一个文件,文件的文件名为存储单元的数字摘要。此时对于是否存储重复存储单元的判断过程其实为:判断文件系统中是否存在文件名与当前写入数据的数字摘要相同的文件。

如前所述,随着对存储池中存储单元的不断写入操作,一个存储对象中所包括的存储单元也不断更新,被更新掉的存储单元则会被从原有的存储对象中释放。而当一个存储单元不再从属于任一个存储对象时,该存储单元就可被回收用于后续写入操作的空闲存储单元。

在本发明一实施例中,可记录存储池中每个存储单元的引用计数。每当对于是否存在重复存储单元的判断结果为是时,说明该重复存储单元又被加入到了一个存储对象中,此时增加重复存储单元的引用计数。而每当一个存储单元被释放时,减少该存储单元的引用计数。在本发明一进一步实施例中,当一个存储单元的引用计数减为零时,说明该存储单元已经不从属于任何存储对象,则将该存储单元记录为空闲存储单元,从而实现对存储池中存储空间的回收利用。

在本发明一实施例中,可通过一个记录表记录存储池中每个存储单元的引用计数,该引用计数的初始值为零。由于每个存储单元都会对应一个存储地址,因此该记录表记录的也是存储池中每个存储地址的引用计数。当利用存储对象的元数据记录存储对象中每个存储单元的存储地址时,每当一个存储地址被更新至一个存储对象的元数据中时,该存储地址的引用计数加1;每当一个存储地址被从一个存储对象的元数据中被更新掉时,存储地址的引用计数减1。例如一个存储系统包含S1和S2两个存储对象,一个存储对象S1包括四个存储单元,所对应的存储地址分别为ABCD;而另一个存储对象S2也包括四个存储单元,所对应的存储地址分别为EBFG,可见其中的B存储地址被S1和S2所共用。那么此时记录表所记录的ABCDEFG几个存储地址的引用计数就分别为1211111。当S1和S2各经过一次写操作后,S1的元数据中存储地址被更新为了AHCD,其中的B地址被更新掉了;而S2的元数据中存储地址被更新为了EIJG,其中的B地址和F地址被更新掉了。此时记录表所记录的ABCDEFG几个存储地址的引用计数就变成了1011101,其中的B地址和F地址的引用计数减为了零,说明此时B地址所对应的存储单元和F地址所对应的存储单元并没有被任何存储对象所占用,可以用于回收利用。

在本发明一实施例中,如前所述,当一个存储控制节点要将当前写入数据写入存储池的一个空闲存储单元时,要先从存储池中分配一个空闲存储单元。考虑到不同的存储控制节点在同时从存储池中获取空闲存储单元时会产生冲突,可在存储池中设置至少两个预留空闲存储空间,其中每个预留空闲存储空间对应一个存储控制节点。这样当一个存储控制节点要将当前写入数据写入存储池的一个空闲存储单元时,其实是从存储控制节点所对应的预留空闲存储空间中分配一个空闲存储单元,因此并不会与其他存储控制节点的写入过程产生冲突。

在一进一步实施例中,为了保持一个存储控制节点所对应的预留空闲存储空间中总是有足够数量的空闲存储单元,还可在当一个存储控制节点所对应的预留空闲存储空间的大小低于第一阈值时,从存储池未分配的空闲存储空间中分配一部分给一个存储控制节点所对应的预留空闲存储空间例如,假设一个存储控制节点所对应的预留空闲存储空间中最多包括N个空闲存储单元,其中N为大于等于2的整数;则当预留空闲存储空间中的空闲存储单元数量少于M时,从存储池中获取N-M个空闲存储单元以补充预留空闲存储空间,其中M为小于N大于0的整数。

本发明一实施例提供一种分布式存储系统,包括:至少两个存储控制节点和一个由至少两个存储控制节点共享的存储池。如图5所示,该存储控制节点包括:

去重判断模块51,配置为判断存储池中是否存在数据内容与当前写入数据相同的重复存储单元;

空闲单元管理模块52,配置为从存储池中分配一个空闲存储单元;以及

写入模块53,写入模块,配置为若去重判断模块51返回的判断结果为是,返回所述重复存储单元的存储地址;否则,将当前写入数据写入空闲单元管理模块52所分配的空闲存储单元,返回已写入所述当前写入数据的所述空闲存储单元的存储地址。

在本发明一实施例中,如图6所示,该去重判断模块51包括:

数字摘要记录单元511,配置为记录所有存储单元的数字摘要;

数字摘要计算单元512,配置为计算当前写入数据的数字摘要;以及

第一判断单元513,配置为判断数字摘要记录单元中是否存在与当前写入数据的数字摘要相同的数字摘要,将数字摘要记录单元中数字摘要与当前写入数据的数字摘要不相同的存储单元确定为不重复存储单元。

在本发明一实施例中,去重判断模块51进一步包括:

验证单元,配置为在将数字摘要记录单元中数字摘要与当前写入数据的数字摘要相同的存储单元确定为重复存储单元之前,验证数字摘要与当前写入数据的数字摘要相同的存储单元的数据内容是否与当前写入数据相同。

在本发明一实施例中,存储池中建立有文件系统,每个存储单元为文件系统中的一个文件,文件的文件名为存储单元的数字摘要;

则,去重判断模块51中的第一判断单元513进一步配置为,判断文件系统中是否存在文件名与当前写入数据的数字摘要相同的文件。

在本发明一实施例中,如图7所示,该存储控制节点进一步包括:

引用次数记录模块54,配置为记录存储池中每个存储单元的引用计数;其中每当去重判断模块51返回的判断结果为是时,增加重复存储单元的引用计数;每当一个存储单元被释放时,减少该存储单元的引用计数;

其中空闲单元管理模块52进一步配置为,当引用次数记录模块54所记录的一个存储单元的引用计数减为零时,将该存储单元记录为一个空闲存储单元。

在本发明一实施例中,存储池包括至少两个预留空闲存储空间,其中每个预留空闲存储空间对应一个存储控制节点;

其中空闲单元管理模块52进一步配置为,从存储控制节点所对应的预留空闲存储空间中分配空闲存储单元。

在本发明一实施例中,每个存储控制节点都能够无需借助其他存储控制节点而访问存储池中的所有存储单元。

在本发明一实施例中,如图8所示,该分布式存储系统进一步包括存储网络30,至少两个存储节点10和至少一个存储介质20分别连接至存储网络30,存储池40由至少一个存储介质20构成,每个存储控制节点10通过存储网络30访问存储池40中的存储介质20。

应当理解,上述实施例所提供的分布式存储系统中记载的每个模块或单元都与前述的一个方法步骤相对应。由此,前述的方法步骤描述的操作和特征同样适用于该分布式存储系统及其中所包含的对应的模块和单元,重复的内容在此不再赘述。

本发明的教导还可以实现为一种计算机可读存储介质的计算机程序产品,包括计算机程序代码,当计算机程序代码由处理器执行时,其使得处理器能够按照本发明实施方式的方法来实现如本文实施方式的存储方法。计算机存储介质可以为任何有形媒介,例如软盘、CD-ROM、DVD、硬盘驱动器、甚至网络介质等。

应当理解,虽然以上描述了本发明实施方式的一种实现形式可以是计算机程序产品,但是本发明的实施方式的方法或装置可以被依软件、硬件、或者软件和硬件的结合来实现。硬件部分可以利用专用逻辑来实现;软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的方法和设备可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本发明的方法和装置可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合例如固件来实现。

应当理解,尽管在上文的详细描述中提及了装置的若干模块或单元,但是这种划分仅仅是示例性而非强制性的。实际上,根据本发明的示例性实施方式,上文描述的两个或更多模块/单元的特征和功能可以在一个模块/单元中实现,反之,上文描述的一个模块/单元的特征和功能可以进一步划分为由多个模块/单元来实现。此外,上文描述的某些模块/单元在某些应用场景下可被省略。

应当理解,为了不模糊本发明的实施方式,说明书仅对一些关键、未必必要的技术和特征进行了描述,而可能未对一些本领域技术人员能够实现的特征做出说明。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换等,均应包含在本发明的保护范围之内。

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