分布式系统是硬件和软件分布在不同网络计算机上,彼此间通过消息传递进行通信和协调的系统。
CAP理论:一个系统不可能同时满足一致性(C:Consistency)、可用性(A:Avaliability)和分区容错性(P:Partition Tolerance)这三个基本需求,最多只能满足其中的两项。
那么为什么会这样呢?以下2个地方讲的都挺好的:
https://www.zhihu.com/question/54105974https://blog.csdn.net/yeyazhishang/article/details/80758354通过以上2个地方的讲解,概括下自己的理解: 分区容错性是分布式系统的基础,放弃则表示失去了系统的扩展性,违背了分布式系统设计的初衷。所以通常提到CAP的取舍,是在CA之间的取舍。
保证分区容错性:需要用到上文中提到的数据副本,即同一份数据分布到不同的节点上,在网络发生故障时,仍需要保证对外提供一致性和可用性的服务,除非是整个网络发生故障。保证一致性:此时为满足分区容错性的需求,设置了多个数据副本(副本越多,分区容错性越强),分布式系统需要承担数据同步的工作。如果要保证强一致性,那么部分节点需要牺牲可用性,等待数据同步完成后再提供服务。极端情况下,当网络出现故障形成网络孤岛的时候,孤岛内的节点为保证强一致性,需要彻底停止服务,等待网络恢复,同步最新的数据保证强一致性。保证可用性:同样是多个数据副本的场景,保证强可用性的一个方法即是牺牲一致性,在数据同步的同时提供服务,此时可能各个节点对同一个数据返回的值不同(还未完成数据同步),出现数据不一致的情况。这样看来,不管单纯地牺牲一致性,还是可用性,都是不太可取的,所以会有BASE理论。
BASE理论:基本可用、软状态、最终一致性
基本可用:分布式系统在遇到问题时,允许损失部分可用性。响应时间上的延长、功能降级。软状态:和强一致性相比,软状态允许系统中的数据存在中间状态,允许系统在不同节点的数据副本之间进行数据同步的延迟。最终一致性:系统中的所有数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。这样看来,还是可以在一致性和可用性之间做一定的权衡,来达到一个相对满意的状态。