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