LoginSignup
17
8

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-04

はじめに

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

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

17
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
8