问题标签 [libketama]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Memcached 一致散列无法在 4 台服务器中的 3 台关闭时工作
故事
我有 3 个 memcached 服务器正在运行,我关闭其中一个或另一个以调查 PHP-memcached 在服务器无法访问时的行为。
我在 PHP 中定义了 4 台服务器,其中 1 台用于模拟大部分离线的服务器(备用服务器)。当我关闭 1 台服务器(=> 2 台仍然在线)时,第三台服务器->get()
给了我一个结果。
当我再关闭一台服务器时(=> 1 仍然在线),它不会找到推送到最后一台服务器的对象。
样本输出
首次运行,4 台服务器中的 3 台启动:
第二次运行,4 台服务器中的 3 台启动:
第三次运行,4 台服务器中的 2 台启动:
第四次运行,4 台服务器中的 1 台启动:
尽管只有一台服务器在线,并且每次在缓存中找不到任何对象时,我都会将对象推送到 memcached,但它不再能够找到密钥。
我认为它也应该只剩下一个服务器。
你能向我解释这种行为吗?
看起来即使我关闭了 20 台服务器中的 19 台,也无法实现安全的东西。
旁白:libketama 真的不再维护了,用它还好吗?lib 背后的逻辑相当不错,并且也用于 varnish 缓存服务器。
附录
我的脚本:
hash - Twemproxy 密钥分发
twemproxy 如何使用哈希函数和密钥分配方法来决定哪个密钥将去哪个分片?有没有我可以使用哪个库或代码来指定要使用的哈希函数和给定的服务器集,它可以告诉它将去哪个分片?(我的使用分布 - ketama 和哈希 - fnv1a_64 )
任何帮助表示赞赏