Sidekiq

github.com

Ruby界隈はエコシステムがしっかりしてるなぁ

  • Redisが必要になる
  • クライアント → Redis ← Workerが処理
  • workerを増やすことはできる
  • workerが増えたときに同じジョブを実行することは?→Redisシングルスレッドなのでそこで担保
  • Redisが死んだときは?

    • 定期的に再接続してるから復旧したら再接続するみたい
  • タスク中にworkerが死んだら?

    • さすがにロストする
  • タスク実行中にプロセスが死んだときはどうなる?(redisに残ってる?)
    • redisに残っているというよりも、正常終了するときはredisにpushしてる
  • タスク実行中に正常終了SIGTERM投げれば正常に終了して次にリトライが走る -> SIGHUPとかSIGQUITではリトライが走らない
    • https://github.com/mperham/sidekiq/wiki/Signals をみると USR1 -> TERMをやったほうがよさそう
    • USR1を実行すると新規workerの開始を停止する。実行中workerは継続 -> TERMで停止する
      • 基本リトライが走る前提で処理を組むのは大前提