CAP理论学习

转自:https://zhuanlan.zhihu.com/p/33999708

1.概述

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

1.1 Consistency 一致性

一致性指“all nodes see the same data at the same time”,即所有节点在同一时间的数据完全一致。并发读写多个数据拷贝的场景。

从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何分布到整个系统,以保证数据最终一致。

分为强/弱/最终一致性三类:

  • 强一致性:对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。【要求每次都读到最新的数据】
  • 弱一致性:如果能容忍后续的部分或者全部访问不到,则是弱一致性。
  • 最终一致性:如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。【允许一段时间内读取到的不一致】

1.2 Availability 可用性

指“Reads and writes always succeed”,即服务在正常响应时间内一直可用。

好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

通常和分布式数据库冗余、负载均衡有关系。

1.3 Partition Tolerance分区容错性

分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。

2.权衡

  • AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。
  • CP without A:如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。对于涉及到钱财这样不能有一丝让步的场景,C必须保证。

 

posted @   lypbendlf  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2018-08-01 算法分析与设计入门-搜索策略
点击右上角即可分享
微信分享提示