Redis模仿MASTER / MASTER?或者是其他东西?

时间:2011-09-22 18:59:33

标签: redis

我一直在这里阅读很多帖子并在网上浏览,但也许我没有问正确的问题。我知道Redis目前是Master / slave,直到Cluster可用。但是,我想知道是否有人可以告诉我如何在逻辑上配置Redis以满足我的需求(或者如果它不是正确的工具)。

之情况:

我们在美国的两端有2个站点。我们希望客户能够以高容量在每个站点上书写。然后,我们希望每个客户端也能够在其站点上执行读取操作。但是,我们希望数据可以从姊妹站点的写入中获得。 50毫秒。鉴于我们有足够的带宽。有没有办法配置redis来满足我们的需求?我们的写入最大大小通常会小于5k。重点是即使默认情况下不支持,我如何才能拥有彼此同步的2个主服务器。

3 个答案:

答案 0 :(得分:11)

以光速穿越美国约19毫秒。 < 50ms将很难实现。

http://www.wolframalpha.com/input/?i=new+york+to+los+angeles

答案 1 :(得分:11)

Tom的回答是,你没有运行任何类型的集群,你只是写两个服务器。如果要确保它们之间的一致性,这是一个问题。考虑当客户端写入远程服务器失败时会发生什么。你是否撤消了对本地的写入?当您无法写入远程服务器时,应用程序会发生什么?当你无法从当地读书时会发生什么?

第二个问题是约书亚提出的基本物理问题。对于往返,你说的理论最小值为38毫秒,在两端(三个系统)的理论最大处理时间为12毫秒。我要说的是期望有点太多,带宽与延迟无关。你可能有一个10GB的管道,这些时间仍然存在。也就是说,在12ms内在整个大陆上转移5k也是一个问题。你确定你有连接能力在50ms内传输5k数据,更不用说12吗?我一直在非洲大陆的私人无用电路上看到ping时间超过50ms - 并且ping不会传输5k数据。

您如何保持两个不相关的服务器同步?如果您真的需要整个非洲大陆的低于50毫秒的延迟,上述理论上的最佳情况意味着您有12毫秒的时间来运行同步算法。即使一个查询检查另一台服务器上的数据也意味着您在50ms窗口之外。如果数据不同步,您将如何解决?鉴于上述时间,我不知道如何在50ms内同步。

我建议重新审视基本设计要求。具体来说,为什么这个要求?整个非洲大陆50ms往返的延迟要求通常是营销或缺乏对细节的关注的标志。我敢打赌,如果你分析这些要求,你会发现这个50毫秒的窗口过多且没必要。如果不是,并且数据同步实际上很重要(可能),那么有人需要确定编写同步代码的重要额外工作是否值得,甚至可能保持在50ms窗口内。跨大陆低于50毫秒的延迟数据同步不是一个简单的问题。

如果您不需要同步,为什么不简单地运行一台服务器?您可以使用非洲大陆另一侧的奴隶用于仅恢复目的。当然,这仍然意味着最好的情况是你有12毫秒的时间来获取数据并返回。我不相信 在整个非洲大陆进行50ms往返运行+延迟+ 5k / 10k数据传输。

答案 2 :(得分:2)

这可能最好作为客户端的一部分来处理 - 只需让客户端写入两个节点。写入通常不需要是同步的,因此发送额外命令不应该影响您从本地节点获得的性能。