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

标签 redis

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

场景:

我们在美国的两端有 2 个站点。我们希望客户能够在每个网站上大量写作。然后我们希望每个客户端也能够在他们的站点上执行读取。但是,我们希望数据能够在 < 50 毫秒内从姐妹站点的写入中获得。鉴于我们有足够的带宽。有没有办法配置redis来满足我们的需求呢?我们的写入最大大小约为 5k,通常要少得多。要点是即使默认情况下不支持,我怎么能有 2 个相互同步的主控。

最佳答案

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

第二个问题是约书亚提出的基础物理学问题。对于往返行程,您说的是理论最小值 38 毫秒,在(三个系统的)两端留下理论上的最大处理时间 12 毫秒。我会说期望有点过高,带宽与这种情况下的延迟无关。你可以有一个 10GB 的管道,而这些时间仍然存在。也就是说,在 12 毫秒内在整个大陆传输 5k 也要求很高。您确定您的连接容量可以在 50 毫秒内传输 5k 数据,更不用说 12 毫秒了吗?我一直在整个大陆的私有(private)非使用电路上看到 ping 时间超过 50 毫秒 - 而且 ping 没有传输 5k 数据。

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

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

如果不需要同步,为什么不只运行一台服务器呢?您可以将大陆另一端的奴隶用于仅用于恢复目的。当然,这仍然意味着最好的情况是您有 12 毫秒的时间来回获取数据。我不会指望 50ms 往返操作+延迟+跨大陆 5k/10k 数据传输。

关于Redis模仿MASTER/MASTER?或者是其他东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7519971/

相关文章:

c# - EF Core 2.0.0 和 Redis.Core 1.0.3 不能一起工作

sql - redis在用redis替换sql db的同时,能否支持sql join、group by等查询?

redis - Storm 和Redis

ruby-on-rails - Redis 和 Rails 计数器缓存列

redis - 从Redis的源码看 "area"和 "BoundingBox"有什么区别

redis - statefulset和headless service是如何工作的-K8s

redis-cli 命令没有响应

timeout - jedis pubsub 和超时 : how to listen infinitely as subscriber?

docker堆栈: Redis not working on worker node

Redis Sentinel master 没有立即降级为 slave