中文 EN

系统设计 Lab

分布式 key-value store 通过调节「多少个 replica 必须达成一致」,在 consistency、latency 和 availability 之间做权衡。

调节吞吐、key 数量、value 大小、replication factor N、read quorum R、write quorum W,以及集群规模。设计会从单节点逐步演进到 consistent-hash ring、replication、quorum 调优(把 CAP 权衡变得具体),最后到带 anti-entropy 的多 region。这对应 Amazon Dynamo 和 Apache Cassandra。

分步讲解

一步一步把它想清楚

常规演进场景

从左到右点击,就是预设的演示路径。每张卡片都会改变 workload 输入。

Workload

这些是输入,不是预设好的架构阶段。

推荐形态

当前架构路径
分布式 key-value store 架构图 Dynamo 风格 key-value store 的白板风格架构图:clients、把 key hash 到 ring 上的 coordinator、consistent-hash ring 上的 partition、各持一份 key 的 N 个 replica node,以及由 gossip membership 和 read repair 组成的异步 anti-entropy 层。 Clients Coordinator Hash ring Replicas Anti-entropy Client get + put Coordinator hash + 路由 Quorum logic R + W 闸门 Consistent ring virtual node Primary replica 第一个 owner Extra replicas 接下来 N-1 个 node Hinted handoff failover 写入 Gossip membership Read repair 修复 divergence
Clients
Client 用一个不透明的 key 发起 get 和 put 操作
Coordinator
Coordinator 对 key 做 hash,找到它在 ring 上的位置,并把请求 fan-out 给各个 replica
Quorum logic 等到 R 个读响应或 W 个写 ack 之后再回复 client
Hash ring
Consistent ring 把 key 的 hash 映射到 partition;virtual node 让集群变化时负载保持均衡
Replicas
Primary replica ring 上为某个 key 负责的 N 个 node 中的第一个
Extra replicas 顺时针往下的几个 node,各持一份副本以提供 durability 和 availability
Hinted handoff 一个替补 node 临时替挂掉的 replica 存下写入,之后再回放给它
Anti-entropy
Gossip node 之间交换 membership 和健康状态,让 ring 不靠 master 也能收敛
Read repair 修复读取时发现的过期 replica,以及通过后台 Merkle-tree 同步来调和差异

瓶颈

每节点操作负载

每节点存储

Write amplification

Quorum / 一致性

跨 region + anti-entropy

为什么会变

    决策权衡

    Partitioning

    Replication factor

    Quorum 调优

    冲突解决

    故障处理

    Membership

    有出处支撑的规则

    这些是模型背后那些经得起时间考验的 system design 论断。而 slider 的具体阈值,则被刻意标注为教学用的假设。

    已验证的规则

    Consistent hashing 把 key 分区,并把 membership 变化时的搬迁量限制在很小范围

    Dynamo 用 hash 把 key 放到 ring 上,并用 virtual node,使得加入或移除一个 node 只搬动一小部分 key,从而保持负载均衡。

    Amazon Dynamo (SOSP 2007)
    已验证的规则

    Quorum R+W>N 给出 read-your-writes;更小的 quorum 偏向 latency 和 availability

    Dynamo 把 N、R、W 暴露成可调旋钮;R+W>N 让读集合和写集合产生重叠,于是一次读能看到最新的写,代价是 latency 和 availability。

    Amazon Dynamo (SOSP 2007)
    已验证的规则

    Hinted handoff 和 read repair 让 store 保持 available 和最终一致

    Cassandra 为不可达的 replica 存下 hint,并在读取时以及通过后台 anti-entropy 修复差异,所以故障不会阻塞写入。

    Apache Cassandra Docs
    已验证的规则

    DynamoDB 是一个托管的 key-value store,带可调、按 region 范围的 replication

    DynamoDB 提供最终一致和强一致的读,以及跨 region 复制的 global table,把同样的 N/R/W 权衡变成了托管服务。

    AWS DynamoDB

    教学用假设

    • 每节点的操作和存储预算是保守的教学数字;真实 node 会因硬件和 value 大小差异很大。
    • Write amplification 简单地按 replication factor N 建模——每个 put 都施加到 N 个 replica 上。
    • 一致性压力用 R+W 和 N 做对比;它抽象掉了 clock skew、sloppy quorum 和 hinted write。