Heroku dyno を毎日再起動すると、複数日にわたる Sidekiq ジョブに影響しますか?
概要
大量のデータを転送する長時間実行プロセスを含むアプリがあります。これらの実行には数日かかる場合があります。
専用キューを使用してsidekiqジョブでこれらのプロセスを実行できればいいのですが、毎日のdynoの再起動によってジョブが中断されるかどうかはHerakuのドキュメントからは明らかではありません。
具体的には、このページでは、dyno が受信リクエストの処理を完了できるようにグレースフル リスタートをサポートしていると述べています。それはまだジョブを実行しているsidekiqワーカーにも当てはまりますか?
解決策
はい、そうなります。あなたがすべきことは、ジョブを分割し、再開できる場所で冪等にすることです。
ワーカーは、使用しているジョブ キューに応じて、リッスンできる SIGINT シグナルを受信します。シグナルが発行されてから SIGKILL を取得するまで 30 秒かかり、正常にシャットダウンすることはできません。
24 時間ごとの再起動を避ける方法はありませんが、私が聞いたところによると、(30 秒以内にシャットダウンできない場合) 6 時間ごとに独自のサーバーをプログラムで再起動し、次の時間にのみ再起動するようにしている人もいます。予想される回数。