我已经在这里阅读了很多帖子并在网上冲浪,但是也许我没有问正确的问题。我知道在集群可用之前,Redis目前是主/从服务器。但是,我想知道是否有人可以告诉我如何在逻辑上配置Redis以满足我的需要(或者如果它不是正确的工具)。
场景:
我们在美国的两端有2个站点。我们希望客户能够在每个站点上大量书写。然后,我们希望每个客户端也能够在其站点上执行读取。但是,我们希望在小于50ms的时间内从姐妹站点的一次写入中获得数据。鉴于我们有足够的带宽。有没有一种方法可以配置redis以满足我们的需求?我们的写入最大大小通常约为5k。要点是,即使默认情况下不支持,我又如何拥有2个彼此同步的master。
Tom的答案是,您没有在运行任何类型的集群,而只是在写入两个服务器。如果要确保它们之间的一致性,这将是一个问题。请考虑当客户端对远程服务器的写入失败时会发生什么。您撤销对本地的写操作吗?当您无法写入远程服务器时,应用程序会怎样?当您无法从本地读取内容时会怎样?
第二个难题是约书亚提出的基本物理问题。对于往返,您正在说理论上的最小处理时间为38ms,而(三个系统的)两端的理论上最大处理时间为12ms。我想说的是期望值太高了,在这种情况下带宽与延迟无关。您可能有10GB的管道,而这些时间仍然存在。也就是说,在12毫秒内跨大陆传输5k的要求也很高。您确定您具有在50毫秒内传输5k数据的连接能力,更不用说12了吗?我到过整个非洲大陆的私有无利用电路,发现ping时间超过50毫秒- ping不能传输5k数据。
您如何使两个不相关的服务器保持同步?如果您确实需要整个大陆的50ms以下延迟,那么以上理论上的最佳情况意味着您有12ms的时间来运行同步算法。甚至一个查询来检查另一台服务器上的数据也意味着您不在50ms窗口之内。如果数据不同步,您将如何解决?考虑到上述时间,我看不到如何在50毫秒内进行同步。
我建议重新考虑基本的设计要求。具体来说, 为什么要有 此要求?整个大陆往返50ms的延迟要求通常是市场营销或缺乏对细节的关注的标志。我敢打赌,如果您分析需求,您会发现这个50ms的窗口是多余和不必要的。如果不是这样,并且数据同步实际上很重要(可能),那么有人将需要确定编写同步代码的大量额外工作是否值得,甚至可以保持在50ms的时间范围内。跨大陆低于50毫秒的延迟数据同步不是一个简单的问题。
如果您不需要同步,为什么不简单地运行一台服务器呢?您可以将大陆另一侧的奴隶用于仅恢复目的。当然,这仍然意味着最好的情况是您有12ms的时间来获取数据。我不会指望整个大陆进行50毫秒的往返操作+延迟+ 5k / 10k数据传输。