写点什么

CAP 原理简述

用户头像
刘志刚
关注
发布于: 2020 年 07 月 13 日
CAP原理简述



CAP分别代指什么?

C: 一致性 对于任何从客户端发达到分布式系统的数据读取请求,要么读到最新的数据要么失败。换句话说,一致性是站在分布式系统的角度,对访问本系统的客户端的一种承诺:要么我给您返回一个错误,要么我给你返回绝对一致的最新数据,不难看出,其强调的是数据正确

A: 可用性 对于任何求从客户端发达到分布式系统的数据读取请求,都一定会收到数据,不会收到错误,但不保证客户端收到的数据一定是最新的数据。换句话说,可用性是站在分布式系统的角度,对访问本系统的客户的另一种承诺:我一定会给您返回数据,不会给你返回错误,但不保证数据最新,强调的是不出错



P:分区容错性 分区容忍性是站在分布式系统的角度,对访问本系统的客户端的再一种承诺:我会一直运行,不管我的内部出现何种数据同步问题,强调的是不挂掉



CAP 原则表明,这三个要素最多只能同时实现两点,不可能三者兼顾。



基本原理:

对于一个分布式系统而言,P是前提,必须保证,因为只要有网络交互就一定会有延迟和数据丢失,这种状况我们必须接受,必须保证系统不能挂掉。试想一下,如果稍微出现点数据丢包,我们的整个系统就挂掉的话,我们为什么还要做分布式呢?所以,按照CAP理论三者中最多只能同时保证两者的论断,对于任何分布式系统,设计时架构师能够选择的只有C或者A,要么保证数据一致性(保证数据绝对正确),要么保证可用性(保证系统不出错)。



互联网常见架构中如何满足CAP:

Redis ap 牺牲了几秒钟写

zk cp 为了选主,牺牲了一部分a

eurak ap 为了保证可用性,牺牲了一部分一致性

nacos ap/cp 可选

基于以上我们的思考:



  1. 实际场景中其实P是一定会成立的,因为所有的分布式系统都会考虑到单点故障对整体的影响。

  2. 分布式系统中C一致性和A可用性是不可能同时达到的,C和A是矛盾的。除非是单体应用才有可能符合CA模型,但是单体应用就没有CAP之说了

  • 满足了一致性必然会导致可用性不满足,因为未同步的节点读写都需要暂时锁定才能达到一致性的要求

  • 满足了可用性必然需要牺牲一致性,比如使用redis的场景,用户延迟几秒获得最新数据其实也没有多大影响,使用redis的场景其实就是AP模型

  1. 所以实际场景中只有CP、AP两种模型,也就是C和A之间的权衡



发布于: 2020 年 07 月 13 日阅读数: 66
用户头像

刘志刚

关注

还未添加个人签名 2018.04.25 加入

还未添加个人简介

评论

发布
暂无评论
CAP原理简述