一种基于流式分布式存储系统的数据均衡存储方法转让专利

申请号 : CN202110980898.3

文献号 : CN113655969B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 齐翔瞿洪桂王华王思瑶

申请人 : 北京中电兴发科技有限公司

摘要 :

本发明提供一种基于流式分布式存储系统的数据均衡存储方法,包括:对各个在线节点的剩余网络带宽b进行求和计算,得到集群总剩余网络带宽;对各个在线节点的剩余存储容量c进行求和计算,得到集群总剩余存储容量;计算需接入设备的总网络带宽和总存储容量;选择带宽优先存储策略、容量优先存储策略或资源能力指数存储策略进行数据存储。具有以下优点:(1)根据当前分布式存储系统中网络带宽或存储容量,采用对应的最佳存储策略进行数据存储,保证数据存储分片均匀分布于分布式系统中的各个节点,提升系统资源利用率。(2)保证无论是同构系统还是异构的分布式系统,都支持数据的均衡分布,保证系统负载均衡。同时支持集群的扩容及缩容场景。

权利要求 :

1.一种基于流式分布式存储系统的数据均衡存储方法,其特征在于,包括以下步骤:步骤1,确定流式分布式存储系统采用k+m的纠删码冗余存储策略;其中,k代表数据节点数量,m代表校验节点数量;

步骤2,当接收到流式设备E的接入请求时,对接入请求进行解析,获得以下参数:流式设备E的设备ID、存储周期T和需要占用的总网络带宽B(E);

根据存储周期T和需要占用的总网络带宽B(E),计算得到流式设备E需要占用的总存储容量C(E);

步骤3,获取当前流式分布式存储系统的以下参数:当前在线节点数量n、每个在线节点的剩余网络带宽b和每个在线节点的剩余存储容量c;

对各个在线节点的剩余网络带宽b进行求和计算,得到集群总剩余网络带宽B(F);对各个在线节点的剩余存储容量c进行求和计算,得到集群总剩余存储容量C(F);

步骤4,如果B(E)/B(F)>9[C(E)/C(F)],则表明当前集群的带宽资源稀缺,存储容量资源充足,执行步骤5;

如果C(E)/C(F)>9[B(E)/B(F)],则表明当前集群的存储容量资源稀缺,带宽资源充足,执行步骤6;

如果以上两个条件均不满足,则执行步骤7;

步骤5,采用带宽优先存储策略:

步骤5.1,预设置集群在线节点数量阈值ε0;

步骤5.2,比较当前在线节点数量n和集群在线节点数量阈值ε0,如果当前在线节点数量n大于集群在线节点数量阈值ε0,则执行步骤5.3;否则,执行步骤5.4;

步骤5.3,采用堆排序算法,按节点的剩余网络带宽从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余网络带宽最大的在线节点;

对于选出的k+2m个剩余网络带宽最大的在线节点,如果存在剩余网络带宽相同的在线节点,则采用插入排序算法,按节点的剩余存储容量从大到小的顺序,对剩余网络带宽相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;

对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;

步骤5.4,采用快速排序算法,按节点的剩余网络带宽从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余网络带宽最大的在线节点;

对于选出的k+2m个剩余网络带宽最大的在线节点,如果存在剩余网络带宽相同的在线节点,则采用插入排序算法,按节点的剩余存储容量从大到小的顺序,对剩余网络带宽相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;

对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;

步骤6,采用容量优先存储策略:

步骤6.1,预设置集群在线节点数量阈值ε1;

步骤6.2,比较当前在线节点数量n和集群在线节点数量阈值ε1,如果当前在线节点数量n大于集群在线节点数量阈值ε1,则执行步骤6.3;否则,执行步骤6.4;

步骤6.3,采用堆排序算法,按节点的剩余存储容量从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余存储容量最大的在线节点;

对于选出的k+2m个剩余存储容量最大的在线节点,如果存在剩余存储容量相同的在线节点,则采用插入排序算法,按节点的剩余网络带宽从大到小的顺序,对剩余存储容量相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;

对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;

步骤6.4,采用快速排序算法,按节点的剩余存储容量从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余存储容量最大的在线节点;

对于选出的k+2m个剩余存储容量最大的在线节点,如果存在剩余存储容量相同的在线节点,则采用插入排序算法,按节点的剩余网络带宽从大到小的顺序,对剩余存储容量相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;

