分布式一致性概述

一、什么是分布式一致性

1.CAP 理论

对于分布式一致性,最直观的理解就是分布式系统中的不同节点不能产生矛盾。比较著名的理论就是

CAP Theorem,即在一个分布式系统中,不能同时满足以下三点:一致性(Consistency)、可用性

(Availability)、分区容错性(Partition Tolerance)

  • 一致性(C):在分布式系统中的所有数据备份,同一时刻是否有同样的值

  • 可用性(A):在集群中一部分节点故障后,集群整体能否响应客户端的读写请求

  • 分区容忍性(P):大多数的分布式系统都分布在多个子网络,每个网络都叫做一个区,分区容错的意思即是

区间通信可能失败;比如一个分布式系统有5个节点,有3个在美国,有两个在中国,这就是两个区

它们之间可能无法通信

3CUCaF.jpg

CAP原则的核心就是只能实现AP、CP、AC,不会存在CAP,从上图中也可以看到典型的一些数据库

产品也只是满足了CAP的部分特性

2.一致性模型

(1)弱一致性(最终一致性)

关于弱一致性,通俗的解释就是当一个节点向数据库写入数据时,其他的节点可能无法立即读到该数据,

但是它们最终一定会读到该数据,下面是一些典型的实例

  • DNS (Domain Name System)

  • Gossip(Cassandra 的通讯协议)

(2)强一致性

对于分布式系统的容错性最关注的问题就是数据不能存储在单个的节点上,一般的解决方案就是state

machine replication(状态机复制共识算法),具体的实现算法有以下几种:

  • 同步

  • Paxos

  • Raft(multi-paxos)

  • ZAB(multi-paxos)

二、强一致性算法

1.主从同步

主从同步复制的工作过程如下,Master接受写请求、Master复制日志到slave、Master等待,直到

所有从库返回;但是这样存在一个问题:一个节点失败,Master阻塞,导致整个集群不可用,保证了

一致性,但是可用性却大大降低了

解决上述问题的方法:多数派的算法,每次写都保证写入大于N/2个节点,每次读保证从大于N/2个

节点读。但是这种算法也有缺陷:在并发环境下,无法保证系统的正确性,顺序是非常重要的

3C6hBd.jpg

2.Paxos

Paxos是一种分布式一致性算法,其发明者以希腊小岛民主投票的场景来描述该一致性算法,所以对于

一些概念的理解可以映射到议会中一些实际的场景

(1)Basic Paxos

角色的介绍:

  • Client:系统的外部角色,请求的发起者;实际对应于民众

  • Propser:接受Client的请求,向集群提出提议(Propose)。并在冲突发生时起到冲突调节的作用。像议员,

替民众提出议案

  • Acceptor(Voter) : 提议投票和接受者,只有在形成法定人数(Quorum)时,提议才会最终被接受,像国会

  • Learner:提议的接受者,备份,对集群的一致性没有影响

基本流程

存在的问题

比较复杂,要经过两轮RPC,效率是比较低的、而且还存在活锁的问题

(2)Multi Paxos

Muliti Paxos 中出现了一个新的概念,Leader,它是唯一的propser,所有的请求都必须经过此Leader,

这样就可以解决活锁的问题

基本流程

进一步简化

3.Raft

Paxos算法实现起来过于复杂,尽管已经做了相当的优化。而Raft算法基于Paxos设计的思想重新做了很大

的简化,所以得到广泛应用

4.ZAB

ZAB协议的全称是Zookeeper Atomic Broadcast,它是为Zookeeper专门设计的一种支持崩溃恢复的原子

广播协议,也是Zookeeper保证数据一致性的核心算法

三、具体实现

1.Zookeeper

2.etcd

参考资料


https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/ --Michael Whittaker

https://raft.github.io/ --Raft一致性算法官方介绍