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

时间:2015-04-10 13:56:12

标签: web couchdb distributed-computing eventual-consistency nosql

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

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

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

1 个答案:

答案 0 :(得分:2)

根据CAP Theorem,分布式系统可以具有完全一致性(所有节点同时看到相同的数据)或可用性(每个请求都会收到响应)。在分区或数据存储区实例失败期间,您必须为另一个进行交易。

  

我应该确保给定用户始终指向同一个数据存储区实例吗?

理想情况下,你不应该!当给定实例失败时你会做什么?尽管存在网络或实例故障,分布式数据存储的主要功能仍然可用。

  

如果给定会话中的用户始终指向同一个沙发节点,那么我的一致性问题不会主要围绕“共享”用户数据进行,因此会大大简化吗?

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

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