package
Version:
v0.0.0-...-74dcdd4
Opens a new window with list of versions in this module.
Published: May 20, 2023
License: MIT
Opens a new window with license information.
Imports: 3
Opens a new window with list of imports.
Imported by: 0
Opens a new window with list of known importers.
README
¶
一致性Hash
- 将整个哈希空间(通常是一个32位或64位的整数范围)映射成一个环,称为哈希环。
- 将节点通过哈希函数映射到哈希环上的一个位置。
- 数据通过相同的哈希函数映射到哈希环上的一个位置。
- 当需要寻找节点或存储数据时,根据数据的哈希值顺时针在环上查找最近的节点,然后将数据存储在该节点上。
- 当节点加入或离开系统时,只需影响它相邻的节点,对其他节点的影响很小。
通过使用虚拟节点,可以使节点在哈希环上分布更均匀,从而减小数据迁移的数量。虚拟节点是通过对每个物理节点应用多个不同的哈希函数来创建的,每个虚拟节点在哈希环上占据一个位置。
实质还是利用hash函数的离散性,可以理解1000个虚拟点是某一种味道的香水分子数。
一致性哈希的优点包括:
- 负载均衡:由于节点在哈希环上均匀分布,数据能够更好地分散到各个节点上,实现负载均衡。
- 可扩展性:当节点数量增加或减少时,只有部分数据需要重新分布,降低了数据迁移的成本。
- 容错性:当节点发生故障或离线时,仅会影响其相邻的节点,对其他节点的影响很小。
- 管理负载均衡:当m1机器性能强,m2和m3机器性能弱时,可以通过虚拟节点,为m1分配2000个虚拟节点,为m2和m2各分配1000个虚拟节点,去抢占环上的区域即可。
一致性哈希也有一些考虑事项:
- 哈希空间的均匀性:选择合适的哈希函数和虚拟节点数量,以确保节点在哈希环上分布均匀。
- 每个物理节点通过很多个虚拟节点来对应,比如192.168.0.69通过随机1000个字符串(虚拟节点)来代理。虚拟节点去抢占环上的区域。
- 当我们加入一个数据元素的时候,可以发现需要分配到哪个虚拟节点,再通过虚拟节点找到背后的物理节点,进行存储。
- 节点增减的策略:需要考虑节点的加入和离开策略,以平衡负载和减少数据迁移。
- 哈希冲突:在哈希函数和节点选择上,需要处理哈希冲突的情况。
- 当数据量不到400亿,不需要考虑hash碰撞的问题。
一致性哈希被广泛应用于缓存系统、分布式存储系统和负载均衡器等分布式系统中,以提供高性能和可扩展性。
Documentation
¶
GetNode returns the node responsible for the given key
Source Files
¶
Click to show internal directories.
Click to hide internal directories.