对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;

步骤7,采用资源能力指数存储策略:

步骤7.1,对于每个在线节点i,采用下式,计算其资源能力指数ei:其中:

bi为在线节点i的剩余网络带宽;

bi′为在线节点i的总网络带宽;

ci为在线节点i的剩余存储容量;

ci′为在线节点i的总存储容量;

rb为在线节点i的网络带宽权重;

rc为在线节点i的存储容量权重;

rb和rc通过以下公式计算获得:

rb=B(E)/B(F)÷[B(E)/B(F)+C(E)/C(F)]rc=(C(E)/C(F))÷[B(E)/B(F)+C(E)/C(F)];

步骤7.2,按节点的资源能力指数从大到小的顺序,对n个在线节点进行排序,选出k+m个资源能力指数最大的在线节点;然后执行步骤8;

步骤8,对于选出的k+m个在线节点,判断各个在线节点的剩余存储容量是否均满足对流式设备E的分片存储需求;如果满足,则实时将流式设备E传输的视频数据,按k+m的纠删码冗余存储策略,存储到选出的各个在线节点;然后返回步骤2;

如果存在不满足分片存储需求的在线节点,则进一步按以下两种存储策略之一处理:强制存储策略:

假设当前选择的k+m个在线节点中,存在x1个在线节点不满足单个存储分片的容量要求,则对剩余的k+m‑x1个在线节点按照剩余存储容量降序排序后,判断各在线节点是否满足存储分片循环存储的容量要求,即:单个在线节点支持存储多个存储分片;如果满足,则进行存储分片循环存储;

如果不满足,则从剩余的k+m‑x1个在线节点中,选择出剩余存储容量最高的k+m‑x1‑1个在线节点,并对k+m‑x1‑1个在线节点按照剩余存储容量降序排序后,判断各在线节点是否满足存储分片循环存储的容量要求,如果满足,则进行存储分片循环存储;

如果不满足,则从k+m‑x1‑1个在线节点中,选择出剩余存储容量最高的k+m‑x1‑2个在线节点,依此类推,直到当只选择出1个剩余存储容量最高的在线节点时,该在线节点的剩余存储容量仍然不满足存储分片循环存储的容量要求,则返回存储失败的通知消息;

非强制存储策略:对于当前选择的k+m个在线节点,只有存在1个在线节点的剩余存储容量不满足单个存储分片的容量要求,则返回存储失败的通知消息。

2.根据权利要求1所述的一种基于流式分布式存储系统的数据均衡存储方法,其特征在于,还包括:对于流式分布式存储系统,当需要新增多个在线节点进行扩容时,在接入流式设备时,在步骤3中,将新增的多个在线节点和原有的在线节点作为统计对象,统计各在线节点的参数即可;

当需要移除流式分布式存储系统中的部分在线节点时,首先将需要移除的在线节点所存储的数据,以存储分片为单位,将各存储分片迁移存储到其他在线节点上,并更新数据存储位置记录;然后,当需要接入流式设备时,在步骤3中,只需要将剩余在线节点作为统计对象,统计各剩余在线节点的参数即可。

说明书 :

一种基于流式分布式存储系统的数据均衡存储方法

技术领域

[0001] 本发明属于数据存储技术领域,具体涉及一种基于流式分布式存储系统的数据均衡存储方法。

背景技术

