怎么理解:一致性和可用性不可兼得呢?
现在有3个节点node1、node2、node3,其中node3因为网络原因暂时不可用了,但是,依然有些请求已经到达了, node1和node2数据是同步的,node3节点虽然存活,但是因为网络原因,并没有同步过来最新数据。
如何保证:node3的数据也是对的呢? 那就是先阻塞哪里,等网络恢复,数据同步好了再返回。 此时就是:牺牲了可用性,恢复前暂时不可用了嘛! 所以说:为了一致性, 可用性可能暂时不可用。C(一致性) A(可用性) 二选一。
而P:分区容错性,也就是,有些节点挂掉了,依然要保持系统能提供服务,这肯定是必须的。
所以:要么是CP,要么是AP。
但是,由于分布式系统各个系统之间是通过网络连接的。网络是复杂的,因此,一定会出现P, 也就是分区容错性(健康和不健康的分开)这种问题。
-------------
思考题:那么es是cp还是ap呢?
es当有节点故障时,是先发出警告,等会就会从集群中被移除,因此这个节点变得不可用。它上面的数据会被分片到其它可用的节点上,最终变得可用。 因此es是牺牲了可用性,因此es是CP。
-----------base理论
BA:基本可用。 // 允许损失部分可用性,保证核心可用。
如:es有问题的节点恢复后,又会重新加入集群中,又可用。
S:软状态。// 允许出现临时不一致
E:最终一致性。
--------------------
得失的权衡!
---------BASE理论解决分布式事务问题
1.AP模式:各个事务分别提交,允许出现结果不一致,然后采用补救措施。恢复数据,最终保证一致。 (各个事务提交后,看看对方有问题没有,一看有问题,采用补救措施)
2.CP: 各个事务执行后相互等待,都没问题了,同时提交。出现问题了,同时回滚。
缺点就是:提交前,服务是不可用的。
因此,必须有协调者。当有失败时,协调者进行通知。
子事务是:分支事务。 协调者是:全局事务。