![分布式系统中的CAP理论](http://img.jiangsulong.com/230805/203232C46-4.jpg)
文章插图
图片
N1节点更新了V0到V1 , 想在也想把这个消息通过M操作告诉N1节点 , 却发生了网络故障 。这时候小明和小华都要同时访问这个数据 , 怎么办呢?现在我们依然想要我们的系统具有CAP三个特性 , 我们分析一下会发生什么 。
(1)系统网络发生了故障 , 但是系统依然可以访问 , 因此具有容错性 。
(2)小明在访问节点N1的时候更改了V0到V1 , 想要小华访问节点N2的V数据库的时候是V1 , 因此需要等网络故障恢复 , 将N2节点的数据库进行更新才可以 。
(3)在网络故障恢复的这段时间内 , 想要系统满足可用性 , 是不可能的 。因为可用性要求随时随地访问系统都是正确有效的 。这就出现了矛盾 。
正是这个矛盾所以CAP三个特性肯定不能同时满足 。既然不能满足 , 那我们就进行取舍 。
有两种选择:
(1)牺牲数据一致性 , 也就是小明看到的衣服数量是10 , 买了一件应该是9了 。但是小华看到的依然是10 。
(2)牺牲可用性 , 也就是小明看到的衣服数量是10 , 买了一件应该是9了 。但是小华想要获取的最新的数据的话 , 那就一直等待阻塞 , 一直到网络故障恢复 。
现在你可以看到了CAP三个特性肯定是不能同时满足的 , 但是可以满足其中两个 。
三、CAP特性的取舍我们分析一下既然可以满足两个 , 那么舍弃哪一个比较好呢?
(1)满足CA舍弃P , 也就是满足一致性和可用性 , 舍弃容错性 。但是这也就意味着你的系统不是分布式的了 , 因为涉及分布式的想法就是把功能分开 , 部署到不同的机器上 。
(2)满足CP舍弃A , 也就是满足一致性和容错性 , 舍弃可用性 。如果你的系统允许有段时间的访问失效等问题 , 这个是可以满足的 。就好比多个人并发买票 , 后台网络出现故障 , 你买的时候系统就崩溃了 。
(3)满足AP舍弃C , 也就是满足可用性和容错性 , 舍弃一致性 。这也就是意味着你的系统在并发访问的时候可能会出现数据不一致的情况 。
实时证明 , 大多数都是牺牲了一致性 。像12306还有淘宝网 , 就好比是你买火车票 , 本来你看到的是还有一张票 , 其实在这个时刻已经被买走了 , 你填好了信息准备买的时候发现系统提示你没票了 。这就是牺牲了一致性 。
但是不是说牺牲一致性一定是最好的 。就好比MySQL中的事务机制 , 张三给李四转了100块钱 , 这时候必须保证张三的账户上少了100 , 李四的账户多了100 。因此需要数据的一致性 , 而且什么时候转钱都可以 , 也需要可用性 。但是可以转钱失败是可以允许的 。
推荐阅读
- 关于自动限流的思考
- 肩宽、上身壮还想显瘦怎么办?看完蒋欣的穿搭,才悟出其中的精髓
- 高启强手中的这张100元,开门号最新成交201.25万
- 红豆生南国中的红豆是指什么 红豆生南国中的红豆是什么红豆
- 海岩奶绿的做法 海岩奶绿中的海岩是什么
- 木糠蛋糕中的木糠是什么做的 木糠蛋糕中的木糠是什么
- 醋在烹饪中的作用使用方法 醋的烹调作用与用法
- 扇贝中的黄能吃吗 扇贝的黄可以吃吗
- 什么是m 什么是mba
- 玻璃门衣柜使用中的样子 玻璃衣柜门清洗小妙招