我是靠谱客的博主 谨慎苗条,最近开发中收集的这篇文章主要介绍CAP原则“大总结“及单机集群redis的所属,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本来觉得CAP原则挺简单的,但一搜网上一大堆,翻译的版本不一,对概念的解析也各不相同。甚至有种越看越蒙的感觉…

因此分享下CAP原则的理解,主要指出了很多版本说法存在的问题

当然,这是个人理解,如果有错。欢迎各位指出。


CAP原则

  • 一致性Consistency : 访问所有节点,得到结果一致。(特别是更新操作完成后)

这里不采用"同一时刻"的说法,因为数据同步是需要时间的。关键是访问得到的数据一致

  • 可用性Availability :

    客户端访问集群中任意一个节点,系统能在有限的时间内给出非错响应

    这里有两种处理方案都是违反A的:

    1. 阻塞客户端直至超时
    2. 返回出错响应,提示其重试

    "得到"处理成功"的结果" 的说法也是一个意思,不过这个描述很容易让人误解为 “结果是对的”,所以也不采用。

  • 分区容错性 Partition tolerance

    (有容错性、容忍性两种翻译,选择原因见下)

    部分节点故障,无法与其他节点通信,产生了网络分区。但系统仍能提供正常服务,除非整个网络都发生故障。

    常见故障:结点宕机、网络波动、Gc stop World,

    但因为只能根据time out判断,很难区分是哪种。

    这也是选择了容错性的原因:

    因为容忍性没有考虑到宕机的情况。

    正常服务:指提供满足**设计好的一致性和可用性**的服务。

    即系统原本是CP的,就仍然满足CP,AP同理。

    而不是某些翻译的:

    仍然能够保证对外提供满足一致性和可用性的服务,因为这本就是违反CAP三选二的。


    分界线,上面的内容基本没问题,下面的内容含个人理解比较多,可能有误。


    划重点:

    这里有一个容易混淆的点,就是高可用性(HA)不是由 A,而是由P来保证的

    用下面要说的CA的单机应用为例,对CA的解释是:

    单个副本,自然没有一致性的问题。

    可用性方面,既然不需要同步到其他节点,自然也可以保证。

    A如定义,只要保证有限时间内回复即可,而宕机的处理是不考虑在内的

    不要忘本了:单机应用,本就是不满足HA的,这也是为什么采用分布式系统的原因之一

    这里推荐阅读:为什么CAP理论在舍弃P的情况下,可以有完美的CA?


    最多同时满足两个特性,而分布式必须满足P

  • CA : 非分布式系统单个结点,可拓展性差。 eg : 传统数据库,oracle

  • CP : 允许访问失效,因为系统等待期间不可用

    可以返回一个出错信息给用户,提醒重试;或者什么也不返回,直到客户端超时。

    等到故障分区恢复,同步完成,才恢复服务。

    而维持C的是需要同步时间的,而且分区容错性的恢复时间不定,这种可能导致无限阻塞。

  • AP : 对一致性要求不高,但仍需保证最终一致性

    eg :redis分布式集群,(大多数网站采用,因为可用性很影响用户体验)


关于redis的问题:

首先,集群redis肯定是不满足C的,毕竟主从复制时需要时间的,有疑问的可以看参考,redis中集群一致性问题。

但是对于单机redis属于哪种呢?

网上有资料说 Redis、Mongodb 属于CP。同时也在另一份资料中看到资料,更确定了是指单机Redis。(Mongodb笔者不熟悉不发表观点)。但按笔者的理解,应该是属于CA的,毕竟单机,又何谈P呢?


最后举个例子帮助理解:

eg :这里写图片描述

  • CP: 让Client A 的两个写操作同时失效,此时无法保证写操作的可用性
  • AP:让对Server 1 的写操作生效,此时Client B、C读取数据不同

本文完。

推荐阅读:CAP理论中的P到底是个什么意思?

最后

以上就是谨慎苗条为你收集整理的CAP原则“大总结“及单机集群redis的所属的全部内容,希望文章能够帮你解决CAP原则“大总结“及单机集群redis的所属所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部