<论文阅读>CRaft

CRaft: An Erasure-coding-supported Version of Raft for Reducing Storage Cost and Network Cost

一些概念:

intersection set:交集

raft本质是一个二阶段。master收到log后首先store到本地,之后并发发给其他slave;当master收到集群中一半以上的节点确认已经把该log持久化之后,他就会把这条日志commit,然后进行第二阶段:把这个commitindex发送给其他的slave节点。此时这些slave才可以把这条日志apply到你的状态机

Leader 决定什么时候把日志条目应用到状态机中是安全的;这种日志条目被称为已提交的。Raft 算法保证所有已提交的日志条目都是持久化的并且最终会被所有可用的状态机执行。一旦创建该日志条目的 leader 将它复制到过半的服务器上,该日志条目就会被提交。同时,leader 日志中该日志条目之前的所有日志条目也都会被提交,包括由其他 leader 创建的条目

绪论

共识协议可以提供高度可靠和可用的分布式服务。在这些协议中,日志条目被完全复制到所有服务器。这种全条目复制会导致高存储和网络成本,从而损害性能。

如果共识协议中的全条目复制( complete-entry replication)可以用擦除编码(erasure coding replication)复制来代替,存储和网络成本可以大大降低

RS-Paxos是第一个支持erasure-coded data的共识协议,但与Paxos和Raft等常用的共识协议相比,它的可用性要差得多。我们指出RSPaxos的活跃度问题,并试图解决它。在Raft的基础上,我们提出了一个新的协议,CRaft。通过提供两种不同的复制方法,CRaft可以像RS-Paxos一样使用擦除编码来节省存储和网络成本,同时它还可以保持与Raft相同的活跃度。

一致性问题中,容错率如果为 F,那么则至少需要 N = (2F + 1) 的服务器,否则就可能因为分组的原因出现不一致的情况。因此传统的副本策略往往就意味值原始数据量的 N 倍的网络和存储开销,而且随着这些协议在大规模存储系统中得到了越来越多的应用,N 倍的网络和存储开销带来的则是延迟的增加和吞吐量的下降。所以出现了 Erasure Coding

RS-Paxos:用活性交换使用擦除编码来获得更好的性能

CRaft:

可以处理擦除编码的数据,因此可以节省存储和网络成本。领导者有两种方法向其追随者复制日志条目。如果领导者能够与足够多的追随者交流,它将通过编码片段复制日志条目以获得更好的性能。否则,它将复制完整的活动日志条目。像RS-Paxos一样,CRaft可以处理擦除编码的数据,因此可以节省存储和网络成本。然而,CRaft和RS-Paxos的一个主要区别是,CRaft与Paxos和Raft具有相同的活跃程度,而RS-Paxos则没有。

1、Raft:

安全性和活性是共识协议最重要的属性。

2、Erasure Coding

擦除编码是一种容忍存储系统和网络传输故障的常用技术。

RS码是最常用的。有两个可配置的位置整数参数响应代码:k,m。在这种技术中,数据被分成k个大小相等的碎片。然后,使用这k个原始数据片段,m个奇偶校验片段可以通过编码过程来计算。所以原始数据会产生(k+m)个片段。选取k+m里的任意k个片都可以恢复整个数据

应用一致协议时,服务器的数量N,通常是固定的如果每个服务器仅存储一个由(k,m)-RS代码生成的片段,其参数k和m服从k + m = N,则与全拷贝复制相比,存储和网络成本可以降低到1 / k。

然而,如何保证安全性能并尽可能保持良好的活性是不可忽视的

3、RS-Paxos

RS-Paxos结合了擦除编码和Paxos,是Paxos的改造版本,可以节省存储和网络成本。

RS-Paxos纠删码大致解决了共识问题,但是如定理1所示,它再也无法达到F活动度。RS-Paxos需要比Paxos或Raft更多的健康服务器才能运行。

