# 考察go一致性hash库
(金庆的专栏 2020.2)
github 搜 consistent, 按星数依次察看
## stathat/consistent
Consistent hash package for Go.
688星
stathat 应该是个数据统计的云服务。consistent被认为是生产可用的。
所有文档都在 godoc. 示例和接口简洁易懂。
## lafikl/consistent
A Go library that implements Consistent Hashing and Consistent Hashing With Bounded Loads.
575 星
有界负载的一致性哈希算法
示例中是 c.GetLeast() 获取最小负载,不像是一致性hash的应用。
从代码看,应该是最近的未满载,不是最小负载。
`MaxLoad()`说明显示最大负载是自动设置为 (total_load/number_of_hosts)*1.25。
`const replicationFactor = 10`
没有一次获取多个的接口。
## serialx/hashring
Consistent hashing "hashring" implementation in golang (using the same algorithm as libketama)
367 星
是从 Python 库移植的。可以设置 weight.
示例
```
replicaCount := 3
ring := hashring.New(serversInRing)
server, _ := ring.GetNodes("my_key", replicaCount)
```
实际上是 GetN 的功能。内部实现缺少 replicationFactor
## buraksezer/consistent
Consistent hashing with bounded loads in Golang
263 星
未提供缺省hash函数。
多了一个`PartitionCount`
c.loads 仅用于查询负载,并没有用于有界负载。
结论是这个不是有界负载的一致性哈希,同时一致性哈希的实现不同寻常。
## 其他
jump hash 不能移除节点,不考虑
### dgryski/go-jump
go-jump: Jump consistent hashing
281 星
### lithammer/go-jump-consistent-hash
⚡️ Fast, minimal memory, consistent hash algorithm
138 星