最近RailsアプリケーションにSidekiqを導入したので、 そのときに考慮したポイントと参考になった記事をまとめておく。

考慮したポイント

  • ログ
  • リトライ
  • ActiveJob/ActionMailerとの連携
  • concurrencyの設定
  • Redis/ElastiCache
  • テスト
  • デプロイ
  • shoryuken
  • その他知見

ログ

Sidekiq のロギングに Rails logger を利用する - Qiita

通常だとconfig/sidekiq.ymlに設定したログファイルにSidekiqのログは出力される。 別の出力先にしたいときはSidekiq::Logging.loggerを置き換えると良いとのこと。

Sidekiq で最大回数リトライ後に失敗した場合出すログに例外のバックトレースを含める - Qiita

Sidekiqはデフォルトで失敗したジョブのリトライをやってくれるが、 最後まで成功しなかったときにエラーログの出力など任意の処理を実行できる。

リトライ

上で書いたようにSidekiqはデフォルトでジョブのリトライ処理をやってくれて、初期設定だと25回リトライしてくれる。 worker毎にリトライ間隔や回数などを細かく指定できる、詳しくは公式のwikiを見ると良い。

ActiveJobでリトライ制御 - Qiita

SidekiqとActiveJobを連携させたときにリトライ処理をカスタマイズする方法について。 ちなみにActiveJobだとSidekiqの一部機能が使えなかったりしたので自分はSidekiqをそのまま使うことにした。

ActiveJob/ActionMailerとの連携

Rails 5.2 allows mailers to use custom Active Job class | BigBinary Blog

Rails 5.2からActionMailerに独自のActiveJobクラスを指定できる。 今は設定できないので、リトライ処理などのカスタマイズがやりづらそう(ということもあり素のSidekiqを使うことにした)。

concurrencyの設定

ActiveJobでsidekiqを使う場合、connection_poolの値はconcurrency + 1以上にしよう | repl.info

concurrencyはSidekiqの同時実行数を表す。 Sidekiq自身で1つ、ジョブ実行のスレッド毎にコネクションを使う可能性があるので concurrency + 1以上のコネクションプールが必要だよという話。 これは盲点だったので参考になった。

Redis/ElastiCache

ElastiCache がフェイルオーバーした際に気をつけるべき redis-rb の利用方法について - Qiita

SidekiqはジョブキューとしてRedisを使うんだが、RedisとしてElastiCacheを使ってフェイルオーバーしたときにどうなるの?という話。 フェイルオーバーしてもSidekiqは自動で繋ぎ直してくれるらしい、便利。

テスト

Sidekiqを使った非同期処理のテストについて | けんちゃんくんさんのWeb日記

Sidekiqのテストの指針。 ちょっと古いけど参考になった。

デプロイ

sidekiq を安全に止める - Qiita

ワーカーのコードを変更したときにどう停止してデプロイするかという話。 実行中のジョブがなくなってから停止/起動しましょう。

shoryuken

Sidekiqを調べてるうちにジョブキューならAmazon SQSでもいいのでは、と思ってshoryukenというgemに行き着いた。 SQSならメンテナンスフリーだし比較的安価なのでアリだと思ったが、ジョブの遅延実行に制限があって今回はやはりSidekiq × Redisで行くことにした。

shoryuken gemで簡単にSQSを使ったJob Queue WorkerをRailsに作成する | Developers.IO

Shoryuken を導入しようとして諦めた話 - Qiita

Shoryukenでつくるバッチ処理基盤 - トレタ開発者ブログ

トレタでは実績があるとのことなので、別の機会でぜひ使ってみたい。

その他知見

Redisのメモリを節約するには・Sidekiqの中身についてなど、どれも参考になった。

Sidekiq について基本と1年半運用してのあれこれ - まっしろけっけ

sidekiqを使用する際に注意したい覚え書き - アトラシエの開発ブログ

Sidekiqが動く仕組みについて - UUUM攻殻機動隊(エンジニアブログ)

おわりに

色々上げたが、Sidekiqは公式のwikiが最高に良く書かれているのでまずはこれをしっかり読むべし。