• 分布式事务(四)CAP、BASE理论基础 Diamond


    一、CAP

    CAP是研究分布式的一个比较经典的理论。

    CAP就是Consistency、Availability、Partition Tolerence的简称。
    也就是一致性,可用性,分区容忍性。

    1、一致性

    image

    1.1、一致性分类:

    1、强一致性:就是图中的那种。

    2、弱一致性:节点数据如果同步了,你就能查到,没同步,就查不到,结果具有不确定性。

    3、最终一致性:过一段时间,等节点之间数据同步之后,就可以查到。

    2、可用性

    客户端往分布式系统的各个节点发送请求,都是可以获取到响应的,写入、查询等操作都是成功的。

    2.1、不可用:

    客户端往分布式系统中的各个节点发送请求的时候,获取不到响应结果,那么系统就是不可用了。

    2.2、可用性级别:

    99%,一年中只能有80小时左右是可以允许访问失败的

    99.9%,一年中大概有8小时左右是可以访问失败

    99.99%,一年中有大概不到1小时是可以访问失败的

    99.999%,一年中有大概不到5分钟是可以访问失败的

    99.9999%,一年中只能有大概不到1分钟可以访问失败

    很多行业大部分的系统,其实99%可用性都没到,每年总得故障几次。能做到99.9%的系统就算是比较牛的了,毕竟一年内就几个小时不可用。

    3、分区容忍性

    3.1、分区partition/network partition

    网络分区 => 分布式系统之间的网络环境出了故障,分布式系统的各个节点之间现在已经无法进行通信了。

    遇到网络分区故障,类似于脑裂,然后系统还是可以正常对外提供服务的。

    3.2、不具备分区容忍性

    一旦网络故障,整套系统崩溃,你哪怕给各个节点发送消息,全部失败,整套系统甚至会宕机。

    4、CAP => CP or AP

    一个分布式系统不可能同时兼备一致性、可用性、分区容忍性,要么是CP(一致性 + 分区容忍性),要么就是AP(可用性 + 分区容忍性)。

    基于这套理论,redis、mongodb、hbase等分布式系统,都是参照着CAP理论来设计的,有些系统是CP,有些系统是AP。

    5、保证CP

    1、现在网络发生故障,client向节点A发送一个插入请求,节点A将数据插入。

    2、节点A发现节点B之间网络不通了,无法进行数据同步。

    3、client向节点B查询数据,由于当前节点之间网络不通,直接给client返回:当前系统处于不一致状态,不能查询。

    这样就保证了一致性,不会让client看到不一致的状态,同时不能保证Available。

    6、AP

    同样的场景下,要保证两个节点都要可用的,所以client如果在节点A能够查询这条数据,但是如果请求到了节点B就查不到了。

    6.1、场景:

    电商、12306,这种业务类系统,一般都是AP。

    查询的商品或者火车票库存可能都是旧数据,但是当你买的时候,肯定就是要查询库存,不影响使用。

    二、BASE

    Basicly Available、Soft State、Eventual Consistency,也就是基本可用、软状态、最终一致性。

    1、基本可用:

    • 正常情况下查询,负载均衡到各个节点去查的,多节点抗高并发,如果发生网络故障,可以选择降级。
    • 如果流量太大了,直接返回一个空,让你稍后再来查询。

    2、软状态:

    多个节点都是可用的,但是可能一会能查到,一会就查不到了。

    3、最终一致性:

    一旦故障或者延迟解决了,数据过了一段时间最终一定是可以同步到其他节点的,数据最终一定是可以处于一致性的。

  • 相关阅读:
    每个Java开发人员都应该知道的4个Spring注解
    JVM中的动态语言支持简介
    深入探索Java设计模式(五)之构建器模式
    Java——MVC模式
    程序出了问题,报错只能参考
    查看电脑端口占用情况
    Java——参数传递
    Python——关于定义过程
    Java——super的使用
    关于如何查看论文是否被SCI或者EI收录
  • 原文地址:https://www.cnblogs.com/huigelaile/p/15780343.html
Copyright © 2020-2023  润新知