Memcache一致性哈希,集群,PHP代码,Ketama及其所有

用户名

我整天都在尝试用PHP理解和编写Memcache,但是我在某些时候感到困惑。我浏览了许多文章,几乎所有SO问题都与此相关,但找不到确切答案

1)在PHP中创建一致的哈希密钥的代码是什么?我必须安装哪些库以及我真正需要做什么?有什么好文章要经历吗?

2)假设我已经成功存储了一个一致的哈希密钥,现在,如果我的任何一台服务器宕机或添加了一个新服务器,即使我正在使用一致的哈希密钥等,它也会有所不同吗?

3)将使用了Memcached :: addServers()代替Memcached的:: addServer()作出一致性哈希的情况下,任何差别在规定http://ru.php.net/manual/en/memcached.addserver.php如果那不是什么意思?

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

4)使用以上代码是否足以进行一致性哈希,然后添加/删除服务器对密钥没有任何影响?

5)什么是Ketama图书馆?如果Memcached :: DISTRIBUTION_CONSISTENT可以更好地工作,为什么还要使用它呢?以下http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-__a_consistent_hashing_algo_for_memcache_clients

6)我是否必须以某种方式对密钥进行哈希处理,还是只提供密钥并让Memcached处理其余的密钥?

拜托,我需要您的真正支持,以便尽快在我的生产环境中理解和实施它。您的答案将使我理解应该如何编写更好的代码。

通风的

好吧,这些问题太多了,让我尽力一一回答。

1)在PHP中创建一致的哈希密钥的代码是什么?我必须安装哪些库以及我真正需要做什么?有什么好文章要经历吗?

当您对代码提出疑问时,此代码足以实现PHP中的“一致性哈希”。您只需要使用LibMemcached客户端库即可对Memcached使用一致哈希。只需在代码下方添加以下行

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

如果要使用一致的哈希,强烈建议启用此选项,并且在将来的版本中可能默认启用此选项。请按照此说明一堆常量及其定义,以更好地理解http://www.php.net/manual/en/memcached.constants.php

尽管可以通过在php.ini中全局设置来获得更好的性能(我尚未测试)。

memcache.hash_strategy = consistent;

http://blog.fedecarg.com/2008/12/24/memcached-consistent-hashing-mechanism/中所建议的那样,则无需在每个memcached调用中单独指定。默认值为“标准”,并且使用“模量”计算,如果添加或删除服务器,则无济于事。

2)假设我已经成功存储了一个一致的哈希密钥,现在,如果我的任何一台服务器宕机或添加了一个新服务器,即使我正在使用一致的哈希密钥等,它也会有所不同吗?

尽管正如lsmooth所说,在卸下或添加服务器时总会产生影响,但是如果假设将1台服务器添加到3台服务器中,影响最小,那么它将大约1/4 =丢失密钥的25%,因此丢失密钥的机会越少,服务器越多。

3)将使用了Memcached :: addServers()代替Memcached的:: addServer()作出一致性哈希的情况下,任何差别在规定http://ru.php.net/manual/en/memcached.addserver.php如果那不是什么意思?

正如伊斯莫斯所说。他是正确的。最好使用addServers。请注意,在使用setOption设置所有选项之后,必须调用«addServers()»,否则这些选项将不适用于这些服务器。

4)使用以上代码是否足以进行一致性哈希,然后添加/删除服务器对密钥没有任何影响?

已经在问题1的答案中回答了。

5)什么是Ketama图书馆?如果Memcached :: DISTRIBUTION_CONSISTENT可以更好地工作,为什么还要使用它呢?http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-__a_consistent_hashing_algo_for_memcache_clients

LibKetama是一致性哈希密钥分发算法所基于的库。因此,在Memcached中使用一致性哈希意味着要使用LibKetama,这就是事实。

6)我是否必须以某种方式对密钥进行哈希处理,还是只提供密钥并让Memcached处理其余的密钥?

Yvan表示:“ Memcached客户端将自动对密钥进​​行哈希处理。假设您有3个服务器,A,B和C,以及3个密钥«K1»至«K9»。例如,客户端哈希算法将存储如下:K1 / K2 / K3存储在A上,/ K4 / K5 / K6存储在B上,K7 / K8 / K9存储在C上。如果服务器B出现故障,其密钥(K4 / K5 / K6)将平均存储在其余2台服务器上( A和C)。例如,K4将转到A,而K5 / K6将转到服务器C。

那只是一个例子,不是真正的算法。您可以使用函数$ memcached-> getServerByKey('K4')找出哪个密钥在哪个服务器上。然后使一台服务器停机,并查看此失败后getServerByKey()向您发送的消息。”,网址http://www.dugwood.com/895442.html#dwCmtForm

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Memcache一致性哈希,集群,PHP代码,Ketama及其所有功能

来自分类Dev

连接到一致性集群的方法

来自分类Dev

有关一致性哈希的一些后续问题

来自分类Dev

有关一致性哈希的一些后续问题

来自分类Dev

不同代码的SQL插入价格具有更好的一致性

来自分类Dev

OpenMP刷新和所有线程的一致性

来自分类Dev

在保留字符串一致性的同时删除所有符号

来自分类Dev

Cassandra 写入一致性级别所有说明

来自分类Dev

数据存储和Memcache一致性-Google App Engine和Objectify

来自分类Dev

PHP样式指南一致性

来自分类Dev

在具有获取一致性与宽松一致性的原子负载上旋转

来自分类Dev

std :: vector及其初始化指针的一致性

来自分类Dev

如何测试一致性

来自分类Dev

条件协议的一致性?

来自分类Dev

线程内一致性

来自分类Dev

纹波一致性

来自分类Dev

Swift协议一致性

来自分类Dev

评估数组的一致性

来自分类Dev

条件协议的一致性?

来自分类Dev

HKWorkoutSessionDelagate协议一致性

来自分类Dev

ElementTree 元素的一致性

来自分类Dev

如何使用Cassandra Java驱动程序设置所有查询的一致性级别?

来自分类Dev

一致性级别仲裁与插入后读取的一致性

来自分类Dev

“强一致性”与“写后读取一致性”

来自分类Dev

一致性代码问题绘图的随机数生成器测试

来自分类Dev

如何将客户端加入使用单播的两个不同的一致性集群?

来自分类Dev

确保分布式数据库中集群范围一致性的技术

来自分类Dev

严格一致性与顺序性

来自分类Dev

具有字符串输出参数的WinAPI函数有多少一致性?