🙌
ポーリング型JOB実行システムについて
ポーリング型JOB実行システムとは
ポーリング型JOB実行システムとは、ワーカーが定期的にサーバやDBへ問い合わせを行い、実行対象のJOBがあれば取得して処理する方式。
JOBは即時実行されず、一度DBに登録され、ワーカーが「取りに行く」形で処理される。
メリット
- 実装がシンプル
- 運用コストが低い
- DB中心で完結できる
採用した背景
- 即時性はそこまで不要
- JOBの種類が増える前提
- DBトランザクションで完結させたい
- 運用負荷を抑えたい
実装時の注意点
多重実行防止
READY → IN_PROGRESS の更新は必ず排他的に行う。
ワーカー障害対策
IN_PROGRESS のまま一定時間更新されていないJOBは再実行可能に戻す仕組みを用意する。
冪等性
同じJOBが複数回実行されても問題が起きないよう、更新処理は冪等にする。
メッセージキュー(SQSなど)との比較
ポーリング型(今回の設計)
Producer
↓ JOB登録
DB(jobs)
↑ 定期的に取得
Worker
- DBが JOBキューの役割
- ワーカーが 取りに行く
- Pull型
メッセージキュー型(例:SQS)
Producer → Queue → Worker
- キューが 配送責務を持つ
- Workerは Pushされる
- イベント駆動
今回は即時性はそこまで必要ではなく、またSQSなどを構築・運用するコストなども含め、ポーリング型を採用。
Discussion