dede网站建设教程云盘,公司做网站的费用怎么入账,横沥网站仿做,百度数据网站转载自 分布式的CAP理论 CAP理论概述
2000年7月#xff0c;加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后#xff0c;麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后#xff0c;CAP理论正式成为分布式计算领域的公认定理。 一…转载自 分布式的CAP理论 CAP理论概述
2000年7月加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后CAP理论正式成为分布式计算领域的公认定理。 一个分布式系统最多只能同时满足一致性Consistency、可用性Availability和分区容错性Partition tolerance这三项中的两项。 CAP的定义
Consistency 一致性
一致性指“all nodes see the same data at the same time”即更新操作成功并返回客户端完成后所有节点在同一时间的数据完全一致。分布式的一致性
对于一致性可以分为从客户端和服务端两个不同的视角。从客户端来看一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看则是更新如何复制分布到整个系统以保证数据最终一致。一致性是因为有并发读写才有的问题因此在理解一致性的问题时一定要注意结合考虑并发读写的场景。
从客户端角度多进程并发访问时更新过的数据在不同进程如何获取的不同策略决定了不同的一致性。对于关系型数据库要求更新过的数据能被后续的访问都能看到这是强一致性。如果能容忍后续的部分或者全部访问不到则是弱一致性。如果经过一段时间后要求能访问到更新后的数据则是最终一致性。
Availability 可用性
可用性指“Reads and writes always succeed”即服务一直可用而且是正常响应时间。
对于一个可用性的分布式系统每一个非故障的节点必须对每一个请求作出响应。也就是该系统使用的任何算法必须最终终止。当同时要求分区容忍性时这是一个很强的定义即使是严重的网络错误每个请求必须终止。
好的可用性主要是指系统能够很好的为用户服务不出现用户操作失败或者访问超时等用户体验不好的情况。可用性通常情况下可用性和分布式数据冗余负载均衡等有着很大的关联。
Partition Tolerance分区容错性
分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”即分布式系统在遇到某节点或网络分区故障的时候仍然能够对外提供满足一致性和可用性的服务。
分区容错性和扩展性紧密相关。在分布式应用中可能因为一些分布式的原因导致系统无法正常运转。好的分区容错性要求能够使应用虽然是一个分布式系统而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了其他剩下的机器还能够正常运转满足系统需求或者是机器之间有网络异常将分布式系统分隔未独立的几个部分各个部分还能维持分布式系统的运作这样就具有好的分区容错性。
CAP的证明 如上图是我们证明CAP的基本场景网络中有两个节点N1和N2可以简单的理解N1和N2分别是两台计算机他们之间网络可以连通N1中有一个应用程序A和一个数据库VN2也有一个应用程序B2和一个数据库V。现在A和B是分布式系统的两个部分V是分布式系统的数据存储的两个子数据库。
在满足一致性的时候N1和N2中的数据是一样的V0V0。在满足可用性的时候用户不管是请求N1或者N2都会得到立即响应。在满足分区容错性的情况下N1和N2有任何一方宕机或者网络不通的时候都不会影响N1和N2彼此之间的正常运作。 如上图是分布式系统正常运转的流程用户向N1机器请求数据更新程序A更新数据库Vo为V1分布式系统将数据进行同步操作M将V1同步的N2中V0使得N2中的数据V0也更新为V1N2中的数据再响应N2的请求。
这里可以定义N1和N2的数据库V之间的数据是否一样为一致性外部对N1和N2的请求响应为可用行N1和N2之间的网络环境为分区容错性。这是正常运作的场景也是理想的场景然而现实是残酷的当错误发生的时候一致性和可用性还有分区容错性是否能同时满足还是说要进行取舍呢
作为一个分布式系统它和单机系统的最大区别就在于网络现在假设一种极端情况N1和N2之间的网络断开了我们要支持这种网络异常相当于要满足分区容错性能不能同时满足一致性和响应性呢还是说要对他们进行取舍。 假设在N1和N2之间网络断开的时候有用户向N1发送数据更新请求那N1中的数据V0将被更新为V1由于网络是断开的所以分布式系统同步操作M所以N2中的数据依旧是V0这个时候有用户向N2发送数据读取请求由于数据还没有进行同步应用程序没办法立即给用户返回最新的数据V1怎么办呢有二种选择第一牺牲数据一致性响应旧的数据V0给用户第二牺牲可用性阻塞等待直到网络连接恢复数据更新操作M完成之后再给用户响应最新的数据V1。
这个过程证明了要满足分区容错性的分布式系统只能在一致性和可用性两者中选择其中一个。
CAP权衡
通过CAP理论我们知道无法同时满足一致性、可用性和分区容错性这三个特性那要舍弃哪个呢 CA without P如果不要求P不允许分区则C强一致性和A可用性是可以保证的。但其实分区不是你想不想的问题而是始终会存在因此CA的系统更多的是允许分区后各子系统依然保持CA。 CP without A如果不要求A可用相当于每个请求都需要在Server之间强一致而P分区会导致同步时间无限延长如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。 AP wihtout C要高可用并允许分区则需放弃一致性。一旦分区发生节点之间可能会失去联系为了高可用每个节点只能用本地数据提供服务而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。 对于多数大型互联网应用的场景主机众多、部署分散而且现在的集群规模越来越大所以节点故障、网络故障是常态而且要保证服务可用性达到N个9即保证P和A舍弃C退而求其次保证最终一致性。虽然某些地方会影响客户体验但没达到造成用户流程的严重程度。
对于涉及到钱财这样不能有一丝让步的场景C必须保证。网络发生故障宁可停止服务这是保证CA舍弃P。貌似这几年国内银行业发生了不下10起事故但影响面不大报到也不多广大群众知道的少。还有一种是保证CP舍弃A。例如网络故障事只读不写。
孰优孰略没有定论只能根据场景定夺适合的才是最好的。
参考资料
CAP和BASE理论 CAP原理的证明
拓展阅读
关于分布式一致性的探究
关于分布式事务、两阶段提交协议、三阶提交协议
深入理解分布式系统的2PC和3PC