一致性协议分布式环境下,解决如何在多节保证数据的一致性。分布式理论中,CAP 理论是分布式的理论基础,2PC 是分布式事务简单实现。本章首先简单介绍 CAP 理论和 2PC,然后介绍一致性协议实现的主要组成,比如 Leader 选举、日志同步、健康检查、故障恢复、脑裂和快照等。至于具体的协议实现如 Raft、ZAB 等不在本章做具体说明,将会在后面的章节做具体介绍。
CAP
1.什么是数据一致性?
如图1/2,当用户向 DB1 插入数据 a 后,在向用户返回响应前,确保了 DB1、DB2 和 DB3 都有了 a 这个数据。所以在得到响应之后,用户不管访问那个库,都能保证获得到相同的数据。
2.什么是网络分区?
如图3所示,DB3 与 DB1 和 DB2 无法连通时,就会出现网络分区,在 DB1 和 DB2 修改的数据无法同步的 DB3,同样 DB3 修改的数据也无法同步到 DB1 和 DB2,这就出现网络分区。而 CAP 理论就提供一种思路和方法,去解决这个问题。
3.CAP理论如何解释上述的矛盾(一致性和网络分区)?
C:Consistency 一致性(数据一致)。
A:Availability 可用性,用户请求能够在有限的时间内返回响应(访问任意服务)。
P:Partition tolerance 分区容错性(分布式系统内部的网络故障)。
根据 CAP理论,一个系统无法同时满足 C、A 和 P。而在分布式系统中要么实现 CP,要么实现 AP,为什么这么说?
(1)分布式至少2台的机器,机器之间必须通过网络通信,既然是网络,就可能出现网络故障,如图3的情况,所以分布式系统必定满足 P。
(2)在满足 A 的情况下(AP),如果向 DB1 插入数据 b,DB1 同步 DB2, 但在网络故障的情况下,DB1 无法同步 DB3, 导致数据不一致。在满足 A 的情况下, DB3 依然可以访问,但 read b时,无法获取数据。但访问 DB1 和 DB2 可以,从而导致读数据的不一致。
(3)在满足 C 的情况下(CP),如果向 DB1 插入数据,DB1 同步 DB2, 但在网络故障的情况下,DB1 无法同步 DB3, 导致数据不一致。在满足 C 的情况下,由于数据不一致,访问数据会返回 error。
两阶段提交(2PC)
阶段一
事务询问: