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

srm*_*ark 8 couchdb distributed-computing eventual-consistency nosql web

在使用最终一致的分布式数据存储的服务器场中运行Web应用程序时(在我的情况下是CouchDB),我应该确保给定用户始终指向同一个数据存储区实例吗?

在我看来,替代方法,任何Web请求可以使用任何数据存储,增加了处理一致性问题(重试,检查等)的显着复杂性.另一方面,如果给定会话中的用户始终指向同一个沙发节点,那么我的一致性问题不会主要围绕"共享"用户数据进行,因此会大大简化吗?

我也对指导用户的策略感到好奇,但也许我会将其保留为另一个问题(欢迎评论).

Par*_*ras 2

根据CAP定理,分布式系统要么具有完全一致性(所有节点同时看到相同的数据),要么具有可用性(每个请求都会收到响应)。在分区或数据存储实例发生故障期间,您必须将其中一个替换为另一个。


我是否应该确保给定用户始终定向到相同的数据存储实例?

理想情况下,你不应该!当给定实例失败时您会做什么?分布式数据存储的一个主要特性是即使出现网络或实例故障也仍然可用。


如果给定会话中的用户始终定向到同一个沙发节点,那么我的一致性问题是否主要围绕“共享”用户数据,从而大大简化?

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

我建议您阅读Dynamo 论文。作者描述了分布式数据库背后的许多工程细节。