Maglev is Google’s network load balancer. It is a large distributed software system that runs on commodity Linux servers. Unlike traditional hardware network load balancers, it does not require a specialized physical rack deployment, and its capacity can be easily adjusted by adding or removing servers. (cite from paper)
Here is a Chinese reading note about Maglev: [論文中文導讀] Maglev : A Fast and Reliable Software Network Load Balancer (using Consistent Hashing)
go get github.com/kkdai/maglev
func main() {
sizeN := 5
lookupSizeM := 13 //(must be prime number)
var names []string
for i := 0; i < sizeN; i++ {
names = append(names, fmt.Sprintf("backend-%d", i))
}
//backend-0 ~ backend-4
mm := NewMaglev(names, lookupSizeM)
v, err := mm.Get("IP1")
fmt.Println("node1:", v)
//node1: backend-2
v, _ = mm.Get("IP2")
log.Println("node2:", v)
//node2: backend-1
v, _ = mm.Get("IPasdasdwni2")
log.Println("node3:", v)
//node3: backend-0
if err := mm.Remove("backend-0"); err != nil {
log.Fatal("Remove failed", err)
}
v, _ = mm.Get("IPasdasdwni2")
log.Println("node3-D:", v)
//node3-D: Change from "backend-0" to "backend-1"
}
- Wiki Consistent_hashing
- Go implementation of maglev hashing
- 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
- Distributed Systems Part-1: A peek into consistent hashing!
It is one of my project 52.
This is under the Apache 2.0 license. See the LICENSE file for details.