[0002] 近年来,随着互联网技术的不断发展,从日常用到的社交网络、电子商务,到智慧城市、国家安全等相关领域,各种数据呈爆发式增长,数据存储需求日益剧增。与此同时,数据存储领域对云存储的安全性、完备性和高可用性的要求也越来越高。目前,分布式存储系统是大规模数据存储的主流技术,分布式存储系统区别于传统单机存储系统的地方在于:分布式存储系统将数据分布在不同的节点上存储,解决大规模存储系统数据备份、扩容、缩容和数据迁移等问题。然而,如何分布数据以保证各个节点的资源分布均衡,从而提高资源利用率,是分布式存储需要解决的一个重要问题。
[0003] 数据分布存储常见方法包括:哈希分布和顺序分布。(一)哈希分布:哈希分布是根据数据的某一种特征计算哈希值,并将哈希值与集群中的服务器建立映射关系,从而将不同哈希值的数据分布到不同服务器上。如果哈希的散列特性很好,哈希方式可以将数据比较均匀的分布到集群中去。然而找到一个散列特性很好的哈希函数是很难的。一般的哈希算法还容易导致数据分布不均的问题。传统的哈希算法还有一个问题就是:当服务器上线或下线时,服务器数量发生变化,数据映射完全被打乱,几乎所有的数据都需要重新分布,从而带来大量的数据迁移。(二)顺序分布:另一种分布方式是顺序分布,顺序分布在分布式表格系统中比较常见,一般的做法是:将大表顺序划分为连续范围,每个范围称为一个子表,总控服务器负责将子表按照一定的策略分配到存储节点上。顺序分布与B+树数据结构比较类似,每个子表相当于叶子节点,随着数据的插入和删除,某些子表可能变得很大,某些子表可能变得很小,数据分布不均匀,如果采用顺序分布,系统设计时需要考虑子表的分裂与合并,极大地增加系统的复杂度。
[0004] 目前,大部分数据分布策略仅采用哈希分布或顺序分布方式,具有以下问题:数据在各节点上分布不均,并且在系统扩容和缩容时导致数据迁移工作巨大等问题。因此,针对以上问题,现有技术迫切需要一种能够兼顾负载均衡和易于缩容扩容的分布式数据存储方法。

发明内容

