【问题标题】:Redis Read-Replicas On Web ServersWeb 服务器上的 Redis 只读副本
【发布时间】:2014-03-18 03:26:43
【问题描述】:

我目前正在开发一个系统,该系统大量使用 redis 来提供一系列 Web 服务。

该系统的关键标准之一是快速响应。

目前布局(忽略负载均衡器等)如下:

  • 2 个前端播放框架 2.x 服务器
  • 2 个作业处理/持久性播放框架 2.x 服务器
  • 1 x MySQL 服务器
  • 2 x Redis 服务器,1 个主服务器,1 个从属服务器

在此设置中,redis 提供 2 个任务 - 作为共享缓存和消息总线。

目前,前端服务器托管一个与 Redis 完全交互的服务。

前端服务器尝试在读取服务器池(当前是主服务器和 1 个从服务器)之间平衡读取,但作为 Redis,它们需要向主服务器进行写入。他们通过在队列上发送消息来处理缓存更新等,这些消息由作业处理服务器接收。

作业处理服务器对 Redis 写入服务器进行阻塞侦听 (BLPOP),并在必要时处理任务。它们与 MySQL 有唯一的连接。

目前,只读副本服务器是专用服务器 - 如果当前主服务器出现故障,则可以将其切换为写入主服务器。

我正在考虑在每个前端服务器上放置一个 redis 的读取副本从属服务器,这意味着读取延迟会更短,并且写入(队列的消息)会通过单独的连接推送到写入服务器。

如果我需要扩展,我可以添加更多带有读取从属服务器的前端服务器。

这对我来说听起来像是双赢,因为即使写入服务器暂时退出,前端服务器仍然可以至少从其本地从属服务器读取数据并采取相应措施。

谁能想到这可能不是一个好主意的原因?

【问题讨论】:

    标签: redis scalability


    【解决方案1】:

    我了解这种方法的优点......但请考虑一下:当您只需要扩展一个组件(即 FE 服务器或 Redis)而不需要扩展另一个组件时会发生什么?例如,更多的流量可能意味着您需要更多的应用服务器来处理它,而 Redis 的负载将大大减少。另一方面,如果您的数据集增长和/或 Redis 上的负载增加 - 您将需要扩展这些而不是应用程序。

    设计应该符合您的要求,并且您建议的设置的简单性具有一定的吸引力(即按比例缩放,只需添加另一个相同的乐高积木),但根据我微薄的经验 - 任何听起来好得令人难以置信的东西通常都是。从长远来看,即使现在这对您有用,您也可能会发现自己陷入困境。我的建议 - 将你的 Redis(es) 与你的应用服务器分开,处理和/或围绕网络工作,并确保每一层都可以独立使用和可扩展。

    【讨论】:

    • 感谢您的回复。是的,我明白你在说什么。我猜是因为服务器上的服务非常具体而且实际上根本不密集,所以我拥有大量备用内存的潜在奢侈品。如果我的 redis 内存需求激增,那么是的,这将是不切实际的。这是一个艰难的过程,因为我可以看到这两种方式都有好处。
    猜你喜欢
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2022-08-10
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多