はじめに
Heroku Scheduler つかってますか?そういえば私は、仕事ではつかったことありません(ジョブ実行は、違う仕組みで実現している)。この投稿は、そんな Heroku Scheduler での本番運用を検討するにあたり、どのくらい安定的に稼働するものなのか、調べた記録です(というか、なんとなく始めたから放置していたの思い出しただけだけど)。
Heroku Scheduler とは
こいつです
https://elements.heroku.com/addons/scheduler
検証したいこと
- Heroku Scheduler がジョブ起動に成功/失敗する頻度はどの程度か
検証方法
- 任意のタイミングでジョブが起動するように Heroku Scheduler を設定する。
- ジョブの内容は、死活監視サービスへのチェックインとする。ほかは何もしない。
- 一定期間に死活監視サービスにチェックインがあったら、ジョブが起動成功したと判断する
死活監視サービス
Dead Man's Snitch をつかいました。Pingdom みたいなやつです。無料から使える。監視対象が落ちてるとアラートをくれます。
https://elements.heroku.com/addons/deadmanssnitch
ジョブ
Ruby の rake task を書いてそれを Heroku Scheduler で定期的に実行しているだけです。"snitcher" は、Dead Man's Snitch
が 配布しているgemです。
require 'snitcher'
task :snitching do
Snitcher.snitch(ENV['DEADMANSSNITCH_TOKEN'], message: "snitched with a rake command.")
puts "just snitched!"
end
検証結果
1日1回のスケジュールの場合
1日1回ジョブを実行するスケジュールです。わりとあるケースじゃないでしょうか。Dead Man's Snitch の監視インターバルを「Daily」に設定して、Heroku Scheduler のスケジュールも「Daily」に設定します。
このジョブスケジュールは、2016年7月23日に開始してます。こちらは、現在(2017年12月5日)まで1度もジョブ起動が失敗したことないです。
1時間に1回の場合
1時間に1回、チェックインするスケジュールです。上記の24倍ですね。いきなりハードルがあがります。Dead Man's Snitch の監視インターバルを「Hourly」に設定して、Heroku Scheduler のスケジュールも「Hourly」に設定します。このジョブスケジュールは、2016年4月14日から開始してます。
2016年4月14日に初回のアラートがきて以来、アラートは累計62回です(長時間起動失敗している場合は、1時間に1度メールがくる)。2016年4月14日〜2017年12月5日まで600日間、14,400回の実行のうち、ジョブ起動失敗は62回ということになります。0.995694の確率でジョブ起動が成功、といったところでしょうか。10/31に何通もメールがきているのは、Herokuがまるごと1日落ちてた障害のときですね。だいたいの場合、1回起動に失敗したあとでも、次の1時間後のスケジュールでは正常に起動しているようです。
取り急ぎ、なにかの参考になれば幸いです。以上です。