私はHerokuを使いたいですが、ランダムな時間に24時間ごとにdynosを再起動するという事実は、少し難しいものになっています。Herokuで長時間実行されているジョブを処理するにはどうすればよいですか?
私は非常に重要な支払い処理を扱う一連の仕事を持っています。彼らは100%信頼できるようにデータベースによって支援されています。このため、私は遅いDJを選んだ。
私はDJを選んだので、一度にデータベースに5,000,000件のイベントを送信することはできません(1回のメール送信ごとに1回)。
そのため、私は長時間実行しているジョブがあります(数時間かけて200,000のテキストメッセージを送信します)。
これらの実行時間の長いジョブでは、途中で途切れてしまった場合には、それらを稼働させるのが難しくなります。
herokuがSIGTERM
を送信してから30秒以内にプロセスがシャットダウンするように見えます。これは私の長い仕事のために起こることはありません。
これを処理する方法がわかりません...私が考えることができる唯一の方法は、テキスト(たとえば、sms_sent_at
列)を送信した直後にデータベースを更新することですが、すべてのバッチに対して単一の更新クエリを送信するのではなく、データベースのパフォーマンスを破壊します。
これは、再起動をスケジュールできれば、少なくとも私が99%の確率でシャットダウンするのに30秒以上かかるジョブを実行していない可能性があるダウン。
他の方法では、長時間走っているDJの中でSIGTERM
を聞くことができますか?そして、早くループを中断して後で再開できるのですか?