Skip to content

Commit

Permalink
feat: chapter 26
Browse files Browse the repository at this point in the history
  • Loading branch information
honkinglin committed Mar 5, 2025
1 parent 501e8e0 commit 4b50320
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 4 deletions.
2 changes: 1 addition & 1 deletion docs/.vitepress/config.mts
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ export default defineConfig({
{ "text": "代理", "link": "/grokking/chapter-23" },
{ "text": "冗余与复制", "link": "/grokking/chapter-24" },
{ "text": "SQL 与 NoSQL", "link": "/grokking/chapter-25" },
// { "text": "CAP 定理", "link": "/grokking/chapter-26" },
{ "text": "CAP 定理", "link": "/grokking/chapter-26" },
// { "text": "一致性哈希", "link": "/grokking/chapter-27" },
// { "text": "长轮询 vs WebSockets vs 服务器发送事件", "link": "/grokking/chapter-28" }
]
Expand Down
2 changes: 1 addition & 1 deletion docs/grokking/chapter-17.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# 参考资料
# 其他资源

以下是一些有用的链接,可供进一步阅读:

Expand Down
3 changes: 1 addition & 2 deletions docs/grokking/chapter-25.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SQL vs. NoSQL
# SQL NoSQL
在数据库领域,主要有两种解决方案:SQL 和 NoSQL(即关系型数据库和非关系型数据库)。二者在构建方式、存储的信息类型以及存储方法上存在差异。

关系型数据库是结构化的,并具有预定义的模式(Schema),类似于存储电话号码和地址的电话簿。非关系型数据库则是非结构化的、分布式的,并且模式是动态的,类似于文件夹,可以存储从个人地址和电话号码到 Facebook “点赞”和在线购物偏好等各种数据。
Expand Down Expand Up @@ -62,4 +62,3 @@ NoSQL 主要分为以下几种类型:

3. **快速迭代开发**
NoSQL 非常适合**快速开发**,因为它不需要预先设计数据库模式。如果你的系统需要**频繁更新数据结构**,并且版本之间不希望有较长的停机时间,SQL 可能会成为开发瓶颈,而 NoSQL 则能让开发更加敏捷。

13 changes: 13 additions & 0 deletions docs/grokking/chapter-26.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# CAP 定理

CAP 定理指出,分布式软件系统不可能同时满足以下三个特性中的超过两个(CAP):一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。在设计分布式系统时,权衡 CAP 是我们首先需要考虑的问题。CAP 定理表明,在设计分布式系统时,我们只能在以下三个选项中选择其中两个:

- **一致性(Consistency)**:所有节点在同一时间看到相同的数据。一致性通过在允许进一步读取之前更新多个节点来实现。
- **可用性(Availability)**:每个请求都会收到成功或失败的响应。可用性通过在不同服务器之间复制数据来实现。
- **分区容忍性(Partition Tolerance)**:即使发生消息丢失或部分故障,系统仍能继续运行。具备分区容忍性的系统可以承受任何不会导致整个网络失效的网络故障。数据在多个节点和网络组合中得到充分复制,以确保系统能够在间歇性故障期间保持正常运行。

![图26-1](/grokking/f26-1.png)

我们无法构建一个既持续可用、又满足顺序一致性,并且能够容忍任何分区故障的通用数据存储系统。我们只能构建一个在这三者中任选其二的系统。

这是因为,为了保证一致性,所有节点必须以相同的顺序看到相同的更新。但如果网络发生分区,某个分区中的更新可能无法及时传播到其他分区,而客户端可能会在读取最新数据后,又从过时的分区读取数据。应对这种情况的唯一办法是停止来自过时分区的请求服务,但这样一来,系统就不再是 100% 可用了。

0 comments on commit 4b50320

Please sign in to comment.