南靖企业网站建设公司,做网站好赚钱,互联网大厂,网站开发域名注册功能CAP理论
什么是CAP理论#xff1f;
CAP理论用来指导分布式系统设计#xff0c;以保证系统的可用性、数据一致性等。
C#xff0c;Consistency#xff0c;一致性#xff0c;指所有节点在同一时刻的数据是相同的#xff0c;即更新操作执行结束并响应用户完成后#xff…CAP理论
什么是CAP理论
CAP理论用来指导分布式系统设计以保证系统的可用性、数据一致性等。
CConsistency一致性指所有节点在同一时刻的数据是相同的即更新操作执行结束并响应用户完成后所有节点存储的数据会保持相同。AAvailability可用性指系统提供的服务一直处于可用状态对于用户的请求可即时响应。PPartition Tolerance分区容错性指在分布式系统遇到网络分区的情况下仍然可以响应用户的请求。网络分区是指因为网络故障导致网络不连通不同节点分布在不同的子网络中各个子网络内网络正常。
一致性、可用性和分区容错性是分布式系统的三个特征。
CAP理论是指在分布式系统中C、A、P这三个特征不能同时满足只能满足其中两个。
如何平衡C、A和P
在实际场景中网络环境不可能百分百不出故障比如网络拥塞、网卡故障等都会导致网络故障或者不通从而导致节点之间无法通信或者集群中节点被划分成多个分区分区中的节点之间可以通信但是分区之间是不能通信的。
这种由网络故障导致的集群分区情况被称为网络分区。
保证一致性C和可用性ACA
在分布式系统中现有的网络基础设施无法做到始终保持稳定网络分区难以避免牺牲分区容错性P就相当于放弃部分分布式系统因此在分布式系统中是不需要考虑CA模式的。
但是在单点系统或者单机系统中CA需求是可以满足的例如大部分关系型数据库如果部署在单台机器上因为不存在网络通信所以是可以保证CA的。
保证一致性C和分区容错性PCP
如果一个分布式场景需要很强的数据一致性或者该场景可以容忍系统长时间没有响应那么放弃可用性A保留一致性C是比较合适的。
一个保证CP的分布式系统一旦发生网络分区会导致数据无法同步的情况这时需要牺牲系统的可用性降低用户体验直到节点数据达到一致后再提供服务。
一般涉及到金融相关的场景在任何时候都需要保证强一致因此要保证CP。
保证CP的系统包括Redis、HBase、ZooKeeper等。
例如ZooKeeper集群包括Leader节点和Follower节点Leader节点专门负责处理用户的写请求
当用户向节点发送写请求时如果请求的节点是Leader那么直接处理请求。如果请求的节点是Follower那么该节点会将请求转给Leader然后Leader会向所有的Follower发出一个Proposal等超过一半的节点统一后Leader才会提交这次写操作从而保证数据的强一致性。
当ZooKeeper集群中出现网络分区如果其中一个分区的节点数大于集群节点数的一半那么这个分区可以再选出一个Leader仍然对外提供服务但是在选出Leader之前系统是不可用的如果形成的分区中没有一个分区的节点数大于集群节点总数的一半那么系统不能正常对外提供服务必须等待网络恢复后才能正常提供服务。
保证可用性A和分区容错性PAP
如果一个分布式系统需要很高的可用性或者说在网络状况不好的情况下允许数据暂时不一致那么可以牺牲一定的一致性。
这时网络分区出现后各节点之间的数据无法马上同步为了保证高可用分布式系统需要即刻响应用户请求但此时某些节点还没有拿到最新数据只能将本地旧的数据返回给用户从而产生数据不一致的情况。
适合AP的场景有很多例如查询网站、电商中的商品查询等这样的系统用户体验更加重要需要保证系统的可用性。
保证AP的系统包括CoachDB、Eureka、Cassandra、DynamoDB等。
下面是关于CA、CP和AP的详细比较。
CAP和ACID
ACID是数据库事务中常见的理论它和CAP是两回事
ACID中的A是指“原子性”强调事务要么执行成功要么执行失败CAP中的A是指“可用性”表示系统提供的服务一直处于可用状态可以响应用户的请求。ACID中的C是指事务执行前后数据的完整性保持一致或者满足完整性约束CAP中的C强调的是数据一致性集群中各节点之间通过复制技术保证数据在任意时刻都是相同的。