一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种拜占庭环境下的P2P系统负载感知方法

2022-12-13 23:34:28 来源:中国专利 TAG:

一种拜占庭环境下的p2p系统负载感知方法
技术领域
1.本发明属于分布式网络技术领域,涉及一种拜占庭环境下的p2p系统负载感知方法。


背景技术:

2.在单机存储和计算能力达到极限后,分布式存储系统和分布式计算系统应运而生。若干台计算机通过网络进行信息交互组成p2p系统,大型任务被合理分配到各机器上并行执行,整体处理效率得到提高。但同时带来的问题是“分布式系统如何有效分配任务和管理机器”,如果管理者节点能实时了解p2p网络中各节点机器的状态和负载,就能合理分配任务,解决该问题,所以问题可转化为“如何感知p2p系统中各节点的负载”。在普通网络环境下可以采用一个管理者节点定期与其他节点交互,管理者节点收集它们的负载信息进行决策。
3.拜占庭环境指存在恶意节点的不安全分布式网络环境,其源自拜占庭罗马帝国战争时期的真实场景。在这个场景中,将军们只靠信使传递消息,如何在有叛徒将军干扰的情况下,让将军们达成相同战略决策的问题被称为拜占庭将军问题。所以在分布式领域的拜占庭环境中,拜占庭节点(区分于正常节点)会作恶,伪造虚假的负载信息干扰管理者节点的决策,在这种情况下,管理者节点难以通过简单的网络交互从所有服务器节点中获取真实的系统整体负载信息。
4.一致性哈希是一种特殊的哈希算法,这种算法主要用于解决分布式系统的动态扩容缩容问题。当集群添加或移除服务器节点时,一致性哈希技术能够尽可能小地改变已存在的服务请求与处理请求节点之间的映射关系。一致性哈希具有可扩展性,保证在增加或减少服务器节点时,数据存储的改变最少,相比传统哈希算法大大节省了数据迁移的开销。同时一致性哈希在数据快速增长时也能维持良好的负载均衡性能,通过引入虚拟节点,一个实际节点可以映射到多个虚拟节点上,当数据不断增长时,部分虚拟节点中可能包含很多数据,造成在虚拟节点上的分布不均衡,此时可将包含数据多的虚拟节点分裂成两个虚拟节点而不影响其他的虚拟节点,也就无需对全部数据进行重哈希和划分。这样就可以随数据增长而动态扩展物理节点的数量,其代价相比传统的哈希算法重映射要小很多。


技术实现要素:

