← 主页
系统设计与分布式架构 (System Design)
下一个:提示词工程 →
ASD-STE100 架构规约 · Emil Kowalski 交互标准

分布式系统的终极命题:网络不可靠、时钟不可靠与状态共识

在分布式环境下,没有全局物理时钟,任何网络包都可能丢失、乱序或延迟数秒,硬件故障是系统常态。真正的架构师不追求“永不宕机”,而是通过严密的数学证明与工程契约,在非可靠底座上构建可靠的分布式状态机。

POINT 01

分布式共识协议与状态机复制 (Raft Consensus & Log Replication)

领导者选举 · 脑裂自愈
// ASD-STE100 架构规约:

1. Nodes exist in three states: Follower, Candidate, or Leader.

2. If Followers do not receive Leader heartbeats before the randomized election timeout, they become Candidates.

3. A Candidate needs votes from a strict majority (N/2 + 1) to become Leader.

4. The Leader commits log entries only after a majority of Followers write them to disk.

5. In network partitions, minority partitions cannot commit writes, preventing split-brain corruption.

[PROTOTYPE] 5 节点 Raft 选举与网络分区恢复试验台
[状态] 正常运行。Node 1 为合法 Leader (Term 1),持续向 Followers 发送心跳。
POINT 02

一致性模型深度辨析:线性一致性、因果一致性与 PACELC 定理

一致性光谱 · 延迟权衡
// PACELC 定理公式化表达:
如果存在分区 (Partition):系统必须在可用性 (Availability) 与一致性 (Consistency) 之间抉择;
否则 (Else, 正常状态):系统必须在延迟 (Latency) 与一致性 (Consistency) 之间抉择。
选型对照: MongoDB / Cassandra (PA/EL) 追求极低延迟; Spanner / CockroachDB (PC/EC) 以跨机房往返换取线性一致性。
POINT 03

分布式事务终局:Saga 编排器与 Transactional Outbox + CDC

最终一致性 · 可靠投递
// ASD-STE100 架构规约:

1. Two-Phase Commit (2PC) blocks resources and causes severe latency under high scale.

2. Sagas break transactions into local steps with corresponding compensating rollback actions.

3. Transactional Outbox writes the domain change and the outbound message into the same local database transaction.

4. Debezium CDC reads database transaction logs and streams events to Kafka with zero dual-write inconsistency.

[PROTOTYPE] Saga 订单事务工作流与补偿回滚演练
步骤 1: 订单服务
待命
步骤 2: 库存扣减
待命
步骤 3: 支付扣款
待命
等待发起分布式事务...
POINT 04

现代存储引擎剖析:LSM-Tree vs B+ Tree、读写放大与分层压缩

追加写 · 写放大控制
B+ Tree (InnoDB / PostgreSQL)
  • • 读优化:随机点查性能极致,单次点查仅需 3~4 次磁盘寻道。
  • • 原地修改:每次写入需修改磁盘物理页,引发随机 I/O 与双写缓冲。
  • • 写放大系数通常在 10 ~ 30 倍。
LSM-Tree (RocksDB / TiDB)
  • • 写优化:顺序追加写入 WAL 与内存跳表 (MemTable),吞吐极高。
  • • 后台分层压实 (Leveled Compaction):内存满后刷盘为 SSTable,后台线程周期性合并。
  • • 布隆过滤器 (Bloom Filter):快速跳过不包含目标 Key 的 SSTable,缓解读放大。
POINT 05

高性能缓存设计与双写一致性陷阱 (Cache-Aside & Delayed Double Delete)

击穿/穿透/雪崩 · Binlog 订阅
推荐解法:基于 CDC Binlog 的异步淘汰 (Canal / Debezium)

应用层只修改数据库,不直接碰缓存;由独立消费组件监听 MySQL Binlog 增量,确认事务提交成功后,再向 Redis 发送删除指令,结合消息队列的重试保障,彻底切断应用层双写时序竞争。

POINT 06

