CAP 原则
CAP 原则又称之为CAP定理,指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。
一致性(C)Consistency(一致性)
在分布式系统中的所有数据备份,在同一时刻是否是同样的值。也就是说,取一个值不能这会是a,过一会变成b,想确保数据一致性必须使用事务,而事务在分布式系统中很难实现。
可用性(A) Availability
在集群中一部分节点故障后,集群整体是否还能提供服务。通俗叫就是系统不能挂掉,比如一个系统可用率是99.99%,4个9也就是1年不到一个小时故障时间。可用性一般使用负载均衡或者心跳检测加ip漂移来保证。
分区容错性(Partition Tolerance)
分区容错性是指系统能够容忍节点之间的网络通信故障。也就是说单台服务器或多台服务器出现网络问题后,其他服务器依然能正常提供服务。分区容错性可以使用选举机制实现。选举机制,如果三台服务器出现数据不一致,如果有两台数据是一致的,然后就以这两台为标准将数据同步到第三台。
通常情况下我们会选择满足可用性和分区容错性,而牺牲掉一致性,因为如果不能保证可用性和分区容错性,那么这个分布式系统就会失去意义。
什么是最终一致性,为什么需要最终一致性。
首先什么叫一致性?一致性是保证数据库事务的重要特性,事务有4个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability);
为什么需要事务呢?因为有些场景需要两个以上操作要么全部指向成功,要么全部执行失败。
举个例子:比如a 给b 转账100,先从a 的账户里扣除100,再给b的账户增加100。这两个操作必须同时成功或失败,不然就会出现对不上帐的情况。
事务里的一致性就是保证从转账前的状态到转账后的状态是正确的。
在单机环境事务的一致性很好保证,我们使用数据库的事务就能保证一致性。
那么怎么理解最终一致性?简单来说,可以理解为在一段时间后,节点间的数据会最终达到正确状态。
比如张三给李四赚钱,虽然张三被扣款了,但是李四不会立即收到钱,这时候就出现不一致性,但是过了一个小时最终又收到了,这就满足了最终一致性。
那么通过什么方法来达到最终一致状态呢?基本上是以下三种方法的各种组合使用:重试、补偿、幂等。
重试解决请求异常,保证可用性;
补偿是指当其后续操作失败后,需要按相反顺序撤销前面所有的操作,保证一致性;
幂等是跟重试配合使用,确保重试不会产生脏数据,也是保证一致性;
网友评论