17
Rethinking Cron MUGEN MEET UP #1 吉田 拓弘 ヤフー株式会社 https://www.facebook.com/takuhiro.yoshida

Mugen meet up_1

Embed Size (px)

Citation preview

Page 1: Mugen meet up_1

Rethinking Cron MUGEN MEET UP #1

吉田 拓弘 ヤフー株式会社 https://www.facebook.com/takuhiro.yoshida

Page 2: Mugen meet up_1

自己紹介

•吉田 拓弘 •エンジニア7年目 •英語好き •仕事 •Yahoo! ウォレット -> モニタリングシステム •言語

Page 3: Mugen meet up_1

最近作ったもの

【バックエンドの要件】 最短5分間隔の監視ジョブを10万件くらいまで実行できる スケーラブルな定期実行処理

UIから簡単に登録できる死活監視システム

Page 4: Mugen meet up_1

Cronでやると…*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

*/5 * * * * /usr/bin/http_chek

…… ×10万行?

Page 5: Mugen meet up_1

出典: http://adam.herokuapp.com/past/2010/4/13/rethinking_cron/

Page 6: Mugen meet up_1

概要

•Clockworkの開発者が書いたブログ •アプリケーションでCronを使う際の弱点を指摘し、その代替案を検討

•(ここで検討した内容が以下のClockworkのシステム構成に生かされている)

Clockwork(Github): https://github.com/adamwiggins/clockwork

Page 7: Mugen meet up_1

Cronの2つの使い方•システムタスク •e.g. ログローテーション •アプリケーションタスク •e.g. RSSリーダーで新しいフィードを3時間毎に取得する

Page 8: Mugen meet up_1

アプリケーションで使う時の弱点

•スケールアウトしづらい •重複を避けるためには別途ロック機能が必要 •デバッグしづらい •ctontabの時間設定ミス •シェル環境依存 •重いタスクの実行に向いていない •ジョブキュー + ワーカーの構成がいい

Page 9: Mugen meet up_1

Cronはシステムタスクには使えるけど、 アプリケーションで使うにはちょっと不十分

Page 10: Mugen meet up_1

こんなスケジューラがほしい!

•パワフル且つわかりやすいシンタックス •テストしやすい •可視性 •実行環境による差異がない •ジョブキューが使える •ロックを利用せずにスケールアウトする

Page 11: Mugen meet up_1

こんなのあります「resque-scheduler」

•Resqueの拡張 •yamlでジョブ設定

•時間になるとResque(ジョブキュー)にジョブ登録+ワーカーが実行

•スケジューラーはスタンドアロンなデーモン

•スケジューラーは単純なジョブ登録だけするので、スケーラビリティの問題がない ??

•ジョブの状況が閲覧できるUIがある

Page 12: Mugen meet up_1

もう少し一般的にすると、

•Single-Process SchedulerとJob queueingを組み合わせて実現

•rufus-scheduler + Minion + RabbitMQ

Page 13: Mugen meet up_1

結論!

Scheduler

Worker A1

Worker A2

Worker C2

Worker C1

Worker B

Queue A

Queue B

Queue C

Single-Process Scheduler

Job Queueing

•アプリケーションで定期実行処理するならこんな感じ

Page 14: Mugen meet up_1

感想•Webアプリケーションの非同期処理と同じ構成で、キュー登録のトリガーが「ユーザー操作 -> スケジューラー」になっている感じ • DelayedJob

• Resque

• Sidekiq

•スケジューラーがシングルだと大丈夫じゃないユースケースもある?

•同じようなことを悩んで考えている人がいて嬉しい!

Page 15: Mugen meet up_1

英語の情報収集•公式ドキュメントやGithubのリポジトリを深掘りする

出典: https://github.com/tomykaira/clockwork

Page 16: Mugen meet up_1

英語の情報収集

出典: https://github.com/collectiveidea/delayed_job_active_record/issues

Page 17: Mugen meet up_1

英語の情報収集

•開発で困ったら英語でググる •ブラウザの検索エンジンを以下に設定 •https://www.google.com/search?gl=us&hl=en&gws_rd=cr&pws=0&q=%s

出典: https://www.google.com/search?gl=us&hl=en&gws_rd=cr&pws=0&q=cron#