scu2008/php-consistent-hash

a good php consistent hash helper

dev-master 2015-06-12 09:20 UTC

This package is not auto-updated.

Last update: 2024-04-27 14:59:29 UTC


README

a good php consistent hash helper,一个用php写的一致性hash 助手,主要用于解决internet中的热点(hot spot)问题

特性

  • 平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。
  • 单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。
  • 分散性(Spread):在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。
  • 负载(Load):负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同 的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷

类的基本说明

  • ConsistentHash 主类,实现对节点的添加与查找
  • Crc32Hasher crc32方式
  • Md5Hasher md5方式
  • Sha1Hasher sha1方式

examples

  $hash = new ConsistentHash\ConsistentHash();
  $arr = ['10.7.0.1', '10.7.0.2', '10.7.0.3'];
  $hash->addTargets($arr);//添加多个节点
  $hash->lookup('hashkey');//输入特定的key通过相应的hash算法寻找到合适的节点