2013-08-20 26 views
2

卡桑德拉实施阅读CL ONE的阅读方式如何?卡桑德拉 - 阅读一致性水平ONE

协调员是否查询所有副本并等待第一个回答?

根据文档,协调员应该查询一个最近的副本。如果在此查询期间发生超时,会发生什么情况 - 是否尝试其他副本,或者是否将错误返回给客户端?

回答

3

协调器是否查询所有副本并等待第一个答案?

正如您所提到的那样,它会查询最近的节点,如由告密者所确定的。

如果此查询过程中出现超时会发生什么

上有Dynamic Snitch附加文档,其中指出:

默认情况下,所有告密者也使用动态打小报告层监视器 读取延迟,并在可能的情况下将请求从 路由到性能不佳的节点。

按照这个定义,如果由告密者选择的节点应该失败,告密者应该将事务路由到下一个最近的节点。

注意,由于2.0.2,卡桑德拉有一个叫做Rapid Read Protection功能,其中:

[A] llows卡桑德拉容忍节点故障不会丢失一个请求

+0

你肯定“重排”?我已经检查过Cassandra 1.6代码并且它接缝,如果发生节点故障,客户端将收到错误 - 至少在没有发生读取修复的情况下。调用ReadCallback#filterEndpoints(...)删除除最接近的一个以外的所有端点,并且fetchRows(...)等待来自该单个节点的响应,这是全部 - 我找不到任何重试功能。 –

+0

您在代码中找不到任何重试逻辑的好处。 Cassandra的基于环的设计表明,它可能会丢失一个节点并仍然提供读取,具体取决于配置的复制因子。但是,由于您询问事务期间恰好发生的节点故障(最接近的),节点被告密者选中之后,我认为可能会发生故障。 – Aaron