Files
rikako-note/mysql/mysql集群/CAP Theorem in DBMS.md
2025-10-22 11:01:54 +08:00

80 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- [CAP Theorem in DBMS](#cap-theorem-in-dbms)
- [What is the CAP Theorem](#what-is-the-cap-theorem)
- [Consistency](#consistency)
- [Availability](#availability)
- [Partition Tolerance](#partition-tolerance)
- [The Trade-Offs in the CAP Theorem](#the-trade-offs-in-the-cap-theorem)
- [CAConsistency and Availability](#caconsistency-and-availability)
- [AP(Availability and Partition Tolerance)](#apavailability-and-partition-tolerance)
- [CP(Consistency and Partition Tolerance)](#cpconsistency-and-partition-tolerance)
# CAP Theorem in DBMS
在网络共享数据系统设计中固有的权衡令构建一个可靠且高效的系统十分困难。CAP理论是理解分布式系统中这些权衡的核心基础。CAP理论强调了系统设计者在处理distributed data replication时的局限性。CAP理论指出在分布式系统中只能同时满足`一致性、可用性、分区容错`这三个特性中的两种。
> CAP理论中对分布式系统提出了如下三个特性
> - consistency(一致性)
> - availability可用性
> - partition tolerance分区容错
由于该底层限制,开发者必须根据其应用的需要谨慎的平衡这些属性。设计者必须决定优先考虑哪些特性,从而获取最佳的性能和系统可靠性。
## What is the CAP Theorem
CAP理论是分布式系统的基础概念其指出分布式系统中所有的三个特性无法被同时满足。
### Consistency
`Consistency`代表network中所有的节点都包含相同的replicated data拷贝而这些数据对不同事务可见。其保证分布式居群中所有节点返回相同、最新的数据。其代表所有client对数据的视角都相同。存在许多不同类型的一致性模型而CAP中的一致性代指的是顺序一致性是一种非常强的一致性形式。
`ACID``CAP`中都包含一致性,但是这两种一致性所有不同:
-`ACID`中,其代表事务不能破坏数据库的完整性约束
-`CAP`中,其代表分布式系统中相同数据项在不同副本中的一致性
### Availability
Availability代表每个对数据项的read/write request要么能被成功处理要么能收到一个操作无法被完成的响应。每个non-failing节点都会为所有读写请求在合理的时间范围内生成响应。
其中“每个节点”代表即使发生network partition节点只要不处于failing状态无论位于network partition的哪一侧都应该能在合理的时间范围内返回响应。
### Partition Tolerance
partition tolerance代表在连接节点的网络发生错误、造成两个或多个分区时系统仍然能够继续进行操作。通常在出现network partition时每个partition中的节点只能彼此互相沟通跨分区的节点通信被阻断。
这意味着即使发生network partition系统仍然能持续运行并保证其一致性。network partition是不可避免地在网络分区恢复正常后拥有partition tolerance的分布式系统能够优雅的从分区状态中恢复。
CAP理论指出分布式数据库最多只能兼顾如下三个特性中的两种consistency, availability, partition tolerance。
<img src="https://media.geeksforgeeks.org/wp-content/uploads/20240808172250/venndiagram.png" alt="CAP - venndiagram" width="390" height="321" srcset="https://media.geeksforgeeks.org/wp-content/uploads/20240808172250/venndiagram.png 390w,https://media.geeksforgeeks.org/wp-content/uploads/20240808172250/venndiagram-100.png 100w,https://media.geeksforgeeks.org/wp-content/uploads/20240808172250/venndiagram-200.png 200w,https://media.geeksforgeeks.org/wp-content/uploads/20240808172250/venndiagram-300.png 300w" loading="lazy">
## The Trade-Offs in the CAP Theorem
CAP理论表明分布式系统中只能同时满足三种特性中的两种。
### CAConsistency and Availability
> 对于CA类型的系统其总是可以接收来源于用户的查询和修改数据请求并且分布式网络中所有database nodes都会返回相同的响应
然而该种类似的分布式系统在现实世界中不可能存在因为在network failure发生时仅有如下两种选项
- 发送network failure发生前复制的old data
- 不允许用户访问old data
如果我们选择第一个选项那么系统将满足Availibility如果选择第二个选项系统则是Consistent。
`在分布式系统中consistency和availability的组合是不可能的`。为了实现`CA`,系统必须是单体架构,当用户更新系统状态时,所有其他用户都能访问到该更新,这将代表系统满足一致性;而在单体架构中,所有用户都连接到一个节点上,这代表其是可用的。`CA`系统通常不被青睐因为实现分布式计算必须牺牲consistency或availability中的一种并将剩余的和partition tolerance组合`CP/AP`系统。
> CAP中的AAvailability只是要求非failing状态下的节点能够在合理的时间范围内返回响应故而单体架构可以满足`Availability`。
>
> 即使单体架构可能因单点故障导致系统不可用,不满足`Reliable`(可靠性),并不影响其满足`Availability`(可用性)。
<img src="https://media.geeksforgeeks.org/wp-content/uploads/20240813184051/cap.png" alt="CA (Consistency and Availability)" width="631" height="579" srcset="https://media.geeksforgeeks.org/wp-content/uploads/20240813184051/cap.png 631w,https://media.geeksforgeeks.org/wp-content/uploads/20240813184051/cap-100.png 100w,https://media.geeksforgeeks.org/wp-content/uploads/20240813184051/cap-200.png 200w,https://media.geeksforgeeks.org/wp-content/uploads/20240813184051/cap-300.png 300w" loading="lazy">
### AP(Availability and Partition Tolerance)
> 这种类型的系统本质上是分布式的确保即使在network partition场景下用户发送的针对database nodes中数据的查看和修改请求不会被丢失
该系统优先考虑了Availability而非Consistency并且可能会返回过期的数据。一些技术failure可能会导致partition故而过期数据则是代表partition产生前被同步的数据。
AP系统通常在构建社交媒体网站如Facebook和在线内容网站如YouTube时使用其并不要求一致性。对于使用AP系统的场景相比于不一致不可用会造成更大的问题。
AP系统是分布式的可以分布于多个节点即使在network partition发生的前提下也能够可靠运行。
### CP(Consistency and Partition Tolerance)
> 该类系统本质上是分布式的确保由用户发起的针对database nodes中数据进行查看或修改的请求在存在network partition的场景下会直接被丢弃而不是返回不一致的数据
`CP`系统优先考虑了Consistency而非Availability如果发生network partition其不允许用户从replica读取`在network partition发生前同步的数据`。对于部分应用程序来说,相比于可用性,其更强调数据的一致性,例如股票交易系统、订票系统、银行系统等)
例如在订票系统中还剩余一个可订购座位。在该CP系统中将会创建数据库的副本并且将副本发送给系统中其他的节点。此时如果发生网络问题那么连接到partitioned node的用户将会从replica获取数据。此时其他连接到unpartitioned部分的用户则可以对剩余的作为进行预定。这样在连接到partitioned node的用户视角中仍然存在一个seat其将导致数据不一致。
在上述场景下CP系统通常会令其系统对`连接到partitioned node的用户`不可用。