seaweedfs/weed/messaging/broker/consistent_distribution.go

39 lines
650 B
Go
Raw Normal View History

2020-05-08 09:47:22 +00:00
package broker
import (
"github.com/buraksezer/consistent"
2020-05-10 10:50:30 +00:00
"github.com/cespare/xxhash"
2020-05-08 09:47:22 +00:00
)
type Member string
func (m Member) String() string {
return string(m)
}
type hasher struct{}
func (h hasher) Sum64(data []byte) uint64 {
return xxhash.Sum64(data)
}
func PickMember(members []string, key []byte) string {
cfg := consistent.Config{
PartitionCount: 9791,
ReplicationFactor: 2,
Load: 1.25,
Hasher: hasher{},
}
cmembers := []consistent.Member{}
for _, m := range members {
cmembers = append(cmembers, Member(m))
}
c := consistent.New(cmembers, cfg)
m := c.LocateKey(key)
return m.String()
2020-05-10 10:50:30 +00:00
}