一致哈希在PHP memcached模块中如何工作?

时间:2015-07-30 18:00:54

标签: php memcached consistent-hashing

我无法回答几个关于memcached的问题,而且我在网上搜索了很多。

  1. PHP的memcached模块使用的一致哈希算法是什么?
  2. 它的设置是什么(即,它在环上添加服务器的次数是多少次?)
  3. 一致哈希数组(连续环)是在某处缓存的,还是在每次执行脚本时重新计算?如果是后者,会导致性能问题/浪费计算能力吗?
  4. 由于

1 个答案:

答案 0 :(得分:2)

  
      
  1. PHP的memcached模块使用的哈希算法是什么?
  2.   

根据您的需要,有不同的。有关选项,请参阅此页面:http://php.net/manual/en/memcached.constants.php您可以对池中的实例计数(DISTRIBUTION_MODULA)或一致的哈希密钥分发算法(DISTRIBUTION_CONSISTENT)使用标准模运算。如果需要,项目键本身也有散列算法选项(HASH_)。

如果您要经常将实例放入和放出池中,您应该查看一致的散列方法。我从来没有真正使用它,可能应该减少服务器故障的影响,并且没有通过这条路线可以达到可衡量的性能......事后看来似乎没什么好事。认为memcached扩展应该可以将默认值更改为。我已经看到,通过一致性散列,您可以预期丢失10-25%的密钥(或者更少,池中有更多服务器),使用默认方法可能会更接近100%的损失。

更具体地说,一致性算法基于libketama。自述文件很好地总结了它的原因以及它是如何工作的。

  
      
  1. 它的设置是什么(即,它在环上添加服务器的次数是多少次?)
  2.   

我不确定我明白你在这里问的是什么。每个新服务器的连续体中添加了多少个“滴答”?认为我们需要更多关注ketama lib - 猜测它试图在性能和更少的关键失误之间取得平衡。

  
      
  1. 哈希数组(连续环)是在某处缓存的,还是在每次执行脚本时重新计算?如果是后者,会导致性能问题/浪费计算能力吗?
  2.   

诚实地说不是100%肯定。虽然它可能是一个浪费的计算,仍然似乎微不足道 - md5算法和一些算术。我只能说Memcached非常快。如果您需要高可用性,持久性分布式存储,您可能会看到像couchDB这样的其他内容。 Memcached非常擅长它的作用......在内存键/值存储中为“小”值。

您可能会喜欢这些文章: