写点什么

架构师训练营第 1 期 - 第五周作业提交

用户头像
Todd-Lee
关注
发布于: 2020 年 10 月 25 日

作业一(2 选 1):

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

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


// 一致性哈希算法class ConsistentHash {				protected $realNodes   = array ();		protected $vitualNodes = array ();		protected $count       = 150;  //真实节点对应的虚拟节点数量				/**		 * Hash取值		 * @param $str		 * @return string		 */		private function hash($str) {				return sprintf('%u', crc32($str));		}						/**		 * 定位		 * @param $key		 * @return mixed		 */		public function pos($key) {				$point = $this->hash($key);				$node  = $this->vitualNodes[0];//初始节点				//循环找到环上最近的点				foreach ($this->vitualNodes as $key => $val) {						if ($point <= $key) {								$node = $val;								break;						}				}				return $node;		}						public function addNode($node) {				if (isset($this->realNodes[ $node ])) return;//排除重复增加				for ($i = 0; $i < $this->count; $i++) {						$pos                        = $this->hash($node . '-' . $i);//计算落点						$this->vitualNodes[ $pos ]  = $node;//添加虚拟节点						$this->realNodes[ $node ][] = $pos;//添加真实节点				}				// 重新排序				$this->sortPos();		}				public function delNode($node) {				if (!isset($this->realNodes[ $node ])) return;				// 循环删除虚拟节点				foreach ($this->realNodes[ $node ] as $val) {						unset($this->vitualNodes[ $val ]);				}				// 删除节点				unset($this->realNodes[ $node ]);		}						public function sortPos() {				ksort($this->vitualNodes, SORT_REGULAR);		}}
复制代码


用户头像

Todd-Lee

关注

还未添加个人签名 2017.10.17 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期 - 第五周作业提交