CN110866046B - 一种可扩展的分布式查询方法及装置 - Google Patents
一种可扩展的分布式查询方法及装置 Download PDFInfo
- Publication number
- CN110866046B CN110866046B CN201911033551.7A CN201911033551A CN110866046B CN 110866046 B CN110866046 B CN 110866046B CN 201911033551 A CN201911033551 A CN 201911033551A CN 110866046 B CN110866046 B CN 110866046B
- Authority
- CN
- China
- Prior art keywords
- node
- message
- nodes
- network system
- query
- 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.)
- Active
Links
Images
Classifications
-
- 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
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- 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/104—Peer-to-peer [P2P] networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Probability & Statistics with Applications (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供了一种可扩展的分布式查询方法及装置,应用于P2P网络系统中,所述P2P网络系统包括多个节点;本发明通过维护具有高容错和负载均衡的树形结构的P2P网络系统,将查询条件广播给P2P网络系统中的节点,节点在收到查询请求后,将本地满足查询条件的数据返回给P2P网络系统中的父节点,父节点将所有孩子节点返回的数据和本地的查询结果做去重和结算,将处理后的结果返回给该节点的父节点,以层层汇总的方式将数据返回给根节点,以此可降低代理节点的负载,保证低延迟,同时保证了系统的可扩展性。
Description
技术领域
本发明涉及区块链技术领域,特别是涉及一种可扩展的分布式查询方法以及一种可扩展的分布式查询装置。
背景技术
由于不可篡改性、匿名性和去中心化等特性,区块链技术得到了工业界和学术界的广泛关注,催生了大量区块链应用,包括比特币、以太坊等。传统区块链采用链式结构账本,通过全网共识机制维护全局统一的最长链,交易吞吐量低、交易费用高且不可扩展,使其不能应用于对实时性要求较高和高吞吐量的场景中,如银行和交易所等。
针对这一问题,近期的区块链研究和实践中出现了一种新型的基于图结构的分布式账本,与链式账本不同,基于图结构的账本通常采用非工作量证明机制PoW的共识算法,在联盟链的应用场景中,为了进一步提高交易吞吐量,并没有采用数据全网同步的方式,而采用了随机化存储的策略,交易被随机存放到网络中的若干节点上,且共识算法基于所有相关节点的检索结果。但是这种基于图结构随机存储的分布式账本对交易的查询提出了巨大挑战,即如何要在节点数量和全网TPS(每秒钟的交易数量)增加的情况下,保证查询功能的可扩展性。
发明内容
本发明提供一种可扩展的分布式查询方法和一种可扩展的分布式查询装置,以解决在图结构随机存储的分布式账本中,如何保证查询功能的可扩展性的问题。
为了解决上述问题,本发明公开了一种可扩展的分布式查询方法,所述方法应用于对等计算P2P网络系统中,所述P2P网络系统包括多个节点,所述节点中包括积极列表Active List,所述Active List分为活跃列表Eager List和惰性列表Lazy List;其中,所述节点的Eager List中存放的是在P2P网络系统上和该节点建立TCP连接的节点,用于传递消息;所述节点的Lazy List是所述Active List除Eager List中的剩余节点,用于传递消息的摘要或消息的ID,用于P2P网络系统的优化和容错;所述方法包括:
第一节点获得其父节点广播的查询请求,所述第一节点为所述P2P网络系统中的任一节点;
所述第一节点通过树形维护程序将所述查询请求广播给自身的孩子节点;所述孩子节点用于利用所述P2P网络系统的树形结构,将所述查询请求再广播给自身相应的孩子节点,自身相应的孩子节点重复上述广播步骤,直至将所述查询请求广播至该P2P网络系统上的所有节点;每个节点在收到查询的请求后,检索本地数据库,并等待其孩子节点的结果返回,当收集完所有的孩子节点返回的数据后,做结算和去重操作,并将结果返回给其父节点;经过层层反馈,当接收到用户查询请求的根节点收到所有孩子节点的返回结果时,做最终的结算和去重操作,生成最终查询结果,并将最终查询结果返回给该用户;
针对所述树形维护程序,所述方法包括:
所述第一节点在将所述查询请求广播给自身的孩子节点时,向自身的孩子节点中的第二节点发送IHAVE消息,所述IHAVE消息中包括消息ID;
所述第二节点检查自己是否已收到与所述消息ID对应的用于传递所述查询请求的NORMAL消息;
如果所述第二节点在超时时间内未收到与所述消息ID对应的NORMAL消息,则执行以下步骤:
所述第二节点生成用于修复所述P2P网络系统的GRAFT消息;所述GRAFT消息包括所述消息ID和接收所述IHAVE消息的请求;
所述第二节点将所述GRAFT消息发送给所述第一节点,并将所述第一节点从自身的Lazy List中移动到Eager List中,使所述第一节点对所述P2P网络系统进行修复;
如果所述第二节点在超时时间内已收到与所述消息ID对应的NORMAL消息,则执行以下步骤:
所述第二节点计算IHAVE消息的接收跳数与NORMAL消息的接收跳数差;
所述第二节点判断所述跳数差是否超过跳数阈值;
若所述跳数差超过跳数阈值,所述第二节点对所述P2P网络系统进行修复。
为了解决上述问题,本发明还公开了一种可扩展的分布式查询装置,所述装置应用于对等计算P2P网络系统中,所述P2P网络系统包括多个节点,所述节点中包括积极列表Active List,所述Active List分为活跃列表Eager List和惰性列表Lazy List;其中,所述节点的Eager List中存放的是在P2P网络系统上和该节点建立TCP连接的节点,用于传递消息;所述节点的Lazy List是所述Active List除Eager List中的剩余节点,用于传递消息的摘要或消息的ID,用于P2P网络系统的优化和容错;所述装置包括:
查询请求获得模块,被配置在所述第一节点中,用于获得其父节点广播的查询请求,所述第一节点为所述P2P网络系统中的任一节点;
查询请求广播模块,被配置在所述第一节点中,用于通过树形维护程序将所述查询请求广播给自身的孩子节点;所述孩子节点用于利用所述P2P网络系统的树形结构,将所述查询请求再广播给自身相应的孩子节点,自身相应的孩子节点重复上述广播步骤,直至将所述查询请求广播至该P2P网络系统上的所有节点;每个节点在收到查询的请求后,检索本地数据库,并等待其孩子节点的结果返回,当收集完所有的孩子节点返回的数据后,做结算和去重操作,并将结果返回给其父节点;经过层层反馈,当接收到用户查询请求的根节点收到所有孩子节点的返回结果时,做最终的结算和去重操作,生成最终查询结果,并将最终查询结果返回给该用户;
针对所述树形维护程序,所述装置包括:
IHAVE消息发送模块,被配置在所述第一节点中,用于在将所述查询请求广播给自身的孩子节点时,向自身的孩子节点中的第二节点发送IHAVE消息,所述IHAVE消息中包括消息ID;
NORMAL消息检查模块,被配置在所述第二节点中,用于检查自己是否已收到与所述消息ID对应的用于传递所述查询请求的NORMAL消息;
GRAFT消息生成模块,被配置在所述第二节点中,用于在超时时间内未收到与所述消息ID对应的NORMAL消息时,生成用于修复所述P2P网络系统的GRAFT消息;所述GRAFT消息包括所述消息ID和接收所述IHAVE消息的请求;
GRAFT消息发送模块,被配置在所述第二节点中,用于在超时时间内未收到与所述消息ID对应的NORMAL消息时,将所述GRAFT消息发送给所述第一节点,并将所述第一节点从自身的Lazy List中移动到Eager List中,使所述第一节点对所述P2P网络系统进行修复;
跳数差计算模块,被配置在所述第二节点中,用于在超时时间内已收到与所述消息ID对应的NORMAL消息时,计算IHAVE消息的接收跳数与NORMAL消息的接收跳数差;
跳数差判断模块,被配置在所述第二节点中,用于在超时时间内已收到与所述消息ID对应的NORMAL消息时,判断所述跳数差是否超过跳数阈值;
系统修复模块,被配置在所述第二节点中,用于在所述跳数差超过跳数阈值时,对所述P2P网络系统进行修复。
与现有技术相比,本发明包括以下优点:
本发明通过维护具有高容错和负载均衡的树形结构的P2P网络系统,将查询条件广播给P2P网络系统中的节点,节点在收到查询请求后,将本地满足查询条件的数据返回给P2P网络系统中的父节点,父节点将所有孩子节点返回的数据和本地的查询结果做去重和结算,将处理后的结果返回给该节点的父节点,以层层汇总的方式将数据返回给根节点,以此可降低代理节点的负载,保证低延迟。
本发明针对基于图结构随机存储的分布式账本的查询功能的可扩展问题,采用了跳数优化的方法,通过消息传输的跳数对P2P网络系统进行优化,构造具有较为平衡网络的P2P网络系统,从而把查询结果的处理运算均匀地分配到网络中的所有节点上,并根据节点的计算能力动态调节出度的大小,可在保证负载均衡的前提下,不对查询的延迟产生较大影响,保证了系统的可扩展性。
附图说明
图1是本发明实施例一种可扩展的分布式查询方法的步骤流程图;
图2(a)是P2P网络系统的第一次生成示意图;
图2(b)是第一次消息传输完成后的P2P网络系统示意图;
图3是本发明实施例的第二节点收到IHAVE消息后的运行流程图;
图4.1是本发明实施例节点数量-跳数的结构示意图;
图4.2是本发明实施例跳数分布的结构示意图;
图4.3是本发明实施例节点数量-去重率的结构示意图;
图4.4是本发明实施例节点总出度和跳数的结构示意图;
图4.5是本发明实施例节点总出度和去重率的结构示意图;
图4.6是本发明实施例固定根节点出度下的节点总出度和去重率的结构示意图;
图4.7是本发明实施例根节点出度固定和不固定下的节点总出度和跳数的结构示意图;
图5是本发明实施例一种可扩展的分布式查询装置的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
分布式账本可以将用户的数据安全地记录到分布式的网络节点上,当数据被安全记录后,仍然需要可靠且高效的机制去检索分布式账本上的数据。和传统的中心化数据库不同,分布式账本是在没有中央管理器或集中的数据存储的情况下完成在不同地理位置的数据的复制、共享和同步的共识数据库。
将交易可靠地存储并防止被篡改是分布式账本技术关注的核心,但是当交易可靠地存储在分布式账本上后,用户需要到分布式账本上查询交易数据,如查询余额,查询交易历史以及交易的内容。这种查询不仅仅是精确查询,还有可能是模糊查询、范围查询、多条件查询。而查询功能不应该仅仅提供交易数据的检索,还应该在对交易数据发生分歧时,提供溯源和审计功能。即如何处理用户的查询请求,并在分布式账本上查询满足条件的数据,将结果准确快速的响应给用户,和数据存储同样重要。
如比特币和以太坊这种类似的架构,矿工节点把交易打包成区块后,将该区块广播给网络上的所有节点。每个节点在收到新打包的区块后,都将该区块放置到自身维护的区块链结构中。全网中的每个节点都包含有全部的交易数据,故每个节点都可以作为查询请求的代理节点,通过对自身的数据库中检索满足条件的数据,进而响应查询请求。但比特币从2009年的第一个创世区块至今已经产生了193GiB的数据,比特币网络上的每个全节点都需要占用193GB的磁盘空间,而且随着时间的推移,该数据量的大小还会不断增加。而新型的分布式账本为了增加交易的吞吐量以及节省磁盘空间,摒弃了数据全网同步的方式,而采用了交易数据部分随机存储的方式。即网络上的所有节点并不存放全量的数据,而只随机存储部分交易数据。因为此种架构网络上的节点存储的并不是全量数据,所以就无法应用比特币和以太坊的查询方法。
另外一种直观的查询实现方法是,将网络上的所有数据同步到一个代理查询请求的节点上。该代理节点通过某种方式获取网络上所有节点的数据,并对数据验证和汇总后,存放到自身的数据库中,并对外提供查询功能。但该方案只适用于节点数量比较少和TPS较低的场景下,当节点数量和TPS达到一定阈值后,交易的数据量就会超过代理节点的带宽和计算能力,从而使得查询功能变得不可用,即该查询系统的架构是不可扩展的。
已有技术中,如果是普通的P2P文件共享系统,检索符合某个特定条件的文件,只需要把满足该条件的文件的一个副本检索出来即可。由于网络上存在的数据并不一定是有效的,一个有效的交易必须被存放到三个不同的节点上,并且被这三个不同节点的签名。而且数据在网络中是随机存放的,无法按照交易的属性建立一个结构化的网络,无法建立一个全局的索引,故只能通过广播的方式查询网络中的所有交易。为了避免对查询结果有效性的误判,不应该只广播给网络中的部分节点,必须对网络中所有的节点发起查询请求。该系统是完全去中心化的,网络上的任何一个节点都可以接收和响应查询的请求。当节点接收到查询请求,若有满足查询条件的数据,则将查询的结果返回给查询服务的代理节点(发起广播的节点)。所有存在满足查询条件数据的节点依次向查询的代理节点发送查询的结果。这需要查询代理节点依次和这些节点建立连接,并接受每个节点返回的数据。这无疑会给查询的代理节点带来巨大的开销,当多个节点同时和查询代理节点发起连接建立请求,且查询结果数量庞大时,很可能超过代理节点的带宽、运算或存储能力。这不仅可能导致无法验证交易的合法性、无法返回正确的结果,甚至会导致查询代理节点宕机。节点之间的传输路径构成链状,每个节点只把数据返回给上层的一个节点。虽然这样会减少代理节点的连接数量和降低数据的处理负载,但是会导致很高的延迟,浪费大量的网络带宽。所以,我们试图找到这两者之间的一种传输结构,既能保证低延迟,还能保证不会超过代理节点的负载。
针对上述问题,参照图1,示出了本发明实施例一种可扩展的分布式查询方法的步骤流程图,所述方法应用于对等计算P2P网络系统中,所述P2P网络系统包括多个节点,所述节点中包括积极列表Active List,所述Active List分为活跃列表Eager List和惰性列表Lazy List;其中,所述节点的Eager List中存放的是在P2P网络系统上和该节点建立TCP连接的节点,用于传递消息;所述节点的Lazy List是所述Active List除Eager List中的剩余节点,用于传递消息的摘要或消息的ID,用于P2P网络系统的优化和容错;
所述方法具体可以包括:
步骤S101,第一节点获得其父节点广播的查询请求,所述第一节点为所述P2P网络系统中的任一节点;
步骤S102,所述第一节点通过树形维护程序将所述查询请求广播给自身的孩子节点;所述孩子节点用于利用所述P2P网络系统的树形结构,将所述查询请求再广播给自身相应的孩子节点,自身相应的孩子节点重复上述广播步骤,直至将所述查询请求广播至该P2P网络系统上的所有节点;每个节点在收到查询的请求后,检索本地数据库,并等待其孩子节点的结果返回,当收集完所有的孩子节点返回的数据后,做结算和去重操作,并将结果返回给其父节点;经过层层反馈,当接收到用户查询请求的根节点收到所有孩子节点的返回结果时,做最终的结算和去重操作,生成最终查询结果,并将最终查询结果返回给该用户。
在本发明实施例中,提出了一种具有高容错和负载均衡的树形结构的P2P网络系统(接下来,或以树对该系统进行简称),该P2P网络系统并不是在协议开始运行时便开始构建。而是当传递第一条消息时,随着该条消息的传播路径形成一棵P2P网络系统,再通过后续消息的传播对该树进行优化和修复。在针对该P2P网络系统的查询方法中,本发明实施例采用了邻居节点(邻居节点指某一节点的父节点或孩子节点)的查询请求方法,并通过树形维护程序将该查询的请求广播给该节点的孩子节点,孩子节点再广播给自己相应的孩子节点,重复上述步骤,利用该树形结构,广播查询的消息至网络上的所有节点。节点在收到查询的请求后,检索本地数据库,并等待孩子节点的结果返回,在此过程中采用了“分治思想”,将查询的所有结果的去重、验证和传输均匀地分配给网络上的所有节点。首先节点之间构成树形结构,除根节点外,每个节点向其父节点(本发明实施例中的父节点)传递查询结果,父节点接收到所有的孩子节点返回的所有数据后,将查询结果做去重和验证,经过层层反馈,当接收到用户查询请求的根节点收到所有孩子节点的返回结果时,做最终的结算和去重操作,生成最终查询结果,并将最终查询结果返回给该用户。本发明实施例通过邻居节点的发散性查询方法,以及将查询结果在返回的传输过程中进行去重和验证,可降低代理节点的负载,还能保证低延迟,该树不仅仅能用来做查询结果回收,还可用来做查询请求的传递。
就具体实现而言,基于图结构随机存储的分布式账本是一个完全去中心化的P2P应用,网络上的每个节点并不能保存全网的节点信息,故需要定义一些相关的数据结构来存储网络上的部分节点的信息。全网上节点的所有信息被分散保存到了该网络的所有节点上,即所有节点维护的部分信息反映了全网的拓扑结构。每个节点能根据和其维护的节点之间的连接状态做动态的更新,来保证该节点和全网节点的连接。P2P网络系统的构建依赖于上述的数据结构,而节点之间的连接状态和延迟是动态变化的,根据该变化对P2P网络系统的树形结构做修复和优化,而修复和优化的过程需要定义一些额外的数据结构。如缓存消息的相关数据结构,该数据结构可以根据消息到达的先后次序来动态优化和修复该P2P网络系统。如何定义和使用上述数据结构来维护一棵全局的树变得+分关键。首先,树的维护主要分为以下三个部分:
1.树的构建
即在一个已有的网络拓扑环境中,删掉其中的一些连接的边,构造出一棵满足上述条件最优的生成树。运行在协议的初始化阶段。
2.树的优化
网络中节点之间的连接和节点的在线状态是不断变化的,该树不能是一成不变的,必须随着网络环境的变化而动态的优化,如传输延迟的优化、传输跳数的优化和节点的出度优化。
3.树的修复
当P2P网络系统上的一个节点离开网络或树上的一条连接的边暂时断开后,会影响到下层的节点对传输消息的接收。树的修复就是保证在节点离开和连接断开的情况下,修复该P2P网络系统,保证所有的节点能收到广播的消息并可以传递查询的结果,并在后续的传播过程中对该树不断地修复。
为了保证传输过程中消息的快速传输,节点之间的连接采用TCP长连接的方式,采用TCP长连接既能保证消息的可靠传输,避免每次建立连接的开销,还可以快速检测到节点的故障或连接的断开。
为实现本发明实施例,所述P2P网络系统包括BroadcastTree协议、MsgTransferProt协议和PartialView协议,所述BroadcastTree协议负责P2P网络系统的维护工作;所述MsgTransferProt协议负责查询消息的广播和查询结果的验证传递;所述PartialView协议负责管理每个节点的邻居节点,所述邻居节点包括父节点和孩子节点;其中,所述Active List位于P2P网络系统的PartialView协议中,所述PartialView协议还包括消极列表Passive List,所述Passive List中存放的是随机节点,用于替换Active List中断开连接的节点,保证节点和所述P2P网络系统中网络的连接。
每个节点中包括第一Map缓存、第二Map缓存以及第三Map缓存,第一Map缓存是ReceivedMs-gMap,存放的是消息ID和消息的映射,用来缓存当前已经收到的消息,以便于响应其他尚未收到该消息的节点对该消息的请求;
所述第二Map缓存是NotReceivedMsgMap,缓存的是消息ID和发送该消息的节点的映射;当达到指定的时长时,仍未收到Eager List中的节点发送的该消息,触发Timer定时器,用于向发送该消息的节点请求该消息,并修复所述P2P网络系统;
所述第三Map缓存是TimingCacheMsgMap,负责缓存当前收到的消息,如果在指定的时间范围内收到Lazy List中的节点发送的消息,比较两者的跳数来决定是否优化该树,给该P2P网络系统提供新的优化的可能。
具体的,假设当前还没有形成完整的P2P网络系统,用户向节点1(第一节点)发送一条查询消息,节点1将该消息广播给其Eager List中的所有节点,即节点2、节点3和节点6。这些节点收到该消息后,首先检查是否已经收到了该消息,即查看ReceivedMsgMap中是否存在当前消息。如果已经存在,将发送该消息的节点从Eager List移动到Lazy List中,并向发送该消息的节点发送PRUNE消息。如果不存在,将该消息缓存到ReceivedMsgMap中,并向Eager List中的所有节点发送该消息。参照图2(a),示出了P2P网络系统的第一次生成示意图,在图2(a)中,虚线表示是Lazy List中的节点,用于容错;实线表示P2P网络系统的边,用于传递查询消息。第一次消息传输完成后的P2P网络系统如图2(b)所示,一些节点的Eager List中的节点被移除到了LazyList中,每个节点和其Eager List中节点的连接构成该生成树的边。后续的消息只需要传给Eager List中的所有节点和发送消息的ID给LazyList中的所有节点。但此P2P网络系统的初始化是根据传输路径的传输速度来生成的,即传输速度快的节点的子树节点的数量就可能比传输速度慢的节点的子树节点数要多,并没有考虑树的平衡。
上述过程维护了三个重要的列表,Eager List、Lazy List和Passive List。这三个列表是运行P2P网络系统的维护算法的基础,这三个列表维护的好坏直接影响着P2P网络系统的结构,影响查询的延迟和查询结果的去重和验证。其中Eager List和Lazy List实则是和当前节点长连接的节点,Passive List是这两个列表的候补列表,旨在随机获得网络上的节点,从而防止网络的部分区域化,出现多个连通分量,节点之间不能通信的情况。
接下来,本发明实施例对如何在复杂的网络环境中,动态地维护这三个列表,从而优化传输的延迟和计算以及加强节点之间的连通性阐述了具体的方案,以第一节点为例。
首先,在所述第一节点加入所述P2P网络系统之前,需要对第一节点的三个列表进行初始化,所述方法包括:
步骤1:所述第一节点获取所述P2P网络系统的部分拓扑信息,应用所述拓扑信息初始化自身的Eager List、Lazy List和Passive List;
在本发明实施例中,采用的是基于HyparView的节点管理方式,HyparView原文中推荐使用的是定义一个或几个联系节点(Contact Node),每个节点加入到该网络时,首先连接到联系节点,由联系节点将其的三个列表发送给欲加入的节点。但这样容易导致网络的区域化,产生多个连通分量,导致所有的节点之间不能相互通信。所以,本发明实施例采用了基于KAD(Kademlia)实现的节点加入算法,KAD算法是NewYorkUniversity的PetarMaymounkov和David Mazieres在2002年提出的一种分布式Hash表的收敛算法。该算法通过两个节点ID的异或距离来衡量两个节点之间关联度,通过对节点ID的有效分层,每个节点仅需要保存网络上部分的节点信息,仅需要log(N)跳就可以找到相应的资源或定位到相应的节点。若没有满足条件的资源和节点,也会找到和该资源或节点异或距离最近的几个资源或节点。基于KAD的特性,本发明实施例利用KAD算法来初始化节点自己维护的邻居节点组成的邻居节点列表。
上述拓扑信息包括随机分配的节点Node ID;步骤1具体可以包括以下子步骤:
子步骤11:所述第一节点利用所述NodeID和KAD算法向P2P网络系统的网络发起请求,查找距离该Node ID最近的邻居节点;
子步骤12:所述第一节点从所述邻居节点中选择部分节点来初始化自身的EagerList、Lazy List和Passive List。
在本发明实施例中,每个节点在初始化时,都会被随机分配一个Node ID,利用Node ID和KAD算法向该网络发起请求,查找距离该Node ID最近的几个节点。随后,节点从这几个节点中选择部分节点来初始化自身的三个List列表。每次选取离该节点最近的几个节点作为邻居节点,优选的,从其中选取延迟较低的节点作为Active List,剩余节点作为PassiveList。
在本发明一优选实施例中,所述子步骤12进一步包括:所述第一节点根据自身的初度m,从所述邻居节点的Eager List中选择Eager List出度最小的m个节点,并将这m个节点加入到自身的Eager List中,以及根据自身的Passive List中的节点数n,从所述邻居节点的Passive List中随机选择n个节点,并加入自身的Passive List中,同时对Lazy List初始化为空,以完成初始化自身的三个List列表。
进一步的,当从所述邻居节点的Eager List中不能找到满足条件的m个节点时,所述第一节点从返回的所述邻居节点的Passive List中选择延迟最低的d个节点,并将这d个节点加入到自身的Eager List中。从而保证该节点的Eager List和Passive List能初始化成指定大小的List。Lazy List初始化为空,后续树的构建和优化的过程,会将Eager List中的节点转移到Lazy List中。
步骤2:当完成Eager List、Lazy List和Passive List的初始化后,所述第一节点与其Eager List中的节点分别建立TCP长连接,用来构成P2P网络系统的边;
步骤3:所述第一节点利用Lazy List中的节点作为替补边来对所述P2P网络系统进行修复,仅留下一个传输速度相对较快且跳数最少的边,剩下的节点被最终移除到LazyList中。
通过上面一系列的操作,加入的节点最终作为P2P网络系统的叶子节点,参与消息的传输和结果的汇总。
基于上述内容,针对所述树形维护程序,所述方法包括:
步骤S103,所述第一节点在将所述查询请求广播给自身的孩子节点时,向自身的孩子节点中的第二节点发送IHAVE消息,所述IHAVE消息中包括消息ID;
步骤S104,所述第二节点检查自己是否已收到与所述消息ID对应的用于传递所述查询请求的NORMAL消息;
如果所述第二节点在超时时间内未收到与所述消息ID对应的NORMAL消息,则执行以下步骤:
步骤S105,所述第二节点生成用于修复所述P2P网络系统的GRAFT消息;所述GRAFT消息包括所述消息ID和接收所述IHAVE消息的请求;
步骤S106,所述第二节点将所述GRAFT消息发送给所述第一节点,并将所述第一节点从自身的Lazy List中移动到Eager List中,使所述第一节点对所述P2P网络系统进行修复;
如果所述第二节点在超时时间内已收到与所述消息ID对应的NORMAL消息,则执行以下步骤:
步骤S107,所述第二节点计算IHAVE消息的接收跳数与NORMAL消息的接收跳数差;
步骤S108,所述第二节点判断所述跳数差是否超过跳数阈值;
步骤S109,若所述跳数差超过跳数阈值,所述第二节点对所述P2P网络系统进行修复。
在本发明实施例中,NORMAL消息的功能为在P2P网络系统中传递的查询消息或者查询结果,通过和Eager List中节点建立的TCP长连接发送;IHAVE消息中包含当前节点已经收到消息的消息ID,通过和Lazy List中的节点建立的TCP长连接发送,告知可从该节点获取该消息ID对应的消息;GRAFT消息是P2P网络系统的修复消息,用于向IHAVE消息的发送节点请求尚未收到的消息,将Lazy List的边替换为EagerList,修复该P2P网络系统;PRUNE消息用于裁剪P2P网络系统上多余的边,防止广播风暴。
上述超时时间的设置方法包括:所述第二节点收到消息时,通过所述ReceivedMsgMap检查是否已经收到所述IHAVE消息或NORMAL消息;
如果收到所述IHAVE消息或NORMAL消息,则丢弃该消息;
如果未收到所述IHAVE消息或NORMAL消息,则查看是否收到所述IHAVE消息或NORMAL消息的ID;
如果未收到,则丢弃该消息;否则,将所述IHAVE消息的ID或所述NORMAL消息的ID加入到NotReceivedMsgMap中,并将所述IHAVE消息或NORMAL消息设置为超时事件。因此,第二节点通过判断Timer超时事件,就可判断是否在超时时间内收到其邻居节点中的第一节点发送的IHAVE消息。超时判断时间可设置为0.1S。参照图3,示出了本发明实施例的第二节点收到IHAVE消息后的运行流程图。
在步骤S105~S106中,如果第二节点在超时时间内没有收到与所述消息ID对应的用于传递所述查询请求的NORMAL消息,说明其父节点(第一节点)可能不在线或延迟太高,则发送GRAFT消息给消息ID的发送者第一节点。目的有两个,一是向第一节点请求这个没有收到的消息,二是将第一节点从Lazy List中移动到Eager List中,来修复该P2P网络系统。
在步骤S105和S106中,由于网络原因,可能该查询请求在第一次过程中还未发送过来,而此时第二节点又再次向第一节点发送接收所述IHAVE消息的请求,这导致第一节点可能向第二节点发送了多次所述查询消息。为避免多次消息重复,占用节点内存,并影响树的平衡,本发明实施例还提供了方法:
所述第二节点在收到所述查询消息时,查看其ReceivedMsgMap中是否存在该查询消息;
当所述ReceivedMsgMap中存在所述查询消息时,所述第二节点将发送所述查询消息的第一节点从其Eager List中移动Lazy List中,并向该第一节点发送删除PRUNE消息;
当所述ReceivedMsgMap中不存在所述查询消息时,将所述查询消息缓存到所述ReceivedMsgMap中,并向其Eager List中的所有节点发送所述查询消息;
所述第一节点接收所述第二节点发送的PRUNE消息,将第二节点从自己的EagerList中删除,并把所述第二节点放入到自身的Lazy List中。
在步骤S107~S109中,如果第二节点在超时时间内收到了该消息,说明第二节点的父节点(第一节点)到第二节点只是延迟高一些,这时需要比较两者的跳数差。只有Lazy的跳数小于Eager跳数至某一个threshold时,才进行该树的修复。这样可以保证该树的稳定性和平衡性,不会由于频繁的网络变化,导致树的结构不断变化,维护了该树的稳定性。且不会只根据传输的延迟而不考虑跳数来对该树进行优化,维护了树的平衡性。
具体实现时,所述第二节点在收到所述第一节点发送的NORMAL消息时,将所述NotReceivedMsgMap中关于该NORMAL消息的记录删除,并存储到ReceivedMsgMap中,以及时保证数据的准确性,用于后期维护树的平衡。
树的修复和优化是通过交换Active List和Passive List数据结构中的变量来实现的。如将断开连接的节点放入Passive List中,将延迟低、跳数少的Lazy List中的节点替换Eager List中的节点,将Passive List中的在线节点替换为ActiveList中断开连接的节点。
在本发明实施例中,Eager List中的节点是根据接收消息的延迟和跳数来替换成Lazy List中的节点的,这样就会导致P2P网络系统的顶层节点Eager List尽可能满,最大化利用节点的出度,降低整棵树的高度。而底层的节点就有足够的Lazy List来用于优化和容错。节点的Eager List是通过KAD算法随机获取的,而Lazy List是Eager List中淘汰下来的,也是随机的,下层节点的Lazy List随机存放整棵树上的节点,该随机性增加了整棵树的容错性。不会由于出现上层的边断裂导致下层的节点不能收到广播消息的情况。由于控制消息是轻量的,树的优化和修复都是采用Lazy Repair的方式,且联盟链上的节点是相对可靠的,并不会非常频繁地离开和加入。所以优化和修复过程并不会占用大量的网络带宽,整个维护的过程是低负载的。
需要说明的是,在本发明的各个实施例中,第一第二只是为了区别不同的节点,并没有实质性的顺序意义。
接下来,针对本发明实施例所提供的步骤,对本发明实施例的整体方案做分析,包括查询一次的时间复杂度和负载降低率等方面。
1、查询的时间复杂度。
查询的过程首先要将查询消息通过P2P网络系统广播到全网,随后,通过全网节点进行层层验证和统计,最终将查询结果返回给P2P网络系统的根节点。若忽略查询结果在节点上的处理过程,那么整个查询过程是两次树的层次遍历的过程,故查询的延迟和P2P网络系统上的最长路径有关。假设每个节点配置有相同的出度k,每一层以pi(0<pi<1)的概率出度为k,树中所有的节点数量是N,树的高度是h,则通过计算可得树的高度h=O(logkN)。只需要logkN跳就可以遍历全网上的所有节点并汇总所有节点返回的查询结果,故查询的时间复杂度是O(logkN)。
2、负载降低率。
定义数据去重率为查询过程中根节点实际收到的数据总量和不采用此架构收到的数据总量的差值除以不采用此架构收到的数据总量。假设一次查询中,满足该查询条件的交易数量是n,P2P网络系统的根节点实际上接收到的交易数据量是m,则数据的去重率为1-m/(12*n)。
如果不采用此种查询架构,那么查询的代理节点应该收到的数据量大小是12乘以满足条件的所有交易数量。返回的结果在生成树传递的过程中,会被中间的传输节点去重,进而减少P2P网络系统的根节点数据处理总量。假设每个节点的出度是k,所有的数据均匀地分布在整个网络上,那么满足相应条件的查询数据就应该均匀地分布在P2P网络系统根节点的所有孩子中,那么最终返回的数据量应该为k*n,故查询的去重率是1-k/12。
综合来看数据的去重率和节点的出度k成负相关,而查询的跳数即查询的延迟和k成正相关。即k越大,根节点接收的数据量就越大,数据处理的负载越大,但查询的时延较低。所以,应该根据不同的场景综合考虑,当查询节点的计算能力较弱时,就可以采用低出度,损失查询延迟来降低根节点的负载。当节点的计算能力较高,且对查询延迟要求较高,就可以采用高出度的方式,降低查询延迟从而占用根节点的部分计算能力。
3、可扩展性分析
可扩展性是程序、系统和网络的重要属性,具备可扩展性的程序、系统和网络可在极小的代价下,优雅地处理工作量增加的问题,如通过增加处理资源等方式。对于中心化的服务架构来说,如搜索引擎,必须是可扩展的,来处理更多用户的查询请求以及对更多的资源建立正确的索引。中心化的服务架构通常采用横向扩展的方式,以增加服务器的方式来增加整体系统的处理能力。
而网络的可扩展性和中心化服务器的可扩展性却有所不同,如路由协议的可扩展性是用来应对网络规模的变化,假设网络中节点的数量是N,而路由协议表的大小是O(logN)级别的,该路由协议就可被认为是可扩展的。本发明实施例的P2P系统没有任何中心化的结构,所以不需要除了节点以外的任何其他资源,就可以无限的扩展。在时间复杂度分析中,分析出一次查询仅仅需要log(n)跳,在P2P网络层面就可以认为该协议是可扩展的。而除了消息的路由,仍然还有查询结果的传输和处理,在负载降低率的分析中,分析了本发明实施例的方案中,节点的负载和节点的出度k成负相关。故可通过调节节点的出度大小,来动态降低和增加节点的处理负载,对计算能力较高的节点可赋予较高的出度,对计算能力较低的节点赋予较低的出度,这样可以进一步增加查询系统的可扩展性。
除了上述提到的可扩展性,本发明实施例所提供的方案还具备很强的功能可扩展性,为将来进一步实现功能更加强大的查询系统提供了良好的基础,如更强的可扩展性和更小的开销等。
为验证本发明实施例的可扩展性,下述示例公开了本发明实施例在真机上的查询操作的可用性和仿真环境下10000个节点的可扩展性做了验证。验证的指标包括查询操作的平均跳数以及平均最大跳数和数据的去重率等。
参考变量的设定主要参照P2P网络协议的评定指标,如节点数量,由于本发明实施例的特殊性,故还选取了节点的出度作为参考变量。P2P网络中可扩展性的验证通常采用的是增加节点的数量来检验功能的可用性,采用节点数量为参照变量,来验证该查询系统的可扩展性,并以节点的出度作为参照量可以验证节点出度对节点的负载以及传输延迟的影响,从而更好地优化参数来提高系统的可扩展性。
而观测的指标主要有节点的负载,查询的延迟,以及树的平衡性,分别对应数据去重率、查询一次的跳数和叶子节点到根节点的跳数分布这三个因变量。节点的负载通过数据去重率来表征,数据去重率越大,节点的负载越小,反之亦然,通过观测节点的负载可较好地调整节点的出度,从而维持查询延迟和负载之间的平衡。由于P2P网络的异构性,节点之间的延迟在不同的网络环境中不尽相同,为了更好地表征查询的延迟,本示例使用的是查询的跳数指标而非查询消耗的时间。而树的平衡性是保证负载均衡的关键,通过维护一棵较为平衡的树,每个节点都可以均匀地负载查询结果的处理和传输,树的平衡性的表征是通过叶子节点到根节点的跳数分布来进行的,如果叶子节点到根节点的跳数都集中在log(N),则说明树是较为平衡的。
(一)、节点数量对性能影响的分析
如图4.1所示,是在每个节点的Active List大小都为7的情况下,随着节点数量的增加,P2P网络系统中的叶子节点的最大平均跳数和平均跳数。可见,平均跳数在log7(N)数量级,最大平均跳数由于网络拓扑结构的随机性略比平均跳数大1到2跳。证明该P2P网络系统最大限度的利用了每个节点的出度,充分降低了P2P网络系统的树高。
如图4.2所示,显示的是在不同节点数量的情况下,P2P网络系统上的叶子节点到根节点的路径长度。如节点数量在10000的情况下,路径长度主要集中在5跳和6跳上。证明该树是较为平衡的,树的平衡性直接决定了统计查询结果时,返回的结果信息能不能被均匀地负载。综上,验证了该方案中的P2P网络系统的维护方案,确实是充分利用了每个节点的出度,构造了一棵最大跳数很小的平衡树。从而保证了查询的延迟和均匀地负载接收到的查询结果。
如图4.3所示,显示了在每个节点的Active List大小为7情况下,P2P网络系统上根节点的数据去重率,可发现随着节点数量的增加数据的去重率并没有明显的变化,在51%上下波动。这也间接证明了数据的去重率和节点数量无关,只和P2P网络系统中节点的出度有关。通过上述实验验证了在节点数量增加的情况下,查询的延迟(实验中用跳数来衡量)是指数增加的,保证了在节点数量增加的情况下,查询功能的低延迟特性。通过叶子节点到根节点的跳数分布可验证该P2P网络系统的平衡性,验证了该方案对查询请求的接收和查询结果的处理是负载均衡的,故查询功能在节点数量增加的前提下,仍然是可用的,验证了该方案的可扩展性。
(二)节点出度对性能影响的分析
在该实验中,将展示在节点数量10000,故障率0%,节点的出度大小为3-10的情况下,节点的出度对查询系统评测指标的影响。
如图4.4所示,节点的总出度越大,P2P网络系统的高度越小,由于在节点的所有孩子节点中,需要保留一些放置到Lazy List中,用来从故障中恢复,增加容错性。所以,总出度并不是P2P网络系统中所有节点的孩子节点数量,故P2P网络系统的树高稍稍高于logkN。但是平均跳数在logkN范围内,保证该课树是较为平衡的。
当节点的总出度为10时,仅仅需要6跳就可以广播到全网,并从全网收集查询结果。当前网络环境中,每个节点和10个节点保持长连接是非常容易实现的。假设两个节点之间的平均延迟是100ms,每个节点的TPS平均为60t/s,节点数量是10000。那么从节点数量是10000,TPS为60万的北大数链上检索交易数据,仅仅需要1.2s,完全在用户的接受范围内。
如图4.5所示,数据去重率随着节点总出度的增加而不断减少,综合上述所有的实验结果,可知数据去重率只和节点的出度有关。节点的出度越大,数据去重率越小,但是平均最大跳数会减少,查询的延迟会降低。节点的出度越小,数据去重率越大,但是平均最大跳数会增大,查询的延迟会增大。
当节点的出度为3时,去重率高达75.19%,极大减少了根节点的计算负载。但是相应地,传输的平均最大跳数竟有12跳之多。所以需要对二者做权衡,当节点的计算能力较差时,可以选取小出度,虽然会增加查询过程的延迟,但会极大减少节点的处理负载。当对查询的延迟要求较高时,且节点的计算能力较强,可以增加节点的出度,进而降低查询的延迟。
根节点的出度越大,孩子节点就越多,每个孩子节点都返回查询结果。而查询结果是均匀分布在整个网络上的节点,故每个孩子节点接收到大致相同量的数据,进而将查询结果传递给根节点。所以,根节点的去重率应该只和根节点有关。如图4.6所示,实验的环境是,网络上节点10000个,除根节点外所有节点的总出度为7,根节点的出度恒为3,节点的故障率是0%,数据去重率和其他节点的总出度的关系。尽管除根节点之外的节点出度一直在变化,但是数据去重率一直在75.20%上下波动,且变化幅度仅有0.01%。说明根节点的数据去重率和其他节点的出度并无关系,仅仅和根节点的出度有关。所以根据节点的计算能力来决定节点的总出度,可以增加和减少处理的负载。
由上面的实验结果可知,当不固定根节点的出度时,所有节点的出度都相同,P2P网络系统的平均跳数随着节点出度的增加而减少。但是根据根节点的计算能力来固定根节点的出度可能会影响P2P网络系统的结构,故需要验证在根节点固定,其他节点出度变化的情况下,P2P网络系统的最大跳数和平均跳数。如图4.7所示,表示在上述条件下,P2P网络系统的平均跳数和节点总出度的关系。
可见,当根节点的出度固定时,P2P网络系统的平均最大跳数和平均跳数与根节点的出度不固定时,相差甚微。故根据根节点的计算能力来决定根节点的出度,并不会对P2P网络系统的特性造成较大的影响。通过上述实验,以节点的出度大小作为变量,以根节点到叶子节点的跳数作为衡量查询延迟的指标并进行检测,验证了节点的出度越大,P2P网络系统的高度越小,查询的延迟越低。但以数据去重率作为根节点负载的指标并进行检测,验证了节点的出度越大,节点的负载也会越大。而通过变化节点的出度和固定根节点的出度,可验证节点的负载大小只与自身的出度大小有关,与其他节点的出度无关,故可以通过降低节点出度的方式来降低节点的负载。而就降低节点的负载是否会影响查询的延迟,本发明做了如图4.7所代表的实验,可得出结论:变化根节点的出度并不会大幅影响查询的延迟。所以,可以通过降低计算能力和带宽较小的节点的出度,在不影响查询延迟的情况下,降低该节点的负载,对节点的计算能力动态地调整节点的出度,可进一步提高本发明实施例的可扩展性,进一步验证了本发明实施例的可扩展性。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参考图5,对应图1的方法,示出了本发明实施例一种可扩展的分布式查询装置的结构示意图,所述装置应用于对等计算P2P网络系统中,所述P2P网络系统包括多个节点,所述节点中包括积极列表Active List,所述Active List分为活跃列表Eager List和惰性列表Lazy List;其中,所述节点的Eager List中存放的是在P2P网络系统上和该节点建立TCP连接的节点,用于传递消息;所述节点的Lazy List是所述Active List除Eager List中的剩余节点,用于传递消息的摘要或消息的ID,用于P2P网络系统的优化和容错;所述装置500包括以下模块:
查询请求获得模块501,被配置在所述第一节点中,用于获得其父节点广播的查询请求,所述第一节点为所述P2P网络系统中的任一节点;
查询请求广播模块502,被配置在所述第一节点中,用于通过树形维护程序将所述查询请求广播给自身的孩子节点;所述孩子节点用于利用所述P2P网络系统的树形结构,将所述查询请求再广播给自身相应的孩子节点,自身相应的孩子节点重复上述广播步骤,直至将所述查询请求广播至该P2P网络系统上的所有节点;每个节点在收到查询的请求后,检索本地数据库,并等待其孩子节点的结果返回,当收集完所有的孩子节点返回的数据后,做结算和去重操作,并将结果返回给其父节点;经过层层反馈,当接收到用户查询请求的根节点收到所有孩子节点的返回结果时,做最终的结算和去重操作,生成最终查询结果,并将最终查询结果返回给该用户;
针对所述树形维护程序,所述装置包括:
IHAVE消息发送模块503,被配置在所述第一节点中,用于在将所述查询请求广播给自身的孩子节点时,向自身的孩子节点中的第二节点发送IHAVE消息,所述IHAVE消息中包括消息ID;
NORMAL消息检查模块504,被配置在所述第二节点中,用于检查自己是否已收到与所述消息ID对应的用于传递所述查询请求的NORMAL消息;
GRAFT消息生成模块505,被配置在所述第二节点中,用于在超时时间内未收到与所述消息ID对应的NORMAL消息时,生成用于修复所述P2P网络系统的GRAFT消息;所述GRAFT消息包括所述消息ID和接收所述IHAVE消息的请求;
GRAFT消息发送模块506,被配置在所述第二节点中,用于在超时时间内未收到与所述消息ID对应的NORMAL消息时,将所述GRAFT消息发送给所述第一节点,并将所述第一节点从自身的Lazy List中移动到Eager List中,使所述第一节点对所述P2P网络系统进行修复;
跳数差计算模块507,被配置在所述第二节点中,用于在超时时间内已收到与所述消息ID对应的NORMAL消息时,计算IHAVE消息的接收跳数与NORMAL消息的接收跳数差;
跳数差判断模块508,被配置在所述第二节点中,用于在超时时间内已收到与所述消息ID对应的NORMAL消息时,判断所述跳数差是否超过跳数阈值;
系统修复模块509,被配置在所述第二节点中,用于在所述跳数差超过跳数阈值时,对所述P2P网络系统进行修复。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
以上对本发明所提供的一种可扩展的分布式查询方法以及一种可扩展的分布式查询装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种可扩展的分布式查询方法,其特征在于,所述方法应用于对等计算P2P网络系统中,所述P2P网络系统包括多个节点,所述节点中包括积极列表Active List,所述ActiveList分为活跃列表Eager List和惰性列表Lazy List;其中,所述节点的Eager List中存放的是在P2P网络系统上和该节点建立TCP连接的节点,用于传递消息;所述节点的Lazy List是所述Active List除Eager List中的剩余节点,用于传递消息的摘要或消息的ID,用于P2P网络系统的优化和容错;所述方法包括:
在所述P2P网络系统中,第一节点获得其父节点广播的查询请求,所述第一节点为所述P2P网络系统中的任一节点;
所述第一节点通过树形维护程序将所述查询请求广播给自身的孩子节点;所述孩子节点用于利用所述P2P网络系统的树形结构,将所述查询请求再广播给自身相应的孩子节点,自身相应的孩子节点重复上述广播步骤,直至将所述查询请求广播至该P2P网络系统上的所有节点;每个节点在收到查询的请求后,检索本地数据库,并等待其孩子节点的结果返回,当收集完所有的孩子节点返回的数据后,做结算和去重操作,并将结果返回给其父节点;经过层层反馈,当接收到用户查询请求的根节点收到所有孩子节点的返回结果时,做最终的结算和去重操作,生成最终查询结果,并将最终查询结果返回给该用户;
针对所述树形维护程序,所述方法包括:
所述第一节点在将所述查询请求广播给自身的孩子节点时,向自身的孩子节点中的第二节点发送IHAVE消息,所述IHAVE消息中包括消息ID;
所述第二节点检查自己是否已收到与所述消息ID对应的用于传递所述查询请求的NORMAL消息;
如果所述第二节点在超时时间内未收到与所述消息ID对应的NORMAL消息,则执行以下步骤:
所述第二节点生成用于修复所述P2P网络系统的GRAFT消息;所述GRAFT消息包括所述消息ID和接收所述IHAVE消息的请求;
所述第二节点将所述GRAFT消息发送给所述第一节点,并将所述第一节点从自身的Lazy List中移动到Eager List中,使所述第一节点对所述P2P网络系统进行修复;
如果所述第二节点在超时时间内已收到与所述消息ID对应的NORMAL消息,则执行以下步骤:
所述第二节点计算IHAVE消息的接收跳数与NORMAL消息的接收跳数差;
所述第二节点判断所述跳数差是否超过跳数阈值;
若所述跳数差超过跳数阈值,所述第二节点对所述P2P网络系统进行修复。
2.根据权利要求1所述的方法,其特征在于,所述P2P网络系统包括BroadcastTree协议、MsgTransferProt协议和PartialView协议,所述BroadcastTree协议负责P2P网络系统的维护工作;所述MsgTransferProt协议负责查询消息的广播和查询结果的验证传递;所述PartialView协议负责管理每个节点的邻居节点,所述邻居节点包括父节点和孩子节点;其中,所述Active List位于P2P网络系统的PartialView协议中,所述PartialView协议还包括消极列表Passive List,所述Passive List中存放的是随机节点,用于替换Active List中断开连接的节点,保证节点和所述P2P网络系统的连接。
3.根据权利要求1或2所述的方法,其特征在于,每个节点中包括第一Map缓存、第二Map缓存以及第三Map缓存,第一Map缓存是ReceivedMsgMap,存放的是消息ID和消息的映射,用来缓存当前已经收到的消息,以便于响应其他尚未收到该消息的节点对该消息的请求;
所述第二Map缓存是NotReceivedMsgMap,缓存的是消息ID和发送该消息的节点的映射;当达到指定的时长时,仍未收到Eager List中的节点发送的该消息,触发Timer定时器,用于向发送该消息的节点请求该消息,并修复所述P2P网络系统;
所述第三Map缓存是TimingCacheMsgMap,负责缓存当前收到的消息,如果在指定的时间范围内收到Lazy List中的节点发送的消息,比较两者的跳数来决定是否优化所述P2P网络系统。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
所述第二节点收到消息时,通过所述ReceivedMsgMap检查是否已经收到所述IHAVE消息或NORMAL消息;
如果收到所述IHAVE消息或NORMAL消息,则丢弃该消息;
如果未收到所述IHAVE消息或NORMAL消息,则查看是否收到所述IHAVE消息或NORMAL消息的ID;
如果未收到,则丢弃该消息;否则,将所述IHAVE消息的ID或所述NORMAL消息的ID加入到NotReceivedMsgMap中,并将所述IHAVE消息或NORMAL消息设置为超时事件。
5.根据权利要求3所述的方法,其特征在于,所述方法包括:
所述第二节点在收到所述查询消息时,查看其ReceivedMsgMap中是否存在该查询消息;
当所述ReceivedMsgMap中存在所述查询消息时,所述第二节点将发送所述查询消息的第一节点从其Eager List中移动Lazy List中,并向该第一节点发送删除PRUNE消息;
当所述ReceivedMsgMap中不存在所述查询消息时,将所述查询消息缓存到所述ReceivedMsgMap中,并向其Eager List中的所有节点发送所述查询消息;
所述第一节点接收所述第二节点发送的PRUNE消息,将第二节点从自己的Eager List中删除,并把所述第二节点放入到自身的Lazy List中。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
所述第二节点在收到所述第一节点发送的NORMAL消息时,将所述NotReceivedMsgMap中关于该NORMAL消息的记录删除,并存储到ReceivedMsgMap中。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过KAD算法随机获取所述Eager List。
8.一种可扩展的分布式查询装置,其特征在于,所述装置应用于对等计算P2P网络系统中,所述P2P网络系统包括多个节点,所述节点中包括积极列表Active List,所述ActiveList分为活跃列表Eager List和惰性列表Lazy List;其中,所述节点的Eager List中存放的是在P2P网络系统上和该节点建立TCP连接的节点,用于传递消息;所述节点的Lazy List是所述Active List除Eager List中的剩余节点,用于传递消息的摘要或消息的ID,用于P2P网络系统的优化和容错;所述装置包括:
查询请求获得模块,被配置在第一节点中,用于在所述P2P网络系统中,获得其父节点广播的查询请求,所述第一节点为所述P2P网络系统中的任一节点;
查询请求广播模块,被配置在所述第一节点中,用于通过树形维护程序将所述查询请求广播给自身的孩子节点;所述孩子节点用于利用所述P2P网络系统的树形结构,将所述查询请求再广播给自身相应的孩子节点,自身相应的孩子节点重复上述广播步骤,直至将所述查询请求广播至该P2P网络系统上的所有节点;每个节点在收到查询的请求后,检索本地数据库,并等待其孩子节点的结果返回,当收集完所有的孩子节点返回的数据后,做结算和去重操作,并将结果返回给其父节点;经过层层反馈,当接收到用户查询请求的根节点收到所有孩子节点的返回结果时,做最终的结算和去重操作,生成最终查询结果,并将最终查询结果返回给该用户;
针对所述树形维护程序,所述装置包括:
IHAVE消息发送模块,被配置在所述第一节点中,用于在将所述查询请求广播给自身的孩子节点时,向自身的孩子节点中的第二节点发送IHAVE消息,所述IHAVE消息中包括消息ID;
NORMAL消息检查模块,被配置在所述第二节点中,用于检查自己是否已收到与所述消息ID对应的用于传递所述查询请求的NORMAL消息;
GRAFT消息生成模块,被配置在所述第二节点中,用于在超时时间内未收到与所述消息ID对应的NORMAL消息时,生成用于修复所述P2P网络系统的GRAFT消息;所述GRAFT消息包括所述消息ID和接收所述IHAVE消息的请求;
GRAFT消息发送模块,被配置在所述第二节点中,用于在超时时间内未收到与所述消息ID对应的NORMAL消息时,将所述GRAFT消息发送给所述第一节点,并将所述第一节点从自身的Lazy List中移动到Eager List中,使所述第一节点对所述P2P网络系统进行修复;
跳数差计算模块,被配置在所述第二节点中,用于在超时时间内已收到与所述消息ID对应的NORMAL消息时,计算IHAVE消息的接收跳数与NORMAL消息的接收跳数差;
跳数差判断模块,被配置在所述第二节点中,用于在超时时间内已收到与所述消息ID对应的NORMAL消息时,判断所述跳数差是否超过跳数阈值;
系统修复模块,被配置在所述第二节点中,用于在所述跳数差超过跳数阈值时,对所述P2P网络系统进行修复。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911033551.7A CN110866046B (zh) | 2019-10-28 | 2019-10-28 | 一种可扩展的分布式查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911033551.7A CN110866046B (zh) | 2019-10-28 | 2019-10-28 | 一种可扩展的分布式查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110866046A CN110866046A (zh) | 2020-03-06 |
CN110866046B true CN110866046B (zh) | 2021-04-27 |
Family
ID=69653486
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911033551.7A Active CN110866046B (zh) | 2019-10-28 | 2019-10-28 | 一种可扩展的分布式查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110866046B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111625696B (zh) * | 2020-07-28 | 2021-01-29 | 北京升鑫网络科技有限公司 | 多源数据分析引擎的分布式调度方法、计算节点及系统 |
CN113569012B (zh) * | 2021-07-28 | 2023-12-26 | 卫宁健康科技集团股份有限公司 | 医疗数据查询方法、装置、设备及存储介质 |
CN114036137A (zh) * | 2021-11-02 | 2022-02-11 | 杭州复杂美科技有限公司 | 数据裁剪方法、计算机设备和存储介质 |
CN113992498B (zh) * | 2021-12-24 | 2022-04-08 | 深圳市明源云科技有限公司 | 系统架构展示方法、装置、设备及计算机可读存储介质 |
CN115834594B (zh) * | 2022-11-16 | 2024-04-19 | 贵州电网有限责任公司 | 一种用于改善高性能计算应用的数据收集方法 |
CN115550251B (zh) * | 2022-12-01 | 2023-03-10 | 杭州蚂蚁酷爱科技有限公司 | 区块链网络、节点集合的维护方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106920167A (zh) * | 2017-02-24 | 2017-07-04 | 北京航空航天大学 | 一种基于p2p金融的区块链机制与共识算法 |
CN109189751A (zh) * | 2018-09-18 | 2019-01-11 | 平安科技(深圳)有限公司 | 基于区块链的数据同步方法及终端设备 |
CN109586934A (zh) * | 2018-12-27 | 2019-04-05 | 链极智能科技(上海)有限公司 | 一种区块链底层网络交易同步优化方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101242365B (zh) * | 2008-03-11 | 2010-06-09 | 南京邮电大学 | 基于多维分布式哈希表的对等网络安全路由方法 |
US9049133B2 (en) * | 2013-06-26 | 2015-06-02 | Cisco Technology, Inc. | Virtual private wire services using E-VPN |
JP7040218B2 (ja) * | 2018-03-29 | 2022-03-23 | 富士通株式会社 | ブロックチェーンプログラム及びブロックチェーン方法 |
CN109496406A (zh) * | 2018-07-27 | 2019-03-19 | 袁振南 | 基于区块链系统的节点管理方法、装置和存储介质 |
-
2019
- 2019-10-28 CN CN201911033551.7A patent/CN110866046B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106920167A (zh) * | 2017-02-24 | 2017-07-04 | 北京航空航天大学 | 一种基于p2p金融的区块链机制与共识算法 |
CN109189751A (zh) * | 2018-09-18 | 2019-01-11 | 平安科技(深圳)有限公司 | 基于区块链的数据同步方法及终端设备 |
CN109586934A (zh) * | 2018-12-27 | 2019-04-05 | 链极智能科技(上海)有限公司 | 一种区块链底层网络交易同步优化方法 |
Non-Patent Citations (2)
Title |
---|
Yujie Xu;Mingming Wu;Yue Lv;Shujun Zhai."Research on application of block chain in distributed energy transaction".《2017 IEEE 3rd Information Technology and Mechatronics Engineering Conference (ITOEC)》.2017,全文. * |
交易信息存储与查询系统的设计与实现";葛利洁;《中国优秀硕士学位全文信息库 信息科技辑》;20181016;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110866046A (zh) | 2020-03-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110866046B (zh) | 一种可扩展的分布式查询方法及装置 | |
CN111046065B (zh) | 可扩展的高性能分布式查询处理方法及装置 | |
US11018980B2 (en) | Data-interoperability-oriented trusted processing method and system | |
Zhao et al. | Tapestry: A resilient global-scale overlay for service deployment | |
JP4652435B2 (ja) | 階層的ピアツーピア・ネットワークの最適運用 | |
US7644182B2 (en) | Reconfiguring a multicast tree | |
EP1583326B1 (en) | Routing in peer-to-peer networks | |
Li et al. | Efficient and scalable consistency maintenance for heterogeneous peer-to-peer systems | |
Liu et al. | An efficient and trustworthy P2P and social network integrated file sharing system | |
CN110990448B (zh) | 一种支持容错的分布式查询方法及装置 | |
WO2010127618A1 (zh) | 一种实现流媒体内容服务的系统和方法 | |
CN110956463B (zh) | 基于可扩展分布式查询系统的可信存证方法与系统 | |
Shen et al. | A proximity-aware interest-clustered P2P file sharing system | |
Xiaoqiang et al. | An in-network caching scheme based on betweenness and content popularity prediction in content-centric networking | |
Graffi et al. | Skyeye. kom: An information management over-overlay for getting the oracle view on structured p2p systems | |
EP1926276B1 (en) | Load balancing in a peer-to-peer system | |
Furness et al. | Considering complex search techniques in DHTs under churn | |
Chen et al. | Self-learning routing in unstructured P2P network | |
Baldoni et al. | Improving validity of query answering in dynamic systems | |
Al-Lahham et al. | Scalable self-organizing structured P2P information retrieval model based on equivalence classes. | |
Li et al. | Optimal layer division for low latency in DHT‐based hierarchical P2P network | |
Zheng et al. | Peer-to-peer: A technique perspective | |
Palma et al. | Efficient processing of continuous join queries using distributed hash tables | |
Munoz-Gea et al. | Structured management of an unstructured network: a reliable and self-organized p2p solution | |
Kamran et al. | A popularity-based globally structured hybrid peer-to-peer network |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |