CN117440003A - 一种无中心的分布式存储方法及系统 - Google Patents
一种无中心的分布式存储方法及系统 Download PDFInfo
- Publication number
- CN117440003A CN117440003A CN202310644427.4A CN202310644427A CN117440003A CN 117440003 A CN117440003 A CN 117440003A CN 202310644427 A CN202310644427 A CN 202310644427A CN 117440003 A CN117440003 A CN 117440003A
- Authority
- CN
- China
- Prior art keywords
- node
- storage
- nodes
- key value
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000003860 storage Methods 0.000 title claims abstract description 238
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000013507 mapping Methods 0.000 claims description 7
- 238000011161 development Methods 0.000 abstract description 9
- 238000005457 optimization Methods 0.000 abstract description 8
- 238000011160 research Methods 0.000 abstract description 8
- 230000007547 defect Effects 0.000 abstract description 4
- 230000006978 adaptation Effects 0.000 abstract description 3
- 230000009286 beneficial effect Effects 0.000 abstract description 3
- 238000004364 calculation method Methods 0.000 abstract description 3
- 238000007405 data analysis Methods 0.000 abstract description 3
- 230000001737 promoting effect Effects 0.000 abstract description 3
- 238000004422 calculation algorithm Methods 0.000 description 99
- 238000009826 distribution Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 13
- 238000013461 design Methods 0.000 description 12
- 230000007246 mechanism Effects 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 230000008901 benefit Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 9
- 238000007726 management method Methods 0.000 description 9
- 238000010845 search algorithm Methods 0.000 description 9
- 230000018109 developmental process Effects 0.000 description 8
- 230000004044 response Effects 0.000 description 8
- 238000013459 approach Methods 0.000 description 7
- 238000013523 data management Methods 0.000 description 7
- 238000013500 data storage Methods 0.000 description 7
- 230000008520 organization Effects 0.000 description 7
- 238000005295 random walk Methods 0.000 description 6
- 238000004088 simulation Methods 0.000 description 6
- 235000008694 Humulus lupulus Nutrition 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000013508 migration Methods 0.000 description 4
- 230000005012 migration Effects 0.000 description 4
- 230000002787 reinforcement Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000005304 joining Methods 0.000 description 3
- 238000005192 partition Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000012384 transportation and delivery Methods 0.000 description 3
- 241000475481 Nebula Species 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000013135 deep learning Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000013468 resource allocation Methods 0.000 description 2
- NTHFOQKLSZUQTR-OICFXQLMSA-N (4r)-4-[(3r,5s,7r,8r,9s,10s,13r,14s,17r)-3,7-dihydroxy-10,13-dimethyl-2,3,4,5,6,7,8,9,11,12,14,15,16,17-tetradecahydro-1h-cyclopenta[a]phenanthren-17-yl]pentanoic acid;sulfuric acid Chemical compound OS(O)(=O)=O.C([C@H]1C[C@H]2O)[C@H](O)CC[C@]1(C)[C@@H]1[C@@H]2[C@@H]2CC[C@H]([C@@H](CCC(O)=O)C)[C@@]2(C)CC1 NTHFOQKLSZUQTR-OICFXQLMSA-N 0.000 description 1
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 235000008673 Persea americana Nutrition 0.000 description 1
- 240000002426 Persea americana var. drymifolia Species 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000003203 everyday effect Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000002068 genetic effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000003595 mist Substances 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000007958 sleep Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000006641 stabilisation Effects 0.000 description 1
- 238000011105 stabilization Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
- 230000003313 weakening effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
- H04L67/1023—Server selection for load balancing based on a hash applied to IP addresses or costs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出一种无中心的分布式存储方法和系统,包括:获取包括n个存储节点的分布式存储系统,根据一致性哈希所有存储节点和键值K映射并以数轴的形式排列到哈希空间σ;n个节点将数轴划分为n+1个区间,根据数轴上n个节点之间的距离可以将数轴划分为n个节点对应的近邻空间;键值K对应的数据存储至距键值K哈希距离最短的存储节点。本发明的方法对于无中心分布式系统负载不均和查询性能低下的缺陷做出一定适应场景的优化,其意义不仅在于促进关于分布式存储的研究,为研究者们解决上述问题提供了新的思路,还有助于大数据计算、大数据分析等与分布式存储密切相关的实际场景应用的发展。
Description
技术领域
本发明涉及无中心资源管理调度技术领域,并特别涉及一种无中心的分布式存储方法及系统。
背景技术
存储系统的发展经历了集中式的存储、中心化分布式存储、无中心分布式存储的阶段。
集中式的存储管理系统经过多年的发展,在业界应用已经相对成熟稳定。在数据量增速不明显的情况下,将所有数据集中地存放在一个系统中,此类系统包含多台集中管理的机器设备,其系统中物理设备是集中放置的,因此其对于机房的各种条件要求较高。随着全球的数据存储需求急剧上升,集中式存储不能完全覆盖个性化的海量数据存储的场景需求。
随着大数据时代的到来,存储系统的可扩展性及处理时效成为主要的技术发展趋势,中心控制的分布式存储系统GFS应运而生。分布式存储的主要思想是将所有数据分散地存放在多台机器上面,这样分散了存储的负荷,提高了系统的可用性、可靠性等。但是中心集中管控的分布式存储系统比如Hadoop普遍存在单点故障、单点性能瓶颈或单点信任依赖的问题。即中心服务器的宕机会对整个存储系统的可用性及数据安全造成巨大的影响。
之后有研究者提出诸如DHT框架、P2P协议等的无中心分布式存储方案。无中心分布式系统存在节点对等、节点自治的特性,其相比中心化分布式存储系统的优势是避免了单点问题,提升了系统的鲁棒性。
存储系统的发展历程如图1所示。从图中可以看出集中式存储始于1960年代IBM推出的System/360大型电脑,历经了四十多年的发展在2003年谷歌提出了中心控制的分布式存储系统GFS,同年Ion Stoica等人提出了无中心分布式查询协议Chord。在2012年OzalpBabaoglu等提出了基于P2P云的无中心分布式存储系统的设计实现方案。
Chord是由Ion Stoica等人于2001年提出的一种分布式查询协议,它是为了解决P2P应用程序面临的基本问题即确定存储所需数据项的节点的有效位置。Chord支持将给定的键值映射到存储对应数据的节点,当节点加入或者离开时,Chord可以对系统进行有效调整。即使系统正在发生动态变化,Chord也可以响应查询。Chord具有以下特性:负载均衡、去中心化、可扩展性、可用性。
在一个N节点的稳定系统中,每个节点维护O(logN)个其它节点的信息,以此维系高效的路由。但是当节点频繁加入或者退出的时候,O(logN)个节点状态的一致性难以保持。这个时候每个节点只需要一条正确的信息来保证Chord查询路由的正确性,但速度可能会减慢。
在Chord中,一致性哈希这样为节点分配键值:假设哈希值长度为m,那么节点标识符模2m之后排列在长度为2m的哈希环上。K值分配给哈希环上第一个标识符等于K或者位于K之后的节点。该节点称为K的后继节点。每个节点分别维护指向前继节点和指向后继节点的指针。
Kademlia由Petar Maymounkov等在2002年提出,是一个在易出错环境中被证明具有一致性和良好性能的DHT框架,它使用一种新的基于异或的度量拓扑来路由查询和定位节点。Kademlia有许多以前的DHT无法提供的理想功能,它最大限度地减少了节点为了相互了解而必须发送的配置消息的数量。Kademlia的键值是不透明的,大小是160位。参与的计算机节点ID和键值都会映射到160位键值空间,键值对存放在某些衡量尺度下距离键值较近的ID对应节点。基于节点ID的路由算法能有效定位目标键值所在节点位置。
Kademlia中键值空间两点的距离是根据它们的异或值计算得到。
Kademlia将节点视为二叉树中的叶子,每个节点的位置由其ID的最短唯一前缀确定。对于任何给定的节点,作者将二叉树划分为一系列不包含该节点的连续较低的子树。最高的子树由不包含节点的二叉树的一半组成。下一个子树由不包含节点的剩余树的一半组成,依此类推。显示树中具有唯一前缀0011的节点的位置,被圈起来的子树分别由前缀为1、01、000和0010的所有节点组成。如果子树包含节点,Kademlia协议确保每个节点至少知道其每个子树中的一个节点。
CAN是由Sylvia Ratnasamy等于2001年提出的DHT框架。内容寻址网络(CAN)是一种分布式基础设施,在互联网级别的规模上提供类似哈希表的功能。CAN具有可扩展性、容错性和完全自组织性。
CAN类似于一个哈希表,基本操作包括键值对的插入、查询和删除。CAN由许多的独立节点组成,每个节点存储整个哈希表的一个区域。此外,每个节点持有一小部分哈希表相邻区域的信息。针对特定键值基本操作的寻址借助CAN的中间节点进行路由,收敛到包含该键值的节点。CAN的设计具备完全分布性、可扩展性、错误容忍性。
CAN的设计围绕着d-环面上的虚拟d-维笛卡尔坐标空间展开。这个坐标空间是合乎数学逻辑的,与任何物理坐标系无关。在任何时间点,整个坐标空间都会在系统中的所有节点之间动态分区,以便每个节点在整个空间中拥有其单独、不同的区域。
CAN中的键值对分布过程如下:K值通过均匀的哈希函数确定性地映射到笛卡尔坐标空间中的点P,对应的键值对就存储在点P所在区域对应的节点。任意节点可以通过将K映射到点P来检索P对应的value。若P不在发起请求的节点区域或者邻近区域之内,请求会被路由到P所在的区域。CAN中的节点自组织成一个覆盖网络,来代表虚拟坐标空间。节点学习并维护那些拥有与其自身区域相邻的坐标区域的节点的IP地址,这些邻居节点直接被用作坐标路由表,支持在任意节点之间进行路由。
CAN网络具备持续增长的能力。当新节点加入时,它随机选取空间中的点P然后向它发送加入请求,消息通过CAN的路由算法抵达点P区域对应的节点。之后该节点将其占有的区域划分出一半给新加入的节点。新节点、原节点以及它们的邻居节点之间会相互发送路由表更新消息,对各自路由表进行更新。它们的邻居节点能够迅速感知变化并更新邻居集合。新加入CAN的节点只影响了笛卡尔空间的一小部分现存节点,这对于维护大量节点的CAN来说至关重要。
Tapestry是由Ben Y Zhao等于2004年提出的一种DHT框架。Tapestry是一种节点对等的覆盖路由设施,仅使用本地化资源即可将消息直接路由到对象或服务的附近副本,提供高效、可扩展、位置无关的路由。Tapestry支持使用自修复、基于软状态的路由层的去中心化对象定位方案以及路由应用程序编程接口。
Tapestry提供了一种去中心化的物体定位和寻址接口DOLR。DOLR将资源虚拟化,它使用与物理地址无关的非透明标识符去命名端点,这种虚拟化使得在不稳定的基础设施环境下消息能够传送到移动或者复制节点。DOLR网络提供了一个简单的平台来实现分布式应用程序的开发。Tapestry已经允许全球大小级别的存储应用比如OceanStore的部署。
在Tapestry中节点从一个巨大的标识符空间均匀获取节点ID,一台物理机器可能对应多个节点。应用的相关数据从同样的标识符空间被赋予GUID。标识符空间使用全局定义的基底,大小为160比特。节点的nodeID以及数据的GUID均通过安全的一致性哈希函数映射实现。DOLR的API分为四个模块:数据的发布、数据的解除发布、通往数据的路由、通往节点的路由。
Tapestry中每个节点维护一个本地的邻接路由表,寻址方式是根据目标ID的编码进行逐位的匹配,此方法跟最长前缀路由算法类似。邻接表是多级的,每一级链接到最长前缀位数匹配到该级别ID位数的节点。该方法保证了系统中的任何节点能以最多对数级别的跳数访问到。当某一位得不到匹配时,Tapestry会在路由表中寻找在这位上更接近原数字的节点进行转发。在动态网络中,节点之间的链接发生变化或者出错时,很难保证可靠的路由。Tapestry通过增加拥有相同前缀的备份路由来增加可靠性。
在Tapestry中,数据发布过程如下:每个数据在路由过程中会被分配一个独特的根节点,每个根节点会生成一颗独特的生成树用于路由。对于某台机器S,假设待发布数据的GUID对应的根节点为R,发布请求根据R的前缀每位的数字不断调用获取下一跳的函数,借助沿途节点存储的关于GUID的路由表,最终会收敛到根节点R。当不同的节点存放数据的备份时,那些节点都会发布数据的备份。
IPFS(the InterPlanetary File System)是一个开源的、内容可寻址的基于P2P网络的无中心分布式存储系统,它提供分布式的数据存储与交付。IPFS每天支持百万级别的内容检索,并且支持数十个第三方应用程序。IPFS有四个核心特性:基于内容寻址、无中心的对象索引、自我认证性、公开参与性。
IPFS综合了以前的P2P系统的成功思想,包括DHT、BitTorrent、Git和SFS。IPFS的贡献是简化、发展和连接经过验证的技术,使其成为一个单一的内聚系统,并强于各个部分的总和。IPFS的内容寻址方案使用了唯一的基于散列的内容标识符,索引以及路由策略基于DHT框架Kademlia和它的变体。
Demichev等基于区块链技术、智能合约、元数据驱动的数据管理的集成提出了无中心分布式的数据管理系统,在该系统中用户组之间可以部分或完全缺乏信任。由于P2P网络为对等节点提供稳定的资源存储池消耗成本巨大,作者使用了协作分布式系统(CDCS)。协作分布式系统指将多个组织的计算资源结合到一个资源池中形成的分布式系统,而且用户组之间可以部分或完全缺乏信任。在这种情况,基于各方对数据操作的内容和顺序的共识,使用区块链技术进行数据管理是卓有成效的。
协作分布式系统的运行需要在动态变化的环境中对数据和访问权进行无中心管理的方法,确保各方基于数据操作的内容和顺序达成共识,确保可靠地记录经验证的操作历史,即来源元数据(PMD)。PMD对于数据存储和使用的一致性以及项目参与者之间或与服务提供商之间可能冲突的解决是必要的。作者基于HLF区块链平台提出一种新的方法ProvHL,用于在分布式计算系统内将用户或服务的权限委派给另一个服务。
该平台对于业务流程中有限数量的参与者管理区块链的许可类型一般有两种:(1)本地存储的数据管理系统(DMS)管理数据并将区块链用作分布式账本(数据驱动数据管理)、(2)元数据被写入区块链,DMS引用区块链并执行记录在其中的交易(元数据驱动的数据管理)。
ProvHL系统中的文件权限使用包含访问控制列表的属性进行管理。有三个这样的列表:readACL列表用于访问文件、writeACL用于修改文件、execACL用于访问用作处理其他文件的程序或用作数据处理服务的输入文件。每个列表都包含指向用户或用户组的链接。
通过PMD进行数据管理需要一种方法,确保业务流程参与者对数据交易的内容和顺序达成一致。不同于加密货币区块链网络固有的消耗资源和缓慢的“工作证明”机制,ProvHL系统拥有一套独特的共识算法。
Siavash介绍了一种新的去中心化云架构方法,称为混合边缘云(HEC)。区别于无法充分利用智能设备上的大量计算资源的集中式云架构,HEC最大限度地减少网络带宽使用,减少通信延迟,并利用智能设备上的资源来减轻服务器场和其他集中式计算资源的负担。HEC将5G和WiFi 6等新网络技术在私有和公共云中的优势结合起来,利用智能设备上的计算资源,为超级互联世界构建可持续的分散基础设施。
在HEC中可以创建一个与智能设备数量相适应的云结构,这减少了对额外服务器的需求,并减少了数据中心中这些服务器的升级周期。实际上,随着智能设备数量的增加,他们能增加“云”容量。此外,由于大多数数据是在智能设备上生成的,应用程序的传输成本和延迟可以降至最低。在HEC中,大部分处理都在设备上执行,通信尽可能保持在本地,来自不同供应商和操作系统的异构智能设备可以协作并共享计算和其他资源。
Avocado是在2021发布的一个分布式存储系统,用于在不受信任的云环境上提供存储。他们实现并优化了由TEE保护的内存KVS系统。他们使用BFT作为容错协议。他们实现了一个内存管理系统,用TEE中的指针访问加密数据,因为有限的包围空间无法存储大量数据。
Nebula为数据密集型计算提供了分布式边缘系统。他们的方法是传统的方法,比如对每个节点的可靠性评分,并将任务调度到多个节点以实现冗余。Nebula的数据可用性也由每个节点的数据复制和可用性得分提供。
分布式哈希表负载均衡:
DHT框架通常依赖哈希函数来映射对象和节点到哈希空间中的特定位置。这些映射位置的分布均匀程度与负载的均衡程度关联密切。
Karger等提出了一致性哈希这种命名空间平衡方法。他们引入一个适当的哈希函数例如SHA-1,使得标识符空间上的标识符和键值分布均匀。每个节点都使用该函数选择自己的标识符,然后节点遵循整个系统的组织规则处理键值。
假设在单位长度[0,1)上面使用一致性哈希独立分布着N个节点,理论平均间隔是1/N,而实际间隔的范围是O(1/N2)至O(log N/N)。因此整个系统的节点分布不均衡。
Kenthapadi等提出了一种改进的命名空间平衡解决方案。初始系统的命名空间被分配给几个节点。在单位长度[0,1)标识符空间上,加入系统的节点在标识符空间中随机选择r个点。然后,它在每个点周围找到两个其它节点,并对每个发现节点的几个邻居所拥有的命名空间范围进行几次局部检查。最后,节点在发现的最长间隔的中部选择它的位置,这样能降低分布的总体方差。
在经典DHT框架Chord中,Ion Stoica等人使用真实节点的对数数量级的虚拟节点来解决负载不均问题。
Chord实现的一致性哈希并未考虑到每台机器的异构性质,很难实现较好的负载均衡,有可能出现配置差的机器承载较多负载的情况。另外,Chord随着系统的扰动存在着雪崩效应,即新节点的加入引起的数据重分配可能使得这一段的网络负载量突然增大。
为了解决上述Chord中的一致性哈希的负载不均问题,研究者引入了虚拟节点的概念。虚拟节点通常会比物理节点多很多,它们一般均衡地分布在哈希环上,这样一方面可以避免物理节点负载不均匀的情况,一方面可以减少雪崩效应发生的几率,一定程度缓解了负载不均的问题。
但是大量虚拟节点会增加系统存储维护的开销,而且大量的虚拟节点的存在不方便将来对数据的查询。
Y0的作者P Brighten Godfrey采用了Chord引入的虚拟服务器概念,并试图通过将虚拟节点聚集在ID空间的一小部分中来避免开销。他们在Y0 DHT中提出了一种低开销的虚拟服务器选择算法:首先随机选取随机的初始点,之后在这个点的间隔区间之中随机选取log(n)个节点作为虚拟服务器。基于荷载均匀分布在标识空间的经典假设,Y0能够以最小的开销实现负载平衡。他们证明了Y0可以达到接近最优的负载均衡,通过移动少量负载并且将路由表最多增加一个常量数量级别的大小就能保持负载均衡。
Manku等描述了另一种改进节点放置以实现更均匀负载平衡的方法。他们为DHT提出了一种低成本、无中心的算法。此算法被一个动态主机集合所管理。每个主机在0到1的单位间隔中被赋予一个ID。在任何时候,ID集都会将间隔分割成为不相交的分区。主机并不能从全局视角了解系统中的其他ID。
Manku使用的方法是构建平衡二叉树。初始的时候只有一个根节点和两个叶子节点,两个叶子节点标签分别是0和1。他们维持这样一个准则:任何时候对于每个叶子节点,只有一个内部节点到它的路径是活跃的。因此活跃叶子节点的集合将二叉树划分为互斥的组别。他们有多种生长树的策略:随机选取叶子节点并进行生成、优先向拥有更少叶子节点的子树进行分裂等。树生长完毕后,节点也划分好了。这样做的好处是处理了节点加入离开的问题,并且节点加入离开最多改变一个主机的ID。
Azar等人使用多重哈希函数的方法。他们提出了抽象的“球箱”模型,将数据项比作球,将节点比作箱子。之后可以为每个数据项应用一组具有独立且均匀分布输出的哈希函数H={H1,H2,…,Hn}。对于每个球,随机选取n个箱子,然后把球放在n个箱子中相对最空的那个箱子里面。经过实验他们发现当n=2的时候装最多球的箱子球的数目减少的最显著,即负载最为均衡。
近年来,科学家们更多地采用基于加权的负载均衡策略。Robin等基于Y0进行优化,提出加权负载均衡与虚拟节点相结合的策略。他们定义了最小贡献容量常数c,对于任何具有正权重wi的节点,生成wi/c个虚拟节点。每个虚拟节点根据二叉树放置策略被放置到环上。他们舍弃了Y0中的估计值,使用固定值作为最小贡献权重,优点是避免在网络中使用额外的同步协议和估计器。
Sourla等也描述了一种基于权重的负载平衡机制。他们将节点形式化为树结构,提出了基于层次树结构的元素更新的有效解决方案。该机制的主要思想是通过使用权重在节点之间几乎均匀地分布元素,权重被描述为显示节点之间负载不均匀程度的度量。当负载不均匀时,会启动数据迁移过程以平均分配元素。该机制分为两步:其一,当在树叶上添加或删除元素时,它使用虚拟权重提供树中权重信息的有效本地更新;其二,它提供了一种有效的负载平衡机制,在必要时激活该机制。
Yao和He将改进的人工蜂群算法用于负载平衡算法。他们考虑了新到达的请求和来自重负载节点的请求,而不是所有请求。Li等人开发了一种基于蚁群优化的负载平衡方法。他们使用Cloudsim模拟器模拟了该方法,并将其与FCFS和基本ACO算法进行了比较。Lu等人提出了一种用于云存储中负载平衡和动态迁移技术的混合控制机制。
Hsiao等提出了一种分布式算法,用于云环境中的分布式文件系统中的负载再平衡。作者通过将负载重新平衡任务转移到存储节点来实现他们的方法,存储节点自发地迁移负载以达到平衡状态。Prabavathy等人提出了一种自适应负载平衡技术,以提高云存储的性能。Manfredi等人在内容交付网络中开发了一种有效的负载平衡算法。作者设计并验证了网络队列均衡的一个引理。他们利用这个引理开发了一种独特的分布式时间连续负载平衡算法。在平均队列长度、响应时间和可扩展性方面,作者将其算法性能与RR算法、随机算法、最小负载算法和2RC算法进行了比较,显示出很大的改进。Devaraj等人提出了一种使用粒子群优化算法的高效能量负载平衡方法。
Yogesh等处理了云存储中与负载均衡相关的挑战,他们利用存储服务器的不同参数提出了两种分布式的负载均衡算法CDLB和DDLB。第一个提出的算法考虑了服务速率和队列长度作为服务器的主要参数,第二种算法考虑了额外的服务器参数例如客户端请求的服务时间和截止时间。他们实现了队列调整模型,其中客户端请求直接插入服务器队列。此外,调度程序被放置在服务器队列和服务器之间,服务器从队列中弹出请求,以决定调度到本地服务器还是远程服务器
Souza等为雾环境引入QoS感知服务分配方案,通过提供遵守能力限制的服务以最小化经历的延迟。它被建模为一个多维背包问题,旨在协同最小化总体服务执行延迟和过度负载的边缘节点数目。
Fadahunsi和Maheswaran提出了一种两步资源管理方法,其目标是在使用尽可能少的边缘节点的同时,最大限度地减少服务获得服务所需的响应时间。首先,为每个设备选择一个主边缘和一个备份边缘节点池。他们的目标是找到边缘节点,使得它们与该设备之间的延迟最小。随后,IoT请求的服务托管在分配的边缘节点上,以保证期望的响应时间。Xia等人提出了另一项与上述目标相同的工作。该机制基于回溯搜索算法和伴随的启发式算法,最终做出符合目标的布局决策。
Skarlat等人提出了边缘到云系统的概念服务放置框架。其目标是在考虑用户约束的情况下最大限度地利用边缘节点,并使用遗传算法进行优化。作者介绍了雾单元的概念:在物联网节点上运行的软件,利用它们执行物联网服务。此外,他们还引入了一个边缘到云控制中间件,用于控制雾单元。此外,雾编排控制节点管理多个雾单元或与其连接的其他控制节点。后者使物联网服务能够在不涉及云节点的情况下执行。
Song等人关注于最大化边缘节点所服务的服务数量,同时保证QoS要求,例如响应时间。Tran等人提供了一种服务放置机制,最大化分配给边缘节点的服务数量。所提出的方法利用位置、响应时间和资源消耗等上下文信息来在边缘节点上执行服务分发。
Deng等人在边缘到云节点之间的相互作用中制定了工作负载分配方案,他们研究了相互作用中功耗和传输延迟之间的权衡,并在近似中求解。仿真和数值结果为研究边缘到云节点之间的协作提供了有用的指导。Naha等人提出了一种三层雾云架构的资源分配方法,该架构由雾设备、雾服务器和云层组成。为了处理资源供应中动态用户行为的截止时间要求,根据三个特征对可用资源进行排序,这三个特征包括可用处理时间、可用带宽和响应时间。然后,以分层和混合的方式为接收的请求分配这些资源。
Xu等人提出了另一种称为DRAM的负载平衡资源分配方法。DRAM首先静态地分配网络资源,然后应用服务迁移来动态地在边缘节点上实现负载平衡。
Babou等人提出了一种基于分层集群的负载平衡系统,旨在为了减少本地服务器上物联网请求的处理时间。他们提出了一个由边缘服务器、MEC服务器和中心云组成的三层架构。当节点收到请求时,系统会验证该节点是否有足够的容量来处理该请求。否则,相邻节点、相邻集群以及最后的云中心将被视为在网络上分层分发请求。
基本搜索算法包括:
·随机行走
P2P搜索中的随机行走搜索方法如下:在随机漫步中,请求者发出K个查询请求给随机挑选的K个相邻节点。然后每个查询信息在以后的漫步过程中直接与请求者保持联系,询问是否还要继续下一步。如果请求者同意继续漫步,则又开始随机选择下一步漫步的节点,否则中止搜索。
随机行走算法具有一定的随机性,无法保证高效查询。
·流言算法
流言算法(Gossip)是现代查询搜索算法中比较有吸引力且被广泛采用的算法。流言算法内容是随机选取邻近的K个节点发送消息,那些节点迭代地向邻近节点发送,最终感染整个网络。
流言算法同样具有一定的随机性,无法保证高效查询。
·洪泛算法
洪泛法(Flooding)是一种简单的路由算法,将收到的封包,往所有的可能连结路径上递送,直到封包到达为止。
洪泛算法虽然考虑到了待查找数据所在路径的所有可能性,但缺点是通信开销较大。
·广度优先搜索算法
在广度优先搜索算法(BFS)中,发起或接收查询的转发节点首先搜索本地资源集合中的相关资源。当在本地集合中找到资源时,它会向请求节点发送一条包含已检索到的相关资源列表的消息。直到生存时间(TTL)达到某个预定义值,查询传播过程停止。BFS试图找到最大数量的结果。然而,与其他方法相比,这会产生大量的消息,并增加网络流量较大的连接节点的数量。
·深度优先搜索算法
深度优先搜索算法(DFS)与BFS不同,每个节点选取候选的邻居发送查询,如果转发器在TTL内未收到响应,选另一个节点发送查询。这是一个迭代的过程,直到查询被响应或者邻居都被查询的时候结束。
·Chord简单查询算法
Chord有一种最简单的顺序查找的策略,即节点首先在本地查找,若没有就询问后继节点,这样依次进行,这样查找的时间复杂度是O(N)。该简单查询算法目的性差,时间复杂度较大。
·Chord扩展查询算法
该算法从节点路由表由远及近查找,路由表大小为Log(N),这样可以降低查询复杂度至Log(N)。
·Kademlia查询算法
Kademlia查询通过路由表实现。Kademlia上的节点通过路由表存储彼此的关联信息。每个序号为i的节点都为距离自身2i和2i+1之间的节点保留一个IP地址、UDP端口、节点ID三元组的列表。这些列表被称为k-buckets。每个k-bucket按最后一次访问时间进行排序,最少访问的节点在头部,最频繁访问的节点在尾部。当节点收到信息时,它会动态更新k-buckets尽可能使得发送节点插入路由表的末尾。
路由表是二叉树结构,叶子表示k-bucket。每个k-bucket覆盖一定空间,包含对应相同ID前缀的节点,前缀标识着k-bucket在二叉树的位置。最初路由表只包含一个节点,随着收到新的信息,二叉树开始分裂生长。假如k-bucket未满就直接插入新节点,否则将其分裂为两部分,再插入新节点。如果路由表各个范围都满了就停止插入。
对于查询的优化是通过增加路由表大小减少每次查找的跳数。具体做法是将每次考虑的ID位数扩大b倍,这样可以将原先的期望查询跳数从log2 n降低至
·CAN路由算法
CAN中的节点维护一个坐标路由表,路由表包含其坐标空间直接邻居的IP地址和虚拟坐标空间。每条CAN路由信息包含目标坐标,借助其邻居坐标集,节点通过贪婪算法将消息转发到最接近目的地坐标的邻居,之后到达目标区域。
·Tapestry查询算法
客户端通过向数据的根节点发送数据来查询数据。查询路径上的每个节点检查自身是否包含该数据的路由信息,如果是向根节点转发消息,否则拒绝消息。
·基于强化学习的路由算法
近年来,随着深度学习技术的迅速发展,有很多研究者将深度学习与查询路由算法相结合。Alanazi等提出了基于强化学习的路由算法RLQR。RLQR的主要目标是通过减少交换的消息和联系的节点的数量来达到较高的检索效率和较低的搜索成本。为了实现这一点,RLQR需要参考之前发送的查询中收集到的信息,以确定即将进行的查询的相关节点。作者通过仿真表明在检索效率和通信成本方面,RLQR优于业界领先的查询路由方法。
Mohammad等使用强化学习方法“Q-learning”的智能邻居选择(INS)算法。该算法的主要目标是通过减少连接的节点、交换的消息以及时间来降低搜索成本,从而提高检索效率。INS算法在每个节点中生成一个Q表,该表存储从以前发送的查询结果中收集的Q值,并将其用于即将进行的查询。仿真结果表明在某些搜索场景中其性能比控制洪泛算法有较大提升。
·基于智能评估的路由算法
Kalogeraki等人引入了一种叫做智能搜索(IS)的面向查询的方法,该方法管理存储邻居配置文件的路由表,并提供每个邻居配置文件(包括邻居最近处理的查询和接收的查询数)的简单矢量表示。每次节点发起或接收查询时,它都会对其邻居进行关于其配置和查询内容的在线评估。然后,查询请求被发送到前k个相关邻居。Arour等人将形式概念分析(FCA)理论用于P2P信息检索系统中的高效查询路由。它是一种提取感兴趣的关系数据集的方法,从先前提交的查询和相关联的查询命中之中隐式提取用户兴趣,并将用户兴趣存储在本地节点知识库中。查询路由学习算法首先计算用户兴趣与查询中关键字之间的相似度,然后将与用户兴趣中包含的查询最接近的节点识别为k个相关节点,这些节点被选择为查询的转发节点。
发明人在进行无中心分布式系统研究时,发现无中心分布式系统相比中心化分布式存储系统存在一些优势,但是其也存在一些缺陷。其中,学术界普遍关注的无中心分布式系统研究面临的两个主要挑战:节点负载不均衡以及查询性能欠佳。
·节点负载不均:无中心分布式系统中的每个节点相对于其它节点而言,既扮演服务端又扮演客户端的角色。信息的存储、查询和检索会在所有节点之间形成负载,摈弃了中心控制器导致系统不能以上帝视角来监控程序状态及负载调度,无法监测每个节点的承载能力和负载情况并基于此进行数据块或其它负载的调度,有潜在的负载偏斜风险;同时节点的加入或者退出引起的负载重新分配代价巨大。因此亟待研究改进无中心分布式系统的负载均衡的算法。
·查询性能欠佳:由于放弃了中心节点,存储系统不能从中心管理节点知晓数据的具体存储节点位置信息,没有全局数据索引信息及其他元信息,使得查询效率降低。在P2P系统中的搜索算法包括一些基本的搜索算法比如BFS、DFS、随机行走、流言算法、洪泛算法等还有基于历史的查询算法比如基于强化学习的路由算法等等,普遍存在无效I/O占比高、查询延迟方差大等问题。因此,亟待研究改进无中心分布式系统的查询优化算法及策略。
发明内容
针对上述无中心分布式系统存在的缺陷,本发明提出了一种无中心分布式存储架构,包含了基于哈希距离的数据副本分布策略、快速收敛的数据存储转发算法、节点自治的查询路径高效调度算法。本发明的方法对于无中心分布式系统负载不均和查询性能低下的缺陷做出一定适应场景的优化,其意义不仅在于促进关于分布式存储的研究,为研究者们解决上述问题提供了新的思路,还有助于大数据计算、大数据分析等与分布式存储密切相关的实际场景应用的发展。
本发明还提出了一种无中心的分布式存储方法,其特征在于,包括:
步骤1、获取包括n个存储节点的分布式存储系统,根据一致性哈希所有存储节点和键值K映射并以数轴的形式排列到哈希空间σ;
步骤2、n个节点将数轴划分为n+1个区间,根据数轴上n个节点之间的距离可以将数轴划分为n个节点对应的近邻空间;键值K对应的数据存储至距键值K哈希距离最短的存储节点。
所述的无中心的分布式存储方法,其特征在于,该分布式存储系统中一个存储节点p发起代表存储请求的键值k,存储节点p的路由表为R;对于存储节点p以及路由表R中任意存储节点x,计算存储节点x与存储请求k的哈希距离d;
d(x,k)=|σ(x)-σ(k)| (1)
获取p和R之中距离k最近的存储节点,记作q;q满足以下条件:
若q=p,那么p在本地存储k对应的值v;否则将键值k相应的数据向q进行转发。
所述的无中心的分布式存储方法,其特征在于,当该分布式存储系统中一个存储节点负载能力变为原来的m倍时,调整节点接受数据点的该近邻空间为原来的m倍。
所述的无中心的分布式存储方法,其特征在于,当该分布式存储系统中一个存储节点p接收代表查询请求的键值k之后,若存储节点p本地存有键值k对应的数据,则返回该数据,否则计算存储节点p和其路由表R中各存储节点与键值k的哈希距离,哈希距离最近的节点q;
若q=p,则查询失败,流程结束;否则向q转发该该表查询请求的键值k。
本发明还提出了一种无中心的分布式存储系统,其特征在于,包括:
初始模块,用于获取包括n个存储节点的分布式存储系统,根据一致性哈希所有存储节点和键值K映射并以数轴的形式排列到哈希空间σ;
存储模块,用于以n个节点将数轴划分为n+1个区间,根据数轴上n个节点之间的距离可以将数轴划分为n个节点对应的近邻空间;键值K对应的数据存储至距键值K哈希距离最短的存储节点。
所述的无中心的分布式存储系统,其特征在于,该分布式存储系统中一个存储节点p发起代表存储请求的键值k,存储节点p的路由表为R;对于存储节点p以及路由表R中任意存储节点x,计算存储节点x与存储请求k的哈希距离d;
d(x,k)=|σ(x)-σ(k)| (1)
获取p和R之中距离k最近的存储节点,记作q;q满足以下条件:
若q=p,那么p在本地存储k对应的值v;否则将键值k相应的数据向q进行转发。
所述的无中心的分布式存储系统,其特征在于,当该分布式存储系统中一个存储节点负载能力变为原来的m倍时,调整节点接受数据点的该近邻空间为原来的m倍。
所述的无中心的分布式存储系统,其特征在于,当该分布式存储系统中一个存储节点p接收代表查询请求的键值k之后,若存储节点p本地存有键值k对应的数据,则返回该数据,否则计算存储节点p和其路由表R中各存储节点与键值k的哈希距离,哈希距离最近的节点q;
若q=p,则查询失败,流程结束;否则向q转发该该表查询请求的键值k。
本发明还提出了一种存储介质,用于存储执行所述任意一种无中心的分布式存储方法的程序。
本发明还提出了一种客户端,用于任意一种无中心的分布式存储系统。
由以上方案可知,本发明的优点在于:
本发明重点关注和研究了无中心分布式存储系统研究面临的两个主要挑战:节点负载不均衡以及查询性能欠佳。
节点负载不均:本发明基于一致性哈希算法,提出了一种依照节点近邻空间划分哈希数轴的结构,设计了无中心的节点自治存储转发算法、依据节点承载能力进行合理调度算法、系统扰动的动态负载均衡策略,并在仿真测试中,验证了本发明方法、算法的可行性和先进性。
查询性能欠佳:本发明基于流言算法、随机行走等经典路由算法,提出了一种依照键值快速寻址算法,设计了节点宕机下转发项数调整策略、查询数据缓存机制。
本发明基于以上算法思路,设计开发了存储查询一体化的无中心分布式系统,通过对比实验,验证了该系统相对于经典无中心分布式模型例如Chord的特定优势。
附图说明
图1为存储系统发展的时间线示意图;
图2为数据分布与哈希空间组织结构的关系图;
图3为数据存储下发的处理流程图;
图4为数据查询任务的转发处理流程图;
图5为基于查询缓存的数据查询任务的转发处理流程图;
图6为查询缓存数据生成写入及删除流程图;
图7为整体系统功能模块架构图;
图8为数据在持久化存储中的偏移组织方法图。
具体实施方式
本发明提出了一种无中心分布式存储架构,包含了基于哈希距离的数据副本分布策略、快速收敛的数据存储转发算法、节点自治的查询路径高效调度算法。针对无中心分布式系统的负载均衡问题,设计了一种新的一致性哈希数据组织结构,数据的分布通过一种新的无中心的节点自治存储转发算法实现,同时,该一致性哈希模型能够依据节点承载能力的差异性调整节点接受数据的概率,以实现合理调度,当系统发生扰动时,能够通过既定重分配策略实现动态负载均衡,减少雪崩效应的发送几率;针对无中心分布式系统的查询性能低下问题,提出一种新的键值快速寻址算法,每个节点向路由表中与数据点哈希距离较近的节点转发查询请求,在节点宕机情况下,该算法能够调整转发项数来提升查询成功率,借助查询数据缓存机制,节点在第二次发起相同的远端查询时能将跳数降低为0;依据提到的存储转发算法和查询转发算法设计了一套无中心分布式存储系统,用户可以通过SQL语句在该存储引擎执行分布式哈希表的创建、数据插入、查询等操作。该系统包含了语法解析、存储转发、查询转发、节点通信、节点路由建立、磁盘偏移存储等模块。
本发明的方法对于无中心分布式系统负载不均和查询性能低下的缺陷做出一定适应场景的优化,其意义不仅在于促进关于分布式存储的研究,为研究者们解决上述问题提供了新的思路,还有助于大数据计算、大数据分析等与分布式存储密切相关的实际场景应用的发展。
为让本发明的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。
本发明的目的在于:
1、针对无中心分布式系统普遍存在的负载不均衡问题,本发明提出了一种新的一致性哈希数据组织模型;一种节点依据与数据点的哈希距离自主决策存储数据点,并向路由表中与数据点哈希距离最近的节点转发的存储算法。该存储算法能够依据节点承载能力进行合理调度,同时节点加入或退出的时候能够向其哈希邻近节点吸收或释放数据,避免了全局数据迁移。作者通过仿真实验对上述模型和算法进行了验证,结果表明本发明提出模型在静态负载均衡、数据合理调度等方面优于学术界的一些主流模型比如经典无中心分布式查询协议Chord。
2、针对无中心分布式系统存在的查询性能低下的问题,本发明拟设计实现一种节点向路由表中与数据点哈希距离较近的节点转发请求的查询算法,该算法能够在节点宕机情况下调整转发策略,提升查询成功几率。通过仿真实验对上述算法进行了验证,结果表明该算法相比学术界的一些主流查询算法比如流言算法、Chord递进查询算法等降低了平均查询跳数的期望,提升了网络IO效率。
3、发明人基于上述两个工作描述的算法思路设计实现了一种存储查询一体化的无中心分布式系统。该系统同时包含磁盘偏移存储、路由建立、节点通信、邻近节点存储转发、邻近节点查询转发等模块。用户能够在该系统通过SQL语句执行无中心分布式哈希表的创建、插入数据、查询数据等操作。作者基于Kaggle上的数据集在实际分布式环境中进行了测试,测试结果验证了该系统的功能完备性、可用性和性能特征优势,验证了以上研究方案的可行性和先进性。
本发明所提出的一种无中心的分布式存储管理相关算法及系统,具体包括以下关键算法及步骤设计:
(1)基于一致性哈希的数据组织结构
本发明提出了一种新的一致性哈希数据组织结构,先用一致性哈希将n个节点与所有键值映射到哈希空间σ,以数轴的形式排列,其中节点可以为存储服务器,键值是和节点非一一对应,一个节点对应多个键值。n个节点将数轴划分为n+1个区间,而根据数轴上的点与n个节点之间的距离可以将数轴划分为n个节点对应的近邻空间。键值K对应数据被划分给距K哈希距离最短的节点哈希近邻区间内,即K分配给哈希空间距离K最近的节点。图2描绘了这种哈希组织结构,其中P(1)到P(n)代表n个节点映射到哈希空间的位置,I(1)到I(n)分别代表n个节点的邻近空间,每个节点负责存储该节点邻近空间的所有数据。
在现有技术Chord中,节点在哈希环上存储的数据完全取决于它与前继节点的距离,但该距离具有不确定性,因此出现负载不均的情况。而本发明的数据分布算法将每个节点与它的两个相邻节点的距离进行了对半划分,每个节点负责存储相邻区间的数据,如此削弱了每个节点之间距离不确定的影响。
(2)无中心的节点自治存储转发算法
算法流程:
如图3所示,对于某个节点p依据与数据块的哈希距离自主决策数据的存储转发策略:对于节点p,记其路由表为R,R中记录存放节点p的邻近节点IP。具体操作如下:对于节点p以及R之中的任意节点x,计算其与k的哈希距离d。
d(x,k)=|σ(x)-σ(k)| (1)
之后获取p和R之中距离存储请求k最近的节点,记作q。q满足以下条件:
若q=p,那么p在本地存储k对应的值v;否则将键值k相应的数据向q进行转发。q在收到数据后进行迭代的上述操作。其中存储请求k包括键值k和它对应的value。存储流程如图3所示。
算法分析:
优选的,上述操作会在有限步终止,因为任意节点p收到存储数据的消息时,其不会向上一级节点p.prev转发,否则说明k距离p.prev更近,与p.prev将数据转发给p矛盾。设节点总数为N,路由表长度为L,从初始节点开始,平均经过O(N/L)次转发收敛至目标节点,O为N/L的常数倍,其数值跟据实际情况起始节点和目标节点的距离而定。
上述操作保证了存储数据的完整性,因为任意数据在经过平均O(N/L)次转发后会存储到某一节点。以下通过理论分析对于负载均衡的保障。
记哈希空间长度为A,均匀分布的概率密度函数。设一共有n个节点,如果标识符空间节点哈希值的近邻空间分布均匀,那么均匀分布的数据点落在第m个近邻空间的概率如下:
基于(3)式,假设在标识符空间节点近邻空间以及数据点分布较为均匀,任意数据点被每个节点存储的概率是极为相近的,这样保障了负载的均衡。
(3)依据节点承载能力进行合理调度算法
Chord通过将键值与虚拟节点相关联,并将多个虚拟节点(具有不相关的标识符)映射到每个真实节点,使每个真实节点的键值数量更加统一。Chord将Log(N)个随机选择的虚拟节点分配给每个真实节点,若真实节点的负载能力强就多分配虚拟节点,否则少分配虚拟节点。这样能够根据节点承载能力有效实现负载均衡。但其缺陷是节点需要增加size为r的路由表来存储虚拟节点路由。
本发明通过调整节点接受数据点的概率来实现。当节点负载能力变为原来的m倍时,调整节点接受数据点的哈希近邻区间为原来的m倍,相当于于接受数据点的概率值变为原来的m倍。判断节点是否存储数据的条件随着概率值m的调整具体变更如下所示:
设键值k位于节点i和节点i+1之间。那么k存放在i的条件为:
|σ(k)-σ(i)|<1/2*|σ(i+1)-σ(i)|
如果调整概率为原来的倍数m小于1,那么k存放在i的条件变为:
|σ(k)-σ(i)|<m/2*|σ(i+1)-σ(i)|
如果调整概率为原来的倍数m大于1,那么将其附近一共m个节点围成的区域划分给该节点。
(4)键值快速寻址算法
本发明研究无中心分布式系统存在的查询性能低下的问题。具体表现在查询请求不能快速抵达目标节点,可能得经过多次跳转到达目标节点,同时,为了降低查询响应延迟会导致无效的网络IO占比较高。本发明基于以上设计的数据存储转发策略,设计实现一种节点自治的查询路由优化算法,基本思路是节点响应查询时,向本节点路由表中与数据点哈希距离较近的节点转发请求的查询策略算法,降低了平均查询跳数的期望,提升了网络IO效率。具体算法的设计实现如下:
当某个节点p接收查询请求k之后,它会首先在本地查询,若查到就返回结果,否则计算p和路由表R中节点与k的哈希距离,依据公式(2)得到p和路由表R中与键值k哈希距离最近的节点q。
若q=p,那么查询失败,流程结束;否则向q转发查询请求,之后依次递归。查询流程如图4所示。
设节点总数为N,路由表平均长度为L,查询复杂度为O(N/L)。在节点连接度较高时,查询复杂度接近O(1)。假如k对应的值在分布式表中,该算法能够保证查询到k对应的值,其节点自主决策查询请求与路由表距离接近的节点集合进行路由转发的策略,避免了无中心分布式系统中查询路径无法收敛的问题。
查询数据缓存机制:
当某个节点通过键值查询从其它节点获得数据时,将此种查询定义为远端查询。考虑到用户频繁发起同一种远端查询的情况,可以设置节点本地缓存。当节点完成一次成功的远端查询时,可以将数据存储在本地缓存。这样下次查询时能够直接从本地对数据进行读取。对于该数据不管第一次查询跳数有多大,第二次查询的跳数都是0。节点缓存工作流程如图5所示。
但是该缓存机制会增加节点本地的存储负载,因为每发起几次不同的远端查询,本地的存储负载都会以相应倍数增长。
考虑到缓存空间的有限性以及节点负载能力的差异性,需要定期清理缓存数据。假如用户只关注近期频繁访问的数据,可以借鉴内存管理中LRU的思路。通过控制缓存的上限,对于长久没被访问的查询数据,使用新的查询数据去进行覆盖,以此减缓节点负载的增长程度。缓存数据写入如图6所示。
本发明可基于开源数据库ClickHouse开发实现一个分布式存储引擎。该存储引擎支持关系型数据的存储,需要用户定义主键。对于每条记录,主键的值为key,整条记录为value。节点的IP与主键的值映射至同一哈希空间,每个节点于磁盘存储离它哈希距离最近的键值对。
该系统设计具有轻量化的特点,容易在服务器间进行部署,而且支持节点拓展。主键仅支持字符型,其他属性支持字符型、整型、浮点型。系统支持常用的SQL语句操作,包括create、drop、insert、select、update、delete等等:
①create操作:通过指定主键,各个属性名称以及类型创建DHT表,需要通过命令行参数指定本机ip。
②drop操作:删除DHT表并回收该表所占的磁盘空间。
③insert操作:将数据插入DHT表,数据按照前述存储转发算法存储到不同节点的目录下。
④select操作:支持从所有节点读取数据并进行汇集。当查询指定主键对应value的时候,会自动运行前述查询转发算法,以提高查询效率。
⑤update操作:支持根据指定主键值去进行属性的更新,路由寻址的算法与上述查询算法思路基本相同。不支持更新主键的值。
⑥delete操作:支持根据指定主键值去进行某些行的删除,路由寻址的算法与上述查询算法思路基本相同。
系统自上而下包括以下模块:语法解析、存储转发、查询转发、节点通信、节点路由建立、磁盘偏移存储。系统架构如图7所示。
语法解析:
用户通过SQL命令提交存储或者查询请求,之后数据库内部会自动构建语法树,根据关键字判断任务的类型。紧接着存储引擎根据任务的类型调用相应的函数。
存储转发:
将插入数据的主键的值与本机以及路由表的IP地址映射到同一哈希空间,根据就近原则判断本机是否存储该条数据。若本机进行存储,就跳转到磁盘存储模块;否则路由到距离键值最近的机器。
查询转发:
判断查询请求的类别,如果要求获取所有机器的数据,那么向所有相邻机器转发查询请求,并将结果汇集呈现;如果是针对特定键值的查询,先在本地进行查找,若本地查询失败向距离键值最近的相邻机器转发查询请求,直到收敛至目标节点。
节点通信:
通信采用TCP协议,每个节点运行一个线程作为服务器。当某个节点启动后,它会进行固定时间的睡眠,随后向路由表中的所有地址发送连接请求,最终所有节点之间建立双向连接。不同类型的消息通过前缀区分,服务器线程接收到消息后根据前缀判断消息类型,根据位域解析消息的参数比如属性名、属性的值等等。
节点路由建立:
节点通过读取磁盘上预设的路由表文件作为自己的路由,随着新节点的加入,路由表会进行自动更新,并存储在磁盘。
磁盘偏移存储:
如图8所示,该模块为系统的底层。对于某个关系型表格,它包含的所有属性分不同文件存储,每个子文件中K值对应的数据根据K的哈希值模p的余数划分为p段,每段间隔为Gap。根据存储数据量的大小,p和Gap的值可以进行相应的调整。
本系统的键值查询会根据主键模p的值,再乘以间隔将读指针偏移到文件的对应位置。之后通过简单字符串匹配找到主键所在偏移段的序号,根据该序号可以重复上述操作,通过打开其它属性对应的文件并进行偏移找到其它属性对应值,最后输出到终端。整个查询过程达到了毫秒级别。而朴素的直接读取所有数据再进行过滤操作的方案的查询延迟达到了秒级。可见偏移寻址的查询速率具备较大优势。
以下为与上述方法实施例对应的系统实施例,本实施方式可与上述实施方式互相配合实施。上述实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在上述实施方式中。
本发明还提出了一种无中心的分布式存储方法,其特征在于,包括:
步骤1、获取包括n个存储节点的分布式存储系统,根据一致性哈希所有存储节点和键值K映射并以数轴的形式排列到哈希空间σ;
步骤2、n个节点将数轴划分为n+1个区间,根据数轴上n个节点之间的距离可以将数轴划分为n个节点对应的近邻空间;键值K对应的数据存储至距键值K哈希距离最短的存储节点。
所述的无中心的分布式存储方法,其特征在于,该分布式存储系统中一个存储节点p发起代表存储请求的键值k,存储节点p的路由表为R;对于存储节点p以及路由表R中任意存储节点x,计算存储节点x与存储请求k的哈希距离d;
d(x,k)=|σ(x)-σ(k)| (1)
获取p和R之中距离k最近的存储节点,记作q;q满足以下条件:
若q=p,那么p在本地存储k对应的值v;否则将键值k相应的数据向q进行转发。
所述的无中心的分布式存储方法,其特征在于,当该分布式存储系统中一个存储节点负载能力变为原来的m倍时,调整节点接受数据点的该近邻空间为原来的m倍。
所述的无中心的分布式存储方法,其特征在于,当该分布式存储系统中一个存储节点p接收代表查询请求的键值k之后,若存储节点p本地存有键值k对应的数据,则返回该数据,否则计算存储节点p和其路由表R中各存储节点与键值k的哈希距离,哈希距离最近的节点q;
若q=p,则查询失败,流程结束;否则向q转发该该表查询请求的键值k。
本发明还提出了一种无中心的分布式存储系统,其特征在于,包括:
初始模块,用于获取包括n个存储节点的分布式存储系统,根据一致性哈希所有存储节点和键值K映射并以数轴的形式排列到哈希空间σ;
存储模块,用于以n个节点将数轴划分为n+1个区间,根据数轴上n个节点之间的距离可以将数轴划分为n个节点对应的近邻空间;键值K对应的数据存储至距键值K哈希距离最短的存储节点。
所述的无中心的分布式存储系统,其特征在于,该分布式存储系统中一个存储节点p发起代表存储请求的键值k,存储节点p的路由表为R;对于存储节点p以及路由表R中任意存储节点x,计算存储节点x与存储请求k的哈希距离d;
d(x,k)=|σ(x)-σ(k)| (1)
获取p和R之中距离k最近的存储节点,记作q;q满足以下条件:
若q=p,那么p在本地存储k对应的值v;否则将键值k相应的数据向q进行转发。
所述的无中心的分布式存储系统,其特征在于,当该分布式存储系统中一个存储节点负载能力变为原来的m倍时,调整节点接受数据点的该近邻空间为原来的m倍。
所述的无中心的分布式存储系统,其特征在于,当该分布式存储系统中一个存储节点p接收代表查询请求的键值k之后,若存储节点p本地存有键值k对应的数据,则返回该数据,否则计算存储节点p和其路由表R中各存储节点与键值k的哈希距离,哈希距离最近的节点q;
若q=p,则查询失败,流程结束;否则向q转发该该表查询请求的键值k。
本发明还提出了一种存储介质,用于存储执行所述任意一种无中心的分布式存储方法的程序。
本发明还提出了一种客户端,用于任意一种无中心的分布式存储系统。
Claims (10)
1.一种无中心的分布式存储方法,其特征在于,包括:
步骤1、获取包括n个存储节点的分布式存储系统,根据一致性哈希所有存储节点和键值K映射并以数轴的形式排列到哈希空间σ;
步骤2、n个节点将数轴划分为n+1个区间,根据数轴上n个节点之间的距离可以将数轴划分为n个节点对应的近邻空间;键值K对应的数据存储至距键值K哈希距离最短的存储节点。
2.如权利要求1所述的无中心的分布式存储方法,其特征在于,该分布式存储系统中一个存储节点p发起代表存储请求的键值k,存储节点p的路由表为R;对于存储节点p以及路由表R中任意存储节点x,计算存储节点x与存储请求k的哈希距离d;
d(x,k)=|σ(x)-σ(k)| (1)
获取p和R之中距离k最近的存储节点,记作q;q满足以下条件:
若q=p,那么p在本地存储k对应的值v;否则将键值k相应的数据向q进行转发。
3.如权利要求1所述的无中心的分布式存储方法,其特征在于,当该分布式存储系统中一个存储节点负载能力变为原来的m倍时,调整节点接受数据点的该近邻空间为原来的m倍。
4.如权利要求1所述的无中心的分布式存储方法,其特征在于,当该分布式存储系统中一个存储节点p接收代表查询请求的键值k之后,若存储节点p本地存有键值k对应的数据,则返回该数据,否则计算存储节点p和其路由表R中各存储节点与键值k的哈希距离,哈希距离最近的节点q;
若q=p,则查询失败,流程结束;否则向q转发该该表查询请求的键值k。
5.一种无中心的分布式存储系统,其特征在于,包括:
初始模块,用于获取包括n个存储节点的分布式存储系统,根据一致性哈希所有存储节点和键值K映射并以数轴的形式排列到哈希空间σ;
存储模块,用于以n个节点将数轴划分为n+1个区间,根据数轴上n个节点之间的距离可以将数轴划分为n个节点对应的近邻空间;键值K对应的数据存储至距键值K哈希距离最短的存储节点。
6.如权利要求5所述的无中心的分布式存储系统,其特征在于,该分布式存储系统中一个存储节点p发起代表存储请求的键值k,存储节点p的路由表为R;对于存储节点p以及路由表R中任意存储节点x,计算存储节点x与存储请求k的哈希距离d;
d(x,k)=|σ(x)-σ(k)| (1)
获取p和R之中距离k最近的存储节点,记作q;q满足以下条件:
若q=p,那么p在本地存储k对应的值v;否则将键值k相应的数据向q进行转发。
7.如权利要求5所述的无中心的分布式存储系统,其特征在于,当该分布式存储系统中一个存储节点负载能力变为原来的m倍时,调整节点接受数据点的该近邻空间为原来的m倍。
8.如权利要求5所述的无中心的分布式存储系统,其特征在于,当该分布式存储系统中一个存储节点p接收代表查询请求的键值k之后,若存储节点p本地存有键值k对应的数据,则返回该数据,否则计算存储节点p和其路由表R中各存储节点与键值k的哈希距离,哈希距离最近的节点q;
若q=p,则查询失败,流程结束;否则向q转发该该表查询请求的键值k。
9.一种存储介质,用于存储执行如权利要求1到4所述任意一种无中心的分布式存储方法的程序。
10.一种客户端,用于权利要求5至8中任意一种无中心的分布式存储系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310644427.4A CN117440003A (zh) | 2023-06-01 | 2023-06-01 | 一种无中心的分布式存储方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310644427.4A CN117440003A (zh) | 2023-06-01 | 2023-06-01 | 一种无中心的分布式存储方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117440003A true CN117440003A (zh) | 2024-01-23 |
Family
ID=89557165
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310644427.4A Pending CN117440003A (zh) | 2023-06-01 | 2023-06-01 | 一种无中心的分布式存储方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117440003A (zh) |
-
2023
- 2023-06-01 CN CN202310644427.4A patent/CN117440003A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8495013B2 (en) | Distributed storage system and method for storing objects based on locations | |
US20070079004A1 (en) | Method and apparatus for distributed indexing | |
US8296420B2 (en) | Method and apparatus for constructing a DHT-based global namespace | |
JP5600573B2 (ja) | 負荷分散装置及びプログラム | |
JP2009295127A (ja) | アクセス方法、アクセス装置及び分散データ管理システム | |
CN104811493A (zh) | 一种网络感知的虚拟机镜像存储系统及读写请求处理方法 | |
Schütt et al. | A structured overlay for multi-dimensional range queries | |
US20060209717A1 (en) | Distributed storing of network position information for nodes | |
Xu et al. | Adaptive and scalable load balancing for metadata server cluster in cloud-scale file systems | |
Sànchez-Artigas et al. | eSciGrid: A P2P-based e-science Grid for scalable and efficient data sharing | |
Datta et al. | On de Bruijn routing in distributed hash tables: there and back again | |
Wang et al. | ASPEN: an adaptive spatial peer-to-peer network | |
Zhang et al. | GraphA: Efficient partitioning and storage for distributed graph computation | |
Qi et al. | A balanced strategy to improve data invulnerability in structured P2P system | |
CN117440003A (zh) | 一种无中心的分布式存储方法及系统 | |
March et al. | Multi-attribute range queries on read-only DHT | |
CN108965387B (zh) | 一种提高p2p数据存储抗毁性的均衡方法及系统 | |
Ban et al. | Ealarm: Enhanced autonomic load-aware resource management for p2p key-value storage in cloud | |
Ma et al. | Resource discovery algorithm based on small-world cluster in hierarchical grid computing environment | |
JP2014130535A (ja) | 情報処理装置、情報処理端末、情報検索プログラム及び情報検索方法 | |
Dan et al. | A range query model based on DHT in P2P system | |
Asaduzzaman et al. | GeoP2P: an Adaptive and Faulttolerant Peer-to-Peer Overlay for Location-Based Search | |
DE SOUSA | AFFINITY BASED OVERLAYS FOR DECENTRALIZED SYSTEMS | |
Awerbuch et al. | Consistent and compact data management in distributed storage systems | |
Monteiro | Scaling DHTs towards millions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |