学习记录——Bigtable,Raft,zookeeper,Thrift

154 阅读4分钟

2023年3月看了Bigtable,raft,zookeeper的论文,主要raft一致性算法的论文

1.Bigtable论文:

Bigtable: A Distributed Storage System for Structured Data

image.png

图: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)

image.png ******

image.png

image.png

image.png image.png

图二:Raft共识算法摘要

Raft集群中有三类角色:Leader(领导者),Follower(随从),candidate(候选人)。Leader处理所有的client请求,Follower只响应Leader和client的请求,candidate是Follower进行领导者选举时过渡到Leader的中间状态。

image.png Raft使用心跳来进行领导选举,Leader 定期向所有 Follower 发送心跳(不携带日志的 AppendEntries RPC),以维护自己的Leader地位。如果follower在选举超时(election timeout)的一段时间内没有收到来自Leader的任何通信,那么它会假定没有可行的Leader并开始选举以选择新的Leader。

开始选举时,follower自增其current Term并进入到candidate状态。然后它为自己投票并向集群中的每个其他服务器并行发出 RequestVote RPC。当它赢得选举,或者其他服务器当选Leader,服务器会终止candidate状态。

日志复制:

image.png

图:日志由条目组成,条目按顺序编号。 每个条目都包含创建该条目的term(每个框*中的数字)和状态机的命令。*

一旦创建日志条目的Leader在大多数服务器上复制了日志(例如上图中的日志条目7),则提交日志。 这还将提交Leader日志中的所有前面的条目,包括由以前的Leader创建的条目。 

集权成员变更:

在raft成员变更时中,集群首先切换到一个过渡配置,我们称之为联合共识(joint consensus); 一旦提交了联合共识,系统就会进入到新的配置。联合共识状态下有新的和旧的配置,任何配置中任何一个服务器都可以充当Leader,但是需要新集群与旧集群中大多数都同意才可以。 image.png

*图:Raft集群成员变更过程*

该图说明了配置更改过程。当Leader收到将配置从更改为的请求时,它将联合共识的配置(图中为)存储为日志条目,并使用前面描述的机制复制该条目。 一旦给定的服务器将新的配置条目添加到其日志中,它就会将该配置用于以后的所有决策(无论是否提交条目,服务器总是在其日志中使用最新的配置)。 这意味着Leader将使用规则来确定的日志条目何时提交。 如果Leader失败了,新的Leader可能会在选择的情况下,这取决于获胜的候选人是否收到过、的。 无论如何,不能在此期间单方面作出决定。

3.Zookeeper:

ZooKeeper: Wait-free coordination for Internet-scale systems

ZooKeeper提供的命名空间与标准文件系统非常相似。路径是由斜杠/分隔的一系列元素。 ZooKeeper命名空间中的每个节点都由一个路径标识。

image.png

图三:Zookeeper层次名称空间的说明

 

znode有两种类型

Regular:数据对象正常创建和删除。

Ephemeral(临时):创建对象的会话终止之后,对象会被删除。

4.Thrift:

用于网络通信中一种序列化工具