一致性哈希和普通哈希有什么区别
一致性哈希 vs 普通哈希
一致性哈希和普通哈希的核心区别是一致性哈希算法是对 2^32 取模是固定值,普通哈希是对一个变量取值,比如机器数,节点数
一致性哈希原理
- 虚拟节点:每个物理节点对应多个虚拟节点,数据分布均匀。
- 数据迁移:扩容时,只迁移新增节点的数据。
- 适用场景:分布式缓存(如 Redis)、分布式数据库(如 Cassandra)。
普通哈希原理
- 物理节点:每个请求通过哈希后取模,映射到物理节点。
- 数据迁移:扩容时,所有数据重新取模,数据迁移多。
- 适用场景:负载均衡(如 Nginx)、分库分表(如 ShardingSphere)。
核心差异
| 特性 | 一致性哈希 | 哈希后取模 |
|---|---|---|
| 数据分布 | 虚拟节点,数据分布均匀 | 物理节点,数据分布不均匀 |
| 扩容影响 | 扩容时数据迁移少 | 扩容时数据迁移多 |
| 适用场景 | 分布式缓存、分布式数据库 | 负载均衡、分库分表 |
| 实现复杂度 | 中等 | 简单 |
适用场景
一致性哈希
- 分布式缓存:如 Redis Cluster、Memcached。
- 分布式数据库:如 Cassandra、MongoDB。
哈希后取模
- 负载均衡:如 Nginx、LVS。
- 分库分表:如 ShardingSphere、MyCat。
扩容影响
| 策略 | 扩容影响 |
|---|---|
| 一致性哈希 | 扩容时数据迁移少 |
| 哈希后取模 | 扩容时数据迁移多 |
总结
✅ 一致性哈希:适合分布式缓存、分布式数据库,扩容时数据迁移少。
✅ 哈希后取模:适合负载均衡、分库分表,实现简单。
根据业务需求选择:
- 缓存/数据库:用一致性哈希。
- 负载均衡:用哈希后取模。
- 简单场景:哈希后取模。
