暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CAP

老码农空杯修行记 2020-08-04
304

CAP 能帮助我们做什么?


  • 分析场景

  • 触达本质

  • 合理选型

  • 解决问题


CAP 是什么?


  • C (Consistency):一致性,访问任意节点得到的数据都是一致的
  • A (Availability):可用性,保证能响应用户
  • P (Partition Torlerance):跨网络分区容忍性,是否容忍网络的故障或异常


CAP 能同时满足吗?

        


  • 不能


CAP 为何不能同时满足?



假设按照图中这个架构分析,读写做了分离,写主库读从库,分析:

  • 主库和从库垮网络,所以跨网络分区容忍性必须满足 
  • 客户端1mysql-M,为满足一致性C要求,mysql-S1mysql-S2同步mysql-M的数据期间不能给客户端2提供服务,否则客户端2会读到不一致的数据,只有同步完,然后提供服务,客户端2才能读到一致性的数据,但是为了满足一致性C的要求,同步期间不提供服务服务不可用导致可用性A不满足,此时AC不能共存
  • 客户端1mysql-M,为了不影响给客户端2提供服务,同步期间不能停止mysql-S1mysql-S2的服务,此时满足了可用性A的要求,但是客户端读到的数据可能不一致,读mysql-S1一个结果,读mysql-S2一个结果,此时一致性C的要求不满足,此时AC又不能共存

  • 若图中架构要想满足AC,就不能垮网络,此时不能满足P

CAP 如何运用?
互联网架构中网络跨区是不可避免的,所以分析CAP时,默认满足P的要求,然后根据业务场景在C(一致性) 和 A(可用性)之间折中,比如金融行业,必须强一致性,所以C必须满足,采用CP模型,然后具体方案选型。而对于社交等应用不必强一致性,最终一致即可,此时采用AP模型,满足用户使用是第一要求。


文章转载自老码农空杯修行记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论