3

介绍:

我有一个 Python 应用程序使用 Cassandra 1.2.4 集群,复制因子为 3,所有读取和写入都以一致性级别 2 完成。要访问集群,我使用 CQL 库。Cassandra 集群在 rackspace 的虚拟服务器上运行。

问题:

有时其中一个节点可能会变得比平时慢,在这种情况下,我希望能够检测到这种情况并防止向慢速节点发出请求,并且如果可能的话完全停止使用它(这在理论上应该是可能的,因为对于每个请求,RF 为 3,CL 为 2)。到目前为止,我提出的解决方案包括对每个节点的请求进行计时,并防止将来连接到慢速节点。但这仍然不能解决所有问题,因为在协调节点路由查询之后,即使连接到另一个节点,特定查询也可能最终由慢速节点提供服务。

问题:

从 Python 应用程序中检测慢速节点的最佳方法是什么?在这种情况下,有没有办法在没有人工干预的情况下停止使用 Python 中的 Cassandra 节点之一?

提前致谢!

4

1 回答 1

3

如果响应速度慢的节点也是处理查询速度慢的节点,那么您对请求计时的手动解决方案就足够了。

如果可以的话,Cassandra 将在内部使用动态 snitch 来避免慢节点。这会根据最近的延迟统计对节点进行排序,如果一致性级别允许,将避免从最慢的节点读取。NB 写入会发送到所有可用节点,但如果您的一致性级别允许,您不必等待它们全部响应。

在 python 客户端中可能有一些客户端支持你想要的东西——Java 中的 Astyanax 使用非常类似于客户端中的动态 snitch 的东西来避免向慢速节点发送请求。

于 2013-07-02T07:10:24.187 回答