Web 在使用最终一致的数据存储时,是否应将用户定向到特定的数据节点?

Web 在使用最终一致的数据存储时,是否应将用户定向到特定的数据节点?,web,couchdb,distributed-computing,eventual-consistency,nosql,Web,Couchdb,Distributed Computing,Eventual Consistency,Nosql,在使用最终一致的分布式数据存储(在我的例子中是CouchDB)的服务器场中运行web应用程序时,我是否应该确保给定用户始终指向相同的数据存储实例 在我看来,任何web请求都可以使用任何数据存储的替代方法增加了处理一致性问题(重试、检查等)的复杂性。另一方面,如果给定会话中的一个用户总是指向同一个coach节点,那么我的一致性问题不会主要围绕“共享”用户数据,从而大大简化吗 我对指导用户的策略也很好奇,但也许我会把它留到另一个问题上(欢迎评论)。根据,分布式系统可以具有完全一致性(所有节点同时看到

在使用最终一致的分布式数据存储(在我的例子中是CouchDB)的服务器场中运行web应用程序时,我是否应该确保给定用户始终指向相同的数据存储实例

在我看来,任何web请求都可以使用任何数据存储的替代方法增加了处理一致性问题(重试、检查等)的复杂性。另一方面,如果给定会话中的一个用户总是指向同一个coach节点,那么我的一致性问题不会主要围绕“共享”用户数据,从而大大简化吗

我对指导用户的策略也很好奇,但也许我会把它留到另一个问题上(欢迎评论)。

根据,分布式系统可以具有完全一致性(所有节点同时看到相同的数据)或可用性(每个请求都会收到响应)。在分区或数据存储实例出现故障时,您必须用一个替换另一个


我是否应该确保给定用户始终指向同一数据存储实例

理想情况下,你不应该!当给定实例失败时,您将怎么做?分布式数据存储的一个主要特性是,无论网络或实例出现故障,都可以使用


如果给定会话中的一个用户总是指向同一个coach节点,那么我的一致性问题不会主要围绕“共享”用户数据,从而大大简化吗

你是对的,这样的架构会简单得多,但同样,如果该实例失败,你会怎么做?为了允许多个实例响应一个查询,分布式系统已经投入了大量的工程工作。我不确定CouchDB,但Cassandra允许您选择一致性模型,您必须权衡可用性和更高程度的一致性。默认情况下,客户端配置为以循环方式请求服务器,从而分配负载


我建议你读这本书。作者描述了分布式数据库背后的许多工程细节。

Couchbase具有很强的一致性。您读取自己的写入,并且集群上只有一个活动的数据表示形式。存在复制,但如果您查询这些,则无法保证一致性。您还可以在每次写入时选择是否要等待文档被持久化到磁盘、复制到第四次或持久化到主副本和其他副本。问题指定的是CouchDB,而不是Couchbase。@格里夫斯先生,很抱歉,我指的是CouchDB。虽然我不确定CouchDB实现复制的具体细节,但我的答案仍然有效。您将不得不放弃强一致性以获得更好的可用性。@谢谢。我知道该模型不能保证多个节点之间的一致性,我已经在学习如何处理多个用户可能正在编辑相同数据的情况。我基本上想知道当我开始水平缩放时需要做多少工作。你回答得很好。非常感谢。