所以提出一个共识协议,它不仅支持擦除编码,而且拥有与Paxos和Raft相同的活性级别是至关重要的

幻灯片的内容:
Write is committed after written to Qw servers
Read requires reading from 5 servers Qr consensus

CRaft, a Reform Version of Raft that Supports Erasure Coding

概述

活性是一致性协议最重要的特性之一。然而,以前支持擦除编码的协议RS-Paxos无法达到活动级别。因此,我们的目标是设计一个新的支持擦除编码的协议(这样可以节省存储和网络成本),该协议具有一个活动级别。这个新协议基于Raft,因此它继承了Raft中的基本概念。

为了降低网络成本,新协议的领导者应该能够通过使用编码片段(如RS-Paxos)将他们的日志条目复制给追随者。然而,如定理1所示,只有编码片段复制方法的协议不能达到活动级别。事实上,定理2表明Raft中的完全条目复制方法对于F个liveness level protocol是必要的。

Theorem 1:Liveness level of RS-Paxos,LRSP, is always less than F when k>1

Theorem 2:如果只有F个活动级别协议中的(F + 1)个健康服务器,则只有在完整的条目已存储在所有(F + 1)个健康服务器的日志中之后,才能提交一个条目。

Both coded-fragment replication and complete-entry replication are required in our new protocol. Using codedfragment replication can save storage and network costs, while complete-entry replication can keep liveness.:(在我们的新协议中,编码片段复制和完整条目复制都是必需的。使用coded fragment复制可以节省存储和网络成本,而完整条目复制可以保持活跃度)

Detail

N=2F+1 k和m也满足k+m=N。so each server in the protocol can correspond to one coded-fragment for each log entry。:因此,协议中的每个服务器可以对应于每个日志条目的一个编码片段。

1、 Coded-fragment Replication

When a leader in CRaft tries to replicate an entry by coded- fragment replication method, it first encode the entry

In Raft, each log entry should containits original content from clients and also its term and index in the protocol:(在Raft中,每个日志条目都应包含其来自客户端的原始内容,以及其在协议中的term和index)

当一个CRaft leader试图对encode一个entry时,可以通过协议选择的(k,m)-RS代码将content编码成N= (k+m)个片段。term和index不应该被编码,因为它们在协议中起着重要的作用。下图是encode过程

在这里插入图片描述

编码完成后,leader将有N个coded-fragments of the entry,然后会将向每个follower发送相应的编码片段。

每个follower收到相应的coded-fragment后,都会回复leader

当leader确认至少F+k个节点存储了coded-fragments,the entry and its previous ones 将会被安全的applied。The leader will commit and apply these entries, and then inform followers to apply them:(领导者将提交并应用这些条目,然后通知追随者应用它们)

The commitment condition of coded-fragment replication is stricter than Raft’s.:( commitment condition of coded-fragment replication 比raft更严格),此承诺条件还意味着,领导者不能使用编码片段复制的方式来复制条目,然后在没有(F + k)健康服务器的情况下提交该条目。

当一个leadr down了:

When a leader is down, a new leader will be elected. If an entry is already committed, the election rule of Raft guarantees that the new leader at least has a fragment of the entry, which means the safety property can be guaranteed:(当一个领导人下台时,就会选出一个新的领导人。如果已经提交了一个条目,Raft的选举规则保证新的领导者至少有一个条目的片段,这意味着安全属性可以得到保证)。

Since at least (F+k) servers store a fragment of a committed entry, there should be at least k coded-fragments in any (F+1)() servers. So the new leader can collect k coded-fragments and then recover the complete entry when there are at least (F+1) healthy servers, which means liveness can be guaranteed.:(由于至少(F + k)个服务器存储已提交条目的片段,因此任何(F + 1)个服务器中至少应有k个编码片段。 因此,新领导者可以收集k个编码片段,然后在至少有(F + 1)个健康服务器的情况下恢复完整条目,这意味着可以保证活动性。)

