zoukankan      html  css  js  c++  java
  • CAP原理

    微服务应用属于分布式系统的一种落地实践,而分布式系统的最大难题是处理各个节点之间数据状态的一致性,CAP原理就是描述分布式系统下节点数据同步的基本定理

    CAP定理分别指Consistency(一致性)Availability(可用性)Partion toterance(分区容忍性)这三种特性通常情况下不能同时满足。

    (1)数据一致性

    系统的数据信息(包括备份数据)在同一时刻都是一致的,在分布式系统中,同一份数据可能存在多个不同的实例中,在数据强一致性的要求下,对其中一份数据的修改,必须同步到它的所有备份中去,在数据同步的任何时候,都需要保证所有对该份数据的请求将返回同样的状态。

    (2)服务可用性

    服务在接收到客户端请求后,都能够给出响应。服务可用性考量的是系统的可用性,要求服务在高可用和部分节点宕机的情况下,系统整体依然能够响应客户端的请求。

    (3)分区容忍性

    在分布式系统中,不同节点之间通过网络进行通信,基于网络的不可靠性,位于不同网络分区的服务节点都可能会通讯失败,如果系统能够容忍这种情况,说明它是满足分区容忍性的,如果系统不能够满足分区容忍性,那将会限制分布式系统的扩展性,即服务节点的部署数量和地区将受限,违背了分布式系统的设计初衷,一般来讲分布式系统都会满足。

    解释下为什么不能同时满足三个条件?

    假设服务A现在有两个实例A1和A2,他们之间的网络通信出现异常,基于分区容忍性,并不会影响A1和A2独立的正常运行,若此时客户端请求A1,
    请求将数据B从B1状态修改为B2,由于网络的不可用,数据B的修改并不能通知到A2实例,
    如果此时另一个客户端向A2请求数据B,如果A2返回数据B1,将满足服务的可用性,但并不能满足数据一致性;
    如果A2需要A1的通知之后才能返回数据B的正确状态,虽然满足了数据一致性,但无法响应客户端二点请求,违背了服务可用性的指标。
    

    基于分布式系统的基本特质,分区容忍性是必须要满足的,接下来,需要考虑满足数据一致性还是服务可用性,这要取决于具体的应用场景,在类似银行对数据要求强的系统中,要优先考虑满足数据一致性;而类似大众网页的系统中,用户对网页版本的新旧不会有特别的要求,在这种情况下服务可用性高于数据一致性。

  • 相关阅读:
    一分钟明确 VS manifest 原理
    关于“鸡脚神”的看法
    Android中Context具体解释 ---- 你所不知道的Context
    解决android3.0版本号以上应用接收不到开机广播问题
    什么是流利语法Fluent Syntax
    vi 命令 使用方法
    TinyXml高速入门(一)
    reactor设计模式
    ActivityGroup+LinearLayout实现iphone风格的底部tab菜单
    使用ActivityGroup来切换Activity和Layout
  • 原文地址:https://www.cnblogs.com/lvpengbo/p/14530862.html
Copyright © 2011-2022 走看看