写点什么

架构师训练营第五周作业

发布于: 2020 年 10 月 25 日



  1. 用你熟悉的编程语言实现一致性 hash 算法。

  2. 编写测试用例测试这个算法,测试 100 万 KV 数据,10 个服务器节点的情况下,计算这些 KV 数据在服务器上分布数量的标准差,以评估算法的存储负载不均衡性



package main
import (
"fmt"
"math"
"github.com/OneOfOne/xxhash"
"github.com/grd/statistics"
)
var (
nodeCount uint64 = 10
hashRingSize uint64 = math.MaxUint32
)
func main() {
nodeCountMap := make(map[uint64]int64)
i := 0
for i < 1000000 {
nodeNum := getNodeNum(fmt.Sprintf("key%v", i))
if _, exsit := nodeCountMap[nodeNum]; !exsit {
nodeCountMap[nodeNum] = 1
} else {
nodeCountMap[nodeNum] = nodeCountMap[nodeNum] + 1
}
i = i+1
}
fmt.Printf("nodeCountMap:%v", nodeCountMap)
var testNumArray []int64
for _ , v:=range nodeCountMap{
testNumArray = append(testNumArray,v)
}
data := statistics.Int64(testNumArray)
variance := statistics.Variance(&data)
fmt.Printf("标准差:%v", variance)
}
func getNodeNum(key string) uint64 {
ringHash := hashCode(key) % hashRingSize
nodeHash := ringHash % nodeCount
return nodeHash
}
func hashCode(anyStr string) uint64 {
h := xxhash.New64()
h.Write([]byte(anyStr))
return h.Sum64()
}

输出:

nodeCountMap:map[0:99856 1:100443 2:100084 3:99972 4:99617 5:100325 6:99802 7:99795 8:99895 9:100211]

标准差:68212.66666666667



发布于: 2020 年 10 月 25 日阅读数: 27
用户头像

还未添加个人签名 2018.08.31 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第五周作业