• CAP理论学习


    转自:https://zhuanlan.zhihu.com/p/33999708

    1.概述

    一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

    1.1 Consistency 一致性

    一致性指“all nodes see the same data at the same time”,即所有节点在同一时间的数据完全一致。并发读写多个数据拷贝的场景。

    从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何分布到整个系统,以保证数据最终一致。

    分为强/弱/最终一致性三类:

    • 强一致性:对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。【要求每次都读到最新的数据】
    • 弱一致性:如果能容忍后续的部分或者全部访问不到,则是弱一致性。
    • 最终一致性:如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。【允许一段时间内读取到的不一致】

    1.2 Availability 可用性

    指“Reads and writes always succeed”,即服务在正常响应时间内一直可用。

    好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

    通常和分布式数据库冗余、负载均衡有关系。

    1.3 Partition Tolerance分区容错性

    分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。

    2.权衡

    • AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。
    • CP without A:如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。对于涉及到钱财这样不能有一丝让步的场景,C必须保证。
  • 相关阅读:
    pytest-multithreading实现并发运行(可以指定不参与并发的case)
    python 命令行传参方式结合jenkins构建时选择环境
    pytest结合ReportPortal使用
    loguru日志
    httprunner3 log放到allure中显示
    pytest
    python
    Mac下安装docker
    USC提出拟牛顿法深度学习优化器Apollo,效果比肩SGD和Adam
    28例电气自动控制电路图,快收藏!
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/16539240.html
Copyright © 2020-2023  润新知