分布式系统分布式协议与算法
CAP
CAP 是分布式系统中的三个重要特征,分别是:
- Consistency 一致性:各节点之间的数据需要保证一致性,即客户端无论从哪个节点请求数据,得到的结果都要相同,即使暂停服务,也要先同步数据;
- Availability 可用性:而可用性则 优先保证服务可用,即使各节点间的数据还未同步完成,因此可能会 导致返回的数据不是最新的;
- Partition Tolerance 分区容错性:在分布式系统中,一般都有多个节点,分区容错性是指 即使有些节点出现故障或延时,系统也能正常提供服务。
CAP 理论指的是在分布式系统中,只能同时满足 CAP 中的两个特征,无法同时满足 CAP。
因为分布式系统一般都是 多节点,并且是分区网络,所以涉及多节点间的通讯和交互,节点的故障、延时是必然会发生的。因此分布式系统 首先要保证 P。
在 CA 的选择中,如果业务需要数据的强一致性,否则会导致系统出错,那么优先选择 C。而如果业务对数据一致性要求没有那么高,追求服务尽可能的可用,那优先选择 A。
分布式共识 是指在分布式系统中,多个节点通过协商来达成一致的执行决定或数据状态。例如分布式选举就是一种执行决定的共识,CAP 理论中要具备 C,就是需要进行数据状态的共识。常见的共识算法有Paxos、Raft、ZAB。
实现了一致性并不是就保证了数据的完整性,如果系统为了保证一致性,会将数据在各节点间同步完成之后,再对客户端提供服务。
如果是 Raft,数据同步失败了, 会通过 Leader 的日志来保证最终一致性,因此最后数据是能保证完整的。但是,如果 在数据同步失败时,Leader 任期到或者故障,发生了切主,此时就可能 把新 Leader 的数据(不是完整的,因为切主前还未同步完成)同步给其他节点,此时集群的数据就不完整了。