Raft 笔记(八) – TODO
花了差不多一个月时间又重新学习了 Raft,并看了 etcd/raft 的实现,Raft 看上去很简单,但是有很多的 corner case,想要实现稳定的、性能高的并不容易。
Raft 笔记先告一段落,但仍有许多工作要做。
etcd
etcd/raft 只实现了 Raft,其余的如 Storage 和 RPC 都由用户处理,可以学习下 etcd 是如何实现和使用 etcd/raft 的。
Lease holder
cockroach 实现了 range lease,
可以直接读 lease holder 就能保证线性一致性,不需要 ReadIndex 的 heartbeat,也不会像 lease read 损失一致性,
PingCAP 应该也实现了类似的机制: 通过 raft 的 leader lease 来解决集群脑裂时的 stale read 问题。
lease holder 是 Raft-agnostic 的,没找到很详细的资料,好像是受这篇论文启发的:
Paxos Quorum Leases: Fast Reads Without Sacrificing Writes
Quorum read
Raft 的读虽然可以发送给 follower,但还是要从 leader 获取 readIndex,leader 的压力会很大。使用 quorum read 可以利用 follower 读,减小 leader 的压力,
提高读的吞吐量和性能: Improving Read Scalability in Raft-like consensus protocols
Multi-raft
一般会将数据分片(sharding),每个分片都由一个 raft group 管理。每台机器上会有多个 raft group,若每个 raft group 都单独的进行 RPC,流量会很大,multi-raft
将多个 raft group 的消息和心跳合并,减轻网络的压力。多个 raft group 逻辑上独立,物理上共用一些东西。
留下评论