分布式系统 Spinnaker

mac2022-06-30  113

分布式系统 Spinnaker

什么是时间线一致性?

所有replica都按照同一个顺序执行写操作。读操作可能会读到过时的值。怎么做到?写只能通过leader写。读可以读任何一个replica。

什么是linearizability?

每个操作都有一个开始和结束时间。以客户端发出request和收到reply为界定。两个操作的时间可能有重叠,也可能完全没有交集。如果没有交集的,他们的先后顺序就是确定的。可线性化要求,能找到一个所有操作的全序关系,所有客户端看到的都是同一个顺序。这个全序关系满足2个条件: 读到一个值,必须发生在写这个值之后。对于时间没有交集的操作,这个全序关系要符合他们原来的先后顺序。

课前问题

Please read the paper’s Appendices. In Spinnaker a leader to responds to a client request after the leader and one follower have written a log record for the request on persistent storage. Why is this sufficient to guarantee strong consistency even after the leader or the one follower fail?因为1个cohort只有3个服务器。这条log已经存在于2个服务器中——1个leader和1个follower就构成多数了。另外一个follower因为log太旧(不包含这条log),不可能被选为leader。所以就能防止这条已经commit的log丢失。它也有类似于Raft的选举限制的东西:LSN的epoch number类似于Raft的term。每次选举只有term最新,或者term一样新但是log比较长的,才能被选为leader。这就防止了已经commit的log被洗掉。

读操作

Raft的要求是读操作也要进log,等到commit的时候才从状态机读值。 原因是split-brain。旧leader不知道自己已经不是leader,仍然执行读操作,读到的可能是旧值。 这样比较慢。如果要加快,可以用lease。定义一个时间段,比如5秒。如果leader能够与过半的服务器保持心跳通信,他在5秒内可以自行读取值。如果换了新Leader,它在5秒内,不能commit写操作。

杂记

Spinnaker用Zookeeper来做leader选举。6.824课程老师认为原因是作者用Zookeeper来做shard assignment,所以干脆也用Zookeeper来做leader选举。在2011年以前,Paxos没有用来做数据库的replication,只是用来做配置服务。

参见

https://pdos.csail.mit.edu/6.824/papers/spinnaker-faq.txt https://pdos.csail.mit.edu/6.824/notes/l-spinnaker.txt

最新回复(0)