分布式一致性共识算法

分布式系统中的一致性共识算法

  • Basic Paxos
  • Multi Paxos
  • Raft
  • Zab
  • Gossip

Paxos算法

在分布式系统中,造成系统不可用的场景很多,比如服务器硬件损坏、网络数据丢包等问题

解决这些问题的根本思路是:多副本,副本是分布式系统解决高可用的唯一手段,也就是主从模式。

那么如何在保证一致性的前提下,提高系统的可用性,Paxos 就被用来解决这样的问题,而 Paxos 又分为 Basic PaxosMulti Paxos

Raft算法

Raft 是 Multi Paxos 的一种实现,是通过一切以领导者为准的方式,实现一系列值的共识,然而不是所有节点都能当选 Leader 领导者。

Raft 算法对于 Leader 领导者的选举是有限制的,只有最全的日志节点才可以当选。

Zab算法

zookeeper使用的共识算法

Zookeeper 的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。

Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。 

为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。

所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字

  • 高32位:  是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。
  • 低32位: 用于递增计数。

Gossip算法

Gossip 的协议原理有一种传播机制叫谣言传播。

谣言传播:指的是当一个节点有了新数据后,这个节点就变成了活跃状态,并周期性地向其他节点发送新数据,直到所有的节点都存储了该条数据。

这种方式达成的数据一致性是 “最终一致性”,即执行数据更新操作后,经过一定的时间,集群内各个节点所存储的数据最终会达成一致,很适合动态变化的分布式系统。

总结

共识算法的选择和数据副本数量的多少息息相关

如果副本少、参与共识的节点少,推荐采用广播方式,如 Paxos、Raft 等协议。

如果副本多、参与共识的节点多,那就更适合采用 Gossip 这种最终一致性协议。

你可能感兴趣的:(我的思考,分布式,共识算法,java)