分散式快取首推 memcached,但許多大型電商(如 Newegg)未採用。主因在於傳統演算法在節點增減時的命中率崩塌與負載不均。本文以實測數據對比五種演算法演進路徑:取模法 → 環狀 Hash → 一致性 Hash (虛擬節點) → 改進版 → 完美改進版。
Node = Hash(Key) % N



新增節點 192.168.0.5 後:



結果:命中率暴跌,舊 Key 大量失效。
將節點與 Key 皆映射至 0~2³²-1 環狀空間,Key 順時針尋找最近節點。


新增節點:


結果:命中率 ~70%,負載偏差大。
每個物理節點對應 N 個虛擬節點 (預設 150~200),虛擬節點均勻分佈於環上。



結果:優於普通 Hash,但新節點利用率仍受限。
核心思想:新節點不進行虛擬節點化,或依權重配置少量虛擬節點,避免新節點被大量虛擬節點稀釋。

代價:新節點利用率極低 (僅承擔少量新 Key)。

設計目標:命中率 100% 維持、負載均衡、新節點平滑接管流量。核心邏輯另闢蹊徑,不再依賴環狀映射,改用一致性分桶 + 狀態機遷移架構 (詳細實作將於後續專文發布)。



| 演算法 | 穩定命中率 | 擴容命中率 | 負載均衡 | 新節點利用率 | 實作複雜度 |
|---|---|---|---|---|---|
| 取模法 | 100% | ~0% | 優 | N/A | 低 |
| 環狀 Hash | ~90% | ~70% | 差 | 中 | 中 |
| 一致性 Hash (虛擬節點) | ~95% | ~85% | 良 | 中 | 中高 |
| 改進版 (動態權重) | ~95% | 98%+ | 良 | 極低 | 高 |
| 完美改進版 | 100% | 100% | 優 | 高 | 高 |
一致性 Hash 雖為分散式快取標準解,但仍有優化空間。理解各演算法在「命中率、負載均衡、新節點平滑度」三角權衡中的定位,能根據業務特性 (快取體量、擴容頻率、容忍度) 選擇最適方案。完美改進版展示了跳出傳統框架的可能性,歡迎同好交流實作細節。