第五周作业
发布于: 2020 年 09 月 20 日
用你熟悉的编程语言实现一致性 hash 算法。
编写测试用例测试这个算法,测试 100 万 KV 数据,10 个服务器节点的情况下,计算这些 KV 数据在服务器上分布数量的标准差,以评估算法的存储负载不均衡性。
// 一致性哈希算法class ConsistentHashing{ protected $nodes = array(); protected $position = array(); protected $mul = 64; // 每个节点对应64个虚拟节点 /** * 把字符串转为32位符号整数 */ public function hash($str) { return sprintf('%u', crc32($str)); } /** * 核心功能 */ public function lookup($key) { $point = $this->hash($key); //先取圆环上最小的一个节点,当成结果 $node = current($this->position); // 循环获取相近的节点 foreach ($this->position as $key => $val) { if ($point <= $key) { $node = $val; break; } } reset($this->position); return $node; } /** * 添加节点 */ public function addNode($node) { if(isset($this->nodes[$node])) return; // 添加节点和虚拟节点 for ($i = 0; $i < $this->mul; $i++) { $pos = $this->hash($node . '-' . $i); $this->position[$pos] = $node; $this->nodes[$node][] = $pos; } // 重新排序 $this->sortPos(); } /** * 删除节点 */ public function delNode($node) { if (!isset($this->nodes[$node])) return; // 循环删除虚拟节点 foreach ($this->nodes[$node] as $val) { unset($this->position[$val]); } // 删除节点 unset($this->nodes[$node]); } /** * 排序 */ public function sortPos() { ksort($this->position, SORT_REGULAR); }}
划线
评论
复制
发布于: 2020 年 09 月 20 日 阅读数: 16
Jam
关注
还未添加个人签名 2018.03.21 加入
还未添加个人简介
评论