我正在玩Riak 1.4.7以了解其特征。
据我所知,推荐的最佳实践生产模式Riak操作建议将Riak置于负载平衡之下。为此,我们可以使用HAProxy。
你能告诉我怎样才能确保强一致性(R = Q,W = Q)?
例如,假设我有一个由3个节点组成的Riak集群。我的基于Riak Java Driver的客户端通过HAProxy与环通信。如果客户想要写条目w = quorum会发生什么?如果客户端只与HAProxy进行通信,那么客户端如何确保至少有两个节点确认了写入?我认为我的客户会认为它只与1节点Riak集群通信。因此,它永远无法确定有多少Riak节点确认了存储操作。这是正确的还是我弄错了?
答案 0 :(得分:0)
无论客户端是与负载均衡器通信还是直接与服务器通信,行为都是相同的:在相关数量的服务器响应后,客户端会收到Riak的结果通知。这种协调的机制对客户来说是隐藏的。
但是,无论通过R
和W
值指定了多少台服务器,Riak 1.4.x提供的一致性都不强。 Riak优先考虑可用性,因此如果W=3
且只有一个服务器可用,则该服务器将向其自身写入3个副本并成功响应。如果该服务器因其他服务器重新联机而失败,则客户端将看到该密钥的旧值。
使用Riak 2.0,强大的一致性将是一种选择。
有关2.0之前行为的更多信息,请参阅http://littleriakbook.com。