はじめに
古いPHPアプリケーションシステムから新しいRailsアプリケーションにリアーキテクチャーをしている。旧システムで稼働している独自のバッチ処理を、Railsアプリケーションに移植をしたいと考えています。
Rails環境での非同期処理として Sidekiq を候補に考えましたが、Kaigi on Rails 2024で発表されていたSidekiq vs Solid Queueを思い出し、Solid Queueアリなのでは?!と思い、再度検討を行います。
前提
まず前提となる環境についてです。
- Rails 8
- APIモード
- MySQL 8
- Ruby 3.4.2
要件
- バッチ処理15個、非同期処理を3個を移植したい
- バッチ処理は決められた時刻に定期実行したい(cronのように設定したい)
- インフラコストは抑えたい
- 導入は楽だと嬉しい
検討方法
以下の2つで検討を進めました
- 「Sidekiq vs Solid Queue」を読む
- Sidekiq/Solid Queueを導入 + 1個ジョブを実装して比較する
Solid Queueについて分かったこと
- 導入自体はSidekiq/Solid Queueもあまり変わらない
- Redis が不要なのでインフラコスト面では優勢
- 標準機能でスケジュール設定機能がある
- 小規模な運用に向いている
- MySQL / PostgreSQLを利用する場合は推奨バージョンあり
- Solid QueueのREADME High performance requirementsに記載がありました
- mission_control-jobs がSolid Queueをサポートしている
- データベースサーバーに別データベースを用意してSolid Queue用のテーブルを作成する
- 実行ログはアプリケーションログに出力される
- development環境だと
log/development.log
- Sidekiqだとsidekiqプロセスがログを出力されていたが、Solid Queueだと
bin/jobs
には何も出力されない
- development環境だと
結論
今回はSolid Queueを利用するのがよさそうと考えました。
理由としては
- 小規模な運用
- インフラコストは少しでも抑えたい
- スケジュール設定ができる
など要件を十分満たしていました
今後 Solid Queue を利用することで気づいたことがあれば記事を書きたいと思います。