Open3

Rails / Sidekiqについての技術調査メモ

だーら(Flamers / Memotia)だーら(Flamers / Memotia)

基本

https://github.com/sidekiq/sidekiq/wiki/The-Basics

流れ

client

  • Sidekiq Clientが後で実行するjobを作成する
# どちらでも同じ
MyJob.perform_async(1, 2, 3)
Sidekiq::Client.push('class' => MyJob, 'args' => [1, 2, 3])  # Lower-level generic API

Redis

  • Sidekiqに対するデータストレージとなる。

Server

  • Redisのqueueからjobを摘み取って実行する。
  • Railsの全てのAPIが利用可能
だーら(Flamers / Memotia)だーら(Flamers / Memotia)

SidekiqがRedisからjobsを取り出す流れ

BRPOPによってjobを取り出している

https://github.com/sidekiq/sidekiq/wiki/Reliability

Sidekiq uses BRPOP to fetch a job from the queue in Redis.

  • 上記のドキュメントは、「BRPOPの場合は情報を取り出し後にRedisから一度削除されるため、そのままsidekiqのプロセスが閉じるなどしたときにjobのデータが失われてしまう問題を、Sidekiq Pro」なら解決できる、という趣旨。

BRPOPとは

https://redis.io/docs/latest/commands/brpop/

  • データを読み取る際にブロッキングを行う。
  • BLPOPはlistの先頭からデータを読み取り、BRPOPは最後からデータを読み取る違いがあるが、それ以外は同じである。BLPOPの方がドキュメントが詳しいのでそちらを見る

https://redis.io/docs/latest/commands/blpop/