當節點數改變時,普通
hash(key) % N會讓幾乎所有 key 重新搬家。一致性雜湊把節點與 key 映到同一個環上,只搬動受影響的一小段。
🧠 Core Ideas
TIP
把雜湊空間想成一個 0 ~ 2³²−1 的環。key 順時針找到的第一個節點就是它的歸屬。加/刪節點只影響環上相鄰的一段。
- 加一個節點:只有「它逆時針到前一個節點」這段 key 需要搬。
- 移除節點:它負責的那段 key 交給順時針的下一個節點。
⚖️ Tradeoffs
樸素環 — 資料傾斜問題
- 節點少時,環上分佈不均 → 有的節點負載遠大於別人。
- key 的分佈也可能不均,加劇熱點。
虛擬節點 (Virtual Nodes) — 標準解
- 每個實體節點對應環上多個虛擬節點(如 100~200 個)。
- 分佈更平滑,標準差隨虛擬節點數下降;移除節點時負載也較平均地被分攤。
- 代價:要維護更多 metadata,且虛擬節點數要隨叢集規模調整。
🔑 Takeaways
- 一致性雜湊把「加減節點」的搬遷量從 O(全部) 降到 O(1/N)。
- 虛擬節點是讓負載平均的關鍵,幾乎是必備。
- 用在 KV store、cache 叢集、shard 路由——任何要動態增減節點又想少搬資料的場景。
No notes yet — jot your takeaways or Q&A here.