点击链接加入群聊【java菜鸟学习】:https://jq.qq.com/?_wv=1027&k=5afU7nS
群号:124569404
CAP理论理解
解释:
那么什么是CAP原理,
CAP原理是现代分布式系统的理论基石,好比是分布式领域的牛顿定律。CAP原理发布后,各种分布式存储中间件如雨后春笋般一个个冒出来了。我们这里只理解CAP,不对其原理做深入研究。
CAP三个字母分别代表:
C - Consistent ,一致性A - Availability ,可用性P - Partition tolerance ,分区容错性分布式系统之所以叫分布式,是因为提供服务的各个节点分布在不同机器上,相互之间通过网络交互。那么必然存在网络故障断开的风险,这个网络断开的专业场景成为网络分区。
在网络分区发生时,两个分布式节点之间无法进行通信,那么我们对一个节点进行的修改操作将无法同步到另外一个节点,所以数据的「一致性」将无法满足,因为两个分布式节点的数据不再保持一致。除非我们牺牲「可用性」,也就是暂停分布式节点服务,在网络分区发生时,不再提供修改数据的功能,直到网络状况完全恢复正常再继续对外提供服务。或者为了保证可用性,而牺牲数据一致性。
所以,CAP一句话就是,在网络分区时,不能同时保证可用性和一致性。
为了保证分布式中间件的可用性,大部分中间件会支持最终一致性。
接下来是自己的理解;
当有一个超市,柜台收银机器只有一个,这样也就不存在CAP理论(因为他妹的这一台机器运行正常就是ACID原则,也就是说这一台机器根本不需要考虑副本,同步数据,一台机器传啥传)
这样的系统当然不好,就是一台机器无法服务更多的客人(也就是扩展性不好啦),然后准备了N台机器来收银.不过他们之间需要同步数据
需要考虑的是,为什么是AP原则或者是CP原则呢?为什么没有AC原则呢?
假设机器2由于网络故障无法传输自己的数据到其他的机器上(此时假设有一个顾客正好结算了购物车的商品)
那么按照AC原则的话,那么机器1和其他的机器必须要同步机器2的数据到自己的机器上,但是机器2又没有传输数据过来,那么我就等机器2传数据过来吧,等他传数据过来其他的机器肯定不能再服务其他的顾客了吧?(因为再服务的话那就更多的数据不一致了),那咱等…等机器2恢复的话那不就不能服务顾客了吗?机器也就不可用了
然后就是AP原则和CP原则了;
CP原则
假设机器2挂了(此时假设有一个顾客正好结算了购物车的商品,如下图)
那么我们想保证数据一致性啊(也就是我们要把这个顾客的结算的商品信息和金额同步到别的机器上面去)
AP原则
还是假设机器2挂了,那么其他的机器就要继续运行,保证可用性