【发布时间】:2022-01-21 02:42:48
【问题描述】:
我一直在使用新的原生多数据库连接切换在 Rails 6.1 中实现水平数据库分片。总的来说,这很有效,但我正在努力寻找确保后台作业(通过由共享 Redis DB 支持的 Sidekiq)在启动它们的同一数据库分片上运行的最佳方法。
例如,我有两个水平数据库分片,数据库 A 和数据库 B。该作业在连接到数据库 A(使用 Rack 中间件)时从 Web 进程中排队。当该作业稍后在 Sidekiq 进程中运行时,我希望该作业自动针对数据库 A 运行。
执行此操作的蛮力方法是将当前连接的数据库作为参数传递给每个作业,然后在每个作业中,使用https://guides.rubyonrails.org/active_record_multiple_databases.html 处的功能连接到参数中指定的数据库。
如果我使用像 Apartment 这样的较旧的水平分片解决方案,https://github.com/influitive/apartment-sidekiq gem 正是我所需要的。但是,我找不到任何关于如何使用 Rails 的新本机功能做类似事情的解决方案。
最好的方法是什么?
【问题讨论】:
-
我强烈建议不要尝试这个。这是一条通往分布式事务的道路,我从未见过任何值得付出代价的实现。
-
@BroiSatse 感谢您的回复。我相信我最初的问题令人困惑,因此澄清了措辞。我不认为这里应该有任何分布式事务。
标签: ruby-on-rails ruby redis sidekiq apartment-gem