Merge pull request #1454 from CyC2018/add-diagrams

为系统设计笔记补充配图
This commit is contained in:
CyC2018
2026-10-25 19:24:03 +08:00
committed by GitHub
7 changed files with 10 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

+4
View File
@@ -89,6 +89,8 @@ Redis 8.4 新增了 `DELEX lock_key IFEQ unique_value` 指令,可以直接原
RedLock 依赖各个节点的时钟基本同步,并且无法应对进程暂停(例如 GC)导致锁过期后客户端仍然认为自己持有锁的情况,因此存在争议。更可靠的做法是让锁服务每次加锁时返回一个单调递增的栅栏令牌(Fencing Token),客户端访问资源时带上令牌,资源拒绝令牌比已处理过的更小的请求。
<div align="center"> <img src="pics/fencing-token.png" width="560px"/> </div><br>
### Zookeeper 的有序节点
#### 1. Zookeeper 抽象模型
@@ -332,6 +334,8 @@ Acceptor 接受一个提议之后,会将该提议发送给所有的 Learner。
- A 发送 Prepare(2),X 和 Y 做出承诺并响应。A 得到大多数响应之后发送 Accept(2, 8),X 和 Y 接受该提议,此时值 8 已经被选定;
- 之后 B 发送 Prepare(4),它收到的大多数响应中至少有一个来自 X 或 Y,响应中包含已经接受过的提议 [2, 8],因此 B 只能发送 Accept(4, 8),而不能使用自己的提议值,从而保证了选定的值不会改变。
<div align="center"> <img src="pics/paxos-example.png" width="600px"/> </div><br>
### 约束条件
#### 1\. 正确性
+4
View File
@@ -111,6 +111,10 @@
- 降级:主动关闭部分非核心功能,从而保证核心功能可用;
- 熔断:某个依赖的服务持续出错时,暂时不再调用它而是直接返回默认结果,避免故障沿着调用链扩散。
熔断器有关闭、打开和半开三种状态:失败率超过阈值时打开;打开一段时间后进入半开状态,放行少量请求试探,成功则关闭,失败则重新打开。
<div align="center"> <img src="pics/circuit-breaker.png" width="500px"/> </div><br>
## 五、安全性
要求系统在应对各种攻击手段时能够有可靠的应对措施,常见的攻击手段和防范方法见 [攻击技术](攻击技术.md)。
+2
View File
@@ -128,6 +128,8 @@ CDN 主要有以下优点:
删除缓存而不是更新缓存,是因为两个并发的写操作到达缓存的顺序可能和到达数据库的顺序不同,导致缓存中是旧值。先更新数据库再删除缓存,是因为反过来的话,删除缓存之后、更新数据库之前的读请求会把旧值重新写入缓存。
<div align="center"> <img src="pics/cache-aside-race.png" width="500px"/> </div><br>
这种模式仍然存在小概率的不一致,例如删除缓存失败。常用的补救措施:
- 为缓存设置过期时间作为兜底;