我有一些数据要存储在 memcached 中(使用 PHP libmemcached 客户端:https://www.php.net/manual/en/intro.memcached.php)。它在我的网络应用程序中出现得非常频繁。为了减少单个 memcached 节点的流量,我在密钥末尾附加了一个 1 到 10 之间的随机数,希望客户端不会将所有密钥存储在单个节点上。我曾假设分配密钥的过程是随机的,但在 15 个节点中,至少有一半的密钥进入了同一个节点。这让我觉得对于它如何决定将哪个节点用于给定密钥,有一些更具确定性的东西。有谁知道它是怎么做到的?
1 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
它使用哈希。以最简单的形式,想象一下,如果您在密钥上运行像 MD5 这样的哈希函数,您可以使用第一个字节来确定它应该去哪个服务器。
这很重要,因为如果 2 个服务器与多个 memcached 服务器通信,它们需要可靠地为相同的密钥选择相同的服务器。随机是不好的,因为这意味着客户端可能会尝试get()
从存储该项目的不同服务器进行访问。
如果您有 15 个节点,并且超过一半的项目存储在 1 个节点中,则您是:1. 极度不走运或 2. 某些配置不正确并且您的某些服务器标记为离线。
底层哈希比简单的“md5”更复杂,它使用“一致性哈希”算法。这意味着如果您有 15 个节点并丢失 1 个,大多数密钥仍将解析到同一台服务器。关于“一致性哈希”的文章很长,因此应该很容易获得技术细节。
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消