[0005] 针对现有技术存在的缺陷,本发明提供一种基于流式分布式存储系统的数据均衡存储方法,可有效解决上述问题。
[0006] 本发明采用的技术方案如下:
[0007] 本发明提供一种基于流式分布式存储系统的数据均衡存储方法,包括以下步骤:
[0008] 步骤1,确定流式分布式存储系统采用k+m的纠删码冗余存储策略;其中,k代表数据节点数量,m代表校验节点数量;
[0009] 步骤2,当接收到流式设备E的接入请求时,对接入请求进行解析,获得以下参数:流式设备E的设备ID、存储周期T和需要占用的总网络带宽B(E);
[0010] 根据存储周期T和需要占用的总网络带宽B(E),计算得到流式设备E需要占用的总存储容量C(E);
[0011] 步骤3,获取当前流式分布式存储系统的以下参数:当前在线节点数量n、每个在线节点的剩余网络带宽b和每个在线节点的剩余存储容量c;
[0012] 对各个在线节点的剩余网络带宽b进行求和计算,得到集群总剩余网络带宽B(F);对各个在线节点的剩余存储容量c进行求和计算,得到集群总剩余存储容量C(F);
[0013] 步骤4,如果B(E)/B(F)>9[C(E)/C(F)],则表明当前集群的带宽资源稀缺,存储容量资源充足,执行步骤5;
[0014] 如果C(E)/C(F)>9[B(E)/B(F)],则表明当前集群的存储容量资源稀缺,带宽资源充足,执行步骤6;
[0015] 如果以上两个条件均不满足,则执行步骤7;
[0016] 步骤5,采用带宽优先存储策略:
[0017] 步骤5.1,预设置集群在线节点数量阈值ε0;
[0018] 步骤5.2,比较当前在线节点数量n和集群在线节点数量阈值ε0,如果当前在线节点数量n大于集群在线节点数量阈值ε0,则执行步骤5.3;否则,执行步骤5.4;
[0019] 步骤5.3,采用堆排序算法,按节点的剩余网络带宽从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余网络带宽最大的在线节点;
[0020] 对于选出的k+2m个剩余网络带宽最大的在线节点,如果存在剩余网络带宽相同的在线节点,则采用插入排序算法,按节点的剩余存储容量从大到小的顺序,对剩余网络带宽相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;
[0021] 对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;
[0022] 步骤5.4,采用快速排序算法,按节点的剩余网络带宽从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余网络带宽最大的在线节点;
[0023] 对于选出的k+2m个剩余网络带宽最大的在线节点,如果存在剩余网络带宽相同的在线节点,则采用插入排序算法,按节点的剩余存储容量从大到小的顺序,对剩余网络带宽相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;
[0024] 对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;
[0025] 步骤6,采用容量优先存储策略:
[0026] 步骤6.1,预设置集群在线节点数量阈值ε1;
[0027] 步骤6.2,比较当前在线节点数量n和集群在线节点数量阈值ε1,如果当前在线节点数量n大于集群在线节点数量阈值ε1,则执行步骤6.3;否则,执行步骤6.4;
[0028] 步骤6.3,采用堆排序算法,按节点的剩余存储容量从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余存储容量最大的在线节点;
[0029] 对于选出的k+2m个剩余存储容量最大的在线节点,如果存在剩余存储容量相同的在线节点,则采用插入排序算法,按节点的剩余网络带宽从大到小的顺序,对剩余存储容量相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;
[0030] 对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;
[0031] 步骤6.4,采用快速排序算法,按节点的剩余存储容量从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余存储容量最大的在线节点;
[0032] 对于选出的k+2m个剩余存储容量最大的在线节点,如果存在剩余存储容量相同的在线节点,则采用插入排序算法,按节点的剩余网络带宽从大到小的顺序,对剩余存储容量相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;
[0033] 对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;
[0034] 步骤7,采用资源能力指数存储策略:
[0035] 步骤7.1,对于每个在线节点i,采用下式,计算其资源能力指数ei:
[0036]
[0037] 其中:
[0038] bi为在线节点i的剩余网络带宽;
[0039] bi′为在线节点i的总网络带宽;
[0040] ci为在线节点i的剩余存储容量;
[0041] ci′为在线节点i的总存储容量;
[0042] rb为在线节点i的网络带宽权重;
[0043] rc为在线节点i的存储容量权重;
[0044] rb和rc通过以下公式计算获得:
[0045] rb=B(E)/B(F)÷[B(E)/B(F)+C(E)/C(F)]
[0046] rc=(C(E)/C(F))÷[B(E)/B(F)+C(E)/C(F)];
[0047] 步骤7.2,按节点的资源能力指数从大到小的顺序,对n个在线节点进行排序,选出k+m个资源能力指数最大的在线节点;然后执行步骤8;
[0048] 步骤8,对于选出的k+m个在线节点,判断各个在线节点的剩余存储容量是否均满足对流式设备E的分片存储需求;如果满足,则实时将流式设备E传输的视频数据,按k+m的纠删码冗余存储策略,存储到选出的各个在线节点;然后返回步骤2;
[0049] 如果存在不满足分片存储需求的在线节点,则进一步按以下两种存储策略处理:
[0050] 强制存储策略:
[0051] 假设当前选择的k+m个在线节点中,存在x1个在线节点不满足单个存储分片的容量要求,则对剩余的k+m‑x1个在线节点按照剩余存储容量降序排序后,判断各在线节点是否满足存储分片循环存储的容量要求,即:单个在线节点支持存储多个存储分片;如果满足,则进行存储分片循环存储;
[0052] 如果不满足,则从剩余的k+m‑x1个在线节点中,选择出剩余存储容量最高的k+m‑x1‑1个在线节点,并对k+m‑x1‑1个在线节点按照剩余存储容量降序排序后,判断各在线节点是否满足存储分片循环存储的容量要求,如果满足,则进行存储分片循环存储;
[0053] 如果不满足,则从k+m‑x1‑1个在线节点中,选择出剩余存储容量最高的k+m‑x1‑2个在线节点,依此类推,直到当只选择出1个剩余存储容量最高的在线节点时,该在线节点的剩余存储容量仍然不满足存储分片循环存储的容量要求,则返回存储失败的通知消息;
[0054] 非强制存储策略:对于当前选择的k+m个在线节点,只有存在1个在线节点的剩余存储容量不满足单个存储分片的容量要求,则返回存储失败的通知消息。
[0055] 优选的,还包括:
[0056] 对于流式分布式存储系统,当需要新增多个在线节点进行扩容时,在接入流式设备时,在步骤3中,将新增的多个在线节点和原有的在线节点作为统计对象,统计各在线节点的参数即可;
[0057] 当需要移除流式分布式存储系统中的部分在线节点时,首先将需要移除的在线节点所存储的数据,以存储分片为单位,将各存储分片迁移存储到其他在线节点上,并更新数据存储位置记录;然后,当需要接入流式设备时,在步骤3中,只需要将剩余在线节点作为统计对象,统计各剩余在线节点的参数即可。
[0058] 本发明提供的一种基于流式分布式存储系统的数据均衡存储方法具有以下优点:
[0059] (1)本发明根据当前分布式存储系统中网络带宽或存储容量,采用对应的最佳存储策略进行数据存储,保证数据存储分片均匀分布于分布式系统中的各个节点,提升系统资源利用率。
[0060] (2)本发明保证无论是同构系统还是异构的分布式系统,都支持数据的均衡分布,保证系统负载均衡。同时支持集群的扩容及缩容场景。
[0061] (3)本发明中,当分布式节点数量多时,采用堆排序的方式,短时间选出最优的部分节点,而后内部再采用插入排序的策略,减少内存申请与释放开销,提高分片在选择节点的高效性。

