介绍:
我有一个使用Cassandra 1.2.4集群且复制因子为3的Python应用程序,所有读写操作的一致性级别为2.要访问该集群,请使用CQL库. Cassandra集群在机架空间的虚拟服务器上运行.
问题:
有时,其中一个节点的速度可能会比平时慢,在这种情况下,我希望能够检测到这种情况并阻止向慢速节点发出请求,并尽可能停止使用它(从理论上讲,这应该是可能的,因为每个请求的RF为3,CL为2).到目前为止,我想出的解决方案涉及对每个节点的请求进行计时,并防止将来与慢速节点的连接.但这仍然不能解决所有问题,因为即使协调器节点路由查询后,即使连接到另一个节点,特定查询也可能最终由慢速节点服务.
问题:
从Python应用程序检测慢速节点的最佳方法是什么?
在这种情况下,有没有办法停止使用Python中的Cassandra节点之一,而无需人工干预?
提前致谢!
解决方法:
如果响应速度较慢的节点也是处理查询速度较慢的节点,则您手动确定请求时间的解决方案就足够了.
在内部,Cassandra将通过使用动态侦听来避免节点变慢.这将根据最近的延迟统计信息对节点进行排序,并且如果一致性级别允许,则将避免从最慢的节点读取数据. NB写入会转到所有可用节点,但是如果您的一致性级别允许,您不必等待它们全部响应.
在python客户端中,您可能需要某些客户端支持的内容-Java中的Astyanax在客户端中使用类似于动态侦探的功能,以避免将请求发送到速度较慢的节点.