在一个分布式系统(指系统中的节点互相链接并共享数据)中,当涉及读写操做时,只能保证一致性 (Consistency)、可用性 (Availability)、分区容错性 (Partition Tolerance)三者中的两个,另一个必须被牺牲。数据库
那么什么样的分布式系统是节点之间互联并共享数据呢?网络
典型的场景就是数据库的主从集群,一个数据库集群有一个主,多个从,主从之间会进行数据复制。因此适用于CAP原理。架构
那么若是我如今是一个Redis的集群,集群中每台机器存储不一样的数据,集群中每台机器不须要复制和传递数据,那么就不属于CAP原理的讨论范围。同理,若是是A,B两个不一样的业务系统,好比招行帐号A给工行帐号B转帐100元,因为招行和工行是两个不一样的业务系统,业务上隔离,且他们之间也没有共享的数据,从而也不属于CAP原理的讨论范围。分布式
经过上面的分析,咱们知道CAP中的数据一致性,本质上是为了维护同一个数据的不一样副本之间的一致性。而更多的时候,咱们要解决的是不一样业务系统之间的数据一致性,即数据之间老是应该知足规定的业务规则。典型的场景好比有跨行转帐、订单和减库存。这种场景,因为没有数据共享的特征,因此不适用于CAP。好比A银行的帐户给B银行的帐户转帐100元,那么转帐先后,两个帐户的钱加起来应该不变。也就是A扣款了,B就必须加款。那么这种场景如何解决呢?通常的作法是采用分布式事务,常见的分布式事务的解决方案有:2PC\3PC、TCC、基于分布式MQ+本地消息、分布式MQ事务消息、Sagas。架构设计