Upload
takuyosh
View
188
Download
2
Embed Size (px)
Citation preview
Rethinking Cron MUGEN MEET UP #1
吉田 拓弘 ヤフー株式会社 https://www.facebook.com/takuhiro.yoshida
自己紹介
•吉田 拓弘 •エンジニア7年目 •英語好き •仕事 •Yahoo! ウォレット -> モニタリングシステム •言語
最近作ったもの
【バックエンドの要件】 最短5分間隔の監視ジョブを10万件くらいまで実行できる スケーラブルな定期実行処理
UIから簡単に登録できる死活監視システム
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万行?
出典: http://adam.herokuapp.com/past/2010/4/13/rethinking_cron/
概要
•Clockworkの開発者が書いたブログ •アプリケーションでCronを使う際の弱点を指摘し、その代替案を検討
•(ここで検討した内容が以下のClockworkのシステム構成に生かされている)
Clockwork(Github): https://github.com/adamwiggins/clockwork
Cronの2つの使い方•システムタスク •e.g. ログローテーション •アプリケーションタスク •e.g. RSSリーダーで新しいフィードを3時間毎に取得する
アプリケーションで使う時の弱点
•スケールアウトしづらい •重複を避けるためには別途ロック機能が必要 •デバッグしづらい •ctontabの時間設定ミス •シェル環境依存 •重いタスクの実行に向いていない •ジョブキュー + ワーカーの構成がいい
Cronはシステムタスクには使えるけど、 アプリケーションで使うにはちょっと不十分
こんなスケジューラがほしい!
•パワフル且つわかりやすいシンタックス •テストしやすい •可視性 •実行環境による差異がない •ジョブキューが使える •ロックを利用せずにスケールアウトする
こんなのあります「resque-scheduler」
•Resqueの拡張 •yamlでジョブ設定
•時間になるとResque(ジョブキュー)にジョブ登録+ワーカーが実行
•スケジューラーはスタンドアロンなデーモン
•スケジューラーは単純なジョブ登録だけするので、スケーラビリティの問題がない ??
•ジョブの状況が閲覧できるUIがある
もう少し一般的にすると、
•Single-Process SchedulerとJob queueingを組み合わせて実現
•rufus-scheduler + Minion + RabbitMQ
結論!
Scheduler
Worker A1
Worker A2
Worker C2
Worker C1
Worker B
Queue A
Queue B
Queue C
Single-Process Scheduler
Job Queueing
•アプリケーションで定期実行処理するならこんな感じ
感想•Webアプリケーションの非同期処理と同じ構成で、キュー登録のトリガーが「ユーザー操作 -> スケジューラー」になっている感じ • DelayedJob
• Resque
• Sidekiq
•スケジューラーがシングルだと大丈夫じゃないユースケースもある?
•同じようなことを悩んで考えている人がいて嬉しい!
英語の情報収集•公式ドキュメントやGithubのリポジトリを深掘りする
出典: https://github.com/tomykaira/clockwork
英語の情報収集
出典: https://github.com/collectiveidea/delayed_job_active_record/issues
英語の情報収集
•開発で困ったら英語でググる •ブラウザの検索エンジンを以下に設定 •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#