特になにもしないHerokuスケジューラを2年くらい動かしてる話

はじめに

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」に設定します。

image.png

このジョブスケジュールは、2016年7月23日に開始してます。こちらは、現在(2017年12月5日)まで1度もジョブ起動が失敗したことないです。

image.png

1時間に1回の場合

image.png

1時間に1回、チェックインするスケジュールです。上記の24倍ですね。いきなりハードルがあがります。Dead Man's Snitch の監視インターバルを「Hourly」に設定して、Heroku Scheduler のスケジュールも「Hourly」に設定します。このジョブスケジュールは、2016年4月14日から開始してます。

image.png

2016年4月14日に初回のアラートがきて以来、アラートは累計62回です(長時間起動失敗している場合は、1時間に1度メールがくる)。2016年4月14日〜2017年12月5日まで600日間、14,400回の実行のうち、ジョブ起動失敗は62回ということになります。0.995694の確率でジョブ起動が成功、といったところでしょうか。10/31に何通もメールがきているのは、Herokuがまるごと1日落ちてた障害のときですね。だいたいの場合、1回起動に失敗したあとでも、次の1時間後のスケジュールでは正常に起動しているようです。

image.png

image.png

取り急ぎ、なにかの参考になれば幸いです。以上です。