第一次接触分布式一致性算法是通过totem,现在开始研究paxos和raft之类,后面也是会做笔记的,便先将totem算法先写下来,用于对比学习。
totem协议,全称是The Totem Single-Ring Ordering and Membership Protocol,是一个基于令牌环的分布式一致性算法。一个令牌在集群节点之间传递,拿到令牌的节点才能够发消息,消息通过UDP广播发送。所以,totem只适合在局域网里的小集群使用,这种情况下,这个算法性能还算高的。从CAP来说,totem具有强一致性,但几乎没有分区容错性,在网络出现分区时,totem会脑裂,当网络恢复时,会造成消息丢失。所以我们集群的做法是网络有问题时禁止节点发送消息。
现在来具体介绍这个协议,首先我们明确totem实现了什么:在多个节点组成的集群中,totem实现让一个节点发送消息,其它所有节点都能全部收到,并且有序的提交给上层应用,这里的环境和paxos一样是除拜占庭问题外的环境。为了方便表述,且totem使用令牌环,这里将一个集群也称作一个ring。下面是一张集群的状态图,每个节点都会经历以下状态。
totem的节点有四个状态,也是组建集群的4个阶段。
Gather阶段:
这个阶段用于每个节点向外界广播自己的存在并收集其它节点的存在
Commit阶段:
这个阶段会产生一个代表节点,该节点向其它所有节点收集信息,并将收集的信息传递给
容错分布式一致性算法——totem(一)
最新推荐文章于 2024-05-30 17:00:25 发布