如何使用Python防止来往慢速Cassandra节点的流量

时间:2013-07-01 23:04:14

标签: python cassandra cql

说明:

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

问题:

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

问题:

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

提前致谢!

1 个答案:

答案 0 :(得分:3)

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

内部Cassandra可以通过使用动态小报来避免慢节点。这通过最近的延迟统计对节点进行排序,并且如果一致性级别允许,将避免从最慢的节点读取。 NB写入转到所有可用节点,但如果您的一致性级别允许,则不必等待它们全部响应。

在python客户端中可能会有一些客户端支持你想要的东西 - Java中的Astyanax使用与客户端中的动态小错误非常相似的东西来避免向慢节点发送请求。