• 分布式应用:从CAP理论到PACELC理论


    在这里插入图片描述

    1、CAP理论简介

    CAP是分布式应用的基础理论,讨论的是分布式如何满足一致性、可用性、网络分区的问题。
    C(Consistency):一致性,要求所有节点同一时刻保持数据一致。
    A(Availability):可用性,要求应用在某些节点发生异常时,应用本身是可用的。
    P(Partition Tolerance):网络分区容错,分布式应用会有多个节点,节点之间需要进行网络通信,有可能发生网络中断或超时。

    2、CAP可以三选二?

    CAP理论最大的误解就是三个因素是同等地位的,其实不然,分布式系统下,P(网络分区)是必然的,所以只能在AP之间权衡,所以,实际应用中,大多是支持CP或AP。CP追求一致性,牺牲了可用性,如zk。AP追求可用性,牺牲了一致性,比如主从复制。
    为什么P是必选的?因为要保证高可用性必然会进行冗余,单机应用也谈不上A和P,冗余就会带来分区的问题,所以P是必然存在的,不能通过牺牲A或C换取P。

    3、强一致性存在吗?

    3.1节点通信需要时间

    我们常说的CP是追求强一致性,可是强一致性真的存在吗?只要有P(网络分区)就会有节点之间的通信,假设节点之间通信正常,那么通信就需要时间。虽然计算机世界处理速度都是毫秒或微秒或纳秒级的,但处理再快这个时间也是个非0数字。

    3.2唯一不变的是变化

    信息世界一直在变化,即便此刻通信正常,下一刻就可能发生变化。比如消费者从CP注册中心获取到服务提供者可用列表,经过负载选出来一个地址发起调用。这时依然存在这个地址对应的节点已经挂掉的可能。所以,此刻看到的信息可能是下一刻过时的信息。

    4、PACELC理论

    根据上面的讨论,其实完全的强一致性是不存在的,也就是节点之间同步会存在延迟,所以有了PACELC理论。PAC还是上述的CAP,E是else,L是latency延迟,C还是Consistency。简单理解就是当发生网络分区异常时,需要在A和C之间做权衡,当没有出现网络分区异常时,需要在L和C之间做权衡。
    在这里插入图片描述

    5、典型案例

    5.1 mysql主从复制

    mysql主从复制带来了高可用,但即使在网络通信正常的情况下,主从同步还是存在延迟,所以此时就需要权衡是否可以接受延迟,如果不接受可以直接去读主库。当然,主从同步发生异常时,并不影响从库数据的读取,即从库是可用的。
    5.2 zk分布式锁

    使用zk的临时节点可以实现分布式锁,zk和客户端通过heartbeat保持live连接,如连接失效,则自动删除临时节点从而释放锁。但是这个连接保持就存在很多情况,如果因为网络超时或应用假死,那么就会存在两个进程获取到锁,导致分布式锁失效,redis分布式锁也存在类似的问题,所以使用分布式锁一定要小心。

    小记:

    在构建分布式应用时应该全局着眼,细节着手。通常在满足AP的条件下,根据实际情况做好C的把控,才能构建出鲁棒的应用。

  • 相关阅读:
    容器环境下php进程与bash进程树关系
    【TypeScript】模块化和类型声明规则
    shell脚本安装apache服务
    c++怎么传递函数
    微信小程序导航退回及跳转 传参(navigateBack,navigateTo)
    Monaco Editor编辑器
    Java并发编程第8讲——ThreadLocal详解
    文件名怎样批量加编号?
    DTC 2024,Databend 数据汇聚平台的建设与挑战
    lv5 嵌入式开发-11 消息队列
  • 原文地址:https://blog.csdn.net/weixin_43275277/article/details/127860052