一、概述
一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项.
- 一致性(Consistency):所有节点在同一时间的数据完全一致。
- 可用性(Availability):服务在正常时间内一直可用。
- 分区容错性(Partition tolerance):系统在遇到某节点或者网络分区故障的时候,仍然能够对外满足可用性或一致性的服务。
二、分区容错性(Partition tolerance)是必须的
分区容错性(Partition tolerance)分区容错性(Partition tolerance):即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。分区容错的意思是,区间通信可能失败。比如,一台服务器放在本地,另一台服务器放在外地(可能是外省,甚至是外国),这就是两个区,它们之间可能无法通信,但是并不影响服务整体可用。
分布式系统中,分区容错性是必须百分比满足的,所以CAP理论要么是CP、要么是AP(AC: 一般都是单体架构项目)。
通俗的来讲,分布式系统中的CAP理论,所强调的是客户端发出请求之后,服务端先去保证一致性还是先返回。在这里值得注意的是,CP并不是不需要满足可用性,同样AP也不是不需要满足一致性,只不过侧重点不同。
三、案例讲解
AP架构中,侧重点服务的可用性,关注的重点在于客户端请求是否能够及时返回,典型代表有redis
CP架构中,侧重点数据的一致性,关注的重点在于节点直接的数据同步,典型代表有zookeeper
值得注意的是:
- step3数据返回必须等待step2数据同步完成。
- step2数据同步是一个典型的多数派结构,即[n/2]+1个节点完成了数据的同步就可以执行返回
四、保证一致性的方案
AP模式中虽然不关注一致性问题,但不代表我们的分布式系统不需要保证一致性,CP模式需要先关注数据同步,所以也会关注一致性问题。那么在分布式环境中,同样也必须保证数据的一致性。
分布式一致性的解决方案:state machine repalication(状态机复制)。通俗的来讲就是每个操作都是一条日志,其他节点同步到这些日志执行来实现集群的一致性。