【发布时间】:2012-02-15 18:18:40
【问题描述】:
编辑
我已将问题移至顶部。我会留下问题的描述以寻求搜索帮助和任何人可能想要的背景信息。
如果您将 memcached 库与 kestrel 一起使用,那么如果您在集群中使用 2 台以上的服务器并利用可靠的读取功能(或任何其他功能),那么 memcached 哈希算法是否可能总是查找错误的位置?是否必须更改 memcached 库中的哈希算法?我错过了什么吗?有人有什么见解吗?
背景信息
Kestrel 用户夸口说,您可以使用任何 memcached 库连接到您的 kestrel 集群,以将项目弹出和推送到队列中。想了想,好像有点不对劲。 Memcached 在没有服务器间通信的集群中工作,因为客户端根据组合散列算法确定密钥的存储位置或存储位置。
红隼文档讨论了红隼如何“大部分公平”,因为客户端连接到一个随机红隼节点以读取或写入队列。如果您使用 memcached 客户端,您的客户端将始终在同一位置查找队列,因为 memcached 的客户端使用 一致 散列算法。显然,如果您只在集群中使用单个红隼服务器,没关系,只有一次可以查看的地方。即使您使用多个节点,也可能没问题,因为您访问的是静态队列名称,因此散列算法总是在同一个地方查找。
但是,通过修改您从客户端访问的队列名称(通过添加 /open 启动可靠读取并以 /close 结束)来与 kestrel 交互的额外功能公开。从理论上讲,这应该会导致客户端始终在错误的位置查找队列,并且永远不会检索队列对象,因为它们始终被写入单个节点,并且从 不同的节点,始终如一。
谢谢!
【问题讨论】:
标签: php memcached queue message-queue kestrel