chash

package
v0.0.0-...-74dcdd4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 20, 2023 License: MIT Imports: 3 Imported by: 0

README

一致性Hash

  1. 将整个哈希空间(通常是一个32位或64位的整数范围)映射成一个环,称为哈希环。
  2. 将节点通过哈希函数映射到哈希环上的一个位置。
  3. 数据通过相同的哈希函数映射到哈希环上的一个位置。
  4. 当需要寻找节点或存储数据时,根据数据的哈希值顺时针在环上查找最近的节点,然后将数据存储在该节点上。
  5. 当节点加入或离开系统时,只需影响它相邻的节点,对其他节点的影响很小。

通过使用虚拟节点,可以使节点在哈希环上分布更均匀,从而减小数据迁移的数量。虚拟节点是通过对每个物理节点应用多个不同的哈希函数来创建的,每个虚拟节点在哈希环上占据一个位置。 实质还是利用hash函数的离散性,可以理解1000个虚拟点是某一种味道的香水分子数。

一致性哈希的优点包括:

  • 负载均衡:由于节点在哈希环上均匀分布,数据能够更好地分散到各个节点上,实现负载均衡。
  • 可扩展性:当节点数量增加或减少时,只有部分数据需要重新分布,降低了数据迁移的成本。
  • 容错性:当节点发生故障或离线时,仅会影响其相邻的节点,对其他节点的影响很小。
  • 管理负载均衡:当m1机器性能强,m2和m3机器性能弱时,可以通过虚拟节点,为m1分配2000个虚拟节点,为m2和m2各分配1000个虚拟节点,去抢占环上的区域即可。

一致性哈希也有一些考虑事项:

  • 哈希空间的均匀性:选择合适的哈希函数和虚拟节点数量,以确保节点在哈希环上分布均匀。
    • 每个物理节点通过很多个虚拟节点来对应,比如192.168.0.69通过随机1000个字符串(虚拟节点)来代理。虚拟节点去抢占环上的区域。
    • 当我们加入一个数据元素的时候,可以发现需要分配到哪个虚拟节点,再通过虚拟节点找到背后的物理节点,进行存储。
  • 节点增减的策略:需要考虑节点的加入和离开策略,以平衡负载和减少数据迁移。
  • 哈希冲突:在哈希函数和节点选择上,需要处理哈希冲突的情况。
    • 当数据量不到400亿,不需要考虑hash碰撞的问题。

一致性哈希被广泛应用于缓存系统、分布式存储系统和负载均衡器等分布式系统中,以提供高性能和可扩展性。

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Ring

type Ring struct {
	// contains filtered or unexported fields
}

func NewRing

func NewRing(virtualNodes int, nodes []string) *Ring

func (*Ring) GetNode

func (h *Ring) GetNode(key string) string

GetNode returns the node responsible for the given key

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL