Rethinkdb复制和数据一致性

Posted

技术标签:

【中文标题】Rethinkdb复制和数据一致性【英文标题】:Rethinkdb replication and data consistency 【发布时间】:2015-08-14 12:54:42 【问题描述】:

当其中一个副本临时/永久死亡时会发生什么,它与数据一致性有何关系?

例如,让我们考虑这种情况: 我更新了fruits 表中的文档, rethinkdb 用 ok 回答我,然后流星立即命中了这个数据库

但幸运的是,我的集群配置满足以下要求: http://www.rethinkdb.com/docs/failover/

但看起来在这种情况下,我丢失了这个特定的更新,并且可能还没有被复制的其他东西,而应用程序仍然认为数据被可靠地保存了......

我不太明白我应该如何设计我的应用程序以使其能够容忍这种行为,这似乎是难以置信的复杂

什么是常见的做法? 有什么建议吗?

谢谢

【问题讨论】:

【参考方案1】:

RethinkDB 不会在写入传播到表的大多数副本之前确认写入。因此,除非多台服务器同时发生故障(假设您总共有 3 个副本),否则您将永远不会丢失已确认的写入。

唯一的例外是如果您将表上的write_acks 显式设置为"single"。您可以在http://www.rethinkdb.com/docs/consistency/中找到有关此设置及其后果的更多详细信息

【讨论】:

【参考方案2】:

集群环境中的一致性需要共识算法,而RetihnkDB的幕后就是RAFT。 RAFT 共识算法需要至少 3 个节点才能考虑数据的强一致性。

您可以阅读第一篇博文

https://rethinkdb.com/blog/2.1-release/

【讨论】:

以上是关于Rethinkdb复制和数据一致性的主要内容,如果未能解决你的问题,请参考以下文章

mysql 如何解决数据一致性

mySQL 复制是不是具有即时数据一致性?

MySQL5.6 半同步复制,保证数据库一致性

分布式系统基本概念(一致性数据分布复制策略分布式协议)

Redis主从复制与一致性

主从复制:主从复制的概述一主一从架构搭建主从复制的原理同步数据一致性问题