【问题标题】:PHP pecl/memcached extension slow when setting option for consistent hashing设置一致散列选项时,PHP pecl/memcached 扩展缓慢
【发布时间】:2010-05-17 20:08:24
【问题描述】:

使用较新的 PHP pecl/memcached 扩展。调用 Memcached::setOption() 之类的;

$m = new Memcached();
$m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);

花费在 150 到 500 毫秒之间 - 只是在调用 setOption() 时,因为我们没有使用持久连接,而是在每次请求时都这样做,这很痛苦。

深入研究,将 Memcached::OPT_DISTRIBUTION 设置为 Memcached::DISTRIBUTION_CONSISTENT 最终会在 libmemcached 中调用 update_continuum() ,这似乎相当密集,尽管我们只传递了 15 个 memcached 服务器的列表,所以看到这有点令人惊讶重建连续数据结构需要 150 到 500 毫秒。

是否设置此选项仅适用于持久连接,在建立初始连接时仅调用一次?还是这是 libmemcached 的 bug?

使用更新的 pecl/memcached 扩展 1.0.1 和 libmemcached 0.38

谢谢。

【问题讨论】:

标签: php memcached


【解决方案1】:

libmemcached 0.38 在这一点上已经相当老了。 pecl/memcached 1.0.1 也是如此。你能试试 pecl/memcached 2.0.0b1 从 github 发布吗?

【讨论】:

    【解决方案2】:

    pecl/memcached 2.2.0 也有同样的问题(PECL 在撰写本文时是最新的)。对我来说唯一的解决方案是从 DISTRIBUTION_CONSISTENT 切换到:

    $memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
    $memcached->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true);
    

    它似乎工作正常:

    var_dump($memcached->getServerByKey($key)['host']);
    // string '192.168.56.1' (length=12) <== dead host
    
    $memcached->set($key, $result, 3600);
    
    var_dump($memcached->getServerByKey($key)['host']);
    // string '127.0.0.1' (length=9) <== working host
    
    var_dump($memcached->getLastErrorMessage());
    // string 'SUCCESS' (length=7)
    

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 2017-05-23
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多