分布式CAP原理

分布式CAP原理_第1张图片
image.png

CAP原理

任何一个分布式系统,只能满足CAP三个中的两个

CAP分别是什么

Consistency 一致性

一致性

  • "all nodes see the same data at the same time"两个视角

  • 客户端:多并发访问时更新过的数据如何获取;

  • 服务端:如何复制分布到整个系统,保证数据最终一致性三种一致性策略

  • 强一致性:对于关系型数据库,更新过的数据能立即被后续访问看到

  • 弱一致性:能容忍后续部分或全部访问不到

  • 最终一致性:如果经过一段时间后要求能访问到更新后的数据

  • CAP理论说不能同时满足的一致性指的是强一致性

Availability 可用性

  • "Reads and writes always succeed",服务一直可用

  • 每一个可用性的分布式系统,每一个非故障节点必须对每一个请求作出响应。

  • 一般衡量一个系统的可用性通过停机时间来计算。

  • 5个9:可用水平99.999%

Partition Tolerance 分区容错性

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

  • 简单来说,就是在网络中断,消息丢失的情况下,系统依然能够正常工作。

CAP权衡

CA without P

  • 不存在,网络分区是必然的,舍弃P意味着舍弃分布式系统

CP without A

  • 一个分布式系统容许系统停机或者长时间无响应,舍弃A保C

  • 一旦发生网络故障或者消息丢失,牺牲用户体验,等待所有数据全部一致后才可以访问

  • 最典型的,分布式数据库。一致性是最基本最重要的条件

  • 分布式存储系统Redis,HBase,分布式协调组件Zookeeper

AP without C

  • 为了保证高可用,需要在用户访问时可以马上得到返回,每个节点只能用本地数据库提供服务,这样会导致全局数据的不一致性

  • 大多数大型互联网应用,由于主机众多,部署分散,集群规模大,因此节点故障、网络故障是常态,需要保证可用性,牺牲一点强一致性,不会造成严重的用户流失

  • 比如:淘宝的购物,12306的买票。这里牺牲的是强一致性

怎么取舍

  • 没有定论,根据场景定夺,适合的才是最好的。

  • 一般,涉及到钱的必须保证C,网络故障宁可停止服务,保证CA,舍弃P

  • 其他场景普遍做法是选择AP,舍弃强一致性,退而求其次保证最终一致性

你可能感兴趣的:(分布式CAP原理)