当我试图理解CAP中的"可用性"(A)和"分区容差"(P)时,我发现很难理解各种文章中的解释.

我有一种感觉,A和P可以在一起(我知道不是这样的,这就是为什么我不能理解!)

简单地解释一下,A和P是什么,以及它们之间的区别?

推荐答案

一致性意味着整个群集中的数据是相同的,因此您可以从/向任何 node 读取或写入数据,并获得相同的数据.

可用性意味着即使群集中的一个 node 出现故障,也能够访问群集.

分区容错意味着,即使两个 node 之间存在"分区"(通信中断)(两个 node 都已启动,但无法通信),群集仍可继续运行.

为了同时获得可用性和分区容错,您必须放弃一致性.考虑一下,如果在主-主设置中有两个 node X和Y.现在,X和Y之间的网络通信中断,因此它们无法同步更新.此时,您可以执行以下任一操作:

a)允许 node 不同步(放弃一致性),或者

b)认为集群"停机"(放弃可用性)

所有可用的组合包括:

  • CA-只要所有 node 都在线,所有 node 之间的数据都是一致的,您可以从任何 node 读/写数据,并确保数据是相同的,但如果在 node 之间开发分区,数据将不同步(并且在分区解析后不会重新同步).
  • CP-数据在所有 node 之间保持一致,并通过在 node 关闭时变得不可用来保持分区容错(防止数据不同步).
  • AP个 node 保持在线,即使它们无法相互通信,并将在分区解析后重新同步数据,但不能保证所有 node 都有相同的数据(无论是在分区期间还是之后)

您应该注意CA systems don't practically exist(即使有些系统声称是这样).

Database相关问答推荐

在GO中减少LevelDB数据库大小的问题(Levigo)

prisma 中的隐式或显式多对多关系

Django Save 方法在try 向表中添加新记录时出错

什么时候需要手动重新分析 PostgreSQL 中的表?

如何高效地存储 100 万个单词并通过starts_with、contains 或ends_with 进行查询?

如何将表字段的默认值设置为 0.00?

sql server:在必要时在外键上创建索引

在 phpmyadmin 中导入时如何跳过重复记录

将 `tsv` 文件插入 postgresql 数据库

使用 PHPUnit 进行数据库测试的最佳实践

将图像文件存储在 Mongo 数据库中,这是个好主意吗?

如何使用 MySQL Workbench 更改字段的值?

判断Android中的应用程序数据库中是否存在列

不带 WHERE 子句的 UPDATE 查询

如何在 liquibase 中标记变更集以进行回滚

获取数据库路径

从原始物理文件中恢复 postgreSQL 数据库

在一个查询中使用 group by 计算多列

如何判断我的 heroku 数据库的记录?

不同类型的SQL之间的区别?