2023年3月看了Bigtable,raft,zookeeper的论文,主要raft一致性算法的论文
1.Bigtable论文:
Bigtable: A Distributed Storage System for Structured Data
图:tablet位置结构
第一级文件存储在Chubby中,有Root table的位置。Root table包含特殊METADATA table的所有tablets的位置。每个METADATA tablet包含一组用户tablets的位置。Root table永远不会分开,以确保tablet结构不会超过三层。如果客户端不知道tablets的位置,或者发现缓存的位置信息不正确,就会递归向上接着寻找。
当集群管理系统启动主机时,它需要发现当前tablet分配,然后才能更改它们。 Master在启动时执行以下步骤:
(1) Master在Chubby中获取一个唯一的Master锁,这可以防止并发的Master实例化。 (脑裂)
(2) master扫描Chubby中的服务器目录,查找正在运行的服务器。
(3) master与每个活动的Tablet服务器通信,以发现哪些Tablet已经分配给每个服务器,并更新它们对当前master(随后从先前master接收的任何Tablet加载请求都将被拒绝)。
(4) master扫描METADATA table以了解tablet的集合。 每当扫描遇到尚未分配的tablet时,主程序将该tablet添加到未分配的tablet集合中,这使得该tablet能被合适分配。
2.Raft论文:
In Search of an Understandable Consensus Algorithm (Extended Version)
******
图二:Raft共识算法摘要
Raft集群中有三类角色:Leader(领导者),Follower(随从),candidate(候选人)。Leader处理所有的client请求,Follower只响应Leader和client的请求,candidate是Follower进行领导者选举时过渡到Leader的中间状态。
Raft使用心跳来进行领导选举,Leader 定期向所有 Follower 发送心跳(不携带日志的 AppendEntries RPC),以维护自己的Leader地位。如果follower在选举超时(election timeout)的一段时间内没有收到来自Leader的任何通信,那么它会假定没有可行的Leader并开始选举以选择新的Leader。
开始选举时,follower自增其current Term并进入到candidate状态。然后它为自己投票并向集群中的每个其他服务器并行发出 RequestVote RPC。当它赢得选举,或者其他服务器当选Leader,服务器会终止candidate状态。
日志复制:
图:日志由条目组成,条目按顺序编号。 每个条目都包含创建该条目的term(每个框*中的数字)和状态机的命令。*
一旦创建日志条目的Leader在大多数服务器上复制了日志(例如上图中的日志条目7),则提交日志。 这还将提交Leader日志中的所有前面的条目,包括由以前的Leader创建的条目。
集权成员变更:
在raft成员变更时中,集群首先切换到一个过渡配置,我们称之为联合共识(joint consensus); 一旦提交了联合共识,系统就会进入到新的配置。联合共识状态下有新的和旧的配置,任何配置中任何一个服务器都可以充当Leader,但是需要新集群与旧集群中大多数都同意才可以。
*图:Raft集群成员变更过程*
该图说明了配置更改过程。当Leader收到将配置从更改为
的请求时,它将联合共识的配置(图中为
)存储为日志条目,并使用前面描述的机制复制该条目。 一旦给定的服务器将新的配置条目添加到其日志中,它就会将该配置用于以后的所有决策(无论是否提交条目,服务器总是在其日志中使用最新的配置)。 这意味着Leader将使用
规则来确定
的日志条目何时提交。 如果Leader失败了,新的Leader可能会在选择
或
的情况下,这取决于获胜的候选人是否收到过、
的。 无论如何,
不能在此期间单方面作出决定。
3.Zookeeper:
ZooKeeper: Wait-free coordination for Internet-scale systems
ZooKeeper提供的命名空间与标准文件系统非常相似。路径是由斜杠/分隔的一系列元素。 ZooKeeper命名空间中的每个节点都由一个路径标识。
图三:Zookeeper层次名称空间的说明
znode有两种类型
Regular:数据对象正常创建和删除。
Ephemeral(临时):创建对象的会话终止之后,对象会被删除。
4.Thrift:
用于网络通信中一种序列化工具