Gahing's blog Gahing's blog
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Gahing / francecil

To be best
首页
知识体系
  • 前端基础
  • 应用框架
  • 工程能力
  • 应用基础
  • 专业领域
  • 业务场景
  • 前端晋升 (opens new window)
  • Git
  • 网络基础
  • 算法
  • 数据结构
  • 编程范式
  • 编解码
  • Linux
  • AIGC
  • 其他领域

    • 客户端
    • 服务端
    • 产品设计
软素质
  • 面试经验
  • 人生总结
  • 个人简历
  • 知识卡片
  • 灵感记录
  • 实用技巧
  • 知识科普
  • 友情链接
  • 美食推荐 (opens new window)
  • 收藏夹

    • 优质前端信息源 (opens new window)
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 中间件

  • 云原生

  • 分布式

    • CAP原则
      • 拓展阅读
    • 一致性协议
    • 分布式事务
    • 分布式理论
  • 存储技术

  • 数据库

  • 服务部署

  • 编程语言

  • 计算技术

  • 服务端
  • 分布式
gahing
2023-07-12
目录

CAP原则卡片

CAP 理论 (opens new window)指出在分布式系统中,不可能同时满足以下三点:一致性(Consistency) 、可用性(Avaliability) 、分区容错性(Partition tolerance)。

Alt text

要理解 CAP ,首先要知道节点和分区的概念:

在分布式系统中,每个服务称之为节点,用于存放数据或处理数据,节点间的通信形成一个节点网络。 节点网络本应互通,但因为一些故障(网络或机器原因),导致某些节点无法连通,网络将被分割为几块区域。数据散落在这些不连通的区域,形成分区。

Alt text

如果数据仅在一个节点中保存,那么出现分区后,和这个节点不连通的其他分区将无法访问此节点数据,此时分区是不可容忍的。 但若把数据复制到多个节点,保证每个分区都有这个数据,那么此时分区就是容错的。

Alt text

但是,将数据复制到多个节点将带来一致性的问题。比如 A1 修改了 B1 的数据,此时 A2 读取 B2 数据时会出现不一致。要保证数据一致性,需要每次写操作的时候保证所有节点写入成功,在此之前的读操作需要等待。

但这又会引入可用性的问题,等待时长越长,可用性越低 ( CP 系统) 。要想实现可用性,就不能等待,直接获取节点数据,但这就丧失了一致性( AP 系统) 。

如果既想可用性,又想一致性,那就保证节点仅存在一个分区,退化为单机系统,但这就丧失了分区容错性 (AC 系统) 。

因此,重新给 CAP 的每一项做下定义:

  • 一致性(Consistency) :每次请求都能拿到同一份最新的数据,同时为了一致性允许请求失败。
  • 可用性(Avaliability):每次请求都能得到应答,但是不保证获取的数据为最新数据。
  • 分区容错性(Partition tolerance):通过复制节点数据到各个分区,避免故障导致节点数据无法访问。

一句话总结:数据存在的节点越多,分区容错性越高。但数据更新时要变更的节点也越多,一致性就很难保证。为了保证一致性,等待所有节点更新完成的时间就越长,可用性就越差。

# 拓展阅读

  • CAP理论中的P到底是个什么意思? - 邬江的回答 - 知乎 (opens new window)
  • CAP理论中的P到底是个什么意思? - 四猿外的回答 - 知乎 (opens new window)
  • 谈谈分布式系统的CAP理论 - 知乎 (opens new window)
  • wiki (opens new window)
编辑 (opens new window)
#方法论
上次更新: 2024/09/01, 23:56:56
serverless
一致性协议

← serverless 一致性协议→

最近更新
01
浅谈代码质量与量化指标
08-27
02
快速理解 JS 装饰器
08-26
03
Vue 项目中的 data-v-xxx 是怎么生成的
09-19
更多文章>
Theme by Vdoing | Copyright © 2016-2024 Gahing | 闽ICP备19024221号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式