海量数据分片:一致性哈希与虚拟节点负载均衡 (Consistent Hashing & Virtual Nodes)

哈希环 · 数据再平衡
[PROTOTYPE] 一致性哈希节点扩缩容与数据迁移率计算
当前物理节点数: 3
虚拟节点倍率 (vnodes): 150 vnodes/node
单节点增减迁移数据比: ~33.3% (理论最小值)
传统取模分片 (hash % N) 增加 1 个节点会导致 ~75% 数据失效;一致性哈希将失效数据严格压缩至 1/N。
POINT 07

分布式限流与流量整型算法 (Token Bucket vs Leaky Bucket vs Sliding Window)

突发平滑 · Redis Lua 原子计数
  • 固定窗口计数器:粗糙,存在跨窗口临界爆发(前后两秒临界瞬间涌入 2 倍限额)。
  • 滑动窗口计数器:平滑统计最近 60s 内请求加权和,消灭临界突刺。
  • 漏桶算法 (Leaky Bucket):恒定速率流出,常用于写数据库限速,完全禁止突发。
  • 令牌桶算法 (Token Bucket):允许突发流量消费预存令牌,适合面向用户的 API 网关。
POINT 08

高吞吐消息引擎与流处理语义 (Kafka Partitions & Exactly-Once Semantics - EOS)

Zero-Copy · 事务日志
// Kafka 物理吞吐优化核心三板斧:
1. 顺序写磁盘 (Sequential Append): 机械硬盘顺序写性能接近内存随机写,避免磁头反复寻道。
2. PageCache 与 Zero-Copy: 使用 Linux sendfile 系统调用,网卡直接从 OS PageCache 抓取数据,零用户态拷贝。
3. 端到端 EOS: 生产者分配 PID + Sequence Number 保证幂等,结合 beginTransaction() 确保消费位移与下游产出原子提交。
POINT 09

服务高可用弹性与防雪崩模式:断路器、全抖动重试与过载脱离

Full Jitter · 自适应负载保护
// ASD-STE100 架构规约:

1. Blind retries create a Retry Storm that crashes recovering backends.

2. Exponential backoff increases delay between retries exponentially: \(t = b \times 2^i\).

3. Full Jitter chooses a random sleep time uniformly between 0 and \(t\), breaking synchronization spikes.

4. Load Shedding drops low-priority requests based on queue latency before CPU reaches 100% saturation.

[PROTOTYPE] 重试风暴与 Full Jitter 削峰填谷模拟
无抖动重试 (指数退避同步):
在第 1s, 2s 产生巨大脉冲毛刺,后端再次被击穿。
峰值请求密度: 100 req/s
Full Jitter 随机抖动打散:
请求均匀分布在时间轴区间内,平稳消化。
峰值请求密度: 18 req/s (削峰 82%)
POINT 10

分布式全局唯一 ID 生成体系与时钟回拨处理 (Snowflake & NTP Skew)

64 位位运算 · 美团 Leaf 思想
// Snowflake 64-bit 结构剖析:
[0] 1位符号位 (恒为0)
[1..41] 41位时间戳 (支持 69 年)
[42..51] 10位工作机器 ID (支持 1024 个节点)
[52..63] 12位毫秒内自增序列 (支持单机 4096 QPS/ms)
POINT 11

无主复制与 Quorum 读写仲裁机制 (Dynamo Quorum & Anti-Entropy)

R + W > N · 向量时钟
// ASD-STE100 架构规约:

1. In leaderless replication, any node accepts writes and reads.

2. Set total replicas \(N\), write quorum \(W\), and read quorum \(R\).

3. If \(R + W > N\), the read set and write set must overlap by at least one node.

4. This guarantees that reads always discover the newest written value version.

[PROTOTYPE] Quorum 读写仲裁数学校验器
副本总数 N:
写仲裁数 W:
读仲裁数 R:
满足强一致性条件 (R + W = 6 > N = 5): 读写必有交集节点,杜绝脏读。