example:

​ If a leader can commit an entry when it only confirms that F+1=4 servers store the entry, new leaders may be unable to recover committed entries。 (如果领导者仅在确认F + 1 = 4服务器存储该条目时可以提交该条目,则新领导者可能无法恢复已提交的条目。)
​ Like the Index 3 entry in Figure3, it should not be committed because only five servers stored it. If it was committed, consider the situation that first three servers could not connect to other servers while other four servers were all healthy. (像图3中的索引3条目一样,不应提交它,因为只有五个服务器存储了它。 如果已提交,请考虑以下情况:前三个服务器无法连接到其他服务器,而其他四个服务器都正常。)
​ CRaft should still be able to work because its liveness level is F=3. However, there were at most two fragments of the Index 3 entry in the healthy servers, so new leaders were not able to recover the complete entry. The protocol had to wait for the first three servers, which means liveness cannot be guaranteed.(CRaft应该仍然可以工作,因为它的活跃度为F = 3。 但是,运行状况良好的服务器中索引3条目最多有两个片段,因此新的领导者无法恢复完整的条目。 该协议必须等待前三台服务器,这意味着无法保证活动性。)

在这里插入图片描述

总结:

在Raft中,followers必须接收和存储完整的entries.。但是在coded-fragment replication中,followers可以接受和存储coded-fragments of entries

According to the encoding procedure, the size of coded-fragments are about 1/k of the size of complete entries. So storage and network costs can be greatly reduced when using coded-fragment replication:(根据编码过程,编码片段的大小约为完整条目大小的1 / k。 因此,在使用编码片段复制时,可以大大降低存储和网络成本。)

2、Complete-entry Replication

为了降低存储和网络成本,鼓励领导者使用编码片段复制。然而,当没有(F+k)个健康的服务器时,编码片段复制将不起作用。当健康服务器的数量 大于F and 小于(F+k) 时,领导者应使用完整条目复制方法来复制条目。在完整条目复制中,领导者必须在提交条目之前将完整条目复制到至少(F+1)个服务器上,就像Raft一样。因为提交规则与Raft相同,所以安全性和活性不是问题。

However, since CRaft supports coded-fragments, the leader can replicate an entry by coded-fragments rather than the complete entry to remaining followers after committing the entry:(然而,由于CRaft支持编码片段,领导者可以通过编码片段复制条目,而不是在提交条目后将完整的条目复制给剩余的追随者。)

具体实现:

定义一个参数p,0≤p≤F,领导者可以首先将条目的完整副本发送给(F+p)个追随者,然后将编码片段发送给剩余的(F-p)个追随者。更小的P意味着更少的存储和网络成本,但也意味着更大的概率具有更长的提交延迟。if no F out of (F+p) answers return in time, more rounds of communications may be required before commitment:(如果没有(F + p)个答案中的F个及时返回,则在承诺之前可能需要进行更多轮通信)

当p=F时,策略变得和Raft的复制方法一样。图显示了当p=0,1,f时的不同策略。在我们的实验实现中,我们选择p=0。

在这里插入图片描述

3、Prediction

准确选择复制方法可以达到最佳性能。但是,领导不能确定其他服务器的状态。因此,当它试图复制一个条目时,它只能预测它可以与多少台健康的服务器通信。领导者可以使用最新的心跳回应来估计健康服务器的数量。这个预测应该足够准确

如果最近心跳答案的数量不小于(F+k),则领导者应首先使用编码片段复制,如果编码片段复制不起作用,则尝试完整条目复制。否则(小于F+K),领导者直接使用全条目复制。

在这里插入图片描述

值得注意的是,这种预测与领导者选择复制最后一个条目的方法无关。它只依靠最近的心跳回答。因此,很有可能领导者使用完整条目复制来复制最后一个条目,然后自动选择编码片段复制来复制新条目。