附图说明

[0062] 图1为本发明提供的一种基于流式分布式存储系统的数据均衡存储方法的流程示意图。

具体实施方式

[0063] 为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0064] 依据传统分布式存储技术中存在的数据存储不均匀,存储灵活性差等问题,[0065] 本发明提供一种基于流式分布式存储系统的数据均衡存储方法,具有以下特点:1.本发明的均衡存储策略支持基于各节点的带宽资源及容量资源进行数据的存储,达到充分利用分布式系统中各个节点资源,且存储分片数据均匀分布的目的。2.本发明中新增采用了一种计算能力指数的公式,支持更简单的计算策略选择更优的存储节点,同时可支持根据实际存储场景及资源的优先级动态的进行调整。3.本发明中基于云存储系统强相关的带宽及容量指标进行分布存储,支持异构系统的均衡分布存储,保证系统负载均衡。同时支持集群的扩容及缩容场景。4.本发明中在选择存储分片的节点时,通过资源数或能力指数为标准,采用堆排序的方式,短时间选出最优的少量节点,提高各数据分片在选择节点的高效性。
[0066] 本发明提供一种基于流式分布式存储系统的数据均衡存储方法,参考图1,包括以下步骤:
[0067] 步骤1,确定流式分布式存储系统采用k+m的纠删码冗余存储策略;其中,k代表数据节点数量,m代表校验节点数量;
[0068] 本发明中,通过纠删码冗余策略提高数据存储的可靠性,即一个整体原始数据包会被拆分成k个小数据包,分别存储在对应的k个节点上;同时根据纠删码算法计算出m个冗余数据,并分别存储在m个节点上。当丢失数据小于等于m个包时,可通过其它k个数据包进行恢复。因此,原始数据对应的数据节点个数为k,校验节点(即存储纠删码冗余数据节点)个数为m。
[0069] 步骤2,当接收到流式设备E的接入请求时,对接入请求进行解析,获得以下参数:流式设备E的设备ID、存储周期T和需要占用的总网络带宽B(E);
[0070] 根据存储周期T和需要占用的总网络带宽B(E),计算得到流式设备E需要占用的总存储容量C(E);
[0071] 具体计算公式为:C(E)=T×24×3600×B(E)÷8。
[0072] 步骤3,获取当前流式分布式存储系统的以下参数:当前在线节点数量n、每个在线节点的剩余网络带宽b和每个在线节点的剩余存储容量c;
[0073] 具体的,本发明中,流式分布式存储系统,即分布式集群由多个节点组成,分布式集群中的节点可表示为:N[1],N[2]...,即节点编号从1开始,且编号数字是连续的,用于存储视频分片数据。同时,分布式集群中的各节点具有一定的计算和存储能力。
[0074] 一般情况下,网络带宽和存储容量是影响节点存储能力的重要指标。因此,本步骤中,获取每个在线节点的剩余网络带宽b和每个在线节点的剩余存储容量c。
[0075] 对各个在线节点的剩余网络带宽b进行求和计算,得到集群总剩余网络带宽B(F);对各个在线节点的剩余存储容量c进行求和计算,得到集群总剩余存储容量C(F);
[0076] 步骤4,如果B(E)/B(F)>9[C(E)/C(F)],则表明当前集群的带宽资源稀缺,存储容量资源充足,执行步骤5;
[0077] 如果C(E)/C(F)>9[B(E)/B(F)],则表明当前集群的存储容量资源稀缺,带宽资源充足,执行步骤6;
[0078] 如果以上两个条件均不满足,则执行步骤7;
[0079] 步骤5,采用带宽优先存储策略:
[0080] 在采用带宽优先存储策略时,首先根据当前集群中所有在线节点的数量级别进行排序算法的选择。具体方式如下:
[0081] 步骤5.1,预设置集群在线节点数量阈值ε0;
[0082] 步骤5.2,比较当前在线节点数量n和集群在线节点数量阈值ε0,如果当前在线节点数量n大于集群在线节点数量阈值ε0,表明当前集群中所有在线节点的数量较多,则执行步骤5.3;否则,表明当前集群中所有在线节点的数量较少,执行步骤5.4;
[0083] 步骤5.3,采用堆排序算法,按节点的剩余网络带宽从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余网络带宽最大的在线节点;
[0084] 对于选出的k+2m个剩余网络带宽最大的在线节点,如果存在剩余网络带宽相同的在线节点,则采用插入排序算法,按节点的剩余存储容量从大到小的顺序,对剩余网络带宽相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;
[0085] 对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;
[0086] 步骤5.4,采用快速排序算法,按节点的剩余网络带宽从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余网络带宽最大的在线节点;
[0087] 对于选出的k+2m个剩余网络带宽最大的在线节点,如果存在剩余网络带宽相同的在线节点,则采用插入排序算法,按节点的剩余存储容量从大到小的顺序,对剩余网络带宽相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;
[0088] 对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;
[0089] 步骤6,采用容量优先存储策略:
[0090] 步骤6.1,预设置集群在线节点数量阈值ε1;
[0091] 步骤6.2,比较当前在线节点数量n和集群在线节点数量阈值ε1,如果当前在线节点数量n大于集群在线节点数量阈值ε1,则执行步骤6.3;否则,执行步骤6.4;
[0092] 步骤6.3,采用堆排序算法,按节点的剩余存储容量从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余存储容量最大的在线节点;本步骤中,选取的k+2m个在线节点的数量,大于需要的k+m个在线节点的数量,理由为:防止部分网络带宽资源充足的节点未被选中。
[0093] 对于选出的k+2m个剩余存储容量最大的在线节点,如果存在剩余存储容量相同的在线节点,则采用插入排序算法,按节点的剩余网络带宽从大到小的顺序,对剩余存储容量相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;
[0094] 对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;
[0095] 步骤6.4,采用快速排序算法,按节点的剩余存储容量从大到小的顺序,对n个在线节点进行一次排序,选出k+2m个剩余存储容量最大的在线节点;
[0096] 对于选出的k+2m个剩余存储容量最大的在线节点,如果存在剩余存储容量相同的在线节点,则采用插入排序算法,按节点的剩余网络带宽从大到小的顺序,对剩余存储容量相同的在线节点进行二次排序,由此得到排序后的k+2m个在线节点;
[0097] 对于排序后的k+2m个在线节点,选出排序在前面的k+m个在线节点;然后执行步骤8;
[0098] 步骤7,采用资源能力指数存储策略:
[0099] 步骤7.1,对于每个在线节点i,采用下式,计算其资源能力指数ei:
[0100]
[0101] 其中:
[0102] bi为在线节点i的剩余网络带宽;
[0103] bi′为在线节点i的总网络带宽;
[0104] ci为在线节点i的剩余存储容量;
[0105] ci′为在线节点i的总存储容量;
[0106] rb为在线节点i的网络带宽权重;
[0107] rc为在线节点i的存储容量权重;
[0108] rb和rc通过以下公式计算获得:
[0109] rb=B(E)/B(F)÷[B(E)/B(F)+C(E)/C(F)]
[0110] rc=(C(E)/C(F))÷[B(E)/B(F)+C(E)/C(F)];
[0111] 因此,每个节点的资源能力指数,是该节点剩余网络带宽、总网络带宽、剩余存储容量和总存储容量计算出来的指数值。
[0112] rb和rc的和为1。
[0113] 步骤7.2,按节点的资源能力指数从大到小的顺序,对n个在线节点进行排序,选出k+m个资源能力指数最大的在线节点;然后执行步骤8;
[0114] 在选择存储分片节点时,由于仅需获取资源能力指数最大的k+m个节点,无需了解其余节点的次序,同时为防止整体排序导致时间复杂度高,效率低下,因此,如果在线节点数量n大于集群在线节点数量阈值ε1,则选择通过堆排序算法完成n个在线节点的排序;如果在线节点数量n不大于集群在线节点数量阈值ε1,则通过快速排序算法,完成n个在线节点的排序。
[0115] 本发明中,涉及到的各个在线节点数量阈值,即:ε0和ε1,可以相同,也可以不相同,具体根据实际需求灵活设置。
[0116] 通过步骤5‑步骤8,根据当前配置的k与m的值,在每次进行流式设备接入时,选择排序后的前k+m个节点进行分片存储。
[0117] 步骤8,对于选出的k+m个在线节点,判断各个在线节点的剩余存储容量是否均满足对流式设备E的分片存储需求;如果满足,则实时将流式设备E传输的视频数据,按k+m的纠删码冗余存储策略,存储到选出的各个在线节点;然后返回步骤2;
[0118] 如果存在不满足分片存储需求的在线节点,则进一步按以下两种存储策略处理:
[0119] 强制存储策略:
[0120] 假设当前选择的k+m个在线节点中,存在x1个在线节点不满足单个存储分片的容量要求,则对剩余的k+m‑x1个在线节点按照剩余存储容量降序排序后,判断各在线节点是否满足存储分片循环存储的容量要求,即:单个在线节点支持存储多个存储分片;如果满足,则进行存储分片循环存储;
[0121] 如果不满足,则从剩余的k+m‑x1个在线节点中,选择出剩余存储容量最高的k+m‑x1‑1个在线节点,并对k+m‑x1‑1个在线节点按照剩余存储容量降序排序后,判断各在线节点是否满足存储分片循环存储的容量要求,如果满足,则进行存储分片循环存储;
[0122] 如果不满足,则从k+m‑x1‑1个在线节点中,选择出剩余存储容量最高的k+m‑x1‑2个在线节点,依此类推,直到当只选择出1个剩余存储容量最高的在线节点时,该在线节点的剩余存储容量仍然不满足存储分片循环存储的容量要求,则返回存储失败的通知消息;
[0123] 非强制存储策略:对于当前选择的k+m个在线节点,只有存在1个在线节点的剩余存储容量不满足单个存储分片的容量要求,则返回存储失败的通知消息。
[0124] 由于分布式存储系统中,节点可能会出现损坏,或者分布式系统需要扩容及缩容,此时需要将某些节点进行添加或移除。
[0125] 对于流式分布式存储系统,当需要新增多个在线节点进行扩容时,在接入流式设备时,在步骤3中,将新增的多个在线节点和原有的在线节点作为统计对象,统计各在线节点的参数即可;即:当前环境已有大部分节点被使用,剩余资源较少时,可新增多个节点进行扩容。如果各节点的总网络带宽、总存储容量均相同,则此时由于新增节点的剩余网络带宽、剩余存储容量和能力指数最高,当有流式设备接入时,数据分片存储优先选择新增节点,保证分片存储均衡,同时支持异构节点场景。
[0126] 当需要移除流式分布式存储系统中的部分在线节点时,首先将需要移除的在线节点所存储的数据,以存储分片为单位,将各存储分片迁移存储到其他在线节点上,并更新数据存储位置记录;然后,当需要接入流式设备时,在步骤3中,只需要将剩余在线节点作为统计对象,统计各剩余在线节点的参数即可。即:当环境中有节点损坏需要移除时,首先将该节点信息进行删除,并获取所有保存在该节点的分片,并进行分片迁移;然后,统计各剩余在线节点的参数,并选择符合存储策略的k+m个在线节点即可。
[0127] 与现有技术相比,本发明的有益效果是:
[0128] (1)本发明不同于现有技术采用哈希策略或单一指标进行数据存储,本发明根据当前分布式存储系统中网络带宽或存储容量,采用对应的最佳存储策略进行数据存储,保证数据存储分片均匀分布于分布式系统中的各个节点,提升系统资源利用率。
[0129] (2)本发明提供的基于流式分布式存储系统的数据均衡存储方法,保证无论是同构系统还是异构的分布式系统,都支持数据的均衡分布,保证系统负载均衡。同时支持集群的扩容及缩容场景。
[0130] (3)本发明中,当分布式节点数量多时,采用堆排序的方式,短时间选出最优的部分节点,而后内部再采用插入排序的策略,减少内存申请与释放开销,提高分片在选择节点的高效性。
[0131] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。