78 lines
1.5 KiB
Markdown
Executable File
78 lines
1.5 KiB
Markdown
Executable File
# CAP 定理
|
||
|
||
> Brewer's Theorem — 分布式计算系统的基本原则
|
||
|
||
---
|
||
|
||
## 定理内容
|
||
|
||
一个分布式系统**不可能同时满足**以下三点:
|
||
|
||
| 特性 | 说明 |
|
||
|------|------|
|
||
| **一致性 (Consistency)** | 所有节点在同一时间具有相同的数据 |
|
||
| **可用性 (Availability)** | 保证每个请求都有响应(成功或失败) |
|
||
| **分区容忍 (Partition Tolerance)** | 系统中任意信息丢失或失败不影响系统继续运行 |
|
||
|
||
---
|
||
|
||
## CAP 三角
|
||
|
||
```
|
||
C
|
||
/\
|
||
/ \
|
||
/ \
|
||
/ P \
|
||
/________\
|
||
A
|
||
```
|
||
|
||
**核心**:分布式系统最多只能同时满足 **两个** 特性。
|
||
|
||
---
|
||
|
||
## 三类系统
|
||
|
||
### CA — 一致性 + 可用性
|
||
|
||
- 单点集群
|
||
- 不具备分区容错能力
|
||
- 例子:传统 RDBMS(MySQL、PostgreSQL)
|
||
|
||
### CP — 一致性 + 分区容忍
|
||
|
||
- 牺牲可用性
|
||
- 网络分区时可能不可用
|
||
- 例子:MongoDB、HBase、Redis
|
||
|
||
### AP — 可用性 + 分区容忍
|
||
|
||
- 牺牲一致性
|
||
- 分区期间保持可用,数据可能不一致
|
||
- 例子:Cassandra、DynamoDB
|
||
|
||
---
|
||
|
||
## 选择指南
|
||
|
||
| 场景 | 选择 |
|
||
|------|------|
|
||
| 金融交易、银行系统 | CP(强一致性) |
|
||
| 社交媒体、新闻 Feed | AP(高可用) |
|
||
| 需要强一致的传统业务 | MySQL/PostgreSQL |
|
||
|
||
---
|
||
|
||
## NoSQL 数据库分类
|
||
|
||
| 类型 | 数据库 |
|
||
|------|--------|
|
||
| **CA** | 传统关系型数据库 |
|
||
| **CP** | MongoDB、HBase、Redis |
|
||
| **AP** | Cassandra、DynamoDB、CouchDB |
|
||
|
||
---
|
||
|
||
> 参考:[NoSQL 简介 - 菜鸟教程](http://www.runoob.com/mongodb/nosql.html)
|