【问题标题】:How to prevent traffic to/from a slow Cassandra node using Python如何使用 Python 防止进出缓慢的 Cassandra 节点的流量
【发布时间】:2013-11-23 01:51:38
【问题描述】:

简介:

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

问题:

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

问题:

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

提前致谢!

【问题讨论】:

标签: python cassandra cql


【解决方案1】:

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

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

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

【讨论】:

  • 有关动态告密者的一些背景信息,请参阅datastax.com/dev/blog/…
  • 谢谢你,Richard,是的,慢的节点是那些处理查询慢的节点。到目前为止,我已经看到大多数 Cassandra 的 Python 库都与旧版本 1.1 或更早版本兼容,而与最新版本的 Cassandra 一起使用的库很小或处于早期实验阶段(CQL 到目前为止有效,功能是有限的)。在 Python 出现更好的解决方案之前,我将继续使用幼稚的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-02-13
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2021-06-21
  • 1970-01-01
  • 2012-03-07
相关资源
最近更新 更多