Discourse 使用 Redis 做什么?

目前我的 Discourse 安装使用了 DigitalOcean 托管的 PostgreSQL 数据库和 DigitalOcean 托管的 Redis 实例。托管的 Redis 服务器是必需的吗?

Discourse 是否会在 Redis 中存储任何持久化数据,还是 Redis 仅用于缓存或其他类型的临时数据?

我当前的配置(显然有些过度,但如果将来需要扩展会非常方便):

  • DigitalOcean 托管的 PostgreSQL 服务器
  • DigitalOcean 托管的 Redis 实例
  • DigitalOcean 负载均衡器
  • 两台 DigitalOcean 虚拟机,每台都运行 Discourse

我考虑的一个更简单的配置是:

  • DigitalOcean 托管的 PostgreSQL 服务器
  • 一台同时运行 Redis 和 Discourse 应用的服务器,并配备浮动 IP,以便在需要时回退到备用服务器。

由于有外部 Redis 服务器,我当前的配置可以在用户无感知的情况下无缝切换 Web 服务器。我认为更简单的配置在需要回退到备用服务器时会导致用户被登出,这是否是 Redis 与 Discourse 部署在同一服务器上的主要缺点?

谢谢,
Francis

7 个赞

+1 我也有同样的问题,非常希望有人能好心多解释一下 Redis 和 Discourse 的关系 :kissing_smiling_eyes:

Discourse 使用 Sidekiq,这是一个用 Ruby 编写的开源 作业调度器。Sidekiq 通常(且默认情况下)仅执行作业,而不负责调度,至少参考资料是这样说的(也许情况已经改变了?);不过据我所知,Sidekiq 的企业版自带调度功能。

Sidekiq 使用 Redis 作为内存数据结构存储,同样也是用 Ruby 编写的。Sidekiq 从 Redis 队列中读取作业,采用 先进先出 (FIFO) 模型来处理作业。作业处理是异步的,这使得 Web 线程能够响应实时请求,而不是直接处理繁重的任务,这些任务可以被“调度”在后台运行。

Sidekiq 被誉为“知名的队列处理软件”,Discourse 利用它来处理那些设计为后台任务、不直接在 Web 应用请求中运行的作业。

基于上述简要概述,您可以在 Discourse 代码库中探索 Discourse 执行的多种作业类型:

Redis 可能也被 Discourse 用于架构的其他部分;但就我目前所知,Redis 的主要用途是作为 Sidekiq(即“作业专家”)的“搭档”。Discourse 团队中比我更了解 Discourse 高层架构(HLA)的成员肯定能提供更详细的说明,解释 Redis 在 Discourse HLA 中的具体用途。

希望这对您有帮助。

9 个赞

这篇帖子有点过时了,但我想还是应该扩展一下这个回复,因为我在搜索其他 Discourse Redis 相关内容时也遇到了这个问题。

以下是团队成员对“除了 Sidekiq,Discourse 还使用 Redis 做什么?”这一问题的回答:

5 个赞

@Francis,你估计那些 Digital Ocean 服务总共花了多少钱?我只是好奇,因为我计划在 Google Cloud 上安装相同的服务(免费 200 美元)。Discourse SAS 服务的价格超出了我的预算。

一个粗略的猜测是,负载均衡器、redis 和 postgres 每月 50 美元,外加你为 droplet 支付的费用。

如果你担心成本,我推荐一个 2GB 的 droplet,如果不够再加一倍。