文章目录
- [1. 基本概念](#1. 基本概念)
- [2. 如何实现?](#2. 如何实现?)
- [3. 可视化](#3. 可视化)
- 总结
1. 基本概念
一致性哈希是一种方法,用于在分布式系统中分配数据(比如用户请求或文件)到多个服务器上。它的主要目的是在服务器增加或减少时,尽量减少需要重新分配的数据。解决了一般哈希算法存在的问题(随着服务器的增加或减少,导致哈希值落在了不同的服务器上),也是负载均衡的常用算法。
2. 如何实现?
- 哈希环:
想象一个圆环(哈希环),环上有很多位置,从0到360度(或者0到某个最大值)。用哈希函数(比如 MD5 或 SHA)将服务器和数据项映射到这个环上。 - 服务器的加入:
每增加一个服务器(比如 S1、S2、S3),计算它的哈希值,并把它放到环上。
比如:
S1 的哈希值是 100。
S2 的哈希值是 200。
S3 的哈希值是 300。 - 数据的分配:
当有数据(比如 D1、D2、D3)需要存储时,同样计算它们的哈希值,并找到顺时针方向上第一个遇到的服务器。
比如:
D1 的哈希值是 150,顺时针找到第一个服务器是 S2(200),所以 D1 存储在 S2。
D2 的哈希值是 250,顺时针找到 S3(300),所以 D2 存储在 S3。
D3 的哈希值是 50,顺时针找到 S1(100),所以 D3 存储在 S1。 - 服务器的动态变化:
- 添加服务器:假设我们新增一个服务器 S4,哈希值是 180。
只有 D1(原本在 S2)会被迁移到 S4,因为 S4 是 D1 顺时针的下一个服务器。 - 删除服务器:如果删除 S2,那么 S2 下的数据(如 D1)会转移到它顺时针的下一个服务器 S3。
- 添加服务器:假设我们新增一个服务器 S4,哈希值是 180。
3. 可视化
想象一下,哈希环就像一个时钟:
0
11 1
10 2
9 3
8 4
5
服务器和数据项会对应到这个时钟上的位置。数据项总是存储到下一个顺时针的点。
总结
- 减少数据迁移:只在服务器变化时,少量数据需要迁移,而不是所有数据都要重新分配。
- 均匀分配:通过哈希函数,数据和服务器均匀分布在环上,避免某些服务器负载过重。
以上为个人学习分享,如有问题,欢迎指出:)