发明内容
本发明方法针对上述问题,以优化分布式存储***性能为目标,提出一种基于分区处理共识算法的分布式存储***优化方法,以解决分布式存储***性能随客户端命令冲突的增多而下降的问题,能够在客户端命令冲突影响分布式存储***性能的情况下,提升***的延迟与吞吐量性能,同时可以更好地适应不同的客户端环境,满足实际应用的需求。
实现本发明的关键技术是:在EPaxos共识算法的基础上,引入分区处理的思想,实时监控客户端命令的处理情况,根据客户端命令处理情况,判断是否需要进行分区处理;对无需进行分区处理的情况,分布式存储***直接采用EPaxos共识算法处理客户端命令;对需要进行分区处理的情况,分布式存储***先生成相应的分区方案,再根据具体的分区方案协调副本处理流程,进行分区处理。
为实现上述目标,具体实现步骤如下:
(1)各副本采用EPaxos共识算法处理客户端命令;
(2)实时监控客户端命令的处理情况:
分布式存储***每隔t秒从各副本r处收集四元消息(r,Ki,Tr,i,Sr,i);其中,r∈[1,N],N表示分布式存储***中副本总数;Ki表示副本收到的客户端命令的关键字,i∈[1,I],I表示分布式存储***中关键字总数;Tr,i表示副本r收到并提交的关键字为Ki的客户端命令总数;Sr,i表示副本r收到并提交的关键字为Ki的客户端命令中执行SlowPath阶段的命令数量;
(3)判断是否需要进行分区处理:
对于每个关键字Ki,i∈[1,I],当不进行分区处理时,***中传递的消息总数M1i可表示为:
当进行分区处理时,***中传递的消息总数M2i可表示为:
其中,
表示分布式存储***可以容忍的最大故障副本数;R表示具有关键字K
i处理权的副本;从***传递的消息总数来看,当M2
i<M1
i时,即:
时,关键字K
i宜进行分区处理;考虑分区处理还需消耗少量***资源,将K
i进行分区处理的条件转化为
即:当K
i满足
时,进行分区处理;否则,不进行分区处理;若分布式存储***中存在需进行分区处理的关键字,转至步骤(4);否则,转至步骤(1);
(4)生成分区方案:
(4.1)对需进行分区处理的每个关键字K
i,分布式存储***计算
与
的差值Δ
i以及T
r,i的方差σ
i,r∈[1,N];并初始化各副本r目前所需处理的客户端命令数Deal
r;
(4.2)分布式存储***对需进行分区处理的关键字Ki进行优先级排序:首先按Δi降序排列;在Δi相同的情况下,按σi升序排列;关键字排序越靠前,优先级越高;
(4.3)对需进行分区处理的关键字,分布式存储***按优先级从高到低的顺序依次分配处理权给特定副本,构成分区方案,将分区方案发送给***中所有副本;
(5)进行分区处理:
副本收到分区方案后,对收到的客户端命令,查看关键字是否在分区方案中;当关键字在分区方案中,进行分区处理,即:将客户端命令转发给分区方案中具有该关键字处理权的副本,具有处理权的副本采用EPaxos共识算法处理客户端命令;当关键字不在分区方案中,副本直接采用EPaxos共识算法处理客户端命令;
(6)转至步骤(2)。
本发明具有以下优点:
(1)本发明将分区处理的思想引入分布式存储***共识算法中,在***性能随客户端命令冲突的增多而下降时,采用分区处理策略,可获得更优的延迟与吞吐量性能;
(2)本发明根据不同的客户端环境,生成不同的分区策略,更能适应实际应用中变化的客户端环境。
具体实施方式
一、基础理论介绍
1.EPaxos算法
EPaxos以集群内高吞吐量和广域网环境下低延迟为设计目标,在少数副本(F个,
其中,N为副本总数)故障的情况下,依然能保证整体***的可靠性。
图2表示EPaxos算法具体处理流程:客户端一般情况下提交命令给最近的副本RL(以减少延迟)。副本RL收到客户端的命令,和
个副本进行一轮消息交流(包括RL本身,图2中FastPath阶段)。若
个副本关于客户端命令中的某些信息产生分歧(即客户端命令存在冲突),副本RL将再和F+1个副本进行一轮消息交流(图2中SlowPath阶段)。之后,RL可回复客户端同时通知其余副本,命令成功提交。
2.EPaxos算法性能分析
EPaxos采取所有副本均可和客户端交互(一般情况下,客户端选择最近的副本交互,以减少延迟)的策略,不存在单领导者性能瓶颈问题。在客户端命令无冲突的情况下,只需执行FastPath阶段即可提交命令。这使得相对其他Multi-Paxos算法变种,EPaxos具有更好的***性能。但EPaxos在不同副本处并发客户端命令相关(访问同一关键字)时,易产生冲突,这时需再执行一轮SlowPath阶段,对***性能产生影响。
二、本发明一种基于分区处理共识算法的分布式存储***优化方法
参照图1,本发明的具体实施步骤包括如下:
步骤1.分布式存储***中各副本采用EPaxos共识算法处理客户端命令。
步骤2.实时监控客户端命令的处理情况
分布式存储***每隔t秒(t的取值可根据实际应用中分布式存储***对分区处理的灵敏度需求以及可使用资源的具体情况决定,本发明实验中将t设置为3秒)从各副本r处收集四元消息(r,Ki,Tr,i,Sr,i)。其中,r∈[1,N],N表示分布式存储***中副本总数;Ki表示副本收到的客户端命令的关键字,i∈[1,I],I表示分布式存储***中关键字总数;Tr,i表示副本r收到并提交的关键字为Ki的客户端命令总数;Sr,i表示副本r收到并提交的关键字为Ki的客户端命令中执行SlowPath阶段的命令数量。
步骤3.判断是否需要进行分区处理
对于每个关键字Ki,i∈[1,I],当不进行分区处理时,***中传递的消息总数M1i可表示为:
当进行分区处理时,***中传递的消息总数M2i可表示为:
其中,
表示分布式存储***可以容忍的最大故障副本数;R表示具有关键字K
i处理权的副本。
与
的计算,分两种不同的情况:当关键字K
i在当前t秒内不进行分区处理时,直接计算
与
当关键字K
i在当前t秒内进行分区处理时,直接计算
按下式计算(其中T
rm,i=max{T
r,i,r∈[1,N]}):
从***传递的消息总数来看,当M2
i<M1
i时,即:
时,关键字K
i宜进行分区处理;考虑分区处理还需消耗少量***资源,将K
i进行分区处理的条件转化为
即:当K
i满足
时,进行分区处理;否则,不进行分区处理;若分布式存储***中存在需进行分区处理的关键字,转至步骤(4);否则,转至步骤(1)。
步骤4.生成分区方案
(4.1)对需进行分区处理的每个关键字K
i,分布式存储***计算
与
的差值Δ
i(Δ
i越大,分区处理对***性能提升的程度越大)以及T
r,i的方差σ
i,r∈[1,N](σ
i越小,客户端命令发生冲突的概率越大,分区处理的紧迫性越高)。并初始化各副本r目前所需处理的客户端命令数Deal
r;
(4.2)考虑关键字分区处理对***性能提升的程度以及紧迫性,分布式存储***对需进行分区处理的关键字Ki进行优先级排序:首先按Δi降序排列;在Δi相同的情况下,按σi升序排列。关键字排序越靠前,优先级越高;
(4.3)考虑各副本处需进行分区处理的关键字Ki的客户端命令数,分布式存储***初始化各副本r的分配指数Oi,r:
Oi,r=p*(Tr,i/max{Tr,i,r∈[1,N]})
其中,p为权重,0<p<1,本发明实验中,将p设置为0.8,实际应用中,可根据客户端命令的情况对p进行调整;副本分配指数Oi,r越高,越有希望获得关键字Ki的处理权;
(4.4)分布式存储***按优先级从高到低的顺序依次分配关键字处理权,构成分区方案,并将分区方案发送给***中所有副本。在分配关键字K
i的处理权时,需考虑副本的负载能力,首先分布式存储***从N个副本中,选出负载尚未饱和的副本,即:满足
的副本,A
r表示副本r在t秒内能处理的最大命令数,根据本发明实验副本的配置,在客户端命令大小为1KB时,本发明实验将A
r设置为15000;在客户端命令大小为16B时,本发明实验将A
r设置为30000。当不存在满足条件的副本时,关键字K
i不进行分区处理,分布式存储***更新Deal
r,令Deal
r=Deal
r+T
r,i,r∈[1,N];当存在满足条件的副本时,分布式存储***将关键字K
i的处理权分配给选出的副本中分配指数O
i,r最大的副本R,将(K
i,R)二元组放入分区方案中,并更新Deal
R,令
同时考虑实际应用中相邻关键字经常一起被访问,将相邻关键字处理权因素加入副本的分配指数中,即:当关键字K
i-1也需进行分区处理且处理权尚未分配,并且O
i-1,R未更新过,进行如下更新:O
i-1,R=O
i-1,R+(1-p);当关键字K
i+1也需进行分区处理且处理权尚未分配,并且O
i+1,R未更新过,进行如下更新:O
i+1,R=O
i+1,R+(1-p)。
步骤5.进行分区处理
副本收到分区方案后,对收到的客户端命令,查看关键字是否在分区方案中。当关键字在分区方案中,进行分区处理,即:将客户端命令转发给分区方案中具有该关键字处理权的副本,具有处理权的副本采用EPaxos共识算法处理客户端命令;当关键字不在分区方案中,副本直接采用EPaxos共识算法处理客户端命令。
步骤6.转至步骤2。
本发明的效果可通过以下仿真实验进一步说明。
1.仿真平台及配置
本仿真实验运行在亚马逊EC2平台,客户端实例和分布式存储***副本实例配置如下:1个2.5GHz的vCPU,1G内存,64位Ubuntu Server 18.04操作***。延迟实验中,在分布式存储***包含3个副本时,将3个副本分别部署在加利福尼亚北部(California,CA),弗吉尼亚北部(Virginia,VA)和爱尔兰(Ireland,IE);在分布式存储***包含5个副本时,将另外两个副本部署在俄勒冈(Oregon,OR)和东京(Tokyo,TKY)。延迟实验中的所有副本实例处同时也设置了客户端实例,客户端发送命令给分布式存储***,在收到前一条命令的回复之后才会发送后一条命令。吞吐量实验中,分布式存储***所有副本和客户端均部署在同一数据中心,客户端按批发送命令给分布式存储***(分布式存储***处理客户端命令时,副本之间的消息传递不按批进行),测量收到回复的速率。为全面评估吞吐量性能,本仿真实验分别将客户端命令大小设置为1KB(网络受限***)和16B(处理器受限***)进行吞吐量实验。为模拟客户端命令冲突的情况,本仿真实验在客户端发送的命令中设置相关命令,每个客户端发送的具有相关性的命令所占百分比越多,相关的并发客户端命令越多,客户端命令发生冲突的概率越大。本仿真实验采用节俭模式:在节俭模式下,分布式存储***处理客户端命令时,副本将消息发送给一定数量(法定人数)的副本,而不是全部副本。
2.仿真内容及结果分析
实验1延迟实验
图3是分布式存储***包含3个副本时,各副本处的客户端感知到的延迟状况图,包括中位数延迟以及90%ile延迟。此时EPaxos不受具有相关性的命令所占百分比的影响,执行Fast path阶段即可提交命令(节俭模式导致),本发明不进行分区处理,延迟性能和基于EPaxos共识算法的分布式存储***延迟性能大致相同。
图4是分布式存储***包含5个副本时,各副本处的客户端感知到的延迟状况图,包括中位数延迟以及90%ile延迟。此时随着相关的并发客户端命令增多(具有相关性的命令所占百分比增大),客户端命令冲突增多,对***性能产生影响。本发明采取分区处理的方法,总体延迟性能要优于基于EPaxos共识算法的分布式存储***。
实验2吞吐量实验
图5和图6是客户端命令大小为1KB(网络受限***)时分布式存储***吞吐量性能图,包括平均吞吐量以及95%CI吞吐量。图5是副本数为3的情况,图6是副本数为5的情况。副本数为3时,EPaxos不受具有相关性的命令所占百分比的影响,执行Fast path阶段即可提交命令(节俭模式导致),本发明不进行分区处理,吞吐量性能和基于EPaxos共识算法的分布式存储***吞吐量性能无明显差异。副本数为5时,由于网络受限***吞吐量性能主要受制于副本之间客户端命令的传播,客户端命令冲突对分布式存储***吞吐量的影响较小。本发明和基于EPaxos共识算法的分布式存储***吞吐量性能无明显差异。
图7和图8是客户端命令大小为16B(处理器受限***)时分布式存储***吞吐量性能图,包括平均吞吐量以及95%CI吞吐量。图7是副本数为3的情况,图8是副本数为5的情况。副本数为3时,EPaxos不受具有相关性的命令所占百分比的影响,执行Fast path阶段即可提交命令(节俭模式导致),本发明不进行分区处理,吞吐量性能和基于EPaxos共识算法的分布式存储***吞吐量性能无明显差异。副本数为5时,随着相关的并发客户端命令增多(具有相关性的命令所占百分比增大),客户端命令冲突增多,对***性能产生影响。本发明采用分区处理的方法。在相关命令所占百分比为2%时,由于相关命令所占百分比较小,从分布式存储***整体吞吐量来看,本发明和基于EPaxos共识算法的分布式存储***吞吐量性能大致相同。在相关命令所占百分比25%和100%时,由于具有相关性的命令均访问同一关键字,本发明在生成分区方案时,不存在满足
的副本,不进行分区处理,和基于EPaxos共识算法的分布式存储***吞吐量性能大致相同。
图9是客户端命令大小为16B(处理器受限***),副本数为5,具有相关性的命令分散到5个关键字时,分布式存储***吞吐量性能图,包括平均吞吐量以及95%CI吞吐量。此时,由于具有相关性的命令分散到不同的关键字上,当相关命令所占百分比为25%和100%时,本发明副本负载未饱和,可进行分区处理,吞吐量性能要优于基于EPaxos共识算法的分布式存储***。本发明根据并发客户端命令冲突情况和副本负载情况决定是否进行分区处理,实质上与具有命令冲突的关键字个数无关,故这里选取5个关键字作为副本负载未饱和的代表,不再讨论其他关键字个数情况。
从实验结果图可以明显看出,本发明在客户端命令冲突影响分布式存储***性能的情况下,提升了***的延迟与吞吐量性能,能更好地适应不同的客户端环境。