为了账号安全,请及时绑定邮箱和手机立即绑定

PHP memcached 如何确定在集群中的哪个节点上存储密钥?

PHP memcached 如何确定在集群中的哪个节点上存储密钥?

PHP
富国沪深 2023-04-28 17:18:46
我有一些数据要存储在 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 个,大多数密钥仍将解析到同一台服务器。关于“一致性哈希”的文章很长,因此应该很容易获得技术细节。


查看完整回答
反对 回复 2023-04-28
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信