2013-03-21 88 views
3

我开始调查nosql和面向文档的数据库来存储我们将在我们的网站上提供的HTML5应用程序的资产。这是为了替换文件系统上的文件。它们将是小型的网页优化文件,包括html,js,css和xml等文本文件,以及图像,声音和字体等二进制文件。如何计算最终一致性需要多久才能保持一致?

因为我对容错感兴趣,所以我在看的解决方案(riak,Cassandra)使用最终的一致性。虽然我在抽象层面理解概念,但当我与经理和决策者交谈时,我无法用实际的术语解释最终一致性需要多长时间才能保持一致。毫秒?秒?分钟?由于我在这个领域没有任何经验,所以我正在寻找真实世界的经验。

我知道不同的变量将确定任何配置需要多长时间,但我需要能够开始了解需要构建哪些基础结构以支持我们的需求。所以我在寻找的是如果我们需要优化网络延迟,节点数量等来支持我们的特定需求。

我们希望能够选择要测试的平台,在我们陷入任何特定解决方案之前,我们希望能够说“不,这不适用于我们。 “

我们的系统现在使用严格的一致性(例如我们的web服务器和我们的mysql数据库上的文件系统),所以我们的管理习惯于像加载和超时这样的概念,而事情正在“停滞”。但我无法与他们沟通“是的,数据不可用现在,但它并没有关闭;它将可用最终”。他们想知道“那么,最终'多久'?”

我该如何判断一个最终一致的系统是否能够实际运行于我们的网站?

回答

2

由于我比卡桑德拉更加熟悉Riak,因此我将讨论Riak的最终一致性如何应用。

在正常运行期间,Riak支持tuneable consistency,它允许您针对您的应用程序要求定制一致性行为。然而,默认设置非常明智,适用于大多数场景,因为它们需要大部分replicas才能在读取或写入之前对其进行响应,才能被视为成功。

虽然所有复制品可能不会在每个时间点处于完全相同的状态,但这些一致性设置将确保您阅读所写内容。不一致性通常在通过名为read-repair的过程进行读取时得到纠正,但如果启用了主动反熵(Riak版本1.3中的新功能),也可以定期进行纠正。

Eventual consistency主要在各种故障情况下被考虑。如果例如一个节点与群集的其余部分分离,它将(使用默认设置)继续能够接受写入和读取,它将根据其保存的数据/副本尽其所能地发挥作用。由于在此期间无法与群集的其他部分进行通信,因此可能会出现不一致。但是,一旦群集恢复到正常运行状态,这些问题就会得到解决。这可能需要多长时间取决于许多外部因素,如果需要手动干预来纠正问题,可能需要几分之一秒的时间来处理临时网络故障,或者几分钟或几小时。