ruby-on-rails - 运行 Rails + Sidekiq 的 2 台服务器使用相同的 redis 服务器会导致意外行为吗?

标签 ruby-on-rails redis sidekiq staging

我计划迁移我的 2 个 sidekiq 实例以使用 1 个 Redis 数据库。我担心竞争条件可能存在问题。这样做安全吗?

我目前在负载均衡器后面有 2 个生产中的 Rails 服务器。每个服务器都被克隆,运行一个 Rails 应用程序、sidekiq 和一个 Redis 数据库。

暂存环境具有相同的设置。但是,我已将两个 sidekiq 实例连接到一个 Redis 数据库。

到目前为止,我没有遇到任何问题,但是暂存环境没有看到太多流量,无法看到任何明显的效果。

最佳答案

您至少应该为暂存和生产使用不同的 Redis 数据库,这样来自一个环境的任务不会最终在另一个环境中运行。

在您当前的设置中,来自一台服务器的任务仅由同一台服务器执行,但这不是必需的 - 您可以在服务器之间共享 sidekiq 实例池(sidekiq is designed to run fine this way),只要它们具有相同或兼容的代码版本(当新版本的任务最终被旧版本选择时,推出新版本时可能会出现问题。

这种设置实际上更好——如果一个 sidekiq 实例的所有线程都忙,来自相应服务器的任务仍然可以在另一台上运行。

关于ruby-on-rails - 运行 Rails + Sidekiq 的 2 台服务器使用相同的 redis 服务器会导致意外行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56249706/

相关文章:

mysql - Rails 的 Active Record 中等效的 SQL 查询

ruby-on-rails - 带时间戳的redis + Rails

redis - 无法在 spring-data-redis 事务中查询列表

ruby-on-rails - 如何重置我的 sidekiq 计数器?

ruby-on-rails - Sidekiq 作业正在排队,但未得到处理。所有作业都卡在排队中

mysql - 编辑更改数据库中行的顺序后,Heroku DB 找不到行

ruby-on-rails - 使用Bundler安装 gem ==大问题

ruby-on-rails - 如何将 caches_action 配置为适用于多种格式?

mongodb - 键值存储是否适合需要 "get all"的用途?

ruby-on-rails - 对于多个 sidekiq 进程,sidekiq 和 postgres 的 activerecord 连接池大小是否合适?