4.Newly-elected Leader

当领导者拥有所有完整的条目时,这两种复制方法都可以保证安全性和活性。

然而,当一个领导人是新当选的,很可能新当选的领导人的日志没有完整的副本,只有一些条目的代码段。当只有(F+1)个健康服务器时,不能保证这些不完整的条目是可恢复的。 If some of these unrecoverable entries have not been applied by the newly-elected leader, the leader has no way to deal with these entries.:(如果这些不可恢复的条目中有一些没有被新当选的领导applied ,领导就没有办法处理这些条目。)。

领导者不能向需要它们的追随者发送包含这些条目中任何一个的追加条目RPC,因此这些不可恢复的条目将保留未应用的。根据Raft的规则,从客户端那里收到的leader的 new entries也无法复制到followers 。

因此,协议不能完全发挥作用,协议的活性不能得到保证。因此,需要一些额外的操作来保证活性

问题的提出

新当选领导日志中的编码片段,领导 可以applied or unapplied 。如果应用了编码片段,则条目必须是由前一个领导者提交的。

根据两种复制方法的提交条件,在任何(F+1)个服务器中至少存储一个编码片段或条目的一个完整副本。所以当有(F+1)个健康的服务器时,领导者总是可以恢复这个条目。

然而,如果一个编码片段未被应用,当有(F+1)个健康的服务器时,没有规则可以保证这个条目可以被恢复。

为了处理这种unapplied coded-fragments的情况,在正式成为leader前,新当选的leader应该进行一个***LeaderPre***的操作:

当一个领导者是新当选的,它首先检查自己的日志,找出其自己的unapplied 的coded-fragments。然后:it asks followers for their own logs, focusing on the indexes of the unapplied coded-fragments. 至少应该有F+1个(包括leader自己)回应被收集,否则,leadr保持等待。新的领导者应该尝试按顺序恢复其未应用的编码片段。对于每个entry,如果(F + 1)回应中至少有k编码片段或一个完整副本,则可以将其恢复,但不允许立即committed 或applied 。否则,新领导应删除该条目及其日志中的所有后续条目(包括完整条目)。

After recovering or deleting all the unapplied entries, the whole LeaderPre operation can be done.在选举过程中,新当选的领导人应该继续向其他服务器发送心跳信号,防止它们超时并开始新的选举。

一个example:

Figure6 shows examples of LeaderPre. In Figure6,N=5 and k=3. S1 committed the first two entries and then crashed, and other servers had only applied the first entry.S2 was elected as a new leader,and it would do LeaderPre. It first asked followers about the entries in Index 2 and Index 3. In Figure6(a), after receiving answers from itself, S3 and S4, it tried to recover the two entries. There were three fragments of the Index 2 entry and two fragments of the Index 3 entry.
So S2 should recover the Index 2 entry and delete the Index 3 entry. While in Figure6(b), S3, S5 and S2 itself all had the Index 2 entry and the Index 3 entry. So S2 could recover both of them. Though the uncommitted Index 3 entry would be handled differently if S2 collected answers from different groups of servers, the committed Index 2 entry would be guaranteed to be recovered byLeaderPre.

: ( 图显示了LeaderPre的示例。 在图6中,N = 5并且k = 3。 S1提交了前两个条目,然后崩溃了,其他服务器仅应用了第一个条目。S2被选为新的领导者,它将执行LeaderPre。 它首先向追随者询问索引2和索引3中的条目。在图(a)中,在收到自身S3和S4的答复后,它尝试恢复这两个条目。 有索引2条目的三个片段和索引3条目的两个片段。
因此,S2应该恢复索引2条目并删除索引3条目。 在图(b)中,S3,S5和S2本身都具有索引2条目和索引3条目。 因此S2可以恢复它们两个。 尽管如果S2从不同的服务器组中收集答案,则未提交的索引3条目的处理方式会有所不同,但LeaderPre将保证已提交的索引2条目的恢复。)

