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

问题描述 投票:0回答:1

我有一些数据要存储在memcached中(使用PHP libmemcached客户端:https://www.php.net/manual/en/intro.memcached.php)。这在我的Web应用程序中屡屡被点击。

为了减少到单个内存缓存节点的通信量,我在密钥的末尾附加了一个介于1到10之间的随机数,希望客户端不会将所有密钥存储在单个节点上。

我假设分配密钥的过程是随机的,但是在15个节点上,至少有一半的密钥分配给了同一节点。这使我认为,对于如何确定给定密钥使用哪个节点,还有更多确定性。

有人知道它是怎么做的吗?

php memcached libmemcached
1个回答
1
投票

它使用哈希。以最简单的形式,想象一下如果您在密钥上运行像MD5这样的哈希函数,则可以使用第一个字节来确定它应该去哪台服务器。

这很重要,因为如果2台服务器与多个Memcached服务器通信,则它们必须可靠地为同一密钥选择同一台服务器。随机是不好的,因为这意味着客户端可能会尝试从存储该项目的另一台服务器上get()

如果您有15个节点,并且一半以上的项目存储在1个节点中,则您要么是:1.非常不幸,要么2.某些配置不正确,并且某些服务器被标记为脱机。

基础哈希比简单的'md5'更复杂,它使用'一致性哈希'算法。这意味着如果您有15个节点,并且丢失1个,则大多数密钥仍将解析到同一台服务器。关于“一致性哈希”的文章很长,因此应该很容易获得技术细节。

© www.soinside.com 2019 - 2024. All rights reserved.