5.为了解决现有技术存在的不足,本发明的目的是提供了一种拜占庭环境下的p2p系统负载感知方法。该方法通过一致性哈希感知系统负载,主要分为两个方面,一是利用一致性哈希实现请求的唯一分配,避免多个节点重复报告请求,二是利用一致性哈希实现请求的均衡分配,保证每个节点报告的负载尽量接近,降低拜占庭节点恶意报告或不报告负载对主估计值的影响。
6.实现本发明目的的具体技术方案是:一种基于一致性哈希的拜占庭环境下的p2p系统负载感知方法,包括以下步骤:
7.步骤1:构建p2p集群网络,配置节点身份信息,并启动集群机器。身份信息包括节点角色(服务器节点或管理者节点)、节点ip、节点id(用于唯一识别服务器节点)和公私钥(用于加密消息和身份验证)等信息。集群是网络中承担相同职责的服务器节点的集合,本发明中集群包含若干个服务器节点,其中一个服务器节点作为管理者节点(管理者节点本身也是一种服务器节点)。如果管理者节点宕机,集群网络会快速在剩余的服务器节点中选举出一个管理者节点。服务器节点主要负责处理来自客户端的请求,统计本节点处理的负载,并汇报给管理者节点。
8.管理者节点具有以下几个职责:
9.第一、管理者节点负责监控和管理整个系统,某个时刻只有一个管理者节点,它维护整个集群网络中节点的id、ip和端口等配置信息。
10.第二、管理者节点定期通过心跳来保持与服务器节点的连接:首先管理者节点发送心跳请求包给所有服务器节点,服务器节点接收到心跳请求包后就更新当前集群管理者节点的身份,并回复一个心跳响应包,告知管理者节点自己当前的状态,管理者节点收到后也会更新该服务器节点的当前状态。
11.第三、管理者节点负责一致性哈希负载均衡算法的初始化和更新,并与其他服务器节点协商达成共识,保证集群中所有节点对请求划分归属的一致性。
12.第四、管理者节点负责集群节点的扩容与缩容,提供节点发现服务。节点发现服务是在一个默认端口提供查询集群信息的接口,便于后续进入集群的服务器节点通过该接口获得其他节点的地址端口信息并建立连接。
13.所述服务器节点中包含有哈希查询模块、请求处理模块、负载统计模块。
14.所述哈希查询模块用于对客户端发到当前服务器节点的请求进行归属判断,通过哈希查询定位到该请求实际应由哪个服务器节点进行服务,如果是自身,则交由请求处理模块进行服务并响应,否则转发给对应的服务器节点请求处理。
15.所述请求处理模块用于处理客户端的请求并返回结果给客户端,该模块提供了抽象接口,其功能是可自定义的,能够根据需要设置并实现不同的功能,如常见的键值数据库服务:通过解析读写请求更新数据库并返回相应的查询结果,同时需要调用负载统计模块记录处理该请求消耗的负载。
16.所述负载统计模块用于记录当前服务器节点接收的总负载信息、每个阶段内的负载信息,负载信息具体包括负载、处理请求消耗的cpu执行时间(具体可分为内核执行时间和用户态执行时间)、i/o吞吐量和各类延迟等参数,这些参数可以用于分析当前服务器节点的性能,评估负载。
17.所述管理者节点包含有发现服务模块、负载估计模块、负载均衡模块。
18.所述发现服务模块用于后续进入集群的服务器节点获得其他节点的地址端口信息并建立连接,具体是在集群启动时设置一个默认的监听端口,其他服务器节点会发送查询集群信息的请求,在经过权限检查后管理者节点返回查询结果;
19.所述负载估计模块用于收集所有服务器节点的负载信息并进行估计,该模块将通过中位数排序来避免拜占庭节点伪造负载信息导致的估计偏差。拜占庭节点数目不超过集群总数目的三分之一,假设为f个,为避免这些节点的恶意行为,服务器节点将会收集2f 1个负载信息,然后排序取中位数即第f 1个的负载信息,中位数的左右都存在f个负载信息,
避免f个拜占庭节点恶意返回过低或过高的负载信息,若它们返回和正常节点相近的负载信息,等同于表现的和正常节点相同,这样也无法干扰最终负载信息的估计,相关的详细解释在步骤5说明。
20.所述负载均衡模块用于管理者节点增扩容服务器节点时重新划分一致性哈希的负载归属区,然后管理者节点会通过拜占庭容错(byzantine fault tolerance,bft)类共识算法如实用拜占庭容错算法(practical byzantine fault tolerance,pbft)在集群中对新划分的一致性哈希分配方案达成一致。
21.步骤2:服务器节点向管理者节点监听的公共端口发送注册请求信息,管理者节点根据集群节点信息生成一致性哈希分配表,并通过拜占庭容错共识广播至所有节点上。具体地,服务器节点向管理者节点发送注册请求信息,其内容为步骤1所提到的身份信息,管理者节点收集所有服务器节点注册请求信息后设置一致性哈希,分配指定数目的虚拟节点,同时绑定到p2p网络集群中的实际节点上,实际节点和虚拟节点的关系为一对一和/或一对多映射,一个实际节点可以映射到一个和/或多个虚拟节点上。客户端的请求首先会查找其归属的虚拟节点,然后进一步定位到实际节点上。p2p网络集群先启动管理者节点,提供公共监听端口,等待其他服务器节点在该端口注册信息或获取集群信息,设置初始节点数目。随后启动其他的服务器节点,在管理者节点上进行信息注册,并获取分配的id。
22.一致性哈希构成环形,每个请求将唯一的被某一个服务器节点处理,每个服务器节点负责环上其逆时针方向的一段圆弧内的请求,这些圆弧被服务器节点的哈希近似等分切割。当注册数达到初始节点数后,管理者节点根据集群所有的节点信息开始生成一致性哈希分配表并初始化,分配表的底层数据结构为红黑树,红黑树是一种二叉平衡搜索树,其具有高效查找节点和增删节点的特性,红黑树的节点存储了请求到虚拟节点的映射关系。本发明采用的一致性哈希算法是ketama hash,其分配步骤主要为:
23.步骤2-1:从注册配置信息中获取所有服务器节点列表的地址信息和内存、cpu、磁盘资源情况,后者(内存、cpu、磁盘资源情况)将作为服务器节点分配虚拟节点数的权重;
24.步骤2-2:每个服务器节点按权重计算需要多少个虚拟节点,基准配置是每个服务器节点设置160个虚拟节点,每个服务器节点生成10.0.1.1:11211-1、10.0.1.1:11211-2至10.0.1.1:11211-40共40个字符串,并根据md5哈希摘要算法计算出40个16字节的哈希值,每个哈希切分为4个4字节的哈希值,总共160个哈希值,即160个虚拟节点;
25.步骤2-3:将所有哈希值及对应的节点地址存入前述的一致性哈希分配表中,4字节哈希意味着哈希值的范围是[0,2
32-1],后续查找时使用红黑树的二分查找算法,复杂度是o(log(vn)),其中n是实际节点数,v是每个实际节点对应的虚拟节点数;
[0026]
步骤2-4:管理者节点将一致性哈希分配表进行数字签名后发送给所有的服务器节点,服务器节点收到后检查签名确认无误后接受该哈希分配方案,整个集群的初始化阶段结束,开始接受客户端请求并进行服务。
[0027]
步骤3:客户端发送请求,服务端进行相应处理,并统计负载信息。客户端将请求随机发送给邻近的服务器节点,客户端如果本地没有服务器节点信息,先会向管理者节点获取集群的服务器节点配置信息,客户端在测试各服务器节点的连接情况后,选择往返延迟最小的服务器节点发送请求。服务器节点接收到请求后,对请求进行md5哈希获得16字节的哈希值,后4字节作为该请求的一致性哈希值,记为k,然后在一致性哈希分配表中使用二分
查找定位k后首个虚拟节点(每个虚拟节点都具有一个唯一哈希值)的哈希值s,然后确定哈希值为s的虚拟节点对应的实际节点id,如果该实际节点id为当前服务器节点id,则由当前服务器节点进行处理,否则转发该客户端请求到该请求正确归属的服务器节点,重新进行查询和处理流程。当正确的服务器节点处理该请求时,会调用负载统计模块记录处理当前请求的负载情况。
[0028]
具体地,查询一致性哈希分配表获取对应服务器的id的具体步骤为:
[0029]
步骤3-1:首先集群节点通过向管理者注册并互相发现对方,构建成p2p网络,并配置图2中的一致性哈希分配表,每个服务器节点都在本地维持一个一致性哈希表分配表副本,初始化完成后,集群对外提供服务;
[0030]
步骤3-2:某个服务器节点接收到客户端请求,对该请求进行二进制序列化并进行md5哈希摘要获得哈希值k,然后在哈希表中查找第一个大于等于k的值s(即图2中顺时针第一个服务器节点位置),并从一致性哈希分配表中获得索引为s的绑定的服务器节点id;
[0031]
步骤3-3:若该id为本服务器节点id,将由本节点处理请求并递增本节点负载,否则转发给对应的服务器节点id,确保请求被唯一的服务器节点处理。
[0032]
步骤4:在p2p网络集群处理客户端请求阶段,管理者节点并行启动负载收集和统计任务。管理者节点每隔一个epoch就进行负载统计任务,epoch指一个简单重复的时间间隔,通常为10~20s,可根据业务需求自定义设置。管理者节点通过设置定时器来确定启动负载收集的时间,在每个epoch的开始阶段向所有服务器节点发起负载收集请求。服务器节点(包括管理者节点)收到负载收集请求后,开始对自上次统计到当前时间的负载信息进行统计,负载信息包括负载、处理请求消耗的cpu执行时间(具体可分为内核执行时间和用户态执行时间)、i/o吞吐量和各类延迟等参数,这些参数可以用于分析当前服务器节点的性能,综合评估负载。服务器节点统计好后将前述负载信息封装为消息体格式,进行数字签名发送给管理者节点,数字签名是为了防止他人故意伪造虚假的负载统计信息,管理者节点通过数字签名可以验证该消息是否是该服务器节点发出的,避免未知来源的伪造信息。
[0033]
步骤5:管理者节点收到2f 1个服务器节点(包括管理者节点作为服务器节点身份的自己)的回复后就可以开始进行负载统计,集群总节点数为3f 1个,其中f个为拜占庭节点。首先针对每个服务器节点的负载进行非降序排序,取排序后的回复中负载的中位数(即第f 1个回复的负载)作为整个系统的平均负载,并乘以系统总服务器节点数,从而得到系统整体负载的估计值。
[0034]
这里就“收集2f 1个服务器节点就可以进行负载统计”和“以中位数节点的负载估计总负载”作进一步说明:拜占庭节点除了伪造负载信息,也可能保持沉默,不回应管理者节点的负载收集请求,当拜占庭节点处于后一种状态时,管理者节点无法判断其是因为恶意不回复还是真的因为网络延迟和网络分区才未能回复。所以当拜占庭节点为f个,集群节点为n(n》f)个时,管理者节点收到n-f个回复就需要进入后续统计阶段,不能为了那f个可能全部是故意不回复的拜占庭节点而一直处于等待状态,这样就保证了集群的活性,即业务能一直进行下去不会悬停于某处;但收到n-f个回复也具有另一种可能:其中的f个回复是拜占庭节点伪造的,可能伪造过大或过小的负载信息,为了避免这f个虚假消息的影响,需要对这n-f个回复的负载进行排序取中位数,避免中位数f个较小值和f个较大值负载的影响(如果负载在中间和真实的负载偏差不大能得到正确的总估值),所以n-f》=2f 1,可
得到n》=3f 1,为了最大化利用资源,集群的总结点数通常为3f 1个,这样就保证了集群的安全性,不会被恶意节点影响业务的正常执行。
[0035]
步骤6:管理者节点将系统整体负载估计值和用于估计的2f 1个负载收集请求的回复分发至所有服务器节点,整个集群对估计值达成共识,负载统计结束。2f 1个负载收集请求的回复具有其来源服务器节点的电子签名,用于验证该回复来源正确性。
[0036]
与现有技术相比,本发明的有益效果是解决了在拜占庭环境下进行负载均衡和估计系统负载的能力,原有技术未考虑到在不可信的环境中,恶意节点会虚假报告自身的负载情况,如偏大或偏小,从而导致整体负载估计值出现偏差,同时为了使各节点负载的中位数近似于平均数,采用一致性哈希技术实现了请求进行均衡分配和唯一分配。通过一致性哈希中哈希算法的映射,服务器节点均衡地锚定于哈希环上某个端点(见附图2),客户端的请求也会被均衡地分布于哈希环上,通过顺时针查找第一个服务器节点即为其归属的服务器节点,这样每个客户端请求将唯一地分配至某个服务器节点,这样就保证了客户端请求的均衡分配和唯一分配。
附图说明
[0037]
图1为本发明基于一致性哈希负载感知的系统图。
[0038]
图2为本发明一致性哈希配置原理图。
[0039]
图3为本发明一致性哈希负载均衡和负载估计流程图。
具体实施方式
[0040]
结合以下具体实施例和附图,对发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。
[0041]
本发明提出了一种拜占庭环境下的p2p系统负载感知方法,解决在p2p网络中节点之间互不信任和部分节点存在作恶可能性的拜占庭环境下,如何感知系统负载的问题。本方法的内容包括:一、利用一致性哈希实现请求的唯一分配,避免多个节点重复报告负载,二利用一致性哈希实现请求的均衡分配,保证每个节点报告的负载尽量接近,降低拜占庭节点恶意报告或不报告负载对主估计值的影响。
[0042]
图1是本发明基于一致性哈希负载感知的系统图,所述系统中主要包括一个管理者节点和若干个服务器节点;所述管理者节点中包括发现服务模块、负载均衡模块、负载估计模块;所述服务器节点中包括哈希查询模块、请求处理模块、负载统计模块。
[0043]
图2展示了如何使用一致性哈希进行均衡分配和唯一分配,哈希值区间为[0,2
32-1],即四字节32比特位的所有数值构成的数域,构成图示的环形。图中有三个服务器节点,首先对节点的配置信息进行二进制序列化,经过md5哈希获得128位的哈希摘要值截取末32位得到哈希值s1、s2和s3,锚定到对应到环上的位置,基于哈希映射完全随机的特性,这些服务器节点在环上的位置通常是均匀分布的。在图示中当请求1到达时,服务器节点对请求1二进制序列化并进行md5哈希摘要获得哈希值k1,然后从k1开始顺时针检索,到达第一个服务器节点s2,该请求将由服务器节点2处理;同理请求2到达后,对请求2二进制序列化并进行md5哈希摘要获得哈希值k2,从k2开始顺时针检索,到达第一个服务器节点s3,由服务
器节点3处理;请求3到达后,对请求3二进制序列化并进行md5哈希摘要获得哈希值k3,从k3开始顺时针检索,到达下一个服务器节点s1,由服务器节点1处理(对于k3,超过最大值后从0开始)。根据上述流程不难发现,每个请求将唯一的被某一个服务器节点处理,每个服务器节点负责环上其逆时针方向的一段圆弧内的请求,即服务器节点2负责服务器节点1和服务器节点2之间的圆弧内的请求,服务器节点3负责服务器节点2和服务器节点3之间的圆弧内的请求,服务器节点1负责服务器节点3和服务器节点1之间的圆弧内的请求,这些圆弧被服务器节点的哈希近似等分切割,从而保证各服务器节点负载的均衡。
[0044]
图3展示了系统进行负载均衡和负载估计的流程图,集群中节点数为3f 1个,f个为拜占庭节点(包括恶意节点和故障节点),2f 1个为正常节点。首先构建p2p集群网络,配置节点身份信息,并启动集群机器。服务器节点向管理者节点监听的公共端口发送注册请求信息,管理者节点根据集群节点信息生成一致性哈希分配表,并通过拜占庭容错共识广播至所有节点上。服务器节点等待客户端的请求到达,服务器节点接收到请求后,对请求进行md5哈希获得哈希值k。服务器节点在一致性哈希分配表中使用二分查找定位k后首个虚拟节点(每个虚拟节点都具有一个唯一哈希值)的哈希值s,然后确定该虚拟节点对应的实际节点id。如果id不为本服务器节点id,则转发该客户端请求到该请求正确归属的服务器节点,重新进行查询和处理流程。如果该实际节点id为当前服务器节点id,则由当前服务器节点进行处理,调用负载统计模块记录处理当前请求的负载情况。如果本节点是管理者节点,且进入新的epoch,管理者节点并行启动负载收集和统计任务,向所有服务器节点发起负载收集请求。如果本节点是服务器节点,且收到管理者节点的负载收集请求,则对自上次统计到当前时间的负载信息进行统计,封装为消息体格式,进行数字签名发送给管理者节点。管理者节点收到2f 1个服务器节点(包括管理者节点作为服务器节点身份的自己)的回复后开始进行负载统计,即对每个服务器节点的负载排序,取排序后的回复中负载的中位数(即第f 1个回复的负载)作为整个系统的平均负载,并乘以系统总服务器节点数,从而得到系统整体负载的估计值。管理者节点将系统整体负载估计值和用于估计的2f 1个负载收集请求的回复分发至所有服务器节点,整个集群对估计值达成共识,负载统计结束。系统继续循环以上业务流程。
[0045]
本发明的主要应用场景是去中心化联盟链中的负载统计,联盟链是一种有门槛出入限制的许可区块链,具有去中心化、防篡改和可追溯的特性,可充当不同组织的中介。在联盟链中每个组织维护一个服务器节点,一些业务交易请求会被提交到不同的服务器节点上进行处理,此时就需要对联盟链中整体的负载作一个总体估计,因为不同组织间难以达成信任,联盟链场景通常基于拜占庭环境进行设计,本发明提出的负载统计技术可以应用于该场景。
[0046]
本发明的保护内容不局限于以上实施例。在不背离发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献