我对节点间 memcached 分布有疑问。我们有 20 个 memcached 节点,每个节点有 200GB memcached。我们的应用是 PHP 应用。
$memcache->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
如果发生以下情况,将会产生什么结果:
- 节点 2 发生故障
节点 2 上的密钥“XXX”正在请求设置
=> 我假设密钥将被写在另一个节点上,也许是节点 5
- 节点 2 恢复运行
- 尝试获取密钥“XXX”。
memcached 将从哪个节点获取密钥:节点 5 还是节点 2?
答案1
节点的选择基于哈希算法,该算法决定如何在可用主机之间分发密钥。您可以阅读 PHP 客户端库提供的两种分发类型:搜索 Memcached::DISTRIBUTION_MODULA
和Memcached::DISTRIBUTION_CONSISTENT
分发算法。
随着节点的添加或移除,可能会导致对任何特定键的获取/存储落在相同或不同的节点中,但最终这并不重要。您仍会在新节点中缓存未命中时填充键,而其他节点中相同键的任何旧值将不会被访问并过期并消失。
从存储方面来说,Memcache 更像是一张床垫而不是银行。