在这里插入图片描述

完成leaderpre,还有一个后续

After adding LeaderPre, the Leader Append-Only Property in Raft has an exception: deletion in LeaderPre. In original Raft, the original Leader Append-Only Property is the key to prove safety, so it is necessary to prove that LeaderPre will not harm safety.:(添加了LeaderPre之后,Raft中的仅领导者追加属性会出现例外:LeaderPre中的删除。 在原始Raft中,原始的仅领导者追加属性是证明安全的关键,因此有必要证明LeaderPre不会损害安全。)

原Raft中的领导不删除entries.主要有两个原因:

  1. leaders无法确定一个unapplied 的 entry是否是由old leader committed的
  2. 即使一个entry是unapplied的,leader仍然可以把它赋值给followers,因为它有entry的完整副本,所以没有必要删除它。

而在CRaft里,如果有足够多的unapplied的entry,新leader就可以恢复并复制它。否则,新leader可以断定这个entry是uncommitted的

无法恢复的条目可能会损害CRaft的liveness,但是无法恢复也意味着是uncommitted的,因此删除它们是合理的.

总结:

基于Raft,CRaft提供了两种不同的复制方法来支持擦除编码,同时保持活性。基于最近心跳回应的预测有助于leader选择复制方法。此外,为了保证活力,***LeaderPre***可以帮助新当选的leader处理unapplied的编码片段

5.Performance

***LeaderPre***可能会影响选举时间,因此可能会影响协议的可用性。这种延迟可能会受到新领导者未应用entry数量的影响。然而,一个新的领导者可以先获得其未应用entry的简要信息,然后再收集它们。并且这个通信时间是很短的

如果有远远落后的跟随者,我们建议跟随者在再次健康起来的时候,要一个entry一个entry的赶上leader的entry

编码时间也是一个问题。然而,许多研究表明,与实际系统中的传输时间相比,编码时间足够短[6]。为了降低网络成本,稍微延长编码时间是值得的。

Safety Argument

raft的安全关键是leader的Completeness(完整性)。因为我们在CRaft中添加了一个新的LeaderPre操作,所以必须证明该属性仍然有效。

Lemma 1: A server S has a log entry e, and e was first added into the protocol in Term T, then e and its previous entries in S’s log now are the same as the entries in leader T’s log when e was first added into the protocol.:(服务器S具有一个日志条目e,并且e是在Term T中首先添加到协议中的,然后e和它在S日志中的先前条目现在与在第一次将e添加到协议中的领导者T日志中的条目相同。)

proof1: 在raft paper

Lemma 2.A server S has a log entrye, then entries with the same term and smaller index are in S’s log.

proof2: A leader cannot add entries to its log until LeaderPre is done. When e was accepted, entries with the same term and smaller index must be in the leader’s log. According to Lemma 1, Lemma 2 holds.(领导者必须先完成LeaderPre才能将条目添加到其日志中。 接受e后,具有相同术语和较小索引的条目必须位于领导者的日志中。 根据引理1,引理2成立。)

Theorem 4:Leader Completeness Property: if a log entry e is committed in a given term (Term T), then e will be present in the logs of the leaders for all higher-numbered terms, and e will not be deleted in any higher-numbered term’s LeaderPre.:(领导者完整性属性:如果在给定的期限(期限T)中提交了日志条目e,则对于所有编号较高的术语,领导者的日志中都将出现e,并且在任何编号较高的术语中,e都不会被删除。 LeaderPre。)

总结

通过心跳信息来预测健康服务器的数量,从而选取complete-entry replication或coded-fragment replication两种复制方式

LeaderPre操作确保新leader当选后的liveness问题

将纠删码应用到Raft里,既可以使数据的一致性得到了保证,又减少了网络和存储的开销。

原文:https://www.usenix.org/conference/fast20/presentation/wang-zizhong

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值