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で停止する
- 基本リトライが走る前提で処